21 lines
823 B
TypeScript
21 lines
823 B
TypeScript
|
|
/**
|
||
|
|
* Same-window AI-state-changed event plumbing.
|
||
|
|
*
|
||
|
|
* `localStorage` writes only emit `storage` events in *other* windows; the
|
||
|
|
* window doing the write never gets notified. That's a problem for code
|
||
|
|
* that mutates AI storage outside of `useAIState`'s setters (e.g. sync
|
||
|
|
* apply): without a manual nudge, mounted components keep showing stale
|
||
|
|
* AI state until reload.
|
||
|
|
*
|
||
|
|
* Both the dispatcher and `useAIState`'s listener live here so non-React
|
||
|
|
* call sites (sync, IPC handlers, etc.) can fire the event without
|
||
|
|
* pulling in the hook.
|
||
|
|
*/
|
||
|
|
|
||
|
|
export const AI_STATE_CHANGED_EVENT = 'netcatty:ai-state-changed';
|
||
|
|
|
||
|
|
export function emitAIStateChanged(key: string): void {
|
||
|
|
if (typeof window === 'undefined') return;
|
||
|
|
window.dispatchEvent(new CustomEvent<{ key: string }>(AI_STATE_CHANGED_EVENT, { detail: { key } }));
|
||
|
|
}
|