fix: forking of a regeneration sometimes copied messages after the root
This commit is contained in:
@@ -85,15 +85,21 @@ export default defineEventHandler(async (event) => {
|
|||||||
current = current.parentMessageId ? messageMap.get(current.parentMessageId) : undefined;
|
current = current.parentMessageId ? messageMap.get(current.parentMessageId) : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const forkIndex = topicMessages.findIndex(m => m.id === messageId);
|
// A regeneration can be created after later roots, so the fork
|
||||||
|
// point has to be located by its root rather than by its own createdAt.
|
||||||
|
let forkRoot = forkMessage;
|
||||||
|
while (forkRoot.parentMessageId && messageMap.has(forkRoot.parentMessageId)) {
|
||||||
|
forkRoot = messageMap.get(forkRoot.parentMessageId)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rootMessages = topicMessages.filter(m => !m.parentMessageId);
|
||||||
|
const forkIndex = rootMessages.findIndex(m => m.id === forkRoot.id);
|
||||||
for (let i = 0; i <= forkIndex; i++) {
|
for (let i = 0; i <= forkIndex; i++) {
|
||||||
const msg = topicMessages[i]!;
|
const msg = rootMessages[i]!;
|
||||||
if (!msg.parentMessageId) {
|
messageIdsToCopy.add(msg.id);
|
||||||
messageIdsToCopy.add(msg.id);
|
const children = childrenMap.get(msg.id) || [];
|
||||||
const children = childrenMap.get(msg.id) || [];
|
for (const child of children) {
|
||||||
for (const child of children) {
|
messageIdsToCopy.add(child.id);
|
||||||
messageIdsToCopy.add(child.id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user