21 lines
645 B
TypeScript
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);
|
|
}
|