Merge pull request #263 from pangeachat/analytics-hotfix

Analytics hotfix
pull/1183/head
ggurdin 1 year ago committed by GitHub
commit 5b4c268c1d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -104,7 +104,6 @@ class AnalyticsListTileState extends State<AnalyticsListTile> {
) )
: null, : null,
selected: widget.selected, selected: widget.selected,
enabled: widget.enabled,
onTap: () { onTap: () {
(room?.isSpace ?? false) && widget.allowNavigateOnSelect (room?.isSpace ?? false) && widget.allowNavigateOnSelect
? context.go( ? context.go(

@ -5,6 +5,7 @@ import 'package:fluffychat/pangea/extensions/client_extension.dart';
import 'package:fluffychat/pangea/pages/analytics/base_analytics_view.dart'; import 'package:fluffychat/pangea/pages/analytics/base_analytics_view.dart';
import 'package:fluffychat/pangea/pages/analytics/student_analytics/student_analytics.dart'; import 'package:fluffychat/pangea/pages/analytics/student_analytics/student_analytics.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import '../../../widgets/matrix.dart'; import '../../../widgets/matrix.dart';
@ -101,18 +102,40 @@ class BaseAnalyticsController extends State<BaseAnalyticsPage> {
} }
} }
void toggleSelection(AnalyticsSelected selectedParam) { Future<void> toggleSelection(AnalyticsSelected selectedParam) async {
final bool joinSelectedRoom =
selectedParam.type == AnalyticsEntryType.room &&
!enableSelection(
selectedParam,
);
if (joinSelectedRoom) {
await showFutureLoadingDialog(
context: context,
future: () async {
final waitForRoom = Matrix.of(context).client.waitForRoomInSync(
selectedParam.id,
join: true,
);
await Matrix.of(context).client.joinRoom(selectedParam.id);
await waitForRoom;
},
);
}
setState(() { setState(() {
debugPrint("selectedParam.id is ${selectedParam.id}"); debugPrint("selectedParam.id is ${selectedParam.id}");
currentLemma = null; currentLemma = null;
selected = isSelected(selectedParam.id) ? null : selectedParam; selected = isSelected(selectedParam.id) ? null : selectedParam;
}); });
pangeaController.analytics.setConstructs( pangeaController.analytics.setConstructs(
constructType: ConstructType.grammar, constructType: ConstructType.grammar,
defaultSelected: widget.defaultSelected, defaultSelected: widget.defaultSelected,
selected: selected, selected: selected,
removeIT: true, removeIT: true,
); );
Future.delayed(Duration.zero, () => setState(() {})); Future.delayed(Duration.zero, () => setState(() {}));
} }

@ -145,6 +145,7 @@ class BaseAnalyticsView extends StatelessWidget {
) * ) *
72, 72,
child: TabBarView( child: TabBarView(
physics: const NeverScrollableScrollPhysics(),
children: [ children: [
Column( Column(
crossAxisAlignment: crossAxisAlignment:

@ -243,9 +243,13 @@ class ConstructListViewState extends State<ConstructListView> {
List<AggregateConstructUses>? get constructs => List<AggregateConstructUses>? get constructs =>
widget.pangeaController.analytics.constructs != null widget.pangeaController.analytics.constructs != null
? widget.pangeaController.myAnalytics.aggregateConstructData( ? widget.pangeaController.myAnalytics
.aggregateConstructData(
widget.pangeaController.analytics.constructs!, widget.pangeaController.analytics.constructs!,
) )
.sorted(
(a, b) => b.uses.length.compareTo(a.uses.length),
)
: null; : null;
AggregateConstructUses? get currentConstruct => constructs?.firstWhereOrNull( AggregateConstructUses? get currentConstruct => constructs?.firstWhereOrNull(
@ -284,6 +288,13 @@ class ConstructListViewState extends State<ConstructListView> {
return allMsgErrorSteps; return allMsgErrorSteps;
} }
Future<void> showConstructMessagesDialog() async {
await showDialog<ConstructMessagesDialog>(
context: context,
builder: (c) => ConstructMessagesDialog(controller: this),
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (!widget.init || fetchingUses) { if (!widget.init || fetchingUses) {
@ -298,10 +309,7 @@ class ConstructListViewState extends State<ConstructListView> {
); );
} }
final msgEventMatches = getMessageEventMatches(); return Expanded(
return widget.controller.currentLemma == null
? Expanded(
child: ListView.builder( child: ListView.builder(
itemCount: constructs!.length, itemCount: constructs!.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
@ -312,42 +320,80 @@ class ConstructListViewState extends State<ConstructListView> {
subtitle: Text( subtitle: Text(
'${L10n.of(context)!.total} ${constructs![index].uses.length}', '${L10n.of(context)!.total} ${constructs![index].uses.length}',
), ),
onTap: () { onTap: () async {
final String lemma = constructs![index].lemma; final String lemma = constructs![index].lemma;
widget.controller.setCurrentLemma(lemma); widget.controller.setCurrentLemma(lemma);
fetchUses(); fetchUses().then((_) => showConstructMessagesDialog());
}, },
); );
}, },
), ),
) );
: Expanded( }
child: Column( }
class ConstructMessagesDialog extends StatelessWidget {
final ConstructListViewState controller;
const ConstructMessagesDialog({
super.key,
required this.controller,
});
@override
Widget build(BuildContext context) {
if (controller.widget.controller.currentLemma == null) {
return const AlertDialog(content: CircularProgressIndicator.adaptive());
}
final msgEventMatches = controller.getMessageEventMatches();
return AlertDialog(
title: Center(child: Text(controller.widget.controller.currentLemma!)),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (constructs![lemmaIndex].uses.length > _msgEvents.length) if (controller.constructs![controller.lemmaIndex].uses.length >
controller._msgEvents.length)
Center( Center(
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text(L10n.of(context)!.roomDataMissing), child: Text(L10n.of(context)!.roomDataMissing),
), ),
), ),
Expanded( SingleChildScrollView(
child: ListView.separated( child: Column(
separatorBuilder: (context, index) => children: [
...msgEventMatches.mapIndexed(
(index, event) => Column(
children: [
ConstructMessage(
msgEvent: event.msgEvent,
lemma: controller.widget.controller.currentLemma!,
errorMessage: event.lemmaMatch,
),
if (index < msgEventMatches.length - 1)
const Divider(height: 1), const Divider(height: 1),
itemCount: msgEventMatches.length, ],
itemBuilder: (context, index) {
return ConstructMessage(
msgEvent: msgEventMatches[index].msgEvent,
lemma: widget.controller.currentLemma!,
errorMessage: msgEventMatches[index].lemmaMatch,
);
},
), ),
), ),
], ],
), ),
),
],
),
actions: [
TextButton(
onPressed: () => Navigator.of(context, rootNavigator: false).pop(),
child: Text(
L10n.of(context)!.close.toUpperCase(),
style: TextStyle(
color:
Theme.of(context).textTheme.bodyMedium?.color?.withAlpha(150),
),
),
),
],
); );
} }
} }

Loading…
Cancel
Save