make relatedEvent store a rowId
This commit is contained in:
parent
ead463262c
commit
9bc2d9955a
4 changed files with 30 additions and 15 deletions
|
|
@ -213,11 +213,19 @@ class RoomChatController(final ChatParams info)
|
|||
bool shouldMention = true,
|
||||
required IList<Tag> tags,
|
||||
required RelationType relationType,
|
||||
Event? relation,
|
||||
int? relatedEventRowId,
|
||||
}) async {
|
||||
Content? baseContent;
|
||||
final relatedEvent = relatedEventRowId == null
|
||||
? null
|
||||
: ref.watch(
|
||||
RoomsController.provider.select(
|
||||
(rooms) => rooms[info.roomId]?.events[relatedEventRowId],
|
||||
),
|
||||
);
|
||||
|
||||
if (relationType == .edit) {
|
||||
baseContent = relation?.content;
|
||||
baseContent = relatedEvent?.content;
|
||||
} else {
|
||||
final provider = AttachmentController.provider(info.roomId);
|
||||
baseContent = ref.read(provider)?.$2;
|
||||
|
|
@ -244,16 +252,16 @@ class RoomChatController(final ChatParams info)
|
|||
mentions: Mentions(
|
||||
userIds: [
|
||||
if (shouldMention == true &&
|
||||
relation != null &&
|
||||
relatedEvent != null &&
|
||||
relationType == RelationType.reply)
|
||||
relation.sender,
|
||||
relatedEvent.sender,
|
||||
].toIList(),
|
||||
room: taggedMessage.contains("@room"),
|
||||
),
|
||||
text: taggedMessage,
|
||||
relation: relation == null
|
||||
relation: relatedEvent == null
|
||||
? null
|
||||
: .new(eventId: relation.eventId, relationType: relationType),
|
||||
: .new(eventId: relatedEvent.eventId, relationType: relationType),
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ extension BuildEventOptions on Event {
|
|||
required WidgetRef ref,
|
||||
required String roomId,
|
||||
required String userId,
|
||||
required void Function(Event, RelationType) onRelation,
|
||||
required void Function(int, RelationType) onRelation,
|
||||
}) {
|
||||
final theme = Theme.of(context);
|
||||
final danger = theme.colorScheme.error;
|
||||
|
|
@ -150,7 +150,7 @@ extension BuildEventOptions on Event {
|
|||
),
|
||||
))
|
||||
PopupMenuItem(
|
||||
onTap: () => onRelation(this, .reply),
|
||||
onTap: () => onRelation(rowId, .reply),
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.reply),
|
||||
title: Text("Reply"),
|
||||
|
|
@ -159,7 +159,7 @@ extension BuildEventOptions on Event {
|
|||
|
||||
if (content is MessageContent && sender == userId)
|
||||
PopupMenuItem(
|
||||
onTap: () => onRelation(this, .edit),
|
||||
onTap: () => onRelation(rowId, .edit),
|
||||
child: const ListTile(leading: Icon(Icons.edit), title: Text("Edit")),
|
||||
),
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import "dart:io";
|
|||
|
||||
import "package:fast_immutable_collections/fast_immutable_collections.dart";
|
||||
import "package:file_selector/file_selector.dart";
|
||||
import "package:nexus/controllers/rooms.dart";
|
||||
import "package:nexus/widgets/emoji_picker.dart";
|
||||
import "package:material_ui/material_ui.dart";
|
||||
import "package:flutter/services.dart";
|
||||
|
|
@ -12,7 +13,6 @@ import "package:nexus/controllers/attachment.dart";
|
|||
import "package:nexus/controllers/image_picker.dart";
|
||||
import "package:nexus/controllers/power_level.dart";
|
||||
import "package:nexus/models/content/message.dart";
|
||||
import "package:nexus/models/event.dart";
|
||||
import "package:nexus/models/relation_type.dart";
|
||||
import "package:nexus/widgets/composer/overlays/tagger_overlay.dart";
|
||||
import "package:nexus/widgets/composer/relation_preview.dart";
|
||||
|
|
@ -20,7 +20,7 @@ import "package:nexus/main.dart";
|
|||
|
||||
class const Composer(
|
||||
final String roomId, {
|
||||
required final Event? relatedEvent,
|
||||
required final int? relatedEvent,
|
||||
required final RelationType relationType,
|
||||
required final VoidCallback onDismiss,
|
||||
required final Future<void> Function(
|
||||
|
|
@ -39,6 +39,13 @@ class const Composer(
|
|||
final triggerCharacter = useState("");
|
||||
final shouldMention = useState(true);
|
||||
final query = useState("");
|
||||
final relatedEvent = this.relatedEvent == null
|
||||
? null
|
||||
: ref.watch(
|
||||
RoomsController.provider.select(
|
||||
(rooms) => rooms[roomId]?.events[this.relatedEvent!],
|
||||
),
|
||||
);
|
||||
|
||||
if (relationType == .edit && controller.value.text.isEmpty) {
|
||||
controller.value.text =
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ final class const RoomChat({
|
|||
}) extends HookConsumerWidget {
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final relatedEvent = useState<Event?>(null);
|
||||
final relatedEvent = useState<int?>(null);
|
||||
final relationType = useState(RelationType.reply);
|
||||
final contextualEvent = useState<int?>(initialHighlight);
|
||||
final highlightedEvent = useState<int?>(null);
|
||||
|
|
@ -132,8 +132,8 @@ final class const RoomChat({
|
|||
ref: ref,
|
||||
roomId: roomId,
|
||||
userId: userId,
|
||||
onRelation: (event, type) {
|
||||
relatedEvent.value = event;
|
||||
onRelation: (rowId, type) {
|
||||
relatedEvent.value = rowId;
|
||||
relationType.value = type;
|
||||
composerNode.requestFocus();
|
||||
},
|
||||
|
|
@ -210,7 +210,7 @@ final class const RoomChat({
|
|||
tags: tags,
|
||||
relationType: relationType.value,
|
||||
shouldMention: shouldMention,
|
||||
relation: relatedEvent.value,
|
||||
relatedEventRowId: relatedEvent.value,
|
||||
)
|
||||
.onError(showError),
|
||||
relationType: relationType.value,
|
||||
|
|
|
|||
Loading…
Reference in a new issue