mirror of
https://github.com/sqlchat/sqlchat.git
synced 2025-07-29 02:04:48 +08:00
55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
import dayjs from "dayjs";
|
|
import { create } from "zustand";
|
|
import { persist } from "zustand/middleware";
|
|
import { Chat, Id } from "@/types";
|
|
import { generateUUID } from "@/utils";
|
|
|
|
const getDefaultChat = (): Chat => {
|
|
return {
|
|
id: generateUUID(),
|
|
assistantId: "sql-assistant",
|
|
title: dayjs().format("LTS"),
|
|
createdAt: Date.now(),
|
|
};
|
|
};
|
|
|
|
interface ChatState {
|
|
chatList: Chat[];
|
|
currentChat?: Chat;
|
|
getState: () => ChatState;
|
|
createChat: (connectionId?: Id, databaseName?: string) => Chat;
|
|
setCurrentChat: (chat: Chat | undefined) => void;
|
|
clearChat: (filter: (chat: Chat) => boolean) => void;
|
|
}
|
|
|
|
export const useChatStore = create<ChatState>()(
|
|
persist(
|
|
(set, get) => ({
|
|
chatList: [],
|
|
getState: () => get(),
|
|
createChat: (connectionId?: Id, databaseName?: string) => {
|
|
const chat: Chat = {
|
|
...getDefaultChat(),
|
|
connectionId,
|
|
databaseName,
|
|
};
|
|
set((state) => ({
|
|
chatList: [...state.chatList, chat],
|
|
currentChat: chat,
|
|
}));
|
|
return chat;
|
|
},
|
|
setCurrentChat: (chat: Chat | undefined) => set(() => ({ currentChat: chat })),
|
|
clearChat: (filter: (chat: Chat) => boolean) => {
|
|
set((state) => ({
|
|
...state,
|
|
chatList: state.chatList.filter(filter),
|
|
}));
|
|
},
|
|
}),
|
|
{
|
|
name: "chat-storage",
|
|
}
|
|
)
|
|
);
|