diff --git a/lib/pangea/controllers/message_analytics_controller.dart b/lib/pangea/controllers/message_analytics_controller.dart index 1a5741db7..2ea2d215a 100644 --- a/lib/pangea/controllers/message_analytics_controller.dart +++ b/lib/pangea/controllers/message_analytics_controller.dart @@ -97,11 +97,9 @@ class AnalyticsController extends BaseController { } } - final List spaceChildrenIds = space.spaceChildren - .map((e) => e.roomId) - .where((e) => e != null) - .cast() - .toList(); + final resp = await space.client.getSpaceHierarchy(space.id); + final List spaceChildrenIds = + resp.rooms.map((room) => room.roomId).toList(); final List allAnalyticsEvents = []; for (final analyticsEvent in analyticsEvents) { @@ -180,6 +178,14 @@ class AnalyticsController extends BaseController { String? roomID, ) { List filtered = [...unfiltered]; + Room? room; + if (roomID != null) { + room = _pangeaController.matrixState.client.getRoomById(roomID); + if (room?.isSpace == true) { + return filterSpaceAnalytics(unfiltered, roomID); + } + } + filtered = filtered .where( (e) => (e.content).messages.any((u) => u.chatId == roomID), @@ -229,9 +235,10 @@ class AnalyticsController extends BaseController { List filtered = List.from(unfiltered); + filtered = filtered .where( - (e) => (e.content).messages.any((u) => chatIds.contains(u.chatId)), + (e) => e.content.messages.any((u) => chatIds.contains(u.chatId)), ) .toList(); @@ -429,11 +436,9 @@ class AnalyticsController extends BaseController { } } - final List spaceChildrenIds = space.spaceChildren - .map((e) => e.roomId) - .where((e) => e != null) - .cast() - .toList(); + final resp = await space.client.getSpaceHierarchy(space.id); + final List spaceChildrenIds = + resp.rooms.map((room) => room.roomId).toList(); final List allConstructs = []; for (final constructEvent in constructEvents) { diff --git a/lib/pangea/pages/analytics/analytics_list_tile.dart b/lib/pangea/pages/analytics/analytics_list_tile.dart index 86cd2a6ba..9580cc135 100644 --- a/lib/pangea/pages/analytics/analytics_list_tile.dart +++ b/lib/pangea/pages/analytics/analytics_list_tile.dart @@ -25,7 +25,7 @@ class AnalyticsListTile extends StatefulWidget { required this.onTap, required this.pangeaController, // this.isEnabled = true, - this.showSpaceAnalytics = true, + // this.showSpaceAnalytics = true, this.refreshStream, }); @@ -39,7 +39,7 @@ class AnalyticsListTile extends StatefulWidget { final bool allowNavigateOnSelect; final bool isSelected; // final bool isEnabled; - final bool showSpaceAnalytics; + // final bool showSpaceAnalytics; final PangeaController pangeaController; final StreamController? refreshStream; @@ -128,11 +128,9 @@ class AnalyticsListTileState extends State { ), ], ), - subtitle: widget.showSpaceAnalytics || !(room?.isSpace ?? false) - ? ListSummaryAnalytics( - chartAnalytics: tileData, - ) - : null, + subtitle: ListSummaryAnalytics( + chartAnalytics: tileData, + ), selected: widget.isSelected, onTap: () { (room?.isSpace ?? false) && widget.allowNavigateOnSelect diff --git a/lib/pangea/pages/analytics/base_analytics.dart b/lib/pangea/pages/analytics/base_analytics.dart index 680ac8a04..7a6e077b3 100644 --- a/lib/pangea/pages/analytics/base_analytics.dart +++ b/lib/pangea/pages/analytics/base_analytics.dart @@ -50,10 +50,22 @@ class BaseAnalyticsController extends State { @override void initState() { super.initState(); - runFirstRefresh(); + if (widget.defaultSelected.type == AnalyticsEntryType.student) { + runFirstRefresh(); + } setChartData(); } + @override + void didUpdateWidget(covariant BaseAnalyticsPage oldWidget) { + // when a user is a parent space's analytics and clicks on a subspace + super.didUpdateWidget(oldWidget); + if (oldWidget.defaultSelected.id != widget.defaultSelected.id) { + setChartData(); + refreshStream.add(false); + } + } + Future runFirstRefresh() async { final analyticsRooms = pangeaController.matrixState.client.allMyAnalyticsRooms; diff --git a/lib/pangea/pages/analytics/base_analytics_view.dart b/lib/pangea/pages/analytics/base_analytics_view.dart index f8ca491be..1669cd534 100644 --- a/lib/pangea/pages/analytics/base_analytics_view.dart +++ b/lib/pangea/pages/analytics/base_analytics_view.dart @@ -163,7 +163,6 @@ class BaseAnalyticsView extends StatelessWidget { ), isSelected: controller.isSelected(item.id), - showSpaceAnalytics: false, onTap: (_) => controller.toggleSelection( AnalyticsSelected( diff --git a/lib/pangea/pages/analytics/class_analytics/class_analytics.dart b/lib/pangea/pages/analytics/class_analytics/class_analytics.dart index 074d7ea2d..0d7402dc1 100644 --- a/lib/pangea/pages/analytics/class_analytics/class_analytics.dart +++ b/lib/pangea/pages/analytics/class_analytics/class_analytics.dart @@ -40,6 +40,7 @@ class ClassAnalyticsV2Controller extends State { _classRoom = classId != null ? Matrix.of(context).client.getRoomById(classId!) : null; + getChatAndStudents(); } return _classRoom; } @@ -47,6 +48,7 @@ class ClassAnalyticsV2Controller extends State { @override void initState() { super.initState(); + debugPrint("init class analytics"); Future.delayed(Duration.zero, () async { if (classRoom == null || (!(classRoom?.isSpace ?? false))) { context.go('/rooms'); @@ -62,9 +64,7 @@ class ClassAnalyticsV2Controller extends State { if (classRoom != null) { final response = await Matrix.of(context).client.getSpaceHierarchy( classRoom!.id, - maxDepth: 1, ); - students = classRoom!.students; chats = response.rooms .where(