@storm-stack/hooks
Version:
A collection of React hooks used by Storm Software in various client libraries and applications.
32 lines (31 loc) • 804 B
JavaScript
import { isFunction } from "@storm-stack/types/type-checks/is-function";
import * as React from "react";
const emptyFn = () => {
};
const emptyFnFn = () => emptyFn;
export function useDidFinishSSR(value, options) {
if (process.env.TAMAGUI_TARGET === "native") {
return value ?? true;
}
if (options?.sync) {
return React.useSyncExternalStore(
emptyFnFn,
() => value ?? true,
() => false
);
}
const [cur, setCur] = React.useState(value);
React.useEffect(() => {
setCur(value ?? true);
}, []);
return cur ?? false;
}
export function useDidFinishSSRSync(value) {
return useDidFinishSSR(value, {
sync: true
});
}
export function useClientValue(value) {
const done = useDidFinishSSR();
return done ? isFunction(value) ? value() : value : void 0;
}