sort added for workorder filter page

main_production_RSG
WaseemAbbasi22 1 month ago
parent b8e9676ac6
commit dc893b7836

@ -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";
}
}
}

@ -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/text_extensions.dart';
import 'package:test_sa/extensions/widget_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/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/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/modules/cm_module/views/components/action_button/footer_action_button.dart';
import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/app_style/app_color.dart';
@ -31,10 +32,25 @@ class AllRequestsFilterPage extends StatefulWidget {
class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> { class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
SearchAllRequestsModel? search; SearchAllRequestsModel? search;
SortOrder selectedSortOption = SortOrder.descending;
@override @override
void initState() { void initState() {
search = widget.data; 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) { if (search != null) {
search?.requestNumber?.controller?.text = search?.requestNumber?.value ?? ""; search?.requestNumber?.controller?.text = search?.requestNumber?.value ?? "";
search!.assetName?.controller?.text = search?.assetName?.value ?? ""; search!.assetName?.controller?.text = search?.assetName?.value ?? "";
@ -149,6 +165,7 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
search?.startDate = null; search?.startDate = null;
search?.endDate = null; search?.endDate = null;
search?.isArchived = false; search?.isArchived = false;
selectedSortOption = SortOrder.descending;
}); });
}, },
style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap), style: TextButton.styleFrom(padding: EdgeInsets.zero, tapTargetSize: MaterialTapTargetSize.shrinkWrap),
@ -194,6 +211,50 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
}, },
), ),
16.height, 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)), context.translation.pickDate.heading5(context).custom(color: AppColor.textStyleColor(context)),
8.height, 8.height,
Row( Row(
@ -238,7 +299,7 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
// search?.isArchived = value!; // search?.isArchived = value!;
// } // }
// if (mounted) setState(() {}); // if (mounted) setState(() {});
// }), // }),
// "View Archived Requests".bodyText(context).expanded, // "View Archived Requests".bodyText(context).expanded,
// ], // ],
// ).onPress(() { // ).onPress(() {
@ -256,16 +317,25 @@ class _AllRequestsFilterPageState extends State<AllRequestsFilterPage> {
void _search() async { void _search() async {
final requestsProvider = Provider.of<AllRequestsProvider>(context, listen: false); final requestsProvider = Provider.of<AllRequestsProvider>(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(); if (search?.startDate != null) search?.endDate ??= DateTime.now();
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
requestsProvider.reset(); requestsProvider.reset();
requestsProvider.searchedModel = search; requestsProvider.searchedModel = search;
await requestsProvider.getAllRequests(context, search: search); await requestsProvider.getAllRequests(context, search: search, isAscending: selectedSortOption == SortOrder.ascending);
Navigator.pop(context); Navigator.pop(context);
Navigator.of(context).pop(search); Navigator.of(context).pop(search);
} }
bool _showResetButton() { 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;
} }
} }

@ -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 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import '../../../../models/search_all_requests_model.dart'; import '../../../../models/search_all_requests_model.dart';
import '../../../../models/enums/sort_order.dart';
import '../../../common_widgets/app_lazy_loading.dart'; import '../../../common_widgets/app_lazy_loading.dart';
import '../../../common_widgets/default_app_bar.dart'; import '../../../common_widgets/default_app_bar.dart';
import '../widgets/request_search_buttons.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 { class AllRequestsSearchPage extends StatefulWidget {
static const String id = "all_requests_search_page"; static const String id = "all_requests_search_page";
final SearchAllRequestsModel? data; final SearchAllRequestsModel? data;
@ -46,22 +33,22 @@ class AllRequestsSearchPage extends StatefulWidget {
class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> { class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> {
SearchAllRequestsModel? search; SearchAllRequestsModel? search;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
SortOrder selectedSortOption = SortOrder.ascending; SortOrder selectedSortOption = SortOrder.descending;
@override @override
void initState() { void initState() {
search = widget.data; 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) { if (search?.selectedSortOption != null) {
// Match the saved sort option name to our enum // Match the saved sort option name to our enum
try { try {
selectedSortOption = SortOrder.values.firstWhere( selectedSortOption = SortOrder.values.firstWhere(
(e) => e.name == search!.selectedSortOption, (e) => e.name == search!.selectedSortOption,
orElse: () => SortOrder.ascending, orElse: () => SortOrder.descending,
); );
} catch (e) { } catch (e) {
selectedSortOption = SortOrder.ascending; selectedSortOption = SortOrder.descending;
} }
} }
@ -115,7 +102,7 @@ class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> {
search?.resetSearchValuesAndController(except: null); search?.resetSearchValuesAndController(except: null);
search!.startDate = null; search!.startDate = null;
search!.endDate = null; search!.endDate = null;
selectedSortOption = SortOrder.ascending; selectedSortOption = SortOrder.descending;
}); });
}), }),
], ],
@ -275,6 +262,6 @@ class _AllRequestsSearchPageState extends State<AllRequestsSearchPage> {
(search?.model?.controller?.text.isNotEmpty ?? false) || (search?.model?.controller?.text.isNotEmpty ?? false) ||
(search?.startDate != null) || (search?.startDate != null) ||
(search?.endDate != null) || (search?.endDate != null) ||
selectedSortOption != SortOrder.ascending; selectedSortOption != SortOrder.descending;
} }
} }

Loading…
Cancel
Save