Просмотр исходного кода

refactor usePreferCollapsedMode

Yuki Takei 11 месяцев назад
Родитель
Сommit
775a47c5f4
1 измененных файлов с 10 добавлено и 12 удалено
  1. 10 12
      apps/app/src/states/ui/sidebar.ts

+ 10 - 12
apps/app/src/states/ui/sidebar.ts

@@ -1,4 +1,4 @@
-import { useCallback, useEffect } from 'react';
+import { useEffect } from 'react';
 
 import { atom, useAtom } from 'jotai';
 
@@ -9,7 +9,6 @@ import { EditorMode } from '~/stores-universal/ui';
 import { isDeviceLargerThanXlAtom } from './device';
 import { editorModeAtom } from './editor';
 import type { UseAtom } from './helper';
-import { resolveSetStateAction } from './helper';
 
 
 const isDrawerOpenedAtom = atom(false);
@@ -18,19 +17,18 @@ export const useDrawerOpened = (): UseAtom<typeof isDrawerOpenedAtom> => {
   return useAtom(isDrawerOpenedAtom);
 };
 
-// Avoid local storage to prevent conflicts with DB settings
 const preferCollapsedModeAtom = atom(false);
+// define a derived atom to call scheduleToPut when the value changes
+const preferCollapsedModeAtomExt = atom(
+  get => get(preferCollapsedModeAtom),
+  (get, set, update: boolean) => {
+    set(preferCollapsedModeAtom, update);
+    scheduleToPut({ preferCollapsedModeByUser: update });
+  },
+);
 
 export const usePreferCollapsedMode = (): UseAtom<typeof preferCollapsedModeAtom> => {
-  const [value, setValue] = useAtom(preferCollapsedModeAtom);
-  return [
-    value,
-    (update) => {
-      const nextValue = resolveSetStateAction(update, value);
-      setValue(nextValue);
-      scheduleToPut({ preferCollapsedModeByUser: nextValue });
-    },
-  ] as const;
+  return useAtom(preferCollapsedModeAtomExt);
 };
 
 // Initialize state from server-side props only once per session