Fixed pagination for your tenders in home
This commit is contained in:
@@ -14,7 +14,7 @@ class HomeViewModel with ChangeNotifier {
|
||||
final HomeRepository _homeRepository;
|
||||
|
||||
HomeViewModel({required HomeRepository homeRepository})
|
||||
: _homeRepository = homeRepository {
|
||||
: _homeRepository = homeRepository {
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ class HomeViewModel with ChangeNotifier {
|
||||
bool _isLoadingMore = false;
|
||||
bool _hasMore = true;
|
||||
|
||||
/// آیا الان در حالت Recommended هستیم یا YourTenders
|
||||
bool _isRecommendedMode = false;
|
||||
|
||||
List<TenderData> get tenders => _tenders;
|
||||
@@ -46,11 +45,11 @@ class HomeViewModel with ChangeNotifier {
|
||||
|
||||
void init() async {
|
||||
await getApprovedStates();
|
||||
await getYourTenders();
|
||||
await getYourTenders(reset: true);
|
||||
await getFeedbackStats();
|
||||
}
|
||||
|
||||
Future<void> getHomeRecommandTenders({bool reset = false}) async {
|
||||
Future<void> getHomeRecommendTenders({bool reset = false}) async {
|
||||
if (_isLoadingMore || (!_hasMore && !reset)) {
|
||||
return;
|
||||
}
|
||||
@@ -63,7 +62,7 @@ class HomeViewModel with ChangeNotifier {
|
||||
|
||||
_isLoadingMore = true;
|
||||
_errorMessage = null;
|
||||
_isRecommendedMode = true; // ✅ اینجا یعنی در حالت Recommended هستیم
|
||||
_isRecommendedMode = true;
|
||||
notifyListeners();
|
||||
|
||||
final result = await _homeRepository.getHomeRecommendedTenders(
|
||||
@@ -94,38 +93,58 @@ class HomeViewModel with ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> getYourTenders() async {
|
||||
_isLoading = true;
|
||||
_isRecommendedMode = false; // ✅ وقتی YourTenders میاد → بدون pagination
|
||||
notifyListeners();
|
||||
|
||||
final result = await _homeRepository.getYourTenders();
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsResponse>():
|
||||
data = result.value;
|
||||
_errorMessage = null;
|
||||
|
||||
if (data?.data?.tenders!.isEmpty ?? true) {
|
||||
// اگه YourTenders خالی بود → برو سمت Recommended
|
||||
await getHomeRecommandTenders(reset: true);
|
||||
} else {
|
||||
_tenders.clear();
|
||||
_tenders.addAll(
|
||||
data!.data!.tenders!.map((e) => e.tender).whereType<TenderData>(),
|
||||
);
|
||||
}
|
||||
|
||||
case Error<TenderApprovalsResponse>():
|
||||
_errorMessage = result.error.toString();
|
||||
await getHomeRecommandTenders(reset: true);
|
||||
break;
|
||||
}
|
||||
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
Future<void> getYourTenders({bool reset = false}) async {
|
||||
if (_isLoadingMore || (!_hasMore && !reset)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
_currentPage = 0;
|
||||
_hasMore = true;
|
||||
_tenders.clear();
|
||||
}
|
||||
|
||||
_isLoadingMore = true;
|
||||
_errorMessage = null;
|
||||
_isRecommendedMode = false;
|
||||
notifyListeners();
|
||||
|
||||
final result = await _homeRepository.getYourTenders(
|
||||
limit: _pageSize,
|
||||
offset: _currentPage * _pageSize,
|
||||
);
|
||||
|
||||
switch (result) {
|
||||
case Ok<TenderApprovalsResponse>():
|
||||
data = result.value;
|
||||
|
||||
final tendersList = data?.data?.tenders ?? [];
|
||||
final metadata = data?.data?.metadata;
|
||||
|
||||
if (tendersList.isNotEmpty) {
|
||||
_tenders.addAll(
|
||||
tendersList.map((e) => e.tender).whereType<TenderData>(),
|
||||
);
|
||||
_currentPage++;
|
||||
|
||||
if (metadata != null && (_currentPage >= metadata.pages!)) {
|
||||
_hasMore = false;
|
||||
}
|
||||
} else {
|
||||
_hasMore = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case Error<TenderApprovalsResponse>():
|
||||
_errorMessage = result.error.toString();
|
||||
break;
|
||||
}
|
||||
|
||||
_isLoadingMore = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
|
||||
Future<void> getApprovedStates() async {
|
||||
_isLoading = true;
|
||||
_errorMessage = null;
|
||||
@@ -166,7 +185,6 @@ class HomeViewModel with ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Calculation methods for progress bars
|
||||
double get partnershipCount {
|
||||
return tenderApprovalsStateResponse?.data?.partnershipCount?.toDouble() ??
|
||||
0.0;
|
||||
|
||||
Reference in New Issue
Block a user