myagent10101's picture
feat: Complete CodeSync collaborative coding platform
8f9c4ef verified
import { create } from 'zustand';
import type { ChatMessage } from '../types';
interface ChatState {
messages: ChatMessage[];
typingUsers: Array<{ userId: string; userName: string }>;
isOpen: boolean;
unreadCount: number;
addMessage: (message: ChatMessage) => void;
setMessages: (messages: ChatMessage[]) => void;
setTypingUser: (userId: string, userName: string, isTyping: boolean) => void;
setOpen: (open: boolean) => void;
reset: () => void;
}
export const useChatStore = create<ChatState>((set) => ({
messages: [], typingUsers: [], isOpen: false, unreadCount: 0,
addMessage: (message) => set((s) => ({ messages: [...s.messages, message], unreadCount: s.isOpen ? 0 : s.unreadCount + 1 })),
setMessages: (messages) => set({ messages }),
setTypingUser: (userId, userName, isTyping) => set((s) => ({
typingUsers: isTyping
? [...s.typingUsers.filter((t) => t.userId !== userId), { userId, userName }]
: s.typingUsers.filter((t) => t.userId !== userId),
})),
setOpen: (isOpen) => set({ isOpen, unreadCount: isOpen ? 0 : undefined } as any),
reset: () => set({ messages: [], typingUsers: [], isOpen: false, unreadCount: 0 }),
}));