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