@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.
68 lines (58 loc) • 2.02 kB
text/typescript
import { StateCreator } from 'zustand/vanilla';
import { ChatStore } from '@/store/chat/store';
import { PortalArtifact } from '@/types/artifact';
import { PortalFile } from './initialState';
export interface ChatPortalAction {
closeArtifact: () => void;
closeFilePreview: () => void;
closeMessageDetail: () => void;
closeToolUI: () => void;
openArtifact: (artifact: PortalArtifact) => void;
openFilePreview: (portal: PortalFile) => void;
openMessageDetail: (messageId: string) => void;
openToolUI: (messageId: string, identifier: string) => void;
togglePortal: (open?: boolean) => void;
}
export const chatPortalSlice: StateCreator<
ChatStore,
[['zustand/devtools', never]],
[],
ChatPortalAction
> = (set, get) => ({
closeArtifact: () => {
get().togglePortal(false);
set({ portalArtifact: undefined }, false, 'closeArtifact');
},
closeFilePreview: () => {
set({ portalFile: undefined }, false, 'closeFilePreview');
},
closeMessageDetail: () => {
set({ portalMessageDetail: undefined }, false, 'openMessageDetail');
},
closeToolUI: () => {
set({ portalToolMessage: undefined }, false, 'closeToolUI');
},
openArtifact: (artifact) => {
get().togglePortal(true);
set({ portalArtifact: artifact }, false, 'openArtifact');
},
openFilePreview: (portal) => {
get().togglePortal(true);
set({ portalFile: portal }, false, 'openFilePreview');
},
openMessageDetail: (messageId) => {
get().togglePortal(true);
set({ portalMessageDetail: messageId }, false, 'openMessageDetail');
},
openToolUI: (id, identifier) => {
get().togglePortal(true);
set({ portalToolMessage: { id, identifier } }, false, 'openToolUI');
},
togglePortal: (open) => {
const showInspector = open === undefined ? !get().showPortal : open;
set({ showPortal: showInspector }, false, 'toggleInspector');
},
// updateArtifactContent: (content) => {
// set({ portalArtifact: content }, false, 'updateArtifactContent');
// },
});