json-joy
Version:
Collection of libraries for building collaborative editing apps.
25 lines (24 loc) • 1.06 kB
JavaScript
import * as React from 'react';
export const useIsoLayoutEffect = typeof window === 'object' && !!window.document ? React.useLayoutEffect : React.useEffect;
export const useBrowserLayoutEffect = typeof window === 'object' && !!window.document ? React.useLayoutEffect : () => { };
export const useSyncStore = (store) => React.useSyncExternalStore(store.subscribe, store.getSnapshot);
const emptySyncStore = {
getSnapshot: () => undefined,
subscribe: () => () => { },
};
export const useSyncStoreOpt = (store = emptySyncStore) => React.useSyncExternalStore(store.subscribe, store.getSnapshot);
export const useTimeout = (ms, deps = [ms]) => {
const [ready, setReady] = React.useState(false);
// biome-ignore lint/correctness/useExhaustiveDependencies: ready do not need to memoize it
React.useEffect(() => {
if (ready)
setReady(false);
const timer = setTimeout(() => {
setReady(true);
}, ms);
return () => {
clearTimeout(timer);
};
}, deps);
return ready;
};