feat: update jotai (#9015)
* feat: update jotai in excalidraw package * feat: update jotai in excalidraw-app * fix: exports from excalidraw/jotai * fix: use isolated react hooks * test: use jotai provider in <Trans /> test * remove unused package * refactor & make safer --------- Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>pull/8952/head^2
parent
ae6bee3403
commit
8551823da9
@ -1,3 +1,37 @@
|
|||||||
import { unstable_createStore } from "jotai";
|
// eslint-disable-next-line no-restricted-imports
|
||||||
|
import {
|
||||||
|
atom,
|
||||||
|
Provider,
|
||||||
|
useAtom,
|
||||||
|
useAtomValue,
|
||||||
|
useSetAtom,
|
||||||
|
createStore,
|
||||||
|
type PrimitiveAtom,
|
||||||
|
} from "jotai";
|
||||||
|
import { useLayoutEffect } from "react";
|
||||||
|
|
||||||
export const appJotaiStore = unstable_createStore();
|
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;
|
||||||
|
};
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
// eslint-disable-next-line no-restricted-imports
|
||||||
|
import { atom, createStore, type PrimitiveAtom } from "jotai";
|
||||||
|
import { createIsolation } from "jotai-scope";
|
||||||
|
|
||||||
|
const jotai = createIsolation();
|
||||||
|
|
||||||
|
export { atom, PrimitiveAtom };
|
||||||
|
export const { useAtom, useSetAtom, useAtomValue, useStore } = jotai;
|
||||||
|
export const EditorJotaiProvider: ReturnType<
|
||||||
|
typeof createIsolation
|
||||||
|
>["Provider"] = jotai.Provider;
|
||||||
|
|
||||||
|
export const editorJotaiStore: ReturnType<typeof createStore> = createStore();
|
@ -1,28 +0,0 @@
|
|||||||
import type { PrimitiveAtom } from "jotai";
|
|
||||||
import { unstable_createStore, useAtom } from "jotai";
|
|
||||||
import { useLayoutEffect } from "react";
|
|
||||||
|
|
||||||
export const jotaiScope = Symbol();
|
|
||||||
export const jotaiStore = unstable_createStore();
|
|
||||||
|
|
||||||
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;
|
|
||||||
};
|
|
Loading…
Reference in New Issue