fixed your tenders filters and service and home your tneders use your tenders service

This commit is contained in:
amirrezaghabeli
2025-09-08 09:53:21 +03:30
parent 326f2deeec
commit 9a1ec0b34e
23 changed files with 180 additions and 1279 deletions
+7 -4
View File
@@ -9,6 +9,7 @@ import 'package:tm_app/data/services/model/tender_data/tender_data.dart';
import '../data/repositories/home_repository.dart';
import '../data/services/model/feedback_stats_response/feedback_stat_response.dart';
import '../data/services/model/home/home_response/home_response_model.dart';
import '../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart';
class HomeViewModel with ChangeNotifier {
final HomeRepository _homeRepository;
@@ -51,7 +52,7 @@ class HomeViewModel with ChangeNotifier {
await getYourTenders(reset: true);
await getFeedbackStats();
if (_errorMessage != null || _errorMessage!.isNotEmpty) {
if (_errorMessage != null) {
_isLoading = false;
notifyListeners();
return;
@@ -118,11 +119,13 @@ class HomeViewModel with ChangeNotifier {
_isLoadingMore = true;
_isRecommendedMode = false;
notifyListeners();
final result = await _homeRepository.getYourTenders(
final requestModel = GetTendersRequestModel(
limit: _pageSize,
offset: _currentPage * _pageSize,
);
final result = await _homeRepository.getYourTenders(
requestModel: requestModel,
);
switch (result) {
case Ok<TenderApprovalsResponse>():
@@ -155,7 +158,7 @@ class HomeViewModel with ChangeNotifier {
}
Future<void> getApprovedStates() async {
final result = await _homeRepository.getTendersApprovalsState();
final result = await _homeRepository.getTendersApprovalsStats();
switch (result) {
case Ok<TenderApprovalsStateResponse>():
+61 -83
View File
@@ -6,6 +6,8 @@ import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart';
import '../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart';
class YourTendersViewModel with ChangeNotifier {
final YourTendersRepository yourTendersRepository;
YourTendersViewModel({required this.yourTendersRepository});
@@ -51,73 +53,8 @@ class YourTendersViewModel with ChangeNotifier {
? (selectedDateRange!.end.millisecondsSinceEpoch ~/ 1000).toString()
: '';
Future<void> getApprovedTenders({
required int limit,
required int offset,
bool reset = false,
}) async {
if (!reset && (isLoadingMoreTenders || !hasMoreTenders)) {
return;
}
if (reset) {
_tendersOffset = 0;
hasMoreTenders = true;
data = null;
}
if (_tendersOffset == 0) {
isLoading = true;
} else {
isLoadingMoreTenders = true;
}
notifyListeners();
final result = await yourTendersRepository.getApprovedTenders(
limit: _tendersLimit,
offset: _tendersOffset,
createdFrom: startDateUnix,
createdTo: endDateUnix,
);
switch (result) {
case Ok<TenderApprovalsResponse>():
final incoming = result.value;
final incomingList = incoming.data?.tenders ?? [];
if (reset || data == null) {
data = incoming;
} else {
final existingList = data!.data?.tenders ?? [];
final combined = List.of(existingList)..addAll(incomingList);
final newMetadata = incoming.data?.metadata ?? data!.data?.metadata;
data = data!.copyWith(
data: data!.data!.copyWith(
tenders: combined,
metadata: newMetadata,
),
);
}
hasMoreTenders = incomingList.length == _tendersLimit;
_tendersOffset += _tendersLimit;
errorMessage = null;
break;
case Error<TenderApprovalsResponse>():
errorMessage = result.error.toString();
break;
}
isLoading = false;
isLoadingMoreTenders = false;
notifyListeners();
}
Future<void> getTenders({
required int limit,
required int offset,
required String createdFrom,
required String createdTo,
required GetTendersRequestModel requestModel,
bool reset = false,
}) async {
if (!reset && (isLoadingMoreTenders || !hasMoreTenders)) {
@@ -138,10 +75,7 @@ class YourTendersViewModel with ChangeNotifier {
notifyListeners();
final result = await yourTendersRepository.getTenders(
limit: _tendersLimit,
offset: _tendersOffset,
createdFrom: createdFrom,
createdTo: createdTo,
requestModel: requestModel,
);
switch (result) {
@@ -252,19 +186,23 @@ class YourTendersViewModel with ChangeNotifier {
}
if (selectedStatus == YourTendersStrings.all) {
await getTenders(
limit: _tendersLimit,
offset: _tendersOffset,
final requestModel = GetTendersRequestModel(
status: '',
createdFrom: startDateUnix,
createdTo: endDateUnix,
reset: false,
);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
await getApprovedTenders(
limit: _tendersLimit,
offset: _tendersOffset,
reset: false,
);
await getTenders(requestModel: requestModel);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
final requestModel = GetTendersRequestModel(
status: 'submitted',
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: _tendersOffset,
);
await getTenders(requestModel: requestModel);
}
}
@@ -275,27 +213,67 @@ class YourTendersViewModel with ChangeNotifier {
}
void setStatus(String status) {
// Clear data when status changes
_clearAllData();
selectedStatus = status;
notifyListeners();
}
void clearFilter() {
// Clear data when clearing filter
_clearAllData();
selectedDateRange = null;
selectedStatus = YourTendersStrings.all;
notifyListeners();
}
// Clear all data and reset states
void _clearAllData() {
// Clear main data
data = null;
likedTendersData = null;
// Clear loading states
isLoading = false;
isLoadingMore = false;
isLoadingMoreTenders = false;
// Clear error messages
errorMessage = null;
// Reset pagination states
_offset = 0;
_tendersOffset = 0;
hasMore = true;
hasMoreTenders = true;
_currentFeedbackType = null;
notifyListeners();
}
Future<void> callWithFilter() async {
// Clear data before applying filter
_clearAllData();
// Make fresh request based on selected status
if (selectedStatus == YourTendersStrings.all) {
await getTenders(
limit: _tendersLimit,
offset: 0,
final requestModel = GetTendersRequestModel(
status: '',
createdFrom: startDateUnix,
createdTo: endDateUnix,
reset: true,
limit: _tendersLimit,
offset: 0,
);
await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
await getApprovedTenders(limit: _tendersLimit, offset: 0, reset: true);
final requestModel = GetTendersRequestModel(
status: 'submitted',
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: 0,
);
await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.likeTenders) {
await getTendersFeedback(feedbackType: 'like', reset: true);
} else if (selectedStatus == YourTendersStrings.dislikeTenders) {