From 11575b1a9aa7fbbe48e3b583101b6b226d247648 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 19 Jun 2024 16:03:20 -0400 Subject: [PATCH] some updates to add to space toggles --- lib/pages/settings/settings_view.dart | 6 +++++ .../children_and_parents_extension.dart | 20 ++++++++++----- .../pangea_room_extension.dart | 9 ++++--- .../widgets/class/add_space_toggles.dart | 25 +++++++++++++------ 4 files changed, 43 insertions(+), 17 deletions(-) diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart index c4a57a267..9ff495328 100644 --- a/lib/pages/settings/settings_view.dart +++ b/lib/pages/settings/settings_view.dart @@ -194,6 +194,12 @@ class SettingsView extends StatelessWidget { Icons.chevron_right_outlined, ), ), + ListTile( + leading: const Icon(Icons.psychology_outlined), + title: Text(L10n.of(context)!.learningSettings), + onTap: () => context.go('/rooms/settings/learning'), + trailing: const Icon(Icons.chevron_right_outlined), + ), // Pangea# ListTile( leading: const Icon(Icons.shield_outlined), diff --git a/lib/pangea/extensions/pangea_room_extension/children_and_parents_extension.dart b/lib/pangea/extensions/pangea_room_extension/children_and_parents_extension.dart index 6952a1dfb..2dc3f6f59 100644 --- a/lib/pangea/extensions/pangea_room_extension/children_and_parents_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/children_and_parents_extension.dart @@ -123,11 +123,19 @@ extension ChildrenAndParentsRoomExtension on Room { // Checks if has permissions to add child chat // Or whether potential child space is ancestor of this - bool _canAddAsParentOf(Room? child) { - if (child == null || !child.isSpace) { - return _canIAddSpaceChild(child); - } - if (id == child.id) return false; - return !child._allSpaceChildRoomIds.contains(id); + bool _canAddAsParentOf(Room? child, {bool spaceMode = false}) { + // don't add a room to itself + if (id == child?.id) return false; + spaceMode = child?.isSpace ?? spaceMode; + + // get the bool for adding chats to spaces + final bool canAddChild = _canIAddSpaceChild(child, spaceMode: spaceMode); + if (!spaceMode) return canAddChild; + + // if adding space to a space, check if the child is an ancestor + // to prevent cycles + final bool isCycle = + child != null ? child._allSpaceChildRoomIds.contains(id) : false; + return canAddChild && !isCycle; } } diff --git a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart index 74230e212..0b303d7bc 100644 --- a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart @@ -109,7 +109,9 @@ extension PangeaRoom on Room { List get allSpaceChildRoomIds => _allSpaceChildRoomIds; - bool canAddAsParentOf(Room? child) => _canAddAsParentOf(child); + bool canAddAsParentOf(Room? child, {bool spaceMode = false}) { + return _canAddAsParentOf(child, spaceMode: spaceMode); + } // class_and_exchange_settings @@ -262,8 +264,9 @@ extension PangeaRoom on Room { bool get canDelete => _canDelete; - bool canIAddSpaceChild(Room? room, {bool spaceMode = false}) => - _canIAddSpaceChild(room, spaceMode: spaceMode); + bool canIAddSpaceChild(Room? room, {bool spaceMode = false}) { + return _canIAddSpaceChild(room, spaceMode: spaceMode); + } bool get canIAddSpaceParents => _canIAddSpaceParents; diff --git a/lib/pangea/widgets/class/add_space_toggles.dart b/lib/pangea/widgets/class/add_space_toggles.dart index 4410cd6d5..08fac33d9 100644 --- a/lib/pangea/widgets/class/add_space_toggles.dart +++ b/lib/pangea/widgets/class/add_space_toggles.dart @@ -41,6 +41,19 @@ class AddToSpaceState extends State { @override void initState() { + initialize(); + super.initState(); + } + + @override + void didUpdateWidget(AddToSpaceToggles oldWidget) { + if (oldWidget.roomId != widget.roomId) { + initialize(); + } + super.didUpdateWidget(oldWidget); + } + + void initialize() { //if roomId is null, it means this widget is being used in the creation flow room = widget.roomId != null ? Matrix.of(context).client.getRoomById(widget.roomId!) @@ -92,7 +105,6 @@ class AddToSpaceState extends State { }); isOpen = widget.startOpen; - super.initState(); } Future _addSingleSpace(String roomToAddId, Room newParent) async { @@ -140,13 +152,10 @@ class AddToSpaceState extends State { Widget getAddToSpaceToggleItem(int index) { final Room possibleParent = possibleParents[index]; - final bool canAdd = (room?.isSpace ?? false) - // Room is space - ? possibleParent.isRoomAdmin && - room!.isRoomAdmin && - possibleParent.canAddAsParentOf(room) - // Room is null or chat - : possibleParent.canAddAsParentOf(room); + final bool canAdd = possibleParent.canAddAsParentOf( + room, + spaceMode: widget.spaceMode, + ); return Opacity( opacity: canAdd ? 1 : 0.5,