You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Dart
		
	
| 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();
 | |
|   }
 | |
| }
 |