diff --git a/lib/models/enums/sort_order.dart b/lib/models/enums/sort_order.dart new file mode 100644 index 00000000..a1df7119 --- /dev/null +++ b/lib/models/enums/sort_order.dart @@ -0,0 +1,14 @@ +enum SortOrder { + ascending, + descending; + + String get label { + switch (this) { + case SortOrder.ascending: + return "Ascending/Oldest"; + case SortOrder.descending: + return "Descending/Newest"; + } + } +} + diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index 1fbba0ee..6e7684af 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -8,6 +8,7 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/enums/sort_order.dart'; import 'package:test_sa/models/search_all_requests_model.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; @@ -31,10 +32,25 @@ class AllRequestsFilterPage extends StatefulWidget { class _AllRequestsFilterPageState extends State { SearchAllRequestsModel? search; + SortOrder selectedSortOption = SortOrder.descending; @override void initState() { search = widget.data; + + // Initialize from widget.data if available, otherwise default to Descending + if (search?.selectedSortOption != null) { + // Match the saved sort option name to our enum + try { + selectedSortOption = SortOrder.values.firstWhere( + (e) => e.name == search!.selectedSortOption, + orElse: () => SortOrder.descending, + ); + } catch (e) { + selectedSortOption = SortOrder.descending; + } + } + if (search != null) { search?.requestNumber?.controller?.text = search?.requestNumber?.value ?? ""; search!.assetName?.controller?.text = search?.assetName?.value ?? ""; @@ -149,6 +165,7 @@ class _AllRequestsFilterPageState extends State { search?.startDate = null; search?.endDate = null; search?.isArchived = false; + selectedSortOption = SortOrder.descending; }); }, style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), @@ -194,6 +211,50 @@ class _AllRequestsFilterPageState extends State { }, ), 16.height, + RichText( + text: TextSpan(text: "Sort ", style: AppTextStyles.heading5.copyWith(color: AppColor.textStyleColor(context)), children: [ + TextSpan(text: "(By Date)", style: AppTextStyles.bodyText2.copyWith(color: AppColor.textStyleColor(context))), + ])), + 8.height, + Row( + children: [ + for (var element in SortOrder.values) + Padding( + padding: const EdgeInsets.only(right: 16), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: 24, + height: 24, + child: Radio( + value: element, + activeColor: AppColor.primary10, + fillColor: WidgetStateColor.resolveWith((states) { + if (states.contains(WidgetState.selected)) { + return AppColor.primary10; + } + return Colors.grey; + }), + groupValue: selectedSortOption, + onChanged: (state) { + setState(() { + selectedSortOption = element; + }); + }, + ), + ), + 8.width, + Text( + element.label, + style: AppTextStyles.tinyFont.copyWith(color: AppColor.filterButtonTextColor(context)), + ), + ], + ), + ) + ], + ), + 16.height, context.translation.pickDate.heading5(context).custom(color: AppColor.textStyleColor(context)), 8.height, Row( @@ -238,7 +299,7 @@ class _AllRequestsFilterPageState extends State { // search?.isArchived = value!; // } // if (mounted) setState(() {}); - // }), + // }), // "View Archived Requests".bodyText(context).expanded, // ], // ).onPress(() { @@ -256,16 +317,25 @@ class _AllRequestsFilterPageState extends State { void _search() async { final requestsProvider = Provider.of(context, listen: false); + + // Save the enum name (ascending or descending) instead of label + search!.selectedSortOption = selectedSortOption.name; + if (search?.startDate != null) search?.endDate ??= DateTime.now(); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); requestsProvider.reset(); requestsProvider.searchedModel = search; - await requestsProvider.getAllRequests(context, search: search); + await requestsProvider.getAllRequests(context, search: search, isAscending: selectedSortOption == SortOrder.ascending); Navigator.pop(context); Navigator.of(context).pop(search); } bool _showResetButton() { - return (search?.statuses?.isNotEmpty ?? false) || (search?.typeTransaction?.isNotEmpty ?? false) || (search?.startDate != null) || (search?.endDate != null) || (search?.isArchived ?? false); + return (search?.statuses?.isNotEmpty ?? false) || + (search?.typeTransaction?.isNotEmpty ?? false) || + (search?.startDate != null) || + (search?.endDate != null) || + (search?.isArchived ?? false) || + selectedSortOption != SortOrder.descending; } } diff --git a/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart index 13a48f4e..15a59401 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_search_page.dart @@ -15,24 +15,11 @@ import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import '../../../../models/search_all_requests_model.dart'; +import '../../../../models/enums/sort_order.dart'; import '../../../common_widgets/app_lazy_loading.dart'; import '../../../common_widgets/default_app_bar.dart'; import '../widgets/request_search_buttons.dart'; -enum SortOrder { - ascending, - descending; - - String get label { - switch (this) { - case SortOrder.ascending: - return "Ascending/Oldest"; - case SortOrder.descending: - return "Descending/Newest"; - } - } -} - class AllRequestsSearchPage extends StatefulWidget { static const String id = "all_requests_search_page"; final SearchAllRequestsModel? data; @@ -46,22 +33,22 @@ class AllRequestsSearchPage extends StatefulWidget { class _AllRequestsSearchPageState extends State { SearchAllRequestsModel? search; final GlobalKey _formKey = GlobalKey(); - SortOrder selectedSortOption = SortOrder.ascending; + SortOrder selectedSortOption = SortOrder.descending; @override void initState() { search = widget.data; - // Initialize from widget.data if available, otherwise default to Ascending + // Initialize from widget.data if available, otherwise default to Descending if (search?.selectedSortOption != null) { // Match the saved sort option name to our enum try { selectedSortOption = SortOrder.values.firstWhere( (e) => e.name == search!.selectedSortOption, - orElse: () => SortOrder.ascending, + orElse: () => SortOrder.descending, ); } catch (e) { - selectedSortOption = SortOrder.ascending; + selectedSortOption = SortOrder.descending; } } @@ -115,7 +102,7 @@ class _AllRequestsSearchPageState extends State { search?.resetSearchValuesAndController(except: null); search!.startDate = null; search!.endDate = null; - selectedSortOption = SortOrder.ascending; + selectedSortOption = SortOrder.descending; }); }), ], @@ -275,6 +262,6 @@ class _AllRequestsSearchPageState extends State { (search?.model?.controller?.text.isNotEmpty ?? false) || (search?.startDate != null) || (search?.endDate != null) || - selectedSortOption != SortOrder.ascending; + selectedSortOption != SortOrder.descending; } }