serial numbers
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"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 }
|
||||
}
|
||||
Reference in New Issue
Block a user