From 280f54b55cc61f789ce59ed01c056aa3908fecf1 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Thu, 3 Jul 2025 14:39:12 -0400 Subject: [PATCH] chore: redirect to analytics page instead of opening analytics popup --- lib/config/routes.dart | 11 ++++++- .../analytics_details_popup.dart | 21 ------------- lib/pangea/analytics_page/analytics_page.dart | 29 ++++++++++++++--- .../analytics_page/analytics_page_view.dart | 7 +++-- .../learning_progress_indicators.dart | 31 +++---------------- .../progress_indicators_enum.dart | 26 +++++++++++++++- .../chat/utils/unlocked_morphs_snackbar.dart | 15 +++------ .../igc/message_analytics_feedback.dart | 16 +++++++--- .../word_zoom/morphological_list_item.dart | 22 +++++-------- .../widgets/word_zoom/word_zoom_widget.dart | 11 +++---- 10 files changed, 97 insertions(+), 92 deletions(-) diff --git a/lib/config/routes.dart b/lib/config/routes.dart index d2a3efc5e..52585e540 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -32,7 +32,9 @@ import 'package:fluffychat/pages/settings_style/settings_style.dart'; import 'package:fluffychat/pangea/activity_generator/activity_generator.dart'; import 'package:fluffychat/pangea/activity_planner/activity_planner_page.dart'; import 'package:fluffychat/pangea/analytics_page/analytics_page.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/common/widgets/pangea_side_view.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/find_your_people/find_your_people.dart'; import 'package:fluffychat/pangea/guard/p_vguard.dart'; import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; @@ -332,7 +334,14 @@ abstract class AppRoutes { pageBuilder: (context, state) => defaultPageBuilder( context, state, - const AnalyticsPage(), + AnalyticsPage( + selectedIndicator: ProgressIndicatorEnum.fromString( + state.uri.queryParameters['mode'] ?? 'vocab', + ), + constructZoom: state.extra is ConstructIdentifier + ? state.extra as ConstructIdentifier + : null, + ), ), ), ], diff --git a/lib/pangea/analytics_details_popup/analytics_details_popup.dart b/lib/pangea/analytics_details_popup/analytics_details_popup.dart index e43cbc998..a4ef88441 100644 --- a/lib/pangea/analytics_details_popup/analytics_details_popup.dart +++ b/lib/pangea/analytics_details_popup/analytics_details_popup.dart @@ -12,7 +12,6 @@ import 'package:fluffychat/pangea/analytics_downloads/analytics_download_button. import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; import 'package:fluffychat/pangea/morphs/default_morph_mapping.dart'; @@ -34,26 +33,6 @@ class AnalyticsPopupWrapper extends StatefulWidget { final Widget? backButtonOverride; final bool showAppBar; - static void show( - BuildContext context, { - ConstructIdentifier? constructZoom, - ConstructTypeEnum view = ConstructTypeEnum.vocab, - Widget? backButtonOverride, - }) { - showDialog( - context: context, - builder: (context) => FullWidthDialog( - maxWidth: 600, - maxHeight: 800, - dialogContent: AnalyticsPopupWrapper( - constructZoom: constructZoom, - view: view, - backButtonOverride: backButtonOverride, - ), - ), - ); - } - @override AnalyticsPopupWrapperState createState() => AnalyticsPopupWrapperState(); } diff --git a/lib/pangea/analytics_page/analytics_page.dart b/lib/pangea/analytics_page/analytics_page.dart index c285a1030..62f3fcf34 100644 --- a/lib/pangea/analytics_page/analytics_page.dart +++ b/lib/pangea/analytics_page/analytics_page.dart @@ -2,9 +2,16 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/pangea/analytics_page/analytics_page_view.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; class AnalyticsPage extends StatefulWidget { - const AnalyticsPage({super.key}); + final ProgressIndicatorEnum? selectedIndicator; + final ConstructIdentifier? constructZoom; + const AnalyticsPage({ + super.key, + this.selectedIndicator, + this.constructZoom, + }); @override AnalyticsPageState createState() => AnalyticsPageState(); @@ -13,9 +20,23 @@ class AnalyticsPage extends StatefulWidget { class AnalyticsPageState extends State { ProgressIndicatorEnum? selectedIndicator = ProgressIndicatorEnum.wordsUsed; - void onIndicatorSelected(ProgressIndicatorEnum indicator) => setState(() { - selectedIndicator = indicator; - }); + @override + void initState() { + super.initState(); + selectedIndicator = widget.selectedIndicator ?? + ProgressIndicatorEnum.wordsUsed; // Default to wordsUsed if not set + } + + @override + void didUpdateWidget(covariant AnalyticsPage oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.selectedIndicator != widget.selectedIndicator && + widget.selectedIndicator != null) { + setState( + () => selectedIndicator = widget.selectedIndicator!, + ); // Update to new value + } + } @override Widget build(BuildContext context) => AnalyticsPageView(controller: this); diff --git a/lib/pangea/analytics_page/analytics_page_view.dart b/lib/pangea/analytics_page/analytics_page_view.dart index 4e15c90d3..7ffab6c2d 100644 --- a/lib/pangea/analytics_page/analytics_page_view.dart +++ b/lib/pangea/analytics_page/analytics_page_view.dart @@ -46,7 +46,6 @@ class AnalyticsPageView extends StatelessWidget { children: [ LearningProgressIndicators( selected: controller.selectedIndicator, - onIndicatorSelected: controller.onIndicatorSelected, ), Expanded( child: Builder( @@ -56,13 +55,15 @@ class AnalyticsPageView extends StatelessWidget { return const LevelDialogContent(); } else if (controller.selectedIndicator == ProgressIndicatorEnum.morphsUsed) { - return const AnalyticsPopupWrapper( + return AnalyticsPopupWrapper( + constructZoom: controller.widget.constructZoom, view: ConstructTypeEnum.morph, showAppBar: false, ); } else if (controller.selectedIndicator == ProgressIndicatorEnum.wordsUsed) { - return const AnalyticsPopupWrapper( + return AnalyticsPopupWrapper( + constructZoom: controller.widget.constructZoom, view: ConstructTypeEnum.vocab, showAppBar: false, ); diff --git a/lib/pangea/analytics_summary/learning_progress_indicators.dart b/lib/pangea/analytics_summary/learning_progress_indicators.dart index 328a3a419..a10829812 100644 --- a/lib/pangea/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/analytics_summary/learning_progress_indicators.dart @@ -1,18 +1,16 @@ import 'dart:async'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_list_model.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; import 'package:fluffychat/pangea/analytics_summary/learning_progress_bar.dart'; import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicator_button.dart'; -import 'package:fluffychat/pangea/analytics_summary/level_bar_popup.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicator.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; /// A summary of "My Analytics" shown at the top of the chat list /// It shows a variety of progress indicators such as @@ -20,11 +18,9 @@ import 'package:fluffychat/widgets/matrix.dart'; /// be clicked to access more fine-grained analytics data. class LearningProgressIndicators extends StatefulWidget { final ProgressIndicatorEnum? selected; - final Function(ProgressIndicatorEnum)? onIndicatorSelected; const LearningProgressIndicators({ super.key, this.selected, - this.onIndicatorSelected, }); @override @@ -114,16 +110,8 @@ class LearningProgressIndicatorsState (c) => HoverButton( selected: widget.selected == c.indicator, onPressed: () { - if (widget.onIndicatorSelected != null) { - widget.onIndicatorSelected?.call( - c.indicator, - ); - return; - } - - AnalyticsPopupWrapper.show( - context, - view: c, + context.go( + "/rooms/analytics?mode=${c.indicator.toShortString()}", ); }, child: ProgressIndicatorBadge( @@ -180,16 +168,7 @@ class LearningProgressIndicatorsState cursor: SystemMouseCursors.click, child: GestureDetector( onTap: () { - if (widget.onIndicatorSelected != null) { - widget.onIndicatorSelected - ?.call(ProgressIndicatorEnum.level); - return; - } - - showDialog( - context: context, - builder: (c) => const LevelBarPopup(), - ); + context.go("/rooms/analytics?mode=level"); }, child: Row( spacing: 8.0, diff --git a/lib/pangea/analytics_summary/progress_indicators_enum.dart b/lib/pangea/analytics_summary/progress_indicators_enum.dart index 7b00aef45..15eba91e1 100644 --- a/lib/pangea/analytics_summary/progress_indicators_enum.dart +++ b/lib/pangea/analytics_summary/progress_indicators_enum.dart @@ -8,7 +8,31 @@ import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; enum ProgressIndicatorEnum { level, wordsUsed, - morphsUsed, + morphsUsed; + + static ProgressIndicatorEnum? fromString(String value) { + switch (value) { + case 'vocab': + return ProgressIndicatorEnum.wordsUsed; + case 'morphs': + return ProgressIndicatorEnum.morphsUsed; + case 'level': + return ProgressIndicatorEnum.level; + default: + return null; + } + } + + String toShortString() { + switch (this) { + case ProgressIndicatorEnum.wordsUsed: + return 'vocab'; + case ProgressIndicatorEnum.morphsUsed: + return 'morphs'; + case ProgressIndicatorEnum.level: + return 'level'; + } + } } extension ProgressIndicatorsExtension on ProgressIndicatorEnum { diff --git a/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart b/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart index 93ea3006b..de197503c 100644 --- a/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart +++ b/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart @@ -4,11 +4,11 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/gain_points_animation.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; @@ -153,14 +153,9 @@ class ConstructNotificationOverlayState } void _showDetails() { - AnalyticsPopupWrapper.show( - context, - constructZoom: widget.construct, - view: ConstructTypeEnum.morph, - backButtonOverride: IconButton( - icon: const Icon(Icons.close), - onPressed: () => Navigator.of(context).pop(), - ), + context.go( + "/rooms/analytics?mode=morph", + extra: widget.construct, ); } diff --git a/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart b/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart index 766c6dc14..569ad84ad 100644 --- a/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart +++ b/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -99,10 +100,15 @@ class MessageAnalyticsFeedbackState extends State } void _showAnalyticsDialog(ConstructTypeEnum? type) { - AnalyticsPopupWrapper.show( - context, - view: type ?? ConstructTypeEnum.vocab, - ); + switch (type) { + case ConstructTypeEnum.morph: + context.go("/rooms/analytics?mode=morph"); + break; + case ConstructTypeEnum.vocab: + default: + context.go("/rooms/analytics?mode=vocab"); + break; + } } @override diff --git a/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart b/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart index 74e3faa80..aae00b6e9 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/morphological_list_item.dart @@ -1,13 +1,7 @@ import 'dart:developer'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:material_symbols_icons/symbols.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; @@ -26,6 +20,10 @@ import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/morph_sel import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:material_symbols_icons/symbols.dart'; class MorphologicalListItem extends StatelessWidget { final MorphFeaturesEnum morphFeature; @@ -278,15 +276,9 @@ class MorphMeaningPopupState extends State { null) ConstructXpWidget( id: widget.cId, - onTap: () => AnalyticsPopupWrapper.show( - context, - constructZoom: widget.cId, - view: ConstructTypeEnum.morph, - backButtonOverride: IconButton( - icon: const Icon(Icons.close), - onPressed: () => - Navigator.of(context).pop(), - ), + onTap: () => context.go( + "/rooms/analytics?mode=morph", + extra: widget.cId, ), ), ], diff --git a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart index 19cc7eb2a..f320523c3 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart +++ b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; @@ -89,10 +89,9 @@ class WordZoomWidget extends StatelessWidget { ), ConstructXpWidget( id: token.vocabConstructID, - onTap: () => AnalyticsPopupWrapper.show( - context, - constructZoom: token.vocabConstructID, - view: ConstructTypeEnum.vocab, + onTap: () => context.go( + "/rooms/analytics?mode=vocab", + extra: token.vocabConstructID, ), ), ],