import dayjs from 'dayjs' export interface ItemObject { id: string date: number timestamp: number slug: string type: string place: string city: string state: string country: string thumbnail: string } export interface FilesObject { youtube?: string video?: string audio?: string booklet?: string simple?: string } export function formatFiles(files: FilesObject) { const { $i18n } = useNuxtApp() const t = $i18n.t const items = [] if (files) { if (files.youtube) { items.push({ to: files.youtube, target: '_blank', label: 'Youtube', icon: 'ph:youtube-logo-thin', labelClass: 'text-xs' }) } if (files.video) { items.push({ to: files.video, target: '_blank', label: t('downloads.video'), icon: 'ph:file-video-thin', labelClass: 'text-xs' }) } if (files.audio) { let fileUrl = '' if (files.audio.startsWith('http')) { fileUrl = files.audio } else { fileUrl = `https://actividadeswp.carpa.com/wp-content/uploads/${files.audio}` } items.push({ to: fileUrl, target: '_blank', label: t('downloads.audio'), icon: 'ph:file-audio-thin', labelClass: 'text-xs' }) } if (files.booklet) { let fileUrl = '' if (files.booklet.startsWith('http')) { fileUrl = files.booklet } else { fileUrl = `https://actividadeswp.carpa.com/wp-content/uploads/${files.booklet}` } items.push({ to: fileUrl, target: '_blank', label: t('downloads.book'), icon: 'ph:notebook-thin', labelClass: 'text-xs' }) } if (files.simple) { let fileUrl = '' if (files.simple.startsWith('http')) { fileUrl = files.simple } else { fileUrl = `https://actividadeswp.carpa.com/wp-content/uploads/${files.simple}` } items.push({ to: fileUrl, target: '_blank', label: t('downloads.simple'), icon: 'ph:note-thin', labelClass: 'text-xs' }) } } return items } export function formatDate(d: number) { if (!d) { return } const { $i18n } = useNuxtApp() const locale = $i18n.locale const date = new Date(d * 1000) const dateString = date.toLocaleString(locale.value, { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', timeZone: 'UTC' }) return capitalizeFirstLetter(dateString) } export function formatLocation(i: ItemObject) { if (!i) { return } const { $i18n } = useNuxtApp() const locale = $i18n.locale const regionNames = new Intl.DisplayNames([locale.value], { type: 'region' }) const locationParts = [] locationParts.push(i?.place) locationParts.push(i?.city) locationParts.push(i?.state) if (i.country) { locationParts.push(regionNames.of(i.country)) } return locationParts.filter(Boolean).join(', ') } export function formatSignature(i: ItemObject) { const date = formatDate(i?.timestamp) const location = formatLocation(i) if (date === undefined || location === undefined) { return } const val = `${date} - ${location}` if (!val) { return } return val } export function getDay(d: number) { const { $i18n } = useNuxtApp() const locale = $i18n.locale const date = new Date(d * 1000) return date.toLocaleString(locale.value, { weekday: 'long', timeZone: 'utc' }) } export function getDayDate(d: number) { const { $i18n } = useNuxtApp() const locale = $i18n.locale const date = new Date(d * 1000) return date.toLocaleString(locale.value, { day: 'numeric', timeZone: 'utc' }) } export function getMonth(d: number) { const { $i18n } = useNuxtApp() const locale = $i18n.locale const date = new Date(d * 1000) return date.toLocaleString(locale.value, { month: 'long', timeZone: 'utc' }) } export function setUrl(item: ItemObject, isSearch: boolean) { const { $i18n } = useNuxtApp() const locale = $i18n.locale const date = dayjs(item.date * 1000) const month = (date.month() + 1).toString() const slug = item.slug || item.slug === 'undefined' ? item.slug : item.id if (isSearch) { return false } else { return `/${locale.value}/${item.type}/${date.year()}/${month.padStart(2, '0')}/${slug}` } } export function getThumbnail(item: ItemObject) { const path = item.thumbnail if (!path) { return 'https://images.carpa.com/tr:w-900,f-auto/youtube_thumbnail_46396.png' } else { return `https://images.carpa.com/${item.type}/${path}?tr=w-900` } } export function getAuthor(type: string) { let author = '' switch (type) { case 'activities': author = 'Dr. José Benjamín Pérez Matos' break case 'conferences': author = 'Dr. William Soto Santiago' break case 'sermons': author = 'William Marrion Branham' break } return author } // removed: openItem relied on a Pinia store that is not installed in this app. // Detail navigation is now handled directly inside the search pages.