import 'package:flutter/material.dart'; import 'package:qadirneyriz/models/meetings/meetings_model.dart'; import 'package:qadirneyriz/services/meetings/meetings.dart'; import 'package:qadirneyriz/utils/enums/status.dart'; class MeetingsState extends ChangeNotifier { // api meetings MeetingsApi meetingsApi = MeetingsApi(); // meetings list Status statusMeetings = Status.loading; Status paginationMeetings = Status.ready; MeetingsModel? meetingsModel; int pageMeetings = 1; int limitMeetings = 10; bool pageEndedMeetings = false; Future getMeetings( {bool refresh = false, String? fromDate, String? toDate, int? location, int? subject, int? meetingManager, int? meetingStatus}) async { if (refresh) { statusMeetings = Status.loading; notifyListeners(); } if (meetingsModel != null && meetingsModel!.data!.isNotEmpty && !refresh) { statusMeetings = Status.ready; notifyListeners(); pageMeetings = 1; pageEndedMeetings = false; paginationMeetings = Status.ready; meetingsModel = await meetingsApi.getMeetings( page: pageMeetings, count: limitMeetings, fromDate: fromDate, toDate: toDate, location: location, subject: subject, meetingManager: meetingManager, status: meetingStatus); } else { pageMeetings = 1; pageEndedMeetings = false; paginationMeetings = Status.ready; try { statusMeetings = Status.loading; notifyListeners(); meetingsModel = await meetingsApi.getMeetings( page: pageMeetings, count: limitMeetings, fromDate: fromDate, toDate: toDate, location: location, subject: subject, meetingManager: meetingManager, status: meetingStatus); if (meetingsModel != null && meetingsModel!.data!.isNotEmpty) { if (meetingsModel!.data!.isNotEmpty) { statusMeetings = Status.ready; } else if (!meetingsModel!.hasData() && meetingsModel == null) { statusMeetings = Status.empty; } else if (meetingsModel!.data!.length < limitMeetings) { pageEndedMeetings = true; statusMeetings = Status.empty; } } else { statusMeetings = Status.empty; } } catch (e) { statusMeetings = Status.error; } notifyListeners(); } notifyListeners(); print(statusMeetings); return statusMeetings; } Future nextPageMeetings( {String? fromDate, String? toDate, int? location, int? subject, int? meetingManager, int? meetingStatus}) async { if (pageEndedMeetings == false && paginationMeetings == Status.ready) { paginationMeetings = Status.loading; notifyListeners(); int p = pageMeetings; pageMeetings = p + 1; try { final adsPaginationModel = await meetingsApi.getMeetings( page: pageMeetings, count: limitMeetings, fromDate: fromDate, toDate: toDate, location: location, subject: subject, meetingManager: meetingManager, status: meetingStatus); if (adsPaginationModel.hasData()) { meetingsModel!.data!.addAll(adsPaginationModel.data!); if (adsPaginationModel.data!.length < limitMeetings) { pageEndedMeetings = true; paginationMeetings = Status.empty; } else { paginationMeetings = Status.ready; } } else if (!adsPaginationModel.hasData()) { pageEndedMeetings = true; paginationMeetings = Status.empty; } } catch (e) { pageEndedMeetings = true; paginationMeetings = Status.empty; } notifyListeners(); } } // set date for filters String fromDate = ''; String toDate = ''; void setFromDates(String? newFromDate) { fromDate = newFromDate ?? ''; notifyListeners(); } void setToDates(String? newToDate) { toDate = newToDate ?? ''; notifyListeners(); } // clear filters void clearFilters() { selectedLocationId = null; selectedManagersId = null; selectedStatusId = null; selectedSubjectId = null; fromDate = ''; toDate = ''; notifyListeners(); } // is filter Not empty bool hasActiveFilters() { return selectedLocationId != null || selectedManagersId != null || selectedStatusId != null || selectedSubjectId != null || fromDate.isNotEmpty || toDate.isNotEmpty; } // get filters location meetings int? selectedLocationId; void selectLocation(int? locationId) { selectedLocationId = locationId; notifyListeners(); } // get filters subjects meetings int? selectedSubjectId; void selectSubject(int? subjectId) { selectedSubjectId = subjectId; notifyListeners(); } // get filters meeting managers int? selectedManagersId; void selectManager(int? managerId) { selectedManagersId = managerId; notifyListeners(); } // all meeting status filters int? selectedStatusId; void selectStatusMeeting(int? statusId) { selectedStatusId = statusId; notifyListeners(); } // cancel meeting Status statusCancelMeeting = Status.empty; String? messageCancelMeeting; Map? errorsCancelMeeting; Future cancelMeeting({ required int id, }) async { statusCancelMeeting = Status.loading; notifyListeners(); try { final result = await meetingsApi.cancelMeetingApi( id: id, ); if (result.isOk) { statusCancelMeeting = Status.ready; messageCancelMeeting = result.message; } else if (result.isOk == false) { print(result.isOk); errorsCancelMeeting = result.errors; messageCancelMeeting = result.message; statusCancelMeeting = Status.error; } else { statusCancelMeeting = Status.error; } notifyListeners(); } catch (e) { statusCancelMeeting = Status.error; print(e); } notifyListeners(); print(statusCancelMeeting); return statusCancelMeeting; } // accept meeting Status statusAcceptMeeting = Status.empty; String? messageAcceptMeeting; Map? errorsAcceptMeeting; Future acceptMeeting({ required int id, }) async { statusAcceptMeeting = Status.loading; notifyListeners(); try { final result = await meetingsApi.acceptMeetingApi( id: id, ); if (result.isOk) { statusAcceptMeeting = Status.ready; messageAcceptMeeting = result.message; } else if (result.isOk == false) { print(result.isOk); errorsAcceptMeeting = result.errors; messageAcceptMeeting = result.message; statusAcceptMeeting = Status.error; } else { statusAcceptMeeting = Status.error; } notifyListeners(); } catch (e) { statusAcceptMeeting = Status.error; print(e); } notifyListeners(); print(statusAcceptMeeting); return statusAcceptMeeting; } }