diff --git a/lib/screens/editor.dart b/lib/screens/editor.dart index 3ebeb29..07e6cb3 100644 --- a/lib/screens/editor.dart +++ b/lib/screens/editor.dart @@ -599,7 +599,7 @@ class _EditorScreenState extends State { final circles = context .watch>() .activeEntry - .andThen((tm) => tm.getCircles()) + .andThen((tm) => tm.getTimelineGroupingListData(GroupingType.circle)) .getValueOrElse(() => []); circles.sort((g1, g2) => g1.name.compareTo(g2.name)); diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 7d6bdd1..796c366 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -3,17 +3,18 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; -import 'package:relatica/controls/focus_mode_status_headline.dart'; -import 'package:relatica/riverpod_controllers/focus_mode.dart'; import '../controls/app_bottom_nav_bar.dart'; +import '../controls/focus_mode_status_headline.dart'; import '../controls/linear_status_indicator.dart'; import '../controls/login_aware_cached_network_image.dart'; import '../controls/responsive_max_width.dart'; import '../controls/standard_app_drawer.dart'; import '../controls/timeline/timeline_panel.dart'; import '../globals.dart'; +import '../models/timeline_grouping_list_data.dart'; import '../models/timeline_identifiers.dart'; +import '../riverpod_controllers/focus_mode.dart'; import '../services/auth_service.dart'; import '../services/network_status_service.dart'; import '../services/timeline_manager.dart'; @@ -114,9 +115,24 @@ class _HomeScreenState extends ConsumerState { .activeEntry .value; - final circles = manager.getCircles().getValueOrElse(() => []).toList(); + final circles = manager + .getTimelineGroupingListData(GroupingType.circle) + .getValueOrElse(() => []) + .toList(); circles.sort((g1, g2) => g1.name.compareTo(g2.name)); + final groups = manager + .getTimelineGroupingListData(GroupingType.group) + .getValueOrElse(() => []) + .toList(); + groups.sort((g1, g2) => g1.name.compareTo(g2.name)); + + final channels = manager + .getTimelineGroupingListData(GroupingType.channel) + .getValueOrElse(() => []) + .toList(); + channels.sort((g1, g2) => g1.name.compareTo(g2.name)); + final items = [ ...standardTypes .map((t) => TimelineIdentifiers(timeline: t)) @@ -137,17 +153,41 @@ class _HomeScreenState extends ConsumerState { decoration: TextDecoration.underline, ), )), - ...circles - .map((c) => TimelineIdentifiers( - timeline: TimelineType.circle, - auxData: c.id, - label: '${c.name} - ${c.groupingType.name}')) - .map((e) => DropdownMenuItem( - value: e, - child: Text( - e.toLabel(), - overflow: TextOverflow.fade, - ))), + ..._timelineGroupingListDataCollectionToDropdown(circles), + const DropdownMenuItem( + value: null, + enabled: false, + child: Divider(), + ), + const DropdownMenuItem( + value: null, + enabled: false, + child: Text( + 'Groups', + style: TextStyle( + fontWeight: FontWeight.bold, + fontStyle: FontStyle.italic, + decoration: TextDecoration.underline, + ), + )), + ..._timelineGroupingListDataCollectionToDropdown(groups), + const DropdownMenuItem( + value: null, + enabled: false, + child: Divider(), + ), + const DropdownMenuItem( + value: null, + enabled: false, + child: Text( + 'Channels', + style: TextStyle( + fontWeight: FontWeight.bold, + fontStyle: FontStyle.italic, + decoration: TextDecoration.underline, + ), + )), + ..._timelineGroupingListDataCollectionToDropdown(channels), ]; if (items.where((i) => i.value == currentTimeline).isEmpty) { @@ -169,3 +209,17 @@ class _HomeScreenState extends ConsumerState { }); } } + +List> + _timelineGroupingListDataCollectionToDropdown( + List circles) => + circles + .map((c) => TimelineIdentifiers( + timeline: TimelineType.circle, auxData: c.id, label: c.name)) + .map((e) => DropdownMenuItem( + value: e, + child: Text( + e.toLabel(), + overflow: TextOverflow.fade, + ))) + .toList(); diff --git a/lib/services/timeline_manager.dart b/lib/services/timeline_manager.dart index ec78da0..db9bb63 100644 --- a/lib/services/timeline_manager.dart +++ b/lib/services/timeline_manager.dart @@ -42,14 +42,18 @@ class TimelineManager extends ChangeNotifier { notifyListeners(); } - Result, ExecError> getCircles() { + Result, ExecError> getTimelineGroupingListData( + GroupingType type) { if (circlesNotInitialized) { _refreshCircleData(); circlesNotInitialized = false; return Result.ok([]); } - return Result.ok(circlesRepo.getMyCircles()); + return Result.ok(circlesRepo + .getMyCircles() + .where((e) => e.groupingType == type) + .toList()); } Future _refreshCircleData() async {