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;
|
||||
}
|
||||
|
||||
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++) {
|
||||
const msg = topicMessages[i]!;
|
||||
if (!msg.parentMessageId) {
|
||||
messageIdsToCopy.add(msg.id);
|
||||
const children = childrenMap.get(msg.id) || [];
|
||||
for (const child of children) {
|
||||
messageIdsToCopy.add(child.id);
|
||||
}
|
||||
const msg = rootMessages[i]!;
|
||||
messageIdsToCopy.add(msg.id);
|
||||
const children = childrenMap.get(msg.id) || [];
|
||||
for (const child of children) {
|
||||
messageIdsToCopy.add(child.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user