feat(chat): allow dragging queued messages to reorder the queue (#1831)

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
Serhii Dziupin
2026-06-26 19:35:45 +03:00
committed by GitHub
co-authored by Serhii Dziupin
parent fc9146eb7b
commit e7b952cbcb
11 changed files with 100 additions and 12 deletions
@@ -26,6 +26,7 @@ interface MessageQueueState {
interface MessageQueueActions {
addToQueue: (sessionId: string, message: Omit<QueuedMessage, 'id' | 'createdAt'>) => void;
removeFromQueue: (sessionId: string, messageId: string) => void;
reorderQueue: (sessionId: string, fromId: string, toId: string) => void;
popToInput: (sessionId: string, messageId: string) => QueuedMessage | null;
clearQueue: (sessionId: string) => void;
clearAllQueues: () => void;
@@ -83,6 +84,28 @@ export const useMessageQueueStore = create<MessageQueueStore>()(
});
},
reorderQueue: (sessionId, fromId, toId) => {
if (fromId === toId) return;
set((state) => {
const currentQueue = state.queuedMessages[sessionId];
if (!currentQueue) return state;
const fromIndex = currentQueue.findIndex((m) => m.id === fromId);
const toIndex = currentQueue.findIndex((m) => m.id === toId);
if (fromIndex === -1 || toIndex === -1) return state;
const newQueue = currentQueue.slice();
const [moved] = newQueue.splice(fromIndex, 1);
newQueue.splice(toIndex, 0, moved);
return {
queuedMessages: {
...state.queuedMessages,
[sessionId]: newQueue,
},
};
});
},
popToInput: (sessionId, messageId) => {
const state = get();
const currentQueue = state.queuedMessages[sessionId] ?? [];