site-panzai/composables/useShop.ts
2026-11-13 13:57:04 +01:00

23 lines
1.2 KiB
TypeScript

import type { Dish, Extra, Settings } from '~/server/utils/store'
// Carte + réglages du resto, partagés par toutes les pages client.
// Rafraîchis toutes les 10 s pour refléter les changements faits dans le dashboard (rupture, pause…).
export function useShop(opts: { poll?: boolean } = {}) {
const menu = useFetch<{ dishes: Dish[], extras: Extra[] }>('/api/menu', { key: 'menu', default: () => ({ dishes: [], extras: [] }) })
const settings = useFetch<Settings>('/api/settings', { key: 'settings' })
if (import.meta.client && opts.poll) {
const t = setInterval(() => { menu.refresh(); settings.refresh() }, 10000)
onScopeDispose(() => clearInterval(t))
}
const dishes = computed(() => menu.data.value?.dishes || [])
const extras = computed(() => menu.data.value?.extras || [])
const open = computed(() => settings.data.value?.open ?? true)
const wait = computed(() => settings.data.value?.wait ?? 20)
return { dishes, extras, settings: settings.data, open, wait }
}
export const priceOf = (d: Dish, s: 'L' | 'XL') => d.prices[s]
export const sizesOf = (d: Dish) => (['L', 'XL'] as const).filter(s => s in d.prices)
export const orderable = (d: Dish) => d.available && sizesOf(d).some(s => d.prices[s] != null)