Assessor_2.0/src/compliance/ui/decision-revision.ts

21 lines
645 B
TypeScript

import { useSyncExternalStore } from 'react';
// Counts saved control decisions in this browser session, so views that summarize accepted
// controls (the Client Info overview) reload after a decision made elsewhere.
let revision = 0;
const listeners = new Set<() => void>();
export function markRegulatoryDecisionSaved(): void {
revision += 1;
listeners.forEach(listener => listener());
}
function subscribe(listener: () => void) {
listeners.add(listener);
return () => { listeners.delete(listener); };
}
export function useRegulatoryDecisionRevision(): number {
return useSyncExternalStore(subscribe, () => revision, () => 0);
}