Skip to content

Commit

Permalink
♻️ refactor: 重构 settings store 代码写法
Browse files Browse the repository at this point in the history
  • Loading branch information
arvinxx committed Aug 10, 2023
1 parent 99fc5c5 commit 4b6f917
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 34 deletions.
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ config.rules['unicorn/prefer-logical-operator-over-ternary'] = 0;
config.rules['unicorn/no-null'] = 0;
config.rules['unicorn/no-typeof-undefined'] = 0;
config.rules['unicorn/explicit-length-check'] = 0;
config.rules['unicorn/prefer-code-point'] = 0;

module.exports = config;
10 changes: 2 additions & 8 deletions src/pages/chat/[id]/Conversation/ChatList/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,7 @@ import { useTranslation } from 'react-i18next';
import { Flexbox } from 'react-layout-kit';
import { shallow } from 'zustand/shallow';

import {
agentSelectors,
chatSelectors,
useSessionHydrated,
useSessionStore,
} from '@/store/session';
import { agentSelectors, chatSelectors, useSessionStore } from '@/store/session';
import { ChatMessage } from '@/types/chatMessage';
import { ErrorType } from '@/types/fetch';
import { isFunctionMessage } from '@/utils/message';
Expand All @@ -34,9 +29,8 @@ const renderErrorMessage: RenderErrorMessage = (error, message) => {

const List = () => {
const { t } = useTranslation('common');
const hydrated = useSessionHydrated();

const data = useSessionStore(chatSelectors.currentChats, isEqual);
console.log(hydrated, data);
const [displayMode, chatLoadingId, deleteMessage, resendMessage, dispatchMessage] =
useSessionStore(
(s) => [
Expand Down
6 changes: 6 additions & 0 deletions src/store/session/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import { AgentAction, createAgentSlice } from './slices/agentConfig';
import { ChatAction, createChatSlice } from './slices/chat';
import { SessionAction, createSessionSlice } from './slices/session';

// =============== 聚合 createStoreFn ============ //

export type SessionStore = SessionAction & AgentAction & ChatAction & SessionStoreState;

const createStore: StateCreator<SessionStore, [['zustand/devtools', never]]> = (...parameters) => ({
Expand All @@ -19,6 +21,8 @@ const createStore: StateCreator<SessionStore, [['zustand/devtools', never]]> = (
...createChatSlice(...parameters),
});

// =============== persist 本地缓存中间件配置 ============ //

type SessionPersist = Pick<SessionStore, 'sessions'>;

const LOBE_CHAT = 'LOBE_CHAT';
Expand All @@ -36,6 +40,8 @@ const persistOptions: PersistOptions<SessionStore, SessionPersist> = {
// version: Migration.targetVersion,
};

// =============== 实装 useStore ============ //

export const useSessionStore = createWithEqualityFn<SessionStore>()(
persist(
devtools(createStore, {
Expand Down
26 changes: 1 addition & 25 deletions src/store/settings/index.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,3 @@
import equal from 'fast-deep-equal';
import { type PersistOptions, devtools, persist } from 'zustand/middleware';
import { createWithEqualityFn } from 'zustand/traditional';

import { isDev } from '@/utils/env';

import { type SettingsStore, createStore } from './store';

export const LOBE_SETTINGS = 'LOBE_SETTINGS';

const persistOptions: PersistOptions<SettingsStore> = {
name: LOBE_SETTINGS,
skipHydration: true,
};

export const useSettings = createWithEqualityFn<SettingsStore>()(
persist(
devtools(createStore, {
name: LOBE_SETTINGS + (isDev ? '_DEV' : ''),
}),
persistOptions,
),
equal,
);

export * from './selectors';
export type { SettingsStore } from './store';
export { useSettings } from './store';
30 changes: 29 additions & 1 deletion src/store/settings/store.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,43 @@
import equal from 'fast-deep-equal';
import { PersistOptions, devtools, persist } from 'zustand/middleware';
import { createWithEqualityFn } from 'zustand/traditional';
import { StateCreator } from 'zustand/vanilla';

import { isDev } from '@/utils/env';

import { type AppSettingsState, initialState } from './initialState';
import { type AgentAction, createAgentSlice } from './slices/agent';
import { type CommonAction, createCommonSlice } from './slices/common';

// =============== 聚合 createStoreFn ============ //

export type SettingsStore = CommonAction & AppSettingsState & AgentAction;

export const createStore: StateCreator<SettingsStore, [['zustand/devtools', never]]> = (
const createStore: StateCreator<SettingsStore, [['zustand/devtools', never]]> = (
...parameters
) => ({
...initialState,
...createCommonSlice(...parameters),
...createAgentSlice(...parameters),
});

// =============== persist 本地缓存中间件配置 ============ //

const LOBE_SETTINGS = 'LOBE_SETTINGS';

const persistOptions: PersistOptions<SettingsStore> = {
name: LOBE_SETTINGS,
skipHydration: true,
};

// =============== 实装 useStore ============ //

export const useSettings = createWithEqualityFn<SettingsStore>()(
persist(
devtools(createStore, {
name: LOBE_SETTINGS + (isDev ? '_DEV' : ''),
}),
persistOptions,
),
equal,
);

0 comments on commit 4b6f917

Please sign in to comment.