Заготовка опросов

This commit is contained in:
Халимов Рустам
2026-04-07 01:01:29 +03:00
parent 02a85fc587
commit c45f4db61c
23 changed files with 824 additions and 249 deletions
@@ -7,7 +7,7 @@ interface ChatState {
chats: Chat[];
activeChat: string | null;
messages: Record<string, Message[]>;
pinnedMessages: Record<string, Message>;
pinnedMessages: Record<string, Message[]>;
typingUsers: TypingUser[];
replyTo: Message | null;
editingMessage: Message | null;
@@ -42,7 +42,7 @@ interface ChatState {
removeChat: (chatId: string) => void;
clearMessages: (chatId: string) => void;
setPinnedMessage: (chatId: string, message: Message) => void;
removePinnedMessage: (chatId: string, messageId: string, newPinned: Message | null) => void;
removePinnedMessage: (chatId: string, messageId: string, newPinned?: Message[] | null) => void;
clearStore: () => void;
}
@@ -99,10 +99,10 @@ export const useChatStore = create<ChatState>((set, get) => ({
} catch { }
}
// Extract pinned messages from chats
const pinnedMessages: Record<string, Message> = {};
const pinnedMessages: Record<string, Message[]> = {};
for (const chat of chats) {
if (chat.pinnedMessages && chat.pinnedMessages.length > 0) {
pinnedMessages[chat.id] = chat.pinnedMessages[0].message;
pinnedMessages[chat.id] = chat.pinnedMessages.map((pm: any) => pm.message);
}
}
set({ chats, pinnedMessages, isLoadingChats: false });
@@ -519,18 +519,27 @@ export const useChatStore = create<ChatState>((set, get) => ({
},
setPinnedMessage: (chatId, message) => {
set((state) => ({
pinnedMessages: { ...state.pinnedMessages, [chatId]: message },
}));
set((state) => {
const existing = state.pinnedMessages[chatId] || [];
if (existing.some(m => m.id === message.id)) return state;
return {
pinnedMessages: {
...state.pinnedMessages,
[chatId]: [...existing, message]
},
};
});
},
removePinnedMessage: (chatId, _messageId, newPinned) => {
removePinnedMessage: (chatId, messageId, newPinned?) => {
set((state) => {
const updated = { ...state.pinnedMessages };
if (newPinned) {
updated[chatId] = newPinned;
} else {
delete updated[chatId];
const filtered = (updated[chatId] || []).filter(m => m.id !== messageId);
if (filtered.length === 0) delete updated[chatId];
else updated[chatId] = filtered;
}
return { pinnedMessages: updated };
});