forked from Henry-Hiles/nexus
make mention optional for replies
This commit is contained in:
parent
263ad5ab4a
commit
eaebea4d44
4 changed files with 26 additions and 2 deletions
|
|
@ -52,7 +52,7 @@ A simple and user-friendly Matrix client made with Flutter and the Matrix Dart S
|
||||||
- [x] Plain text
|
- [x] Plain text
|
||||||
- [x] HTML/Markdown
|
- [x] HTML/Markdown
|
||||||
- [x] Replies
|
- [x] Replies
|
||||||
- [ ] Choose ping on/off
|
- [x] Choose ping on/off
|
||||||
- [ ] Attachments
|
- [ ] Attachments
|
||||||
- [ ] Commands with [MSC4391](https://github.com/matrix-org/matrix-spec-proposals/pull/4391)
|
- [ ] Commands with [MSC4391](https://github.com/matrix-org/matrix-spec-proposals/pull/4391)
|
||||||
- [x] Mentions
|
- [x] Mentions
|
||||||
|
|
|
||||||
|
|
@ -230,6 +230,7 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
|
|
||||||
Future<void> send(
|
Future<void> send(
|
||||||
String message, {
|
String message, {
|
||||||
|
bool shouldMention = true,
|
||||||
required Iterable<Tag> tags,
|
required Iterable<Tag> tags,
|
||||||
required RelationType relationType,
|
required RelationType relationType,
|
||||||
Message? relation,
|
Message? relation,
|
||||||
|
|
@ -252,7 +253,9 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
roomId: roomId,
|
roomId: roomId,
|
||||||
mentions: Mentions(
|
mentions: Mentions(
|
||||||
userIds: [
|
userIds: [
|
||||||
if (relation != null && relationType == RelationType.reply)
|
if (shouldMention == true &&
|
||||||
|
relation != null &&
|
||||||
|
relationType == RelationType.reply)
|
||||||
relation.authorId,
|
relation.authorId,
|
||||||
].toIList(),
|
].toIList(),
|
||||||
room: taggedMessage.contains("@room"),
|
room: taggedMessage.contains("@room"),
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ class ChatBox extends HookConsumerWidget {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
final controller = useRef(FlutterTaggerController());
|
final controller = useRef(FlutterTaggerController());
|
||||||
final triggerCharacter = useState("");
|
final triggerCharacter = useState("");
|
||||||
|
final shouldMention = useState(true);
|
||||||
final query = useState("");
|
final query = useState("");
|
||||||
|
|
||||||
if (relationType == RelationType.edit &&
|
if (relationType == RelationType.edit &&
|
||||||
|
|
@ -43,6 +44,7 @@ class ChatBox extends HookConsumerWidget {
|
||||||
.watch(RoomChatController.provider(room.metadata!.id).notifier)
|
.watch(RoomChatController.provider(room.metadata!.id).notifier)
|
||||||
.send(
|
.send(
|
||||||
controller.value.formattedText,
|
controller.value.formattedText,
|
||||||
|
shouldMention: shouldMention.value,
|
||||||
relation: relatedMessage,
|
relation: relatedMessage,
|
||||||
relationType: relationType,
|
relationType: relationType,
|
||||||
tags: controller.value.tags,
|
tags: controller.value.tags,
|
||||||
|
|
@ -84,6 +86,9 @@ class ChatBox extends HookConsumerWidget {
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
RelationPreview(
|
RelationPreview(
|
||||||
|
shouldMention: shouldMention.value,
|
||||||
|
toggleShouldMention: () =>
|
||||||
|
shouldMention.value = !shouldMention.value,
|
||||||
relatedMessage: relatedMessage,
|
relatedMessage: relatedMessage,
|
||||||
relationType: relationType,
|
relationType: relationType,
|
||||||
onDismiss: onDismiss,
|
onDismiss: onDismiss,
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,14 @@ class RelationPreview extends ConsumerWidget {
|
||||||
final Message? relatedMessage;
|
final Message? relatedMessage;
|
||||||
final RelationType relationType;
|
final RelationType relationType;
|
||||||
final VoidCallback onDismiss;
|
final VoidCallback onDismiss;
|
||||||
|
final bool shouldMention;
|
||||||
|
final VoidCallback toggleShouldMention;
|
||||||
const RelationPreview({
|
const RelationPreview({
|
||||||
required this.relatedMessage,
|
required this.relatedMessage,
|
||||||
required this.relationType,
|
required this.relationType,
|
||||||
required this.onDismiss,
|
required this.onDismiss,
|
||||||
|
required this.shouldMention,
|
||||||
|
required this.toggleShouldMention,
|
||||||
super.key,
|
super.key,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -55,6 +59,18 @@ class RelationPreview extends ConsumerWidget {
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
if (relationType == RelationType.reply)
|
||||||
|
TextButton(
|
||||||
|
onPressed: toggleShouldMention,
|
||||||
|
child: Text(
|
||||||
|
shouldMention ? "@On" : "@Off",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w900,
|
||||||
|
color: shouldMention ? null : Theme.of(context).disabledColor,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
IconButton(
|
IconButton(
|
||||||
tooltip:
|
tooltip:
|
||||||
"Cancel ${relationType == RelationType.edit ? "edit" : "reply"}",
|
"Cancel ${relationType == RelationType.edit ? "edit" : "reply"}",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue