Заготовка опросов
This commit is contained in:
@@ -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 };
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user