| 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 }), |
| })); |
|
|