diff --git a/lib/core/viewModel/PatientSearchViewModel.dart b/lib/core/viewModel/PatientSearchViewModel.dart index 43d8b221..07975bc3 100644 --- a/lib/core/viewModel/PatientSearchViewModel.dart +++ b/lib/core/viewModel/PatientSearchViewModel.dart @@ -186,30 +186,48 @@ class PatientSearchViewModel extends BaseViewModel { } } else { setDefaultInPatientList(); - generateMyInpatientClinicList(); setState(ViewState.Idle); } } - sortInPatient({bool isDes = false}) { - if (isDes) - filteredInPatientItems.sort((PatiantInformtion a, PatiantInformtion b) => - b.admissionDateWithDateTimeForm - .compareTo(a.admissionDateWithDateTimeForm)); - else - filteredInPatientItems.sort((PatiantInformtion a, PatiantInformtion b) => - a.admissionDateWithDateTimeForm - .compareTo(b.admissionDateWithDateTimeForm)); + sortInPatient({bool isDes = false, bool isAllClinic}) { + if (isAllClinic + ? inPatientList.length > 0 + : filteredInPatientItems.length > 0) { + List localInPatient = + isAllClinic ? [...inPatientList] : [...filteredInPatientItems]; + if (isDes) + localInPatient.sort((PatiantInformtion a, PatiantInformtion b) => b + .admissionDateWithDateTimeForm + .compareTo(a.admissionDateWithDateTimeForm)); + else + localInPatient.sort((PatiantInformtion a, PatiantInformtion b) => a + .admissionDateWithDateTimeForm + .compareTo(b.admissionDateWithDateTimeForm)); + + if (isAllClinic) { + resetInPatientPagination(); + filteredInPatientItems + .addAll(localInPatient.sublist(firstSubsetIndex, lastSubsetIndex)); + } else { + filteredInPatientItems.clear(); + filteredInPatientItems.addAll(localInPatient); + } + } setState(ViewState.Idle); } - Future setDefaultInPatientList() async { - setState(ViewState.BusyLocal); - await getDoctorProfile(); + resetInPatientPagination() { filteredInPatientItems.clear(); firstSubsetIndex = 0; lastSubsetIndex = inPatientPageSize - 1; + } + + Future setDefaultInPatientList() async { + setState(ViewState.BusyLocal); + await getDoctorProfile(); + resetInPatientPagination(); if (inPatientList.length > 0) filteredInPatientItems .addAll(inPatientList.sublist(firstSubsetIndex, lastSubsetIndex)); @@ -218,7 +236,7 @@ class PatientSearchViewModel extends BaseViewModel { generateMyInpatientClinicList() { inPatientList.forEach((element) { - if(!myInpatientClinicList.contains(element.clinicDescription)) { + if (!myInpatientClinicList.contains(element.clinicDescription)) { myInpatientClinicList.add(element.clinicDescription); } }); @@ -240,8 +258,7 @@ class PatientSearchViewModel extends BaseViewModel { } } - - filterByHospital({ int hospitalId}) { + filterByHospital({int hospitalId}) { filteredInPatientItems = []; for (var i = 0; i < inPatientList.length; i++) { if (inPatientList[i].projectId == hospitalId) { @@ -251,7 +268,7 @@ class PatientSearchViewModel extends BaseViewModel { notifyListeners(); } - filterByClinic({ String clinicName}) { + filterByClinic({String clinicName}) { filteredInPatientItems = []; for (var i = 0; i < inPatientList.length; i++) { if (inPatientList[i].clinicDescription == clinicName) { @@ -266,28 +283,61 @@ class PatientSearchViewModel extends BaseViewModel { _inPatientService.myInPatientList = []; } - void filterSearchResults(String query) { + void filterSearchResults(String query, {bool isAllClinic}) { var strExist = query.length > 0 ? true : false; - if (strExist) { - filteredInPatientItems = []; - for (var i = 0; i < inPatientList.length; i++) { - String firstName = inPatientList[i].firstName.toUpperCase(); - String lastName = inPatientList[i].lastName.toUpperCase(); - String mobile = inPatientList[i].mobileNumber.toUpperCase(); - String patientID = inPatientList[i].patientId.toString(); - - if (firstName.contains(query.toUpperCase()) || - lastName.contains(query.toUpperCase()) || - mobile.contains(query) || - patientID.contains(query)) { - filteredInPatientItems.add(inPatientList[i]); + if (isAllClinic) { + if (strExist) { + filteredInPatientItems = []; + for (var i = 0; i < inPatientList.length; i++) { + String firstName = inPatientList[i].firstName.toUpperCase(); + String lastName = inPatientList[i].lastName.toUpperCase(); + String mobile = inPatientList[i].mobileNumber.toUpperCase(); + String patientID = inPatientList[i].patientId.toString(); + + if (firstName.contains(query.toUpperCase()) || + lastName.contains(query.toUpperCase()) || + mobile.contains(query) || + patientID.contains(query)) { + filteredInPatientItems.add(inPatientList[i]); + } } + notifyListeners(); + } else { + if (inPatientList.length > 0) filteredInPatientItems.clear(); + filteredInPatientItems.addAll(inPatientList); + notifyListeners(); } - notifyListeners(); } else { - if (inPatientList.length > 0) filteredInPatientItems.clear(); - filteredInPatientItems.addAll(inPatientList); - notifyListeners(); + List localFilteredInPatientItems = [ + ...filteredInPatientItems + ]; + + if (strExist) { + filteredInPatientItems.clear(); + for (var i = 0; i < localFilteredInPatientItems.length; i++) { + String firstName = + localFilteredInPatientItems[i].firstName.toUpperCase(); + String lastName = + localFilteredInPatientItems[i].lastName.toUpperCase(); + String mobile = + localFilteredInPatientItems[i].mobileNumber.toUpperCase(); + String patientID = + localFilteredInPatientItems[i].patientId.toString(); + + if (firstName.contains(query.toUpperCase()) || + lastName.contains(query.toUpperCase()) || + mobile.contains(query) || + patientID.contains(query)) { + filteredInPatientItems.add(localFilteredInPatientItems[i]); + } + } + notifyListeners(); + } else { + if (localFilteredInPatientItems.length > 0) + filteredInPatientItems.clear(); + filteredInPatientItems.addAll(localFilteredInPatientItems); + notifyListeners(); + } } } diff --git a/lib/screens/patients/In_patient/in_patient_list_page.dart b/lib/screens/patients/In_patient/in_patient_list_page.dart index 80acb88d..f52b4819 100644 --- a/lib/screens/patients/In_patient/in_patient_list_page.dart +++ b/lib/screens/patients/In_patient/in_patient_list_page.dart @@ -30,6 +30,7 @@ class _InPatientListPageState extends State { bool isSortDes = false; bool isAllClinic = true; + bool hasQuery = false; bool showBottomSheet = false; String selectedClinicName; @@ -47,11 +48,8 @@ class _InPatientListPageState extends State { body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Container( - // height: MediaQuery.of(context).size.height * 0.070, - // ), Container( - margin: EdgeInsets.symmetric(horizontal: 14.0, vertical: 10), + margin: EdgeInsets.only(left: 10.0,right: 10, top: 10), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -73,7 +71,10 @@ class _InPatientListPageState extends State { }, activeColor: Colors.red, ), - AppText("All Clinic", fontSize: 15,), + AppText( + "All Clinic", + fontSize: 15, + ), ], ), onTap: () { @@ -106,7 +107,10 @@ class _InPatientListPageState extends State { }, activeColor: Colors.red, ), - AppText(selectedClinicName ?? "Select Clinic", fontSize: 15,), + AppText( + selectedClinicName ?? "Select Clinic", + fontSize: 15, + ), Container( margin: EdgeInsets.only(bottom: 10), child: Icon(FontAwesomeIcons.sortDown)) @@ -116,7 +120,7 @@ class _InPatientListPageState extends State { ), ), Container( - margin: EdgeInsets.all(16.0), + margin: EdgeInsets.only(left: 16, right: 16, bottom: 16, top:5), child: Stack( children: [ AppTextFieldCustom( @@ -131,7 +135,11 @@ class _InPatientListPageState extends State { ), controller: _searchController, onChanged: (value) { - widget.patientSearchViewModel.filterSearchResults(value); + setState(() { + hasQuery = true; + }); + widget.patientSearchViewModel + .filterSearchResults(value, isAllClinic: isAllClinic); }), Positioned( right: 35, @@ -148,7 +156,7 @@ class _InPatientListPageState extends State { onPressed: () { GifLoaderDialogUtils.showMyDialog(context); widget.patientSearchViewModel - .sortInPatient(isDes: isSortDes); + .sortInPatient(isDes: isSortDes, isAllClinic:isAllClinic); isSortDes = !isSortDes; GifLoaderDialogUtils.hideDialog(context); }, @@ -277,7 +285,7 @@ class _InPatientListPageState extends State { return SizedBox(); }), onNotification: (t) { - if (isAllClinic) if (t + if (isAllClinic && !hasQuery) if (t is ScrollUpdateNotification && t.metrics.pixels >= t.metrics.maxScrollExtent - 50) {