From 4a0ee3665f75d6b926d39232608a5249fe3e40e7 Mon Sep 17 00:00:00 2001 From: Kelrap Date: Mon, 17 Jun 2024 10:02:41 -0400 Subject: [PATCH] Can't add subclass as parent space --- lib/pages/chat_list/chat_list.dart | 4 ++-- .../children_and_parents_extension.dart | 10 ++++++++++ .../pangea_room_extension/pangea_room_extension.dart | 2 ++ lib/pangea/widgets/class/add_space_toggles.dart | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index 47fb51235..77df5b07f 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -815,8 +815,8 @@ class ChatListController extends State && selectedRoomIds .map((id) => Matrix.of(context).client.getRoomById(id)) - .where((e) => !(e?.isPangeaClass ?? true)) - .every((e) => r.canIAddSpaceChild(e)), + // .where((e) => !(e?.isPangeaClass ?? true)) + .every((e) => r.canAddAsParentOf(e)), //Pangea# ) .map( 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 78ab91cc8..e5e7e6003 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 @@ -127,4 +127,14 @@ extension ChildrenAndParentsRoomExtension on Room { } return childIds; } + + // Checks if can add chat as child + // 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); + } } 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 edcd80b04..25694901c 100644 --- a/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension/pangea_room_extension.dart @@ -114,6 +114,8 @@ extension PangeaRoom on Room { List get allSpaceChildRoomIds => _allSpaceChildRoomIds; + bool canAddAsParentOf(Room? child) => _canAddAsParentOf(child); + // class_and_exchange_settings DateTime? get rulesUpdatedAt => _rulesUpdatedAt; diff --git a/lib/pangea/widgets/class/add_space_toggles.dart b/lib/pangea/widgets/class/add_space_toggles.dart index cfea4dd7b..69122356b 100644 --- a/lib/pangea/widgets/class/add_space_toggles.dart +++ b/lib/pangea/widgets/class/add_space_toggles.dart @@ -146,7 +146,7 @@ class AddToSpaceState extends State { final Room possibleParent = possibleParents[index]; final bool canAdd = !(!possibleParent.isRoomAdmin && widget.mode == AddToClassMode.exchange) && - possibleParent.canIAddSpaceChild(room); + possibleParent.canAddAsParentOf(room); return Opacity( opacity: canAdd ? 1 : 0.5,