added feedback
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
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/feedback_data/feedback_data.dart';
|
||||
import 'package:tm_app/data/services/model/feedback_response/feedback_response.dart';
|
||||
import 'package:tm_app/data/services/model/tenders/tenders_response/tenders_response.dart';
|
||||
|
||||
import '../core/utils/result.dart';
|
||||
@@ -18,13 +19,31 @@ class TendersViewModel with ChangeNotifier {
|
||||
bool _isLoading = false;
|
||||
String? _errorMessage;
|
||||
TendersResponse? _tendersResponse;
|
||||
FeedbackData? _feedbackData;
|
||||
|
||||
bool get isLoading => _isLoading;
|
||||
String? get errorMessage => _errorMessage;
|
||||
TendersResponse? get tendersResponse => _tendersResponse;
|
||||
FeedbackData? get feedbackData => _feedbackData;
|
||||
|
||||
List<FeedbackData> feedbacks = [];
|
||||
|
||||
int currentPage = 1;
|
||||
|
||||
/// Get feedback for a specific tender
|
||||
FeedbackData? getFeedbackForTender(String tenderId) {
|
||||
try {
|
||||
return feedbacks.firstWhere((f) => f.tender == tenderId);
|
||||
} on Exception {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if feedback exists for a specific tender
|
||||
bool hasFeedbackForTender(String tenderId) {
|
||||
return feedbacks.any((f) => f.tender == tenderId);
|
||||
}
|
||||
|
||||
Future<void> getTenders() async {
|
||||
_isLoading = true;
|
||||
_errorMessage = null;
|
||||
@@ -34,6 +53,7 @@ class TendersViewModel with ChangeNotifier {
|
||||
switch (result) {
|
||||
case Ok<TendersResponse>():
|
||||
_tendersResponse = result.value;
|
||||
getTenderFeedback(_tendersResponse!.data!.tenders!.first.id!);
|
||||
break;
|
||||
case Error<TendersResponse>():
|
||||
_errorMessage = result.error.toString();
|
||||
@@ -45,166 +65,64 @@ class TendersViewModel with ChangeNotifier {
|
||||
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();
|
||||
Future<void> getTenderFeedback(String tenderId) async {
|
||||
// _isLoading = true;
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
// _tendersResponse = _tendersResponse!.copyWith(
|
||||
// tendersData: _tendersResponse!.tendersData!.copyWith(
|
||||
// tenders: updatedTenders,
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
final result = await _tendersRepository.getTenderFeedback(
|
||||
tenderId: tenderId,
|
||||
);
|
||||
switch (result) {
|
||||
case Ok<FeedbackResponse>():
|
||||
_feedbackData = result.value.data;
|
||||
// Add or update _feedbackData in feedbacks list by tender id
|
||||
_addOrUpdateFunction(_feedbackData!);
|
||||
break;
|
||||
case Error<FeedbackResponse>():
|
||||
_errorMessage = result.error.toString();
|
||||
break;
|
||||
}
|
||||
// _isLoading = false;
|
||||
notifyListeners();
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Sets a tender as liked
|
||||
Future<void> 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<TenderLikeResponse>():
|
||||
// break;
|
||||
// case Error<TenderLikeResponse>():
|
||||
// break;
|
||||
// }
|
||||
Future<void> feedback({
|
||||
required String tenderId,
|
||||
required String feedbackType,
|
||||
}) async {
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
final result = await _tendersRepository.feedback(
|
||||
tenderId: tenderId,
|
||||
feedbackType: feedbackType,
|
||||
);
|
||||
switch (result) {
|
||||
case Ok<FeedbackResponse>():
|
||||
_feedbackData = result.value.data;
|
||||
if (_feedbackData != null) {
|
||||
_addOrUpdateFunction(_feedbackData!);
|
||||
}
|
||||
|
||||
break;
|
||||
case Error<FeedbackResponse>():
|
||||
_errorMessage = result.error.toString();
|
||||
break;
|
||||
}
|
||||
notifyListeners();
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Sets a tender as disliked
|
||||
Future<void> 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<TenderDislikeResponse>():
|
||||
// break;
|
||||
// case Error<TenderDislikeResponse>():
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
/// Sets a tender as rejected
|
||||
Future<void> 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<TenderRejectResponse>():
|
||||
// break;
|
||||
// case Error<TenderRejectResponse>():
|
||||
// break;
|
||||
// }
|
||||
}
|
||||
|
||||
/// Sets a tender as submitted
|
||||
Future<void> 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<TenderSubmitResponse>():
|
||||
// break;
|
||||
// case Error<TenderSubmitResponse>():
|
||||
// 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();
|
||||
void _addOrUpdateFunction(FeedbackData feedbackData) {
|
||||
final index = feedbacks.indexWhere((f) => f.tender == feedbackData.tender);
|
||||
if (index != -1) {
|
||||
feedbacks[index] = feedbackData;
|
||||
} else {
|
||||
feedbacks.add(feedbackData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user