search/app/utils/itemUtilities.ts

221 lines
5.0 KiB
TypeScript
Executable File

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.