chore: redirect to analytics page instead of opening analytics popup

pull/2245/head
ggurdin 4 months ago
parent 9719c06f9b
commit 280f54b55c
No known key found for this signature in database
GPG Key ID: A01CB41737CBB478

@ -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_generator/activity_generator.dart';
import 'package:fluffychat/pangea/activity_planner/activity_planner_page.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_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/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/find_your_people/find_your_people.dart';
import 'package:fluffychat/pangea/guard/p_vguard.dart'; import 'package:fluffychat/pangea/guard/p_vguard.dart';
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
@ -332,7 +334,14 @@ abstract class AppRoutes {
pageBuilder: (context, state) => defaultPageBuilder( pageBuilder: (context, state) => defaultPageBuilder(
context, context,
state, state,
const AnalyticsPage(), AnalyticsPage(
selectedIndicator: ProgressIndicatorEnum.fromString(
state.uri.queryParameters['mode'] ?? 'vocab',
),
constructZoom: state.extra is ConstructIdentifier
? state.extra as ConstructIdentifier
: null,
),
), ),
), ),
], ],

@ -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_misc/construct_type_enum.dart';
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_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/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_identifier.dart';
import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart';
import 'package:fluffychat/pangea/morphs/default_morph_mapping.dart'; import 'package:fluffychat/pangea/morphs/default_morph_mapping.dart';
@ -34,26 +33,6 @@ class AnalyticsPopupWrapper extends StatefulWidget {
final Widget? backButtonOverride; final Widget? backButtonOverride;
final bool showAppBar; final bool showAppBar;
static void show(
BuildContext context, {
ConstructIdentifier? constructZoom,
ConstructTypeEnum view = ConstructTypeEnum.vocab,
Widget? backButtonOverride,
}) {
showDialog<AnalyticsPopupWrapper>(
context: context,
builder: (context) => FullWidthDialog(
maxWidth: 600,
maxHeight: 800,
dialogContent: AnalyticsPopupWrapper(
constructZoom: constructZoom,
view: view,
backButtonOverride: backButtonOverride,
),
),
);
}
@override @override
AnalyticsPopupWrapperState createState() => AnalyticsPopupWrapperState(); AnalyticsPopupWrapperState createState() => AnalyticsPopupWrapperState();
} }

