From 55122b5b13e7becb57c1ab2eccd753fa490f330d Mon Sep 17 00:00:00 2001 From: Manish Date: Tue, 25 Nov 2025 13:18:15 +0530 Subject: [PATCH] update for tag should submit after space --- .../directory/add_contact_bottom_sheet.dart | 23 +++++++++- .../multiple_select_bottomsheet.dart | 45 +++++-------------- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/lib/model/directory/add_contact_bottom_sheet.dart b/lib/model/directory/add_contact_bottom_sheet.dart index 05ededf..b934fba 100644 --- a/lib/model/directory/add_contact_bottom_sheet.dart +++ b/lib/model/directory/add_contact_bottom_sheet.dart @@ -315,15 +315,31 @@ class _AddContactBottomSheetState extends State { height: 48, child: TextField( controller: tagCtrl, - onChanged: controller.filterSuggestions, + onChanged: (value) { + + if (value.endsWith(" ") || value.endsWith(",")) { + final cleaned = value.trim().replaceAll(",", ""); + if (cleaned.isNotEmpty) { + controller.addEnteredTag(cleaned); + } + tagCtrl.clear(); + controller.clearSuggestions(); + } else { + controller.filterSuggestions(value); + } + }, onSubmitted: (v) { - controller.addEnteredTag(v); + if (v.trim().isNotEmpty) { + controller.addEnteredTag(v.trim()); + } tagCtrl.clear(); controller.clearSuggestions(); }, decoration: _inputDecoration("Start typing to add tags"), ), ), + + Obx(() => controller.filteredSuggestions.isEmpty ? const SizedBox.shrink() : Container( @@ -353,7 +369,10 @@ class _AddContactBottomSheetState extends State { }, ), )), + MySpacing.height(8), + + // TAG CHIPS Obx(() => Wrap( spacing: 8, children: controller.enteredTags diff --git a/lib/model/employees/multiple_select_bottomsheet.dart b/lib/model/employees/multiple_select_bottomsheet.dart index f3be00c..df8f071 100644 --- a/lib/model/employees/multiple_select_bottomsheet.dart +++ b/lib/model/employees/multiple_select_bottomsheet.dart @@ -48,9 +48,7 @@ class _EmployeeSelectionBottomSheetState super.dispose(); } - // ------------------------------------------------------ - // 🔥 Optimized debounce-based search - // ------------------------------------------------------ + // SEARCH WITH DEBOUNCE void _onSearchChanged(String query) { _debounce?.cancel(); _debounce = Timer(const Duration(milliseconds: 300), () { @@ -68,29 +66,18 @@ class _EmployeeSelectionBottomSheetState .toList(); // ------------------------------------------------------ - // Auto-move selected employees to top + // ❌ REMOVED "MOVE SELECTED TO TOP" // ------------------------------------------------------ - results.sort((a, b) { - if (widget.multipleSelection) { - // Only move selected employees to top in multi-select - final aSel = _selectedEmployees.contains(a) ? 0 : 1; - final bSel = _selectedEmployees.contains(b) ? 0 : 1; - - if (aSel != bSel) return aSel.compareTo(bSel); - } - - // Otherwise, keep original order (or alphabetically if needed) - return a.name.toLowerCase().compareTo(b.name.toLowerCase()); - }); + // Keeping alphabetical order only + results + .sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase())); _allResults.assignAll(results); _isSearching.value = false; } - // ------------------------------------------------------ - // Handle tap & checkbox - // ------------------------------------------------------ + // HANDLE TAP & CHECKBOX void _toggleEmployee(EmployeeModel emp) { if (widget.multipleSelection) { if (_selectedEmployees.contains(emp)) { @@ -102,13 +89,11 @@ class _EmployeeSelectionBottomSheetState _selectedEmployees.assignAll([emp]); } - // Re-sort list after each toggle + // Refresh list but do NOT reorder selected _performSearch(_searchController.text.trim()); } - // ------------------------------------------------------ - // Submit selection - // ------------------------------------------------------ + // SUBMIT SELECTION void _handleSubmit() { if (widget.multipleSelection) { Navigator.of(context).pop(_selectedEmployees.toList()); @@ -118,9 +103,7 @@ class _EmployeeSelectionBottomSheetState } } - // ------------------------------------------------------ - // Search bar widget - // ------------------------------------------------------ + // SEARCH BAR Widget _searchBar() => Padding( padding: const EdgeInsets.symmetric(vertical: 8), child: TextField( @@ -150,9 +133,7 @@ class _EmployeeSelectionBottomSheetState ), ); - // ------------------------------------------------------ - // Employee list (optimized) - // ------------------------------------------------------ + // EMPLOYEE LIST Widget _employeeList() => Expanded( child: Obx(() { final results = _allResults; @@ -167,7 +148,6 @@ class _EmployeeSelectionBottomSheetState Widget trailingWidget; if (widget.multipleSelection) { - // Multiple selection → normal checkbox trailingWidget = Checkbox( value: isSelected, onChanged: (_) => _toggleEmployee(emp), @@ -178,7 +158,6 @@ class _EmployeeSelectionBottomSheetState ), ); } else { - // Single selection → check circle trailingWidget = isSelected ? const Icon(Icons.check_circle, color: Colors.blueAccent) : const Icon(Icons.circle_outlined, color: Colors.grey); @@ -205,9 +184,7 @@ class _EmployeeSelectionBottomSheetState }), ); - // ------------------------------------------------------ - // Build bottom sheet - // ------------------------------------------------------ + // BUILD BOTTOM SHEET @override Widget build(BuildContext context) { return BaseBottomSheet(