import { useEffect } from 'react'; | |
import { assert } from 'tsafe'; | |
const IDS = new Set<string>(); | |
/** | |
* Asserts that there is only one instance of a singleton entity. It can be a hook or a component. | |
* @param id The ID of the singleton entity. | |
*/ | |
export function useAssertSingleton(id: string) { | |
useEffect(() => { | |
assert(!IDS.has(id), `There should be only one instance of ${id}`); | |
IDS.add(id); | |
return () => { | |
IDS.delete(id); | |
}; | |
}, [id]); | |
} | |