lobe-chat
1import { subscribeWithSelector } from 'zustand/middleware';2import { shallow } from 'zustand/shallow';3import { createWithEqualityFn } from 'zustand/traditional';4import { StateCreator } from 'zustand/vanilla';5
6import { isDev } from '@/utils/env';7
8import { createDevtools } from '../middleware/createDevtools';9import { SessionStoreState, initialState } from './initialState';10import { SessionAction, createSessionSlice } from './slices/session/action';11import { SessionGroupAction, createSessionGroupSlice } from './slices/sessionGroup/action';12
13// =============== 聚合 createStoreFn ============ //
14
15export interface SessionStore extends SessionAction, SessionGroupAction, SessionStoreState {}16
17const createStore: StateCreator<SessionStore, [['zustand/devtools', never]]> = (...parameters) => ({18...initialState,19...createSessionSlice(...parameters),20...createSessionGroupSlice(...parameters),21});22
23// =============== implement useStore ============ //
24const devtools = createDevtools('session');25
26export const useSessionStore = createWithEqualityFn<SessionStore>()(27subscribeWithSelector(28devtools(createStore, {29name: 'LobeChat_Session' + (isDev ? '_DEV' : ''),30}),31),32shallow,33);34