changed pagination to selectPage in t d yourTenders

This commit is contained in:
llsajjad
2025-09-13 16:33:05 +03:30
parent 6ae6f38137
commit c7fc74a153
7 changed files with 321 additions and 85 deletions
+68 -38
View File
@@ -19,6 +19,7 @@ class YourTendersViewModel with ChangeNotifier {
String? errorMessage;
TenderApprovalsResponse? data;
LikedTendersResponse? likedTendersData;
// Pagination state for feedback lists
bool isLoadingMore = false;
bool hasMore = true;
@@ -31,6 +32,7 @@ class YourTendersViewModel with ChangeNotifier {
bool hasMoreTenders = true;
int _tendersOffset = 0;
final int _tendersLimit = 10;
// Filter States
DateTimeRange? selectedDateRange;
String selectedStatus = 'All';
@@ -118,11 +120,12 @@ class YourTendersViewModel with ChangeNotifier {
required String feedbackType,
bool reset = false,
}) async {
if (reset) {
_offset = 0;
hasMore = true;
_currentFeedbackType = feedbackType;
}
if (reset) {
_offset = (currentPage - 1) * _limit;
hasMore = true;
_currentFeedbackType = feedbackType;
}
if (!reset && (isLoadingMore || !hasMore)) {
return;
@@ -258,39 +261,66 @@ class YourTendersViewModel with ChangeNotifier {
notifyListeners();
}
Future<void> callWithFilter() async {
// Clear data before applying filter
_clearAllData();
Future<void> callWithFilter() async {
likedTendersData = null;
data = null;
isLoading = true;
notifyListeners();
// Make fresh request based on selected status
if (selectedStatus == YourTendersStrings.all) {
final requestModel = GetTendersRequestModel(
status: '',
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: 0,
);
await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
final requestModel = GetTendersRequestModel(
status: TenderApprovalStatus.submitted.value,
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: 0,
);
await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.likeTenders) {
await getTendersFeedback(
feedbackType: TenderFeedback.liked.value,
reset: true,
);
} else if (selectedStatus == YourTendersStrings.dislikeTenders) {
await getTendersFeedback(
feedbackType: TenderFeedback.disliked.value,
reset: true,
);
}
if (selectedStatus == YourTendersStrings.all) {
final requestModel = GetTendersRequestModel(
status: '',
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: _tendersOffset,
);
await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
final requestModel = GetTendersRequestModel(
status: TenderApprovalStatus.submitted.value,
createdFrom: startDateUnix,
createdTo: endDateUnix,
limit: _tendersLimit,
offset: _tendersOffset,
);
await getTenders(requestModel: requestModel, reset: true);
} else if (selectedStatus == YourTendersStrings.likeTenders) {
await getTendersFeedback(
feedbackType: TenderFeedback.liked.value,
reset: true,
);
} else if (selectedStatus == YourTendersStrings.dislikeTenders) {
await getTendersFeedback(
feedbackType: TenderFeedback.disliked.value,
reset: true,
);
}
}
int currentPage = 1;
int get totalPages {
if (likedTendersData?.data?.meta?.pages != null) {
return likedTendersData!.data!.meta!.pages!;
}
if (data?.data?.metadata?.pages != null) {
return data!.data!.metadata!.pages!;
}
return 1;
}
Future<void> jumpToPage(int page) async {
currentPage = page;
_offset = (page - 1) * _limit;
_tendersOffset = (page - 1) * _tendersLimit;
likedTendersData = null;
data = null;
hasMore = true;
hasMoreTenders = true;
await callWithFilter();
}
}