Skip to content

Commit 75cb4eb

Browse files
committed
fix(ui): preserve timeline selection across id swaps
1 parent c1536a3 commit 75cb4eb

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

packages/ui/src/components/message-section.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,39 @@ export default function MessageSection(props: MessageSectionProps) {
861861
timelinePartCountsByMessageId.set(newId, existingPartCount)
862862
}
863863

864+
setSelectedTimelineIds((prev) => {
865+
if (prev.size === 0) return prev
866+
let changed = false
867+
const next = new Set<string>()
868+
for (const id of prev) {
869+
if (id.includes(oldId)) {
870+
next.add(id.replace(oldId, newId))
871+
changed = true
872+
} else {
873+
next.add(id)
874+
}
875+
}
876+
return changed ? next : prev
877+
})
878+
879+
setLastSelectionAnchorId((prev) => {
880+
if (!prev || !prev.includes(oldId)) return prev
881+
return prev.replace(oldId, newId)
882+
})
883+
884+
setActiveSegmentId((prev) => {
885+
if (!prev || !prev.includes(oldId)) return prev
886+
return prev.replace(oldId, newId)
887+
})
888+
889+
setSelectedForDeletion((prev) => {
890+
if (!prev.has(oldId)) return prev
891+
const next = new Set(prev)
892+
next.delete(oldId)
893+
next.add(newId)
894+
return next
895+
})
896+
864897
previousTimelineIds = ids.slice()
865898
return
866899
}

0 commit comments

Comments
 (0)