fixed your tenders filters and service and home your tneders use your tenders service
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user