add a global toggle to hide membership events (#142)
fixes #141 Co-authored-by: seres <seres@seres.eu.org> Reviewed-on: #142
This commit is contained in:
parent
80197aff00
commit
800fb5566d
3 changed files with 28 additions and 0 deletions
|
|
@ -166,6 +166,21 @@ class SettingsSectionsController
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
.new(
|
||||||
|
title: "Hide Membership Events",
|
||||||
|
description: "Hides membership events (invites, joins, leaves, bans & knocks) from appearing in conversations.",
|
||||||
|
icon: Icons.person_off,
|
||||||
|
builder: (title, description, icon) => SwitchListTile(
|
||||||
|
title: Text(title),
|
||||||
|
subtitle: Text(description),
|
||||||
|
secondary: Icon(icon),
|
||||||
|
value: settings.hideMembershipEvents,
|
||||||
|
onChanged: (value) => ref
|
||||||
|
.read(SettingsController.provider.notifier)
|
||||||
|
.set(settings.copyWith(hideMembershipEvents: value))
|
||||||
|
.onError(showError),
|
||||||
|
),
|
||||||
|
),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
]),
|
]),
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ class const Settings({
|
||||||
final bool showAllInHome = false,
|
final bool showAllInHome = false,
|
||||||
final bool showMinimizeButton = false,
|
final bool showMinimizeButton = false,
|
||||||
final bool swipeToReply = false,
|
final bool swipeToReply = false,
|
||||||
|
final bool hideMembershipEvents = false,
|
||||||
final RoomOrder roomOrder = .unreadFirst,
|
final RoomOrder roomOrder = .unreadFirst,
|
||||||
}) with _$Settings {
|
}) with _$Settings {
|
||||||
Map<String, Object?> toJson() => _$SettingsToJson(this);
|
Map<String, Object?> toJson() => _$SettingsToJson(this);
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
import "package:nexus/controllers/event.dart";
|
import "package:nexus/controllers/event.dart";
|
||||||
import "package:nexus/controllers/room_chat.dart";
|
import "package:nexus/controllers/room_chat.dart";
|
||||||
import "package:nexus/controllers/rooms.dart";
|
import "package:nexus/controllers/rooms.dart";
|
||||||
|
import "package:nexus/controllers/settings.dart";
|
||||||
import "package:nexus/helpers/extensions/show_adaptive_menu.dart";
|
import "package:nexus/helpers/extensions/show_adaptive_menu.dart";
|
||||||
import "package:nexus/helpers/hooks/chat_scroll.dart";
|
import "package:nexus/helpers/hooks/chat_scroll.dart";
|
||||||
import "package:nexus/models/content/avatar.dart";
|
import "package:nexus/models/content/avatar.dart";
|
||||||
|
|
@ -78,6 +79,17 @@ class const EventRenderer(
|
||||||
|
|
||||||
if (event == null) return SizedBox.shrink();
|
if (event == null) return SizedBox.shrink();
|
||||||
|
|
||||||
|
final hideMembershipEvents = (ref
|
||||||
|
.watch(SettingsController.provider)
|
||||||
|
.maybeWhen(
|
||||||
|
orElse: () => false,
|
||||||
|
data: (settings) => settings.hideMembershipEvents,
|
||||||
|
));
|
||||||
|
|
||||||
|
if (event.content is MembershipContent && hideMembershipEvents) {
|
||||||
|
return SizedBox.shrink();
|
||||||
|
}
|
||||||
|
|
||||||
final isGrouped =
|
final isGrouped =
|
||||||
previousEvent?.content is MessageContent &&
|
previousEvent?.content is MessageContent &&
|
||||||
previousEvent?.redactedBy == null &&
|
previousEvent?.redactedBy == null &&
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue