fix localContent being outdated for edits

This commit is contained in:
Henry Hiles 2026-10-02 11:32:10 -04:00
commit 36917bbea5
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 43 additions and 26 deletions

View file

@ -40,13 +40,29 @@ class const Composer(
final shouldMention = useState(true);
final query = useState("");
final relatedEvent = this.relatedEvent == null
? null
: ref.watch(
RoomsController.provider.select((rooms) {
final event = rooms[roomId]?.events[this.relatedEvent!];
if (event == null) return null;
final edited = event.lastEditRowId == 0
? null
: ref.watch(
RoomsController.provider.select(
(rooms) => rooms[roomId]?.events[this.relatedEvent!],
(value) => value[roomId]?.events[event.lastEditRowId],
),
);
return edited == null
? event
: event.copyWith(
content: edited.content,
localContent: edited.localContent,
);
}),
);
if (relationType == .edit && controller.value.text.isEmpty) {
controller.value.text =
relatedEvent?.localContent?.editSource ??

View file

@ -48,33 +48,34 @@ class const EventRenderer(
final focusNode = useFocusNode();
useListenable(focusNode);
final (initialEvent, previousEvent) = ref.watch(
RoomsController.provider.select(
(value) => (
value[roomId]?.events[eventRowId],
previousEventRowId == null
? null
: value[roomId]?.events[previousEventRowId!],
),
),
);
final (event, previousEvent) = ref.watch(
RoomsController.provider.select((rooms) {
final event = rooms[roomId]?.events[eventRowId];
if (event == null) return (null, null);
if (initialEvent == null) return SizedBox.shrink();
final edited = initialEvent.lastEditRowId == 0
final edited = event.lastEditRowId == 0
? null
: ref.watch(
RoomsController.provider.select(
(value) => value[roomId]?.events[initialEvent.lastEditRowId],
(value) => value[roomId]?.events[event.lastEditRowId],
),
);
final event = edited == null
? initialEvent
: initialEvent.copyWith(
return (
edited == null
? event
: event.copyWith(
content: edited.content,
localContent: edited.localContent,
),
previousEventRowId == null
? null
: rooms[roomId]?.events[previousEventRowId!],
);
}),
);
if (event == null) return SizedBox.shrink();
final isGrouped =
previousEvent?.content is MessageContent &&