@ -2,9 +2,16 @@ import 'package:flutter/material.dart';
import 'package:fluffychat/pangea/analytics_page/analytics_page_view.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/analytics_summary/progress_indicators_enum.dart';
import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
class AnalyticsPage extends StatefulWidget { class AnalyticsPage extends StatefulWidget {
const AnalyticsPage({super.key}); final ProgressIndicatorEnum? selectedIndicator;
final ConstructIdentifier? constructZoom;
const AnalyticsPage({
super.key,
this.selectedIndicator,
this.constructZoom,
});
@override @override
AnalyticsPageState createState() => AnalyticsPageState(); AnalyticsPageState createState() => AnalyticsPageState();
@ -13,9 +20,23 @@ class AnalyticsPage extends StatefulWidget {
class AnalyticsPageState extends State<AnalyticsPage> { class AnalyticsPageState extends State<AnalyticsPage> {
ProgressIndicatorEnum? selectedIndicator = ProgressIndicatorEnum.wordsUsed; ProgressIndicatorEnum? selectedIndicator = ProgressIndicatorEnum.wordsUsed;
void onIndicatorSelected(ProgressIndicatorEnum indicator) => setState(() { @override
selectedIndicator = indicator; 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 @override
Widget build(BuildContext context) => AnalyticsPageView(controller: this); Widget build(BuildContext context) => AnalyticsPageView(controller: this);

@ -46,7 +46,6 @@ class AnalyticsPageView extends StatelessWidget {
children: [ children: [
LearningProgressIndicators( LearningProgressIndicators(
selected: controller.selectedIndicator, selected: controller.selectedIndicator,
onIndicatorSelected: controller.onIndicatorSelected,
), ),
Expanded( Expanded(
child: Builder( child: Builder(
@ -56,13 +55,15 @@ class AnalyticsPageView extends StatelessWidget {
return const LevelDialogContent(); return const LevelDialogContent();
} else if (controller.selectedIndicator == } else if (controller.selectedIndicator ==
ProgressIndicatorEnum.morphsUsed) { ProgressIndicatorEnum.morphsUsed) {
return const AnalyticsPopupWrapper( return AnalyticsPopupWrapper(
constructZoom: controller.widget.constructZoom,
view: ConstructTypeEnum.morph, view: ConstructTypeEnum.morph,
showAppBar: false, showAppBar: false,
); );
} else if (controller.selectedIndicator == } else if (controller.selectedIndicator ==
ProgressIndicatorEnum.wordsUsed) { ProgressIndicatorEnum.wordsUsed) {
return const AnalyticsPopupWrapper( return AnalyticsPopupWrapper(
constructZoom: controller.widget.constructZoom,
view: ConstructTypeEnum.vocab, view: ConstructTypeEnum.vocab,
showAppBar: false, showAppBar: false,
); );

@ -1,18 +1,16 @@
import 'dart:async'; 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_list_model.dart';
import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.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_misc/get_analytics_controller.dart';
import 'package:fluffychat/pangea/analytics_summary/learning_progress_bar.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/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_indicator.dart';
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart';
import 'package:fluffychat/widgets/matrix.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 /// A summary of "My Analytics" shown at the top of the chat list
/// It shows a variety of progress indicators such as /// 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. /// be clicked to access more fine-grained analytics data.
class LearningProgressIndicators extends StatefulWidget { class LearningProgressIndicators extends StatefulWidget {
final ProgressIndicatorEnum? selected; final ProgressIndicatorEnum? selected;
final Function(ProgressIndicatorEnum)? onIndicatorSelected;
const LearningProgressIndicators({ const LearningProgressIndicators({
super.key, super.key,
this.selected, this.selected,
this.onIndicatorSelected,
}); });
@override @override
@ -114,16 +110,8 @@ class LearningProgressIndicatorsState
(c) => HoverButton( (c) => HoverButton(
selected: widget.selected == c.indicator, selected: widget.selected == c.indicator,
onPressed: () { onPressed: () {
if (widget.onIndicatorSelected != null) { context.go(
widget.onIndicatorSelected?.call( "/rooms/analytics?mode=${c.indicator.toShortString()}",
c.indicator,
);
return;
}
AnalyticsPopupWrapper.show(
context,
view: c,
); );
}, },
child: ProgressIndicatorBadge( child: ProgressIndicatorBadge(
@ -180,16 +168,7 @@ class LearningProgressIndicatorsState
cursor: SystemMouseCursors.click, cursor: SystemMouseCursors.click,
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
if (widget.onIndicatorSelected != null) { context.go("/rooms/analytics?mode=level");
widget.onIndicatorSelected
?.call(ProgressIndicatorEnum.level);
return;
}
showDialog<LevelBarPopup>(
context: context,
builder: (c) => const LevelBarPopup(),
);
}, },
child: Row( child: Row(
spacing: 8.0, spacing: 8.0,

@ -8,7 +8,31 @@ import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart';
enum ProgressIndicatorEnum { enum ProgressIndicatorEnum {
level, level,
wordsUsed, 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 { extension ProgressIndicatorsExtension on ProgressIndicatorEnum {

@ -4,11 +4,11 @@ import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.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/analytics_misc/gain_points_animation.dart';
import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart';
import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart';
@ -153,14 +153,9 @@ class ConstructNotificationOverlayState
} }
void _showDetails() { void _showDetails() {
AnalyticsPopupWrapper.show( context.go(
context, "/rooms/analytics?mode=morph",
constructZoom: widget.construct, extra: widget.construct,
view: ConstructTypeEnum.morph,
backButtonOverride: IconButton(
icon: const Icon(Icons.close),
onPressed: () => Navigator.of(context).pop(),
),
); );
} }

@ -1,8 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.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/construct_type_enum.dart';
import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
@ -99,10 +100,15 @@ class MessageAnalyticsFeedbackState extends State<MessageAnalyticsFeedback>
} }
void _showAnalyticsDialog(ConstructTypeEnum? type) { void _showAnalyticsDialog(ConstructTypeEnum? type) {
AnalyticsPopupWrapper.show( switch (type) {
context, case ConstructTypeEnum.morph:
view: type ?? ConstructTypeEnum.vocab, context.go("/rooms/analytics?mode=morph");
); break;
case ConstructTypeEnum.vocab:
default:
context.go("/rooms/analytics?mode=vocab");
break;
}
} }
@override @override

@ -1,13 +1,7 @@
import 'dart:developer'; 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/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.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/construct_type_enum.dart';
import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart';
import 'package:fluffychat/pangea/common/utils/overlay.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/message_selection_overlay.dart';
import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart'; import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart';
import 'package:fluffychat/widgets/matrix.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 { class MorphologicalListItem extends StatelessWidget {
final MorphFeaturesEnum morphFeature; final MorphFeaturesEnum morphFeature;
@ -278,15 +276,9 @@ class MorphMeaningPopupState extends State<MorphMeaningPopup> {
null) null)
ConstructXpWidget( ConstructXpWidget(
id: widget.cId, id: widget.cId,
onTap: () => AnalyticsPopupWrapper.show( onTap: () => context.go(
context, "/rooms/analytics?mode=morph",
constructZoom: widget.cId, extra: widget.cId,
view: ConstructTypeEnum.morph,
backButtonOverride: IconButton(
icon: const Icon(Icons.close),
onPressed: () =>
Navigator.of(context).pop(),
),
), ),
), ),
], ],

@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.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/event_wrappers/pangea_message_event.dart';
import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart';
import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; import 'package:fluffychat/pangea/learning_settings/models/language_model.dart';
@ -89,10 +89,9 @@ class WordZoomWidget extends StatelessWidget {
), ),
ConstructXpWidget( ConstructXpWidget(
id: token.vocabConstructID, id: token.vocabConstructID,
onTap: () => AnalyticsPopupWrapper.show( onTap: () => context.go(
context, "/rooms/analytics?mode=vocab",
constructZoom: token.vocabConstructID, extra: token.vocabConstructID,
view: ConstructTypeEnum.vocab,
), ),
), ),
], ],

Loading…
Cancel
Save