diff --git a/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart b/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart index 6733c8dc..a0139772 100644 --- a/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart +++ b/lib/modules/cm_module/views/forms/maintenance_request/components/external_request.dart @@ -63,11 +63,11 @@ class _ExternalMaintenanceRequestState extends State initialValue: requestDetailProvider.activityMaintenanceHelperModel?.supplier, showAsBottomSheet: true, showShadow: false, + showCancel: true, onSelect: (supplier) { - if (supplier != null) { + if (supplier != requestDetailProvider.activityMaintenanceHelperModel?.supplier) { requestDetailProvider.activityMaintenanceHelperModel?.supplier = supplier; - // _subWorkOrders.supplier = supplier; - // log(_subWorkOrders.supplier?.suppPersons?.map((e) => e.personName)?.toString()); + requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = null; setState(() {}); } }, @@ -79,6 +79,7 @@ class _ExternalMaintenanceRequestState extends State context: context, backgroundColor: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100, title: context.translation.supplierEngineer, + showShadow: false, enabled: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons?.isNotEmpty ?? false, staticData: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppPersons, showAsBottomSheet: true, @@ -86,7 +87,6 @@ class _ExternalMaintenanceRequestState extends State ? null : SuppPersons.fromJson(requestDetailProvider.activityMaintenanceHelperModel?.supEngineer?.toJson()), onSelect: (suppPerson) { - print(suppPerson?.toJson()); if (suppPerson != null) { requestDetailProvider.activityMaintenanceHelperModel?.supEngineer = SuppEngineerWorkOrders.fromJson(suppPerson.toJson()); requestDetailProvider.updateActivityMaintenanceHelperModel(requestDetailProvider.activityMaintenanceHelperModel); @@ -109,7 +109,7 @@ class _ExternalMaintenanceRequestState extends State decoration: BoxDecoration( color: requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null ? AppColor.neutral40 : AppColor.neutral100, borderRadius: BorderRadius.circular(10), - boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], + //boxShadow: [BoxShadow(color: Colors.black.withOpacity(0.05), blurRadius: 10)], ), child: Icon(Icons.add, color: context.isDark ? null : AppColor.neutral60), ).onPress(requestDetailProvider.activityMaintenanceHelperModel?.supplier?.suppliername == null diff --git a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart index 757a7f90..8909e6dd 100644 --- a/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart +++ b/lib/modules/pm_module/ppm_wo/update_ppm/ppm_external_details_form.dart @@ -149,12 +149,12 @@ class _ExternalDetailItemState extends State { backgroundColor: AppColor.neutral100, showAsBottomSheet: true, showShadow: false, + showCancel: true, onSelect: (supplier) { - if (supplier != null) { - setState(() { - widget.model.supplier = supplier; - }); - } + setState(() { + widget.model.supplier = supplier; + widget.model.suppPerson = null; + }); }, ), 8.height, diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index 653cffdb..1fb81225 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -23,6 +23,7 @@ class SingleItemDropDownMenu exte final String title; final double? height; final bool showShadow; + final bool showCancel; final Color? backgroundColor; // Now nullable final bool? loading; // Now nullable @@ -40,6 +41,7 @@ class SingleItemDropDownMenu exte this.showAsFullScreenDialog = false, this.staticData, // Provide a default empty list this.showShadow = true, + this.showCancel = false, this.backgroundColor, this.loading, }) : super(key: key); @@ -167,34 +169,44 @@ class _SingleItemDropDownMenuState( - // Specify return type - context: context, - isScrollControlled: true, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.vertical( - top: Radius.circular(20), - ), - ), - clipBehavior: Clip.antiAliasWithSaveLayer, - builder: (BuildContext context) => SelectionBottomSheet( - // Specify generic type - items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List) ?? [], // Provide default empty list if null - selectedItem: _selectedItem, - title: widget.title, - builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name - ), - ); - if (selectedT != null) { - setState(() { - _selectedItem = selectedT; - }); - widget.onSelect!(selectedT); // Non-null assertion after null check - } - } - : null):null), + : widget.enabled + ? (widget.showAsBottomSheet + ? () async { + final selectedT = await showModalBottomSheet( + // Specify return type + context: context, + isScrollControlled: true, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(20), + ), + ), + clipBehavior: Clip.antiAliasWithSaveLayer, + builder: (BuildContext context) => SelectionBottomSheet( + // Specify generic type + items: ((X == NullableLoadingProvider) ? widget.staticData : provider?.items as List) ?? [], + // Provide default empty list if null + selectedItem: _selectedItem, + title: widget.title, + showCancel: widget.showCancel, + onSelect: (selectedT) { + setState(() { + _selectedItem = selectedT; + }); + widget.onSelect!(selectedT); + }, + builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name + ), + ); + // if (selectedT != null) { + // setState(() { + // _selectedItem = selectedT; + // }); + // widget.onSelect!(selectedT); // Non-null assertion after null check + // } + } + : null) + : null), ], ), ], diff --git a/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart index a8071243..a59bef56 100644 --- a/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/selection_bottom_sheet.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:test_sa/extensions/context_extension.dart'; -import'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; @@ -12,8 +13,10 @@ class SelectionBottomSheet extends StatefulWidget { final T? selectedItem; // Now nullable final String title; final SelectionBuilderString builderString; + final bool showCancel; + final Function(T?) onSelect; - const SelectionBottomSheet({Key? key, this.items, this.selectedItem, this.title = "", required this.builderString}) : super(key: key); + const SelectionBottomSheet({Key? key, this.items, this.selectedItem, this.title = "", required this.builderString, this.showCancel = false,required this.onSelect}) : super(key: key); @override _SelectionBottomSheetState createState() => _SelectionBottomSheetState(); @@ -48,7 +51,38 @@ class _SelectionBottomSheetState extends State> { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - widget.title.heading5(context), + Row( + children: [ + widget.title.heading5(context).expanded, + if (widget.showCancel) + AnimatedOpacity( + opacity: _selectedValue != null ? 1 : 0, + duration: const Duration(milliseconds: 250), + child: Container( + height: 30, + decoration: BoxDecoration(color: const Color(0xffF63939).withOpacity(.75), borderRadius: BorderRadius.circular(30)), + padding: const EdgeInsets.only(left: 8, right: 12, top: 4, bottom: 4), + alignment: Alignment.center, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.clear, color: Colors.white, size: 16), + 4.width, + const Text( + "Clear", + style: TextStyle(fontSize: 14, color: Colors.white), + ) + ], + ), + ).onPress(_selectedValue != null + ? () { + Navigator.pop(context); + widget.onSelect(null); + } + : null), + ), + ], + ), 16.height, TextField( onChanged: (queryString) { @@ -103,7 +137,8 @@ class _SelectionBottomSheetState extends State> { label: context.translation.select, maxWidth: true, onPressed: () { - Navigator.pop(context, _selectedValue); + Navigator.pop(context); + widget.onSelect(_selectedValue); }, ), ], diff --git a/lib/views/widgets/status/assistant_employee_menu.dart b/lib/views/widgets/status/assistant_employee_menu.dart index 01d66f8a..9d0c96ef 100644 --- a/lib/views/widgets/status/assistant_employee_menu.dart +++ b/lib/views/widgets/status/assistant_employee_menu.dart @@ -3,8 +3,6 @@ import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; -import 'package:test_sa/models/base.dart'; -import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/bottom_sheets/selection_bottom_sheet.dart'; import '../../../models/new_models/assistant_employee.dart'; @@ -20,7 +18,8 @@ class AssistantEmployeeMenu extends StatefulWidget { final bool showAsBottomSheet; final bool hideShadow; - AssistantEmployeeMenu({Key? key, required this.statuses, this.title, this.showAsBottomSheet = false,this.hideShadow = false, required this.onSelect, this.initialStatus, this.backgroundColor, this.enable = true}) + AssistantEmployeeMenu( + {Key? key, required this.statuses, this.title, this.showAsBottomSheet = false, this.hideShadow = false, required this.onSelect, this.initialStatus, this.backgroundColor, this.enable = true}) : super(key: key); @override @@ -146,15 +145,22 @@ class _SingleAssistantEmployeeMenuState extends State { items: widget.statuses, selectedItem: _selectedStatus, title: "Select", + showCancel: true, + onSelect: (selectedT) { + setState(() { + _selectedStatus = selectedT; + }); + widget.onSelect(selectedT); + }, builderString: (emp) => emp?.name ?? "", // Null-aware operator for emp.name ), ); - if (selectedT != null) { - setState(() { - _selectedStatus = selectedT; - }); - widget.onSelect(selectedT); // Non-null assertion after null check - } + // if (selectedT != null) { + // setState(() { + // _selectedStatus = selectedT; + // }); + // widget.onSelect(selectedT); // Non-null assertion after null check + // } } : null), ],