diff --git a/frontend/src/lib/directus.ts b/frontend/src/lib/directus.ts index 8e612bb..7065dca 100644 --- a/frontend/src/lib/directus.ts +++ b/frontend/src/lib/directus.ts @@ -45,6 +45,15 @@ export async function directusOne(collection: string, q: DirectusQuery = {}): return data[0] } +export async function directusSingleton(collection: string, q: DirectusQuery = {}): Promise { + const url = new URL(`${DIRECTUS_URL}/items/${collection}`) + for (const field of q.fields ?? []) url.searchParams.append('fields[]', field) + const res = await fetch(url.toString()) + if (!res.ok) throw new Error(`Directus error ${res.status} on /items/${collection}`) + const { data } = (await res.json()) as DirectusItemResponse + return data +} + export function assetUrl(fileId: string | null | undefined, key?: string): string { if (!fileId) return '' const url = new URL(`${DIRECTUS_URL}/assets/${fileId}`) diff --git a/frontend/src/lib/queries.ts b/frontend/src/lib/queries.ts index 5457a54..17bc6bd 100644 --- a/frontend/src/lib/queries.ts +++ b/frontend/src/lib/queries.ts @@ -1,21 +1,13 @@ import { queryOptions } from '@tanstack/react-query' -import { directusList, directusOne } from './directus' -import { GLOBALS_ID } from './env' +import { directusList, directusOne, directusSingleton } from './directus' import type { Category, Globals, Menu, MenuRaw, PageEntity, Vendor, VendorListItem } from './types' export const globalsQuery = queryOptions({ queryKey: ['globals'], - queryFn: async (): Promise => { - const item = await directusOne('globals', { fields: ['*'] }) - if (!item) throw new Error('globals not found') - return item - }, + queryFn: () => directusSingleton('globals', { fields: ['*'] }), staleTime: 5 * 60_000, }) -// globals is a singleton; if the ID ever changes, we could filter explicitly. -export { GLOBALS_ID } - export const menusQuery = queryOptions({ queryKey: ['menus'], queryFn: async (): Promise => {