Skip to content

Commit

Permalink
Merge pull request #263 from pangeachat/analytics-hotfix
Browse files Browse the repository at this point in the history
Analytics hotfix
  • Loading branch information
ggurdin authored May 29, 2024
2 parents 3d100aa + 38cf853 commit 5b4c268
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 47 deletions.
1 change: 0 additions & 1 deletion lib/pangea/pages/analytics/analytics_list_tile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ class AnalyticsListTileState extends State<AnalyticsListTile> {
)
: null,
selected: widget.selected,
enabled: widget.enabled,
onTap: () {
(room?.isSpace ?? false) && widget.allowNavigateOnSelect
? context.go(
Expand Down
25 changes: 24 additions & 1 deletion lib/pangea/pages/analytics/base_analytics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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/student_analytics/student_analytics.dart';
import 'package:flutter/material.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:matrix/matrix.dart';

import '../../../widgets/matrix.dart';
Expand Down Expand Up @@ -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(() {
debugPrint("selectedParam.id is ${selectedParam.id}");
currentLemma = null;
selected = isSelected(selectedParam.id) ? null : selectedParam;
});

pangeaController.analytics.setConstructs(
constructType: ConstructType.grammar,
defaultSelected: widget.defaultSelected,
selected: selected,
removeIT: true,
);

Future.delayed(Duration.zero, () => setState(() {}));
}

Expand Down
1 change: 1 addition & 0 deletions lib/pangea/pages/analytics/base_analytics_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ class BaseAnalyticsView extends StatelessWidget {
) *
72,
child: TabBarView(
physics: const NeverScrollableScrollPhysics(),
children: [
Column(
crossAxisAlignment:
Expand Down
136 changes: 91 additions & 45 deletions lib/pangea/pages/analytics/construct_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,13 @@ class ConstructListViewState extends State<ConstructListView> {

List<AggregateConstructUses>? get constructs =>
widget.pangeaController.analytics.constructs != null
? widget.pangeaController.myAnalytics.aggregateConstructData(
widget.pangeaController.analytics.constructs!,
)
? widget.pangeaController.myAnalytics
.aggregateConstructData(
widget.pangeaController.analytics.constructs!,
)
.sorted(
(a, b) => b.uses.length.compareTo(a.uses.length),
)
: null;

AggregateConstructUses? get currentConstruct => constructs?.firstWhereOrNull(
Expand Down Expand Up @@ -284,6 +288,13 @@ class ConstructListViewState extends State<ConstructListView> {
return allMsgErrorSteps;
}

Future<void> showConstructMessagesDialog() async {
await showDialog<ConstructMessagesDialog>(
context: context,
builder: (c) => ConstructMessagesDialog(controller: this),
);
}

@override
Widget build(BuildContext context) {
if (!widget.init || fetchingUses) {
Expand All @@ -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
? 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: () {
final String lemma = constructs![index].lemma;
widget.controller.setCurrentLemma(lemma);
fetchUses();
},
);
},
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,
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),
),
),
)
: Expanded(
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (constructs![lemmaIndex].uses.length > _msgEvents.length)
Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(L10n.of(context)!.roomDataMissing),
),
),
Expanded(
child: ListView.separated(
separatorBuilder: (context, index) =>
...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),
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),
),
),
),
],
);
}
}

Expand Down

0 comments on commit 5b4c268

Please sign in to comment.