2025-01-16 16:59:11 +01:00
|
|
|
// eslint-disable-next-line no-restricted-imports
|
|
|
|
import {
|
|
|
|
atom,
|
|
|
|
Provider,
|
|
|
|
useAtom,
|
|
|
|
useAtomValue,
|
|
|
|
useSetAtom,
|
|
|
|
createStore,
|
|
|
|
type PrimitiveAtom,
|
|
|
|
} from "jotai";
|
|
|
|
import { useLayoutEffect } from "react";
|
2023-02-22 15:01:23 +01:00
|
|
|
|
2025-01-16 16:59:11 +01:00
|
|
|
export const appJotaiStore = createStore();
|
|
|
|
|
|
|
|
export { atom, Provider, useAtom, useAtomValue, useSetAtom };
|
|
|
|
|
|
|
|
export const useAtomWithInitialValue = <
|
|
|
|
T extends unknown,
|
|
|
|
A extends PrimitiveAtom<T>,
|
|
|
|
>(
|
|
|
|
atom: A,
|
|
|
|
initialValue: T | (() => T),
|
|
|
|
) => {
|
|
|
|
const [value, setValue] = useAtom(atom);
|
|
|
|
|
|
|
|
useLayoutEffect(() => {
|
|
|
|
if (typeof initialValue === "function") {
|
|
|
|
// @ts-ignore
|
|
|
|
setValue(initialValue());
|
|
|
|
} else {
|
|
|
|
setValue(initialValue);
|
|
|
|
}
|
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
return [value, setValue] as const;
|
|
|
|
};
|