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
widget.pangeaController.analytics.constructs!, .aggregateConstructData(
) 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,57 +309,92 @@ class ConstructListViewState extends State<ConstructListView> {
); );
} }
final msgEventMatches = getMessageEventMatches(); return Expanded(
child: ListView.builder(
itemCount: constructs!.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(
constructs![index].lemma,
),
subtitle: Text(
'${L10n.of(context)!.total} ${constructs![index].uses.length}',
),
onTap: () async {
final String lemma = constructs![index].lemma;
widget.controller.setCurrentLemma(lemma);
fetchUses().then((_) => showConstructMessagesDialog());
},
);
},
),
);
}
}
return widget.controller.currentLemma == null class ConstructMessagesDialog extends StatelessWidget {
? Expanded( final ConstructListViewState controller;
child: ListView.builder( const ConstructMessagesDialog({
itemCount: constructs!.length, super.key,
itemBuilder: (context, index) { required this.controller,
return ListTile( });
title: Text(
constructs![index].lemma, @override
), Widget build(BuildContext context) {
subtitle: Text( if (controller.widget.controller.currentLemma == null) {
'${L10n.of(context)!.total} ${constructs![index].uses.length}', return const AlertDialog(content: CircularProgressIndicator.adaptive());
), }
onTap: () {
final String lemma = constructs![index].lemma; final msgEventMatches = controller.getMessageEventMatches();
widget.controller.setCurrentLemma(lemma);
fetchUses(); return AlertDialog(
}, title: Center(child: Text(controller.widget.controller.currentLemma!)),
); content: Column(
}, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (controller.constructs![controller.lemmaIndex].uses.length >
controller._msgEvents.length)
Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(L10n.of(context)!.roomDataMissing),
),
), ),
) SingleChildScrollView(
: Expanded(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (constructs![lemmaIndex].uses.length > _msgEvents.length) ...msgEventMatches.mapIndexed(
Center( (index, event) => Column(
child: Padding( children: [
padding: const EdgeInsets.all(8.0), ConstructMessage(
child: Text(L10n.of(context)!.roomDataMissing), msgEvent: event.msgEvent,
), lemma: controller.widget.controller.currentLemma!,
), errorMessage: event.lemmaMatch,
Expanded( ),
child: ListView.separated( if (index < msgEventMatches.length - 1)
separatorBuilder: (context, index) =>
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