import 'package:flutter/material.dart'; import 'package:tm_app/data/repositories/tenders_repository.dart'; import 'package:tm_app/data/services/model/tender/tender_model.dart'; import 'package:tm_app/data/services/model/tenders/tenders_response/tenders_response.dart'; import '../core/utils/result.dart'; class TendersViewModel with ChangeNotifier { final TendersRepository _tendersRepository; TendersViewModel({required TendersRepository tendersRepository}) : _tendersRepository = tendersRepository { WidgetsBinding.instance.addPostFrameCallback((_) { getTenders(); }); } bool _isLoading = false; String? _errorMessage; TendersResponse? _tendersResponse; bool get isLoading => _isLoading; String? get errorMessage => _errorMessage; TendersResponse? get tendersResponse => _tendersResponse; int currentPage = 1; Future getTenders() async { _isLoading = true; _errorMessage = null; notifyListeners(); final result = await _tendersRepository.getTenders(); switch (result) { case Ok(): _tendersResponse = result.value; break; case Error(): _errorMessage = result.error.toString(); break; } _isLoading = false; notifyListeners(); _errorMessage = null; notifyListeners(); } /// Updates a tender's state in the list void _updateTenderState( String tenderId, { bool? liked, bool? disliked, bool? rejected, bool? submitted, }) { // if (_tendersResponse?.tendersData?.tenders != null) { // final updatedTenders = // _tendersResponse!.tendersData!.tenders!.map((element) { // if (element.tenderId == tenderId) { // return element.copyWith( // liked: liked, // disliked: disliked, // rejected: rejected, // submitted: submitted, // ); // } // return element; // }).toList(); // _tendersResponse = _tendersResponse!.copyWith( // tendersData: _tendersResponse!.tendersData!.copyWith( // tenders: updatedTenders, // ), // ); // } } /// Sets a tender as liked Future markLiked(TenderModel tender) async { // _updateTenderState( // tender.id!, // liked: true, // disliked: false, // rejected: false, // submitted: tender.submitted, // ); // notifyListeners(); // final result = await _tendersRepository.likeTender(); // switch (result) { // case Ok(): // break; // case Error(): // break; // } } /// Sets a tender as disliked Future markDisliked(TenderModel tender) async { // _updateTenderState( // tender.tenderId!, // disliked: true, // liked: false, // rejected: tender.rejected, // submitted: false, // ); // notifyListeners(); // final result = await _tendersRepository.dislikeTender(); // switch (result) { // case Ok(): // break; // case Error(): // break; // } } /// Sets a tender as rejected Future markRejected(TenderModel tender) async { // _updateTenderState( // tender.tenderId!, // rejected: true, // liked: false, // disliked: tender.disliked, // submitted: false, // ); // notifyListeners(); // final result = await _tendersRepository.rejectTender(); // switch (result) { // case Ok(): // break; // case Error(): // break; // } } /// Sets a tender as submitted Future markSubmitted(TenderModel tender) async { // _updateTenderState( // tender.tenderId!, // submitted: true, // liked: tender.liked, // disliked: false, // rejected: false, // ); // notifyListeners(); // final result = await _tendersRepository.submitTender(); // switch (result) { // case Ok(): // break; // case Error(): // break; // } } /// Clears a specific state for a tender void clearTenderState( TenderModel tenderModel, { bool? isLiked, bool? isDisliked, bool? isRejected, bool? isSubmitted, }) { // _updateTenderState( // tenderModel.tenderId!, // liked: isLiked ?? tenderModel.liked, // disliked: isDisliked ?? tenderModel.disliked, // rejected: isRejected ?? tenderModel.rejected, // submitted: isSubmitted ?? tenderModel.submitted, // ); } /// Toggles like state for a tender void toggleLike(TenderModel tender) { // if (tender.liked == true) { // clearTenderState(tender, isLiked: false); // } else { // markLiked(tender); // } // notifyListeners(); } /// Toggles dislike state for a tender void toggleDislike(TenderModel tender) { // if (tender.disliked == true) { // clearTenderState(tender, isDisliked: false); // } else { // markDisliked(tender); // } // notifyListeners(); } /// Toggles reject state for a tender void toggleReject(TenderModel tender) { // if (tender.rejected == true) { // clearTenderState(tender, isRejected: false); // } else { // markRejected(tender); // } // notifyListeners(); } /// Toggles submit state for a tender void toggleSubmit(TenderModel tender) { // if (tender.submitted == true) { // clearTenderState(tender, isSubmitted: false); // } else { // markSubmitted(tender); // } // notifyListeners(); } }