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 patientLabOrders = []; List filteredLabOrders = []; List tempLabOrdersList = []; late List _labSuggestionsList = []; List get labSuggestions => _labSuggestionsList; Set uniqueTests = {}; LabViewModel({required this.labRepo, required this.errorHandlerService}); initLabProvider() { patientLabOrders.clear(); filteredLabOrders.clear(); isLabOrdersLoading = true; isLabResultsLoading = true; getPatientLabOrders(); notifyListeners(); } Future 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(); getUniqueTestDescription(); notifyListeners(); if (onSuccess != null) { onSuccess(apiResponse); } } }, ); } filterSuggestions() { final List labels = patientLabOrders .expand((order) => order.testDetails!) .map((detail) => detail.description) .whereType() .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(); } getUniqueTestDescription() { uniqueTests = { for (var item in patientLabOrders) if (item.testDetails != null) ...?item.testDetails?.map((test) => TestDetails(description: test.description.toString(), testCode: test.testCode.toString(), testID: test.testID, createdOn: item.createdOn)) }; uniqueTests.forEach(print); } }