@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
36 lines (28 loc) • 1.13 kB
text/typescript
import type { StateCreator } from 'zustand/vanilla';
import { userService } from '@/services/user';
import type { UserStore } from '@/store/user';
import { UserGuide, UserPreference } from '@/types/user';
import { merge } from '@/utils/merge';
import { setNamespace } from '@/utils/storeDebug';
const n = setNamespace('preference');
export interface PreferenceAction {
updateGuideState: (guide: Partial<UserGuide>) => Promise<void>;
updatePreference: (preference: Partial<UserPreference>, action?: any) => Promise<void>;
}
export const createPreferenceSlice: StateCreator<
UserStore,
[['zustand/devtools', never]],
[],
PreferenceAction
> = (set, get) => ({
updateGuideState: async (guide) => {
const { updatePreference } = get();
const nextGuide = merge(get().preference.guide, guide);
await updatePreference({ guide: nextGuide });
},
updatePreference: async (preference, action) => {
const nextPreference = merge(get().preference, preference);
set({ preference: nextPreference }, false, action || n('updatePreference'));
await userService.updatePreference(nextPreference);
},
});