From 400e5daac09b970108559eec76df297326c30dc9 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 6 Apr 2026 10:00:38 +0300 Subject: [PATCH] Dr Search fixed --- .../book_appointments_view_model.dart | 36 +++++++++++++++++++ .../book_appointment/select_doctor_page.dart | 4 +-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart index 327afeb0..eab01644 100644 --- a/lib/features/book_appointments/book_appointments_view_model.dart +++ b/lib/features/book_appointments/book_appointments_view_model.dart @@ -331,6 +331,42 @@ class BookAppointmentsViewModel extends ChangeNotifier { notifyListeners(); } + void filterDoctors(String query) { + if (query.isEmpty) { + filteredDoctorList = List.from(doctorsList); + // _groupDoctorsList(); + setIsNearestAppointmentSelected(isNearestAppointmentSelected); + notifyListeners(); + return; + } + + filteredDoctorList = doctorsList.where((doctor) { + final name = (doctor.name ?? '').toLowerCase(); + final clinicName = (doctor.clinicName ?? '').toLowerCase(); + final projectName = (doctor.projectName ?? '').toLowerCase(); + final q = query.toLowerCase(); + return name.contains(q) || clinicName.contains(q) || projectName.contains(q); + }).toList(); + + // Re-group filtered list + final clinicMap = >{}; + final hospitalMap = >{}; + + for (var doctor in filteredDoctorList) { + final clinicKey = (doctor.clinicName ?? 'Unknown').trim(); + clinicMap.putIfAbsent(clinicKey, () => []).add(doctor); + + final hospitalKey = (doctor.projectName ?? 'Unknown').trim(); + hospitalMap.putIfAbsent(hospitalKey, () => []).add(doctor); + } + + doctorsListByClinic = clinicMap.values.toList(); + doctorsListByHospital = hospitalMap.values.toList(); + doctorsListGrouped = isSortByClinic ? doctorsListByClinic : doctorsListByHospital; + + notifyListeners(); + } + void filterClinics(String? query) { if (query!.isEmpty) { _filteredClinicsList = List.from(clinicsList); diff --git a/lib/presentation/book_appointment/select_doctor_page.dart b/lib/presentation/book_appointment/select_doctor_page.dart index 4e56b083..a730e0d0 100644 --- a/lib/presentation/book_appointment/select_doctor_page.dart +++ b/lib/presentation/book_appointment/select_doctor_page.dart @@ -167,14 +167,14 @@ class _SelectDoctorPageState extends State { ? GestureDetector( onTap: () { searchEditingController.clear(); - bookAppointmentsViewModel.filterClinics(""); + bookAppointmentsViewModel.filterDoctors(""); textFocusNode.unfocus(); }, child: Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, width: 20.h, height: 20.h, fit: BoxFit.scaleDown), ) : null, onChange: (value) { - bookAppointmentsViewModel.filterClinics(value!); + bookAppointmentsViewModel.filterDoctors(value ?? ""); }, padding: EdgeInsets.symmetric( vertical: ResponsiveExtension(10).h,