changed pagination in liked tenders tanlet and web
This commit is contained in:
@@ -17,67 +17,75 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
LikedTendersResponse? data;
|
||||
|
||||
int _offset = 0;
|
||||
final int _limit = 20;
|
||||
final int _limit = 7;
|
||||
|
||||
Future<void> getLikedTenders({bool reset = false}) async {
|
||||
if (!reset && (isLoadingMore || !hasMore)) {
|
||||
return;
|
||||
}
|
||||
int currentPage = 1;
|
||||
|
||||
if (reset) {
|
||||
_offset = 0;
|
||||
hasMore = true;
|
||||
}
|
||||
Future<void> getLikedTenders({bool reset = false}) async {
|
||||
if (!reset && (isLoadingMore || !hasMore)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
_offset = (currentPage - 1) * _limit;
|
||||
hasMore = true;
|
||||
|
||||
data = null;
|
||||
isLoading = true;
|
||||
notifyListeners();
|
||||
} else {
|
||||
if (_offset == 0) {
|
||||
isLoading = true;
|
||||
} else {
|
||||
isLoadingMore = true;
|
||||
}
|
||||
errorMessage = null;
|
||||
notifyListeners();
|
||||
|
||||
final result = await likedTendersRepository.getLikedTenders(
|
||||
offset: _offset,
|
||||
limit: _limit,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<LikedTendersResponse>():
|
||||
final incoming = result.value;
|
||||
final incomingList = incoming.data?.feedback ?? [];
|
||||
|
||||
if (reset || data == null) {
|
||||
data = incoming;
|
||||
} else {
|
||||
final existingList = data!.data!.feedback ?? [];
|
||||
final combined = List<LikedTenderFeedback>.of(existingList)
|
||||
..addAll(incomingList);
|
||||
|
||||
final newMeta = incoming.data?.meta ?? data!.data!.meta;
|
||||
|
||||
data = data!.copyWith(
|
||||
data: data!.data!.copyWith(feedback: combined, meta: newMeta),
|
||||
);
|
||||
}
|
||||
|
||||
// چون offset بر اساس limit حرکت میکنه
|
||||
hasMore = incomingList.length == _limit;
|
||||
_offset += _limit;
|
||||
|
||||
errorMessage = null;
|
||||
break;
|
||||
|
||||
case Error<LikedTendersResponse>():
|
||||
errorMessage = result.error.toString();
|
||||
break;
|
||||
}
|
||||
|
||||
isLoading = false;
|
||||
isLoadingMore = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
errorMessage = null;
|
||||
|
||||
final result = await likedTendersRepository.getLikedTenders(
|
||||
offset: _offset,
|
||||
limit: _limit,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<LikedTendersResponse>():
|
||||
final incoming = result.value;
|
||||
final incomingList = incoming.data?.feedback ?? [];
|
||||
|
||||
if (reset) {
|
||||
data = incoming;
|
||||
} else {
|
||||
final existingList = data?.data?.feedback ?? [];
|
||||
final combined = List<LikedTenderFeedback>.of(existingList)
|
||||
..addAll(incomingList);
|
||||
|
||||
data = data?.copyWith(
|
||||
data: data?.data?.copyWith(
|
||||
feedback: combined,
|
||||
meta: incoming.data?.meta ?? data!.data!.meta,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
hasMore = incomingList.length == _limit;
|
||||
_offset += _limit;
|
||||
|
||||
errorMessage = null;
|
||||
break;
|
||||
|
||||
case Error<LikedTendersResponse>():
|
||||
errorMessage = result.error.toString();
|
||||
break;
|
||||
}
|
||||
|
||||
isLoading = false;
|
||||
isLoadingMore = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
|
||||
Future<void> loadMoreIfNeeded() async {
|
||||
if (isLoadingMore || !hasMore) {
|
||||
return;
|
||||
@@ -85,6 +93,13 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
await getLikedTenders(reset: false);
|
||||
}
|
||||
|
||||
Future<void> jumpToPage(int page) async {
|
||||
currentPage = page;
|
||||
_offset = (page - 1) * _limit;
|
||||
hasMore = true;
|
||||
await getLikedTenders(reset: true);
|
||||
}
|
||||
|
||||
void removeTenderById(String id) {
|
||||
final current = data;
|
||||
final list = current?.data?.feedback;
|
||||
@@ -92,14 +107,16 @@ class LikedTendersViewModel with ChangeNotifier {
|
||||
return;
|
||||
}
|
||||
|
||||
final List<LikedTenderFeedback> updatedList = List<LikedTenderFeedback>.of(
|
||||
list,
|
||||
)..removeWhere((e) => e.id == id);
|
||||
final updatedList = List<LikedTenderFeedback>.of(list)
|
||||
..removeWhere((e) => e.id == id);
|
||||
|
||||
final updatedMeta = current.data?.meta?.copyWith(total: updatedList.length);
|
||||
|
||||
data = current.copyWith(
|
||||
data: current.data?.copyWith(feedback: updatedList, meta: updatedMeta),
|
||||
data: current.data?.copyWith(
|
||||
feedback: updatedList,
|
||||
meta: updatedMeta,
|
||||
),
|
||||
);
|
||||
|
||||
notifyListeners();
|
||||
|
||||
Reference in New Issue
Block a user