Files
RenewCMS/web/src/composables/useArticleSites.ts
T

36 lines
1013 B
TypeScript

import { computed, ref } from 'vue'
import { useSites, type Site } from '@/composables/useSites'
import type { ArticleListQuery } from '@/lib/articleListQuery'
export function useArticleSites(shownSite: () => string) {
const { listSites } = useSites()
const sites = ref<Site[]>([])
const sitesSettled = ref(false)
const severalSites = computed(() => sites.value.length > 1)
const siteName = computed(
() => sites.value.find((site) => site.key === shownSite())?.name ?? shownSite(),
)
async function fetchSites() {
try {
sites.value = await listSites()
} catch {
sites.value = []
}
}
function loadSites() {
return fetchSites().finally(() => {
sitesSettled.value = true
})
}
function usableSite(query: ArticleListQuery): ArticleListQuery {
const known = severalSites.value && sites.value.some((site) => site.key === query.site)
return query.site && !known ? { ...query, site: '' } : query
}
return { sites, sitesSettled, severalSites, siteName, loadSites, usableSite }
}