feat(web): add multi-select batch delete and undo flow
Some checks failed
CI / test (push) Failing after 18s
Some checks failed
CI / test (push) Failing after 18s
- add message selection mode from context menu - support batch delete for me and conditional batch delete for everyone - add undo snackbar for delete-for-me with delayed backend commit - add restoreMessages helper in chat store for undo rollback
This commit is contained in:
@@ -24,6 +24,7 @@ interface ChatState {
|
||||
removeOptimisticMessage: (chatId: number, clientMessageId: string) => void;
|
||||
setMessageDeliveryStatus: (chatId: number, messageId: number, status: DeliveryStatus) => void;
|
||||
removeMessage: (chatId: number, messageId: number) => void;
|
||||
restoreMessages: (chatId: number, messages: Message[]) => void;
|
||||
clearChatMessages: (chatId: number) => void;
|
||||
incrementUnread: (chatId: number) => void;
|
||||
clearUnread: (chatId: number) => void;
|
||||
@@ -158,6 +159,26 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
}
|
||||
}));
|
||||
},
|
||||
restoreMessages: (chatId, messages) => {
|
||||
if (!messages.length) {
|
||||
return;
|
||||
}
|
||||
const old = get().messagesByChat[chatId] ?? [];
|
||||
const byId = new Map<number, Message>();
|
||||
for (const message of old) {
|
||||
byId.set(message.id, message);
|
||||
}
|
||||
for (const message of messages) {
|
||||
byId.set(message.id, message);
|
||||
}
|
||||
const merged = [...byId.values()].sort((a, b) => a.id - b.id);
|
||||
set((state) => ({
|
||||
messagesByChat: {
|
||||
...state.messagesByChat,
|
||||
[chatId]: merged
|
||||
}
|
||||
}));
|
||||
},
|
||||
clearChatMessages: (chatId) =>
|
||||
set((state) => ({
|
||||
messagesByChat: {
|
||||
|
||||
Reference in New Issue
Block a user