mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-09 19:36:04 +00:00
e10cfd02e9
* desktop: keep text selection on the originally selected message when a new message arrives or is sent Selection stored positional indices into the merged-items list. When a new message was appended, the reversed list shifted every index by one — but the stored start/end indices did not — so the highlight slid onto neighboring messages. Anchor the selection to ChatItem IDs instead of list positions. Offsets are already content-relative (character cursors in rendered text), so they stay valid across list mutations. Positional indices are derived on read via derivedStateOf, which keeps per-item reads O(1) amortized. If either anchored item is removed from the list, a SideEffect synchronously clears the selection so the copy button does not flash at a stale location. * desktop: minimize selection fix — anchor ids in SelectionRange Replaces the previous derivedStateOf-based approach with a surgical diff: SelectionRange carries startItemId/endItemId alongside the existing positional indices, and a SideEffect calls resyncIndices() to translate ids back to current positions when the items list mutates. All existing call sites of range.startIndex / range.endIndex remain unchanged. Net diff vs master is +19/-2. * plans: justify desktop text selection id-anchored fix