"use client" import { useEffect, useState } from "react" import { trackingApi } from "@/lib/api/tracking" import { TrackingSettings } from "@/types/tracking" // One request per page load, shared by every component that asks; the Product Configuration // page calls invalidateTrackingSettings() after a toggle so the next read is fresh. let cached: Promise | null = null function load(): Promise { // A failed read falls back to the server's own default (serial numbers on). cached ??= trackingApi.settings().catch(() => ({ serialNumbersEnabled: true })) return cached } export function invalidateTrackingSettings() { cached = null } /** * Product Configuration tracking switches (docs/ITEM_TRACKING_PLAN.md §8). `serialNumbersEnabled` * is null until loaded — callers treat that like "on", the server default. */ export function useTrackingSettings(): { serialNumbersEnabled: boolean | null } { const [settings, setSettings] = useState(null) useEffect(() => { let cancelled = false load().then((s) => { if (!cancelled) setSettings(s) }) return () => { cancelled = true } }, []) return { serialNumbersEnabled: settings?.serialNumbersEnabled ?? null } }