feedback response model changes
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:tm_app/core/utils/device_utils.dart';
|
||||
import 'package:tm_app/core/utils/logger.dart';
|
||||
import 'package:tm_app/data/repositories/tenders_repository.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';
|
||||
@@ -134,7 +133,7 @@ class TendersViewModel with ChangeNotifier {
|
||||
/// Get feedback for a specific tender
|
||||
FeedbackData? getFeedbackForTender(String tenderId) {
|
||||
try {
|
||||
return feedbacks.firstWhere((f) => f.tender == tenderId);
|
||||
return feedbacks.firstWhere((f) => f.tenderId == tenderId);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
@@ -142,7 +141,7 @@ class TendersViewModel with ChangeNotifier {
|
||||
|
||||
/// Check if feedback exists for a specific tender
|
||||
bool hasFeedbackForTender(String tenderId) {
|
||||
return feedbacks.any((f) => f.tender == tenderId);
|
||||
return feedbacks.any((f) => f.tenderId == tenderId);
|
||||
}
|
||||
|
||||
Future<void> getTenders({
|
||||
@@ -319,16 +318,20 @@ class TendersViewModel with ChangeNotifier {
|
||||
// Add or update _feedbackData in feedbacks list by tender id
|
||||
if (_feedbackData != null) {
|
||||
final index = feedbacks.indexWhere(
|
||||
(f) => f.tender == _feedbackData!.tender,
|
||||
(f) => f.tenderId == _feedbackData!.tenderId,
|
||||
);
|
||||
if (index != -1) {
|
||||
feedbacks[index] = _feedbackData!;
|
||||
log('Updated feedback for tender: ${_feedbackData!.tender}');
|
||||
AppLogger().info(
|
||||
'Updated feedback for tender: ${_feedbackData!.tenderId}',
|
||||
);
|
||||
} else {
|
||||
feedbacks.add(_feedbackData!);
|
||||
log('Added new feedback for tender: ${_feedbackData!.tender}');
|
||||
AppLogger().info(
|
||||
'Added new feedback for tender: ${_feedbackData!.tenderId}',
|
||||
);
|
||||
}
|
||||
log('Total feedbacks: ${feedbacks.length}');
|
||||
AppLogger().info('Total feedbacks: ${feedbacks.length}');
|
||||
}
|
||||
break;
|
||||
case Error<FeedbackResponse>():
|
||||
@@ -350,7 +353,7 @@ class TendersViewModel with ChangeNotifier {
|
||||
// Get current feedback for this tender
|
||||
final existingFeedback = getFeedbackForTender(tenderId);
|
||||
final existingFeedbackIndex = feedbacks.indexWhere(
|
||||
(f) => f.tender == tenderId,
|
||||
(f) => f.tenderId == tenderId,
|
||||
);
|
||||
|
||||
// Create optimistic feedback data
|
||||
@@ -364,7 +367,8 @@ class TendersViewModel with ChangeNotifier {
|
||||
customerId: null, // Will be filled by server
|
||||
feedbackType: feedbackType,
|
||||
id: null, // Will be filled by server
|
||||
tender: tenderId,
|
||||
tenderId: tenderId,
|
||||
tender: null,
|
||||
updatedAt: DateTime.now().millisecondsSinceEpoch,
|
||||
);
|
||||
feedbacks.add(optimisticFeedback);
|
||||
@@ -412,18 +416,18 @@ class TendersViewModel with ChangeNotifier {
|
||||
}
|
||||
} else {
|
||||
// Server returned null data - remove feedback
|
||||
feedbacks.removeWhere((f) => f.tender == tenderId);
|
||||
feedbacks.removeWhere((f) => f.tenderId == tenderId);
|
||||
}
|
||||
break;
|
||||
case Error<FeedbackResponse>():
|
||||
// Revert optimistic update on error
|
||||
if (existingFeedback == null) {
|
||||
// Remove the optimistic feedback we added
|
||||
feedbacks.removeWhere((f) => f.tender == tenderId);
|
||||
feedbacks.removeWhere((f) => f.tenderId == tenderId);
|
||||
} else {
|
||||
// Restore the original feedback - find current index and update, or add if not found
|
||||
final currentIndex = feedbacks.indexWhere(
|
||||
(f) => f.tender == tenderId,
|
||||
(f) => f.tenderId == tenderId,
|
||||
);
|
||||
if (currentIndex != -1) {
|
||||
feedbacks[currentIndex] = existingFeedback;
|
||||
|
||||
Reference in New Issue
Block a user