added pagination in your tenders and some fixes
This commit is contained in:
@@ -20,6 +20,12 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
int _offset = 0;
|
||||
final int _limit = 10;
|
||||
String? _currentFeedbackType;
|
||||
|
||||
// Pagination state for tenders
|
||||
bool isLoadingMoreTenders = false;
|
||||
bool hasMoreTenders = true;
|
||||
int _tendersOffset = 0;
|
||||
final int _tendersLimit = 10;
|
||||
// Filter States
|
||||
DateTimeRange? selectedDateRange;
|
||||
String selectedStatus = 'All';
|
||||
@@ -48,20 +54,53 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
Future<void> getApprovedTenders({
|
||||
required int limit,
|
||||
required int offset,
|
||||
bool reset = false,
|
||||
}) async {
|
||||
isLoading = true;
|
||||
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: limit,
|
||||
offset: offset,
|
||||
limit: _tendersLimit,
|
||||
offset: _tendersOffset,
|
||||
createdFrom: startDateUnix,
|
||||
createdTo: endDateUnix,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsResponse>():
|
||||
data = result.value;
|
||||
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>():
|
||||
@@ -70,6 +109,7 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
}
|
||||
|
||||
isLoading = false;
|
||||
isLoadingMoreTenders = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@@ -78,19 +118,53 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
required int offset,
|
||||
required String createdFrom,
|
||||
required String createdTo,
|
||||
bool reset = false,
|
||||
}) async {
|
||||
isLoading = true;
|
||||
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.getTenders(
|
||||
limit: limit,
|
||||
offset: offset,
|
||||
limit: _tendersLimit,
|
||||
offset: _tendersOffset,
|
||||
createdFrom: createdFrom,
|
||||
createdTo: createdTo,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsResponse>():
|
||||
data = result.value;
|
||||
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>():
|
||||
@@ -99,6 +173,7 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
}
|
||||
|
||||
isLoading = false;
|
||||
isLoadingMoreTenders = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@@ -171,6 +246,28 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
await getTendersFeedback(feedbackType: _currentFeedbackType!, reset: false);
|
||||
}
|
||||
|
||||
Future<void> loadMoreTenders() async {
|
||||
if (isLoadingMoreTenders || !hasMoreTenders) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selectedStatus == YourTendersStrings.all) {
|
||||
await getTenders(
|
||||
limit: _tendersLimit,
|
||||
offset: _tendersOffset,
|
||||
createdFrom: startDateUnix,
|
||||
createdTo: endDateUnix,
|
||||
reset: false,
|
||||
);
|
||||
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
|
||||
await getApprovedTenders(
|
||||
limit: _tendersLimit,
|
||||
offset: _tendersOffset,
|
||||
reset: false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// --- Filter Actions ---
|
||||
void setDateRange(DateTimeRange? range) {
|
||||
selectedDateRange = range;
|
||||
@@ -191,13 +288,14 @@ class YourTendersViewModel with ChangeNotifier {
|
||||
Future<void> callWithFilter() async {
|
||||
if (selectedStatus == YourTendersStrings.all) {
|
||||
await getTenders(
|
||||
limit: 10,
|
||||
limit: _tendersLimit,
|
||||
offset: 0,
|
||||
createdFrom: startDateUnix,
|
||||
createdTo: endDateUnix,
|
||||
reset: true,
|
||||
);
|
||||
} else if (selectedStatus == YourTendersStrings.tendersSubmitted) {
|
||||
await getApprovedTenders(limit: 10, offset: 0);
|
||||
await getApprovedTenders(limit: _tendersLimit, offset: 0, 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