only show top-level spaces in analytics

This commit is contained in:
ggurdin 2024-06-14 12:17:57 -04:00
parent a9105c0804
commit df611e5f82
5 changed files with 67 additions and 57 deletions

View file

@ -1,7 +1,10 @@
import 'dart:developer';
import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart';
import 'package:fluffychat/pangea/models/analytics/analytics_model.dart';
import 'package:fluffychat/pangea/models/pangea_token_model.dart';
import 'package:fluffychat/pangea/utils/error_handler.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
@ -54,7 +57,7 @@ class ConstructAnalyticsModel extends AnalyticsModel {
s: s,
m: "Error parsing ConstructAnalyticsModel",
);
// debugger(when: kDebugMode);
debugger(when: kDebugMode);
}
}
return ConstructAnalyticsModel(

View file

@ -164,37 +164,34 @@ class BaseAnalyticsView extends StatelessWidget {
CrossAxisAlignment.stretch,
children: [
...controller.widget.tabs[0].items.map(
(item) => Expanded(
child: AnalyticsListTile(
refreshStream:
controller.refreshStream,
avatar: item.avatar,
defaultSelected: controller
.widget.defaultSelected,
selected: AnalyticsSelected(
(item) => AnalyticsListTile(
refreshStream:
controller.refreshStream,
avatar: item.avatar,
defaultSelected: controller
.widget.defaultSelected,
selected: AnalyticsSelected(
item.id,
controller.widget.tabs[0].type,
item.displayName,
),
isSelected:
controller.isSelected(item.id),
onTap: (_) =>
controller.toggleSelection(
AnalyticsSelected(
item.id,
controller.widget.tabs[0].type,
item.displayName,
),
isSelected: controller
.isSelected(item.id),
onTap: (_) =>
controller.toggleSelection(
AnalyticsSelected(
item.id,
controller
.widget.tabs[0].type,
item.displayName,
),
),
allowNavigateOnSelect: controller
.widget
.tabs[0]
.allowNavigateOnSelect,
pangeaController:
controller.pangeaController,
controller: controller,
),
allowNavigateOnSelect: controller
.widget
.tabs[0]
.allowNavigateOnSelect,
pangeaController:
controller.pangeaController,
controller: controller,
),
),
if (controller

View file

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:fluffychat/pangea/enum/time_span.dart';
import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart';
import 'package:fluffychat/pangea/pages/analytics/base_analytics.dart';
import 'package:fluffychat/pangea/pages/analytics/class_list/class_list_view.dart';
import 'package:flutter/material.dart';
@ -22,6 +23,24 @@ class AnalyticsClassList extends StatefulWidget {
class AnalyticsClassListController extends State<AnalyticsClassList> {
PangeaController pangeaController = MatrixState.pangeaController;
List<ChartAnalyticsModel> models = [];
List<Room> spaces = [];
@override
void initState() {
super.initState();
Matrix.of(context).client.classesAndExchangesImTeaching.then((spaceList) {
spaceList = spaceList
.where(
(space) => !spaceList.any(
(parentSpace) => parentSpace.spaceChildren
.any((child) => child.roomId == space.id),
),
)
.toList();
spaces = spaceList;
setState(() {});
});
}
@override
Widget build(BuildContext context) {

View file

@ -1,11 +1,9 @@
import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart';
import 'package:fluffychat/pangea/pages/analytics/analytics_list_tile.dart';
import 'package:fluffychat/pangea/pages/analytics/time_span_menu_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:go_router/go_router.dart';
import '../../../../widgets/matrix.dart';
import '../../../enum/time_span.dart';
import '../base_analytics.dart';
import 'class_list.dart';
@ -45,31 +43,28 @@ class AnalyticsClassListView extends StatelessWidget {
body: Column(
children: [
Flexible(
child: FutureBuilder(
future: Matrix.of(context).client.classesAndExchangesImTeaching,
builder: (context, snapshot) => ListView.builder(
itemCount: snapshot.hasData ? snapshot.data?.length ?? 0 : 0,
itemBuilder: (context, i) => AnalyticsListTile(
defaultSelected: AnalyticsSelected(
snapshot.data![i].id,
AnalyticsEntryType.space,
"",
),
avatar: snapshot.data![i].avatar,
selected: AnalyticsSelected(
snapshot.data![i].id,
AnalyticsEntryType.space,
snapshot.data![i].name,
),
onTap: (selected) {
context.go(
'/rooms/analytics/${selected.id}',
);
},
allowNavigateOnSelect: true,
isSelected: false,
pangeaController: controller.pangeaController,
child: ListView.builder(
itemCount: controller.spaces.length,
itemBuilder: (context, i) => AnalyticsListTile(
defaultSelected: AnalyticsSelected(
controller.spaces[i].id,
AnalyticsEntryType.space,
"",
),
avatar: controller.spaces[i].avatar,
selected: AnalyticsSelected(
controller.spaces[i].id,
AnalyticsEntryType.space,
controller.spaces[i].name,
),
onTap: (selected) {
context.go(
'/rooms/analytics/${selected.id}',
);
},
allowNavigateOnSelect: true,
isSelected: false,
pangeaController: controller.pangeaController,
),
),
),

View file

@ -117,7 +117,6 @@ class ConstructListViewState extends State<ConstructListView> {
.then((value) => setState(() => _constructs = value));
refreshSubscription = widget.refreshStream.stream.listen((forceUpdate) {
debugPrint("updating constructs");
// postframe callback to let widget rebuild with the new selected parameter
// before sending selected to getConstructs function
WidgetsBinding.instance.addPostFrameCallback((_) {
@ -132,9 +131,6 @@ class ConstructListViewState extends State<ConstructListView> {
.then(
(value) => setState(() {
_constructs = value;
debugPrint(
"constructs is now: ${constructs?.map((event) => event.uses.map((use) => use.lemma)).toList()}",
);
}),
);
});