@ -1,8 +1,10 @@
 
		
	
		
			
				import  ' package:easy_localization/easy_localization.dart ' ;  
		
	
		
			
				import  ' package:flutter/material.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/app_state.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/cache_consts.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/dependencies.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/utils/date_util.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/utils/doctor_response_mapper.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/utils/loading_utils.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/utils/size_utils.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/core/utils/utils.dart ' ;  
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -13,6 +15,8 @@ import 'package:hmg_patient_app_new/features/book_appointments/models/resp_model
 
		
	
		
			
				import  ' package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/features/book_appointments/models/timeslots.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/generated/locale_keys.g.dart ' ;  
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
			
			@ -21,6 +25,7 @@ import 'package:hmg_patient_app_new/services/error_handler_service.dart';
 
		
	
		
			
				import  ' package:hmg_patient_app_new/services/navigation_service.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/widgets/common_bottom_sheet.dart ' ;  
		
	
		
			
				import  ' package:hmg_patient_app_new/widgets/transitions/fade_page.dart ' ;  
		
	
		
			
				import  ' package:location/location.dart '  show  Location ;  
		
	
		
			
				
 
		
	
		
			
				class  BookAppointmentsViewModel  extends  ChangeNotifier  {  
		
	
		
			
				  int  selectedTabIndex  =  0 ; 
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -60,6 +65,10 @@ class BookAppointmentsViewModel extends ChangeNotifier {
 
		
	
		
			
				  MyAppointmentsViewModel  myAppointmentsViewModel ; 
 
		
	
		
			
				
 
		
	
		
			
				  late  AppState  _appState ; 
 
		
	
		
			
				  RegionList ?  hospitalList ; 
 
		
	
		
			
				  RegionList ?  filteredHospitalList ; 
 
		
	
		
			
				  FacilitySelection  currentlySelectedFacility  =  FacilitySelection . ALL ; 
 
		
	
		
			
				  bool  isRegionListLoading  =  false ; 
 
		
	
		
			
				
 
		
	
		
			
				  BookAppointmentsViewModel ( { required  this . bookAppointmentsRepo ,  required  this . errorHandlerService ,  required  this . navigationService ,  required  this . myAppointmentsViewModel } ) ; 
 
		
	
		
			
				
 
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
			
			@ -380,4 +389,84 @@ class BookAppointmentsViewModel extends ChangeNotifier {
 
		
	
		
			
				      } , 
 
		
	
		
			
				    ) ; 
 
		
	
		
			
				  } 
 
		
	
		
			
				
 
		
	
		
			
				  Future < void >  getRegionMappedProjectList ( )  async  { 
 
		
	
		
			
				    if ( hospitalList  ! =  null  & &  hospitalList ! . registeredDoctorMap  ! =  null  & &  hospitalList ! . registeredDoctorMap ! . isNotEmpty ) { 
 
		
	
		
			
				      filteredHospitalList  =  hospitalList ; 
 
		
	
		
			
				      return ; 
 
		
	
		
			
				    } 
 
		
	
		
			
				    isRegionListLoading  =  true ; 
 
		
	
		
			
				    notifyListeners ( ) ; 
 
		
	
		
			
				    final  result  =  await  bookAppointmentsRepo . getProjectList ( ) ; 
 
		
	
		
			
				
 
		
	
		
			
				    result . fold ( 
 
		
	
		
			
				          ( failure )  async  = > 
 
		
	
		
			
				      await  errorHandlerService . handleError ( failure:  failure ) , 
 
		
	
		
			
				          ( apiResponse )  async  { 
 
		
	
		
			
				        if  ( apiResponse . messageStatus  = =  2 )  { 
 
		
	
		
			
				          / /  dialogService . showErrorDialog ( message:  apiResponse . errorMessage ! ,  onOkPressed:  ( )  { } ) ; 
 
		
	
		
			
				        }  else  if  ( apiResponse . messageStatus  = =  1 )  { 
 
		
	
		
			
				          var  projectList  =  apiResponse . data ! ; 
 
		
	
		
			
				          hospitalList  =  await  DoctorMapper . getMappedHospitals ( projectList , 
 
		
	
		
			
				              isArabic:  false ) ; 
 
		
	
		
			
				          var  lat  =  await  Utils . getNumFromPrefs ( CacheConst . userLat ) ; 
 
		
	
		
			
				
 
		
	
		
			
				          var  lng  =  await  Utils . getNumFromPrefs ( CacheConst . userLong ) ; 
 
		
	
		
			
				          var  isLocationEnabled  =  ( lat  ! =  0 )  & &  ( lng  ! =  0 ) ; 
 
		
	
		
			
				          hospitalList  = 
 
		
	
		
			
				          await  DoctorMapper . sortList ( isLocationEnabled ,  hospitalList ! ) ; 
 
		
	
		
			
				
 
		
	
		
			
				          isRegionListLoading  =  false ; 
 
		
	
		
			
				          filteredHospitalList  =  hospitalList ; 
 
		
	
		
			
				          notifyListeners ( ) ; 
 
		
	
		
			
				        } 
 
		
	
		
			
				      } , 
 
		
	
		
			
				    ) ; 
 
		
	
		
			
				  } 
 
		
	
		
			
				
 
		
	
		
			
				  void  setSelectedFacility ( FacilitySelection  selection )  { 
 
		
	
		
			
				    currentlySelectedFacility  =  selection ; 
 
		
	
		
			
				    notifyListeners ( ) ; 
 
		
	
		
			
				  } 
 
		
	
		
			
				
 
		
	
		
			
				  void  filterHospitalListByString ( String ?  value ,  String ?  selectedRegionId ,  bool  isHMG )  { 
 
		
	
		
			
				    if ( value  = = null  | |  value . isEmpty ) { 
 
		
	
		
			
				      filteredHospitalList  =  hospitalList ; 
 
		
	
		
			
				    }  else  { 
 
		
	
		
			
				      filteredHospitalList  =  RegionList ( ) ; 
 
		
	
		
			
				
 
		
	
		
			
				      var  list  =  isHMG 
 
		
	
		
			
				          ?  hospitalList ? . registeredDoctorMap ! [ selectedRegionId ] ! . hmgDoctorList 
 
		
	
		
			
				          :  hospitalList ? . registeredDoctorMap ! [ selectedRegionId ] ! . hmcDoctorList ; 
 
		
	
		
			
				
 
		
	
		
			
				      if ( list  ! =  null  & &  list . isEmpty ) {  notifyListeners ( ) ;  return ; } 
 
		
	
		
			
				
 
		
	
		
			
				      var  filteredList  =  list ! . where ( ( element )  = > 
 
		
	
		
			
				          element . filterName ! . toLowerCase ( ) . contains ( value . toLowerCase ( ) ) 
 
		
	
		
			
				      ) . toList ( ) ; 
 
		
	
		
			
				      var  regionData  =  PatientDoctorAppointmentListByRegion ( ) ; 
 
		
	
		
			
				      if ( isHMG ) { 
 
		
	
		
			
				        regionData . hmgDoctorList  =  filteredList ; 
 
		
	
		
			
				        regionData . hmgSize  =  filteredList . length ; 
 
		
	
		
			
				      }  else  { 
 
		
	
		
			
				        regionData . hmcDoctorList  =  filteredList ; 
 
		
	
		
			
				        regionData . hmcSize  =  filteredList . length ; 
 
		
	
		
			
				      } 
 
		
	
		
			
				
 
		
	
		
			
				      filteredHospitalList ? . registeredDoctorMap  =  { 
 
		
	
		
			
				        selectedRegionId !  :  regionData 
 
		
	
		
			
				      } ; 
 
		
	
		
			
				    } 
 
		
	
		
			
				    notifyListeners ( ) ; 
 
		
	
		
			
				  } 
 
		
	
		
			
				
 
		
	
		
			
				  Future < bool >  isLocationEnabled ( )  async { 
 
		
	
		
			
				    return  await  Location ( ) . serviceEnabled ( ) ; 
 
		
	
		
			
				  } 
 
		
	
		
			
				
 
		
	
		
			
				  bool  getLocationStatus ( )  { 
 
		
	
		
			
				    bool  isLocationAvaiable  =   false ; 
 
		
	
		
			
				    isLocationEnabled ( ) . then ( ( value )  = >  isLocationAvaiable  =  value ) ; 
 
		
	
		
			
				    return  isLocationAvaiable ; 
 
		
	
		
			
				  } 
 
		
	
		
			
				}