Files
ERP-core/Frontend/erp-system/hooks/use-tracking-settings.ts
T
2026-10-12 14:57:15 +05:30

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 }
}