/
githubmirror
/
browser-extension
Обзор
Документация
Войти
/
githubmirror
/
browser-extension
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/state/store.ts
51 строка
1 KB
David Corbitt
Big bang
08 апр 2023, 04:27
08 апр 2023, 04:27
56260be
Код
Авторство
О чём код?
import { merge } from 'lodash'; import { create, StateCreator } from 'zustand'; import { immer } from 'zustand/middleware/immer'; import { createJSONStorage, devtools, persist } from 'zustand/middleware'; import { createCurrentTaskSlice, CurrentTaskSlice } from './currentTask'; import { createUiSlice, UiSlice } from './ui'; import { createSettingsSlice, SettingsSlice } from './settings'; export type StoreType = { currentTask: CurrentTaskSlice; ui: UiSlice; settings: SettingsSlice; }; export type MyStateCreator<T> = StateCreator< StoreType, [['zustand/immer', never]], [], T >; export const useAppState = create<StoreType>()( persist( immer( devtools((...a) => ({ currentTask: createCurrentTaskSlice(...a), ui: createUiSlice(...a), settings: createSettingsSlice(...a), })) ), { name: 'app-state', storage: createJSONStorage(() => localStorage), partialize: (state) => ({ // Stuff we want to persist ui: { instructions: state.ui.instructions, }, settings: { openAIKey: state.settings.openAIKey, selectedModel: state.settings.selectedModel, }, }), merge: (persistedState, currentState) => merge(currentState, persistedState), } ) ); // @ts-expect-error used for debugging window.getState = useAppState.getState;