Sfoglia il codice sorgente

refac: reassign grandchildren of deleted message as children of parent message

Danny Liu 1 anno fa
parent
commit
8c01197483
1 ha cambiato i file con 27 aggiunte e 7 eliminazioni
  1. 27 7
      src/lib/components/chat/Messages.svelte

+ 27 - 7
src/lib/components/chat/Messages.svelte

@@ -224,15 +224,35 @@
 	};
 
 	const messageDeleteHandler = async (messageId) => {
-		const messageParentId = history.messages[messageId]?.parentId;
-
-		if (messageParentId !== null) {
-			history.messages[messageParentId].childrenIds = []
-		}
+		const messageToDelete = history.messages[messageId];
+		const messageParentId = messageToDelete.parentId;
+		const messageChildrenIds = messageToDelete.childrenIds ?? [];
+
+		messageChildrenIds.forEach((childId) => {
+			const child = history.messages[childId];
+			if (child && child.childrenIds) {
+				if (child.childrenIds.length == 0) { // if last prompt/response pair
+					history.messages[messageParentId].childrenIds = []
+					history.currentId = messageParentId;
+				}
+				else {
+					child.childrenIds.forEach((grandChildId) => {
+						if (history.messages[grandChildId]) {
+							history.messages[grandChildId].parentId = messageParentId;
+							history.messages[messageParentId].childrenIds.push(grandChildId);
+						}
+					});
+				}
+			}
 
-		history.currentId = messageParentId;
+			// remove response
+			history.messages[messageParentId].childrenIds = history.messages[messageParentId].childrenIds
+				.filter((id) => id !== childId);
+		});
 
-		await tick();
+		// remove prompt
+		history.messages[messageParentId].childrenIds = history.messages[messageParentId].childrenIds
+			.filter((id) => id !== messageId);
 
 		await updateChatById(localStorage.token, chatId, {
 			messages: messages,