@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.
74 lines (59 loc) • 2.41 kB
text/typescript
import { t } from 'i18next';
import { StateCreator } from 'zustand/vanilla';
import { message } from '@/components/AntdStaticMethods';
import { sessionService } from '@/services/session';
import { SessionStore } from '@/store/session';
import { SessionGroupItem } from '@/types/session';
import { SessionGroupsDispatch, sessionGroupsReducer } from './reducer';
/* eslint-disable typescript-sort-keys/interface */
export interface SessionGroupAction {
addSessionGroup: (name: string) => Promise<string>;
clearSessionGroups: () => Promise<void>;
removeSessionGroup: (id: string) => Promise<void>;
updateSessionGroupName: (id: string, name: string) => Promise<void>;
updateSessionGroupSort: (items: SessionGroupItem[]) => Promise<void>;
internal_dispatchSessionGroups: (payload: SessionGroupsDispatch) => void;
}
/* eslint-enable */
export const createSessionGroupSlice: StateCreator<
SessionStore,
[['zustand/devtools', never]],
[],
SessionGroupAction
> = (set, get) => ({
addSessionGroup: async (name) => {
const id = await sessionService.createSessionGroup(name);
await get().refreshSessions();
return id;
},
clearSessionGroups: async () => {
await sessionService.removeSessionGroups();
await get().refreshSessions();
},
removeSessionGroup: async (id) => {
await sessionService.removeSessionGroup(id);
await get().refreshSessions();
},
updateSessionGroupName: async (id, name) => {
await sessionService.updateSessionGroup(id, { name });
await get().refreshSessions();
},
updateSessionGroupSort: async (items) => {
const sortMap = items.map((item, index) => ({ id: item.id, sort: index }));
get().internal_dispatchSessionGroups({ sortMap, type: 'updateSessionGroupOrder' });
message.loading({
content: t('sessionGroup.sorting', { ns: 'chat' }),
duration: 0,
key: 'updateSessionGroupSort',
});
await sessionService.updateSessionGroupOrder(sortMap);
message.destroy('updateSessionGroupSort');
message.success(t('sessionGroup.sortSuccess', { ns: 'chat' }));
await get().refreshSessions();
},
/* eslint-disable sort-keys-fix/sort-keys-fix */
internal_dispatchSessionGroups: (payload) => {
const nextSessionGroups = sessionGroupsReducer(get().sessionGroups, payload);
get().internal_processSessions(get().sessions, nextSessionGroups, 'updateSessionGroups');
},
});