37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
"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<TrackingSettings> | null = null
|
|
|
|
function load(): Promise<TrackingSettings> {
|
|
// 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<TrackingSettings | null>(null)
|
|
|
|
useEffect(() => {
|
|
let cancelled = false
|
|
load().then((s) => { if (!cancelled) setSettings(s) })
|
|
return () => { cancelled = true }
|
|
}, [])
|
|
|
|
return { serialNumbersEnabled: settings?.serialNumbersEnabled ?? null }
|
|
}
|