|  |  |  | import 'package:flutter/material.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/lab/lab_repo.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/services/error_handler_service.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LabViewModel extends ChangeNotifier { | 
					
						
							|  |  |  |   bool isLabOrdersLoading = false; | 
					
						
							|  |  |  |   bool isLabResultsLoading = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LabRepo labRepo; | 
					
						
							|  |  |  |   ErrorHandlerService errorHandlerService; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   List<PatientLabOrdersResponseModel> patientLabOrders = []; | 
					
						
							|  |  |  |   List<PatientLabOrdersResponseModel> filteredLabOrders = []; | 
					
						
							|  |  |  |   List<PatientLabOrdersResponseModel> tempLabOrdersList = []; | 
					
						
							|  |  |  |   late List<String> _labSuggestionsList = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   List<String> get labSuggestions => _labSuggestionsList; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LabViewModel({required this.labRepo, required this.errorHandlerService}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   initLabProvider() { | 
					
						
							|  |  |  |     patientLabOrders.clear(); | 
					
						
							|  |  |  |     filteredLabOrders.clear(); | 
					
						
							|  |  |  |     isLabOrdersLoading = true; | 
					
						
							|  |  |  |     isLabResultsLoading = true; | 
					
						
							|  |  |  |     getPatientLabOrders(); | 
					
						
							|  |  |  |     notifyListeners(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Future<void> getPatientLabOrders({Function(dynamic)? onSuccess, Function(String)? onError}) async { | 
					
						
							|  |  |  |     final result = await labRepo.getPatientLabOrders(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     result.fold( | 
					
						
							|  |  |  |       (failure) async => await errorHandlerService.handleError(failure: failure), | 
					
						
							|  |  |  |       (apiResponse) { | 
					
						
							|  |  |  |         if (apiResponse.messageStatus == 2) { | 
					
						
							|  |  |  |           // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
 | 
					
						
							|  |  |  |         } else if (apiResponse.messageStatus == 1) { | 
					
						
							|  |  |  |           patientLabOrders = apiResponse.data!; | 
					
						
							|  |  |  |           filteredLabOrders = List.from(patientLabOrders); | 
					
						
							|  |  |  |           tempLabOrdersList = apiResponse.data!; | 
					
						
							|  |  |  |           isLabOrdersLoading = false; | 
					
						
							|  |  |  |           isLabResultsLoading = false; | 
					
						
							|  |  |  |           filterSuggestions(); | 
					
						
							|  |  |  |           notifyListeners(); | 
					
						
							|  |  |  |           if (onSuccess != null) { | 
					
						
							|  |  |  |             onSuccess(apiResponse); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   filterSuggestions() { | 
					
						
							|  |  |  |     final List<String> labels = patientLabOrders | 
					
						
							|  |  |  |         .expand((order) => order.testDetails!) | 
					
						
							|  |  |  |         .map((detail) => detail.description) | 
					
						
							|  |  |  |         .whereType<String>() | 
					
						
							|  |  |  |         .toList(); | 
					
						
							|  |  |  |     _labSuggestionsList = labels.toSet().toList(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     notifyListeners(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   filterLabReports(String query) { | 
					
						
							|  |  |  |     if (query.isEmpty) { | 
					
						
							|  |  |  |       filteredLabOrders = List.from(patientLabOrders); // reset
 | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       filteredLabOrders = patientLabOrders.where((order) { | 
					
						
							|  |  |  |         final descriptions = order.testDetails?.map((d) => d.description?.toLowerCase()).toList() ?? []; | 
					
						
							|  |  |  |         return descriptions.any((desc) => desc != null && desc.contains(query.toLowerCase())); | 
					
						
							|  |  |  |       }).toList(); | 
					
						
							|  |  |  |       patientLabOrders = filteredLabOrders; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     notifyListeners(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |