Add Docker support and enhance data models for tender details
- Introduced a .dockerignore file to optimize Docker builds by excluding unnecessary files. - Updated the Dockerfile to use a Flutter base image, enabling web builds for the application. - Added new data models for `Lot` and `OrganizationAddress` to represent tender details more accurately. - Enhanced the `Organization` model to include `companyId` and a nested `address` field. - Updated the `TenderData` model to include new fields such as `noticeTypeCode`, `formType`, and `lots`, reflecting the API response structure. - Regenerated necessary code for data models to ensure compatibility with the updated structures.
This commit is contained in:
@@ -39,42 +39,12 @@ class TendersViewModel with ChangeNotifier {
|
||||
|
||||
static const int _pageSize = 10;
|
||||
|
||||
// --- Offset pagination state ---
|
||||
// --- Infinite-scroll offset state ---
|
||||
int _currentOffset = 0;
|
||||
int _lastValidPages = 1;
|
||||
int _lastValidLimit = _pageSize;
|
||||
|
||||
bool _hasMoreData = true;
|
||||
bool get hasMoreData => _hasMoreData;
|
||||
|
||||
/// 0-based current page index.
|
||||
int get currentPageIndex {
|
||||
final meta = _tendersResponse?.meta;
|
||||
final limit = meta?.limit ?? _lastValidLimit;
|
||||
|
||||
if (limit > 0) {
|
||||
return _currentOffset ~/ limit;
|
||||
}
|
||||
if (meta?.offset != null && limit > 0) {
|
||||
return meta!.offset! ~/ limit;
|
||||
}
|
||||
if (meta?.page != null) {
|
||||
return meta!.page! - 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// 1-based current page (for display).
|
||||
int get currentPage => currentPageIndex + 1;
|
||||
|
||||
int get totalPages {
|
||||
final pages = _tendersResponse?.meta?.pages;
|
||||
if (pages != null && pages > 0) {
|
||||
return pages;
|
||||
}
|
||||
return _lastValidPages;
|
||||
}
|
||||
|
||||
// Filter States
|
||||
DateTimeRange? selectedDateRange;
|
||||
String selectedStatus = 'All';
|
||||
@@ -233,12 +203,6 @@ class TendersViewModel with ChangeNotifier {
|
||||
case Ok<TendersResponse>():
|
||||
_tendersResponse = result.value;
|
||||
final meta = _tendersResponse?.meta;
|
||||
if (meta?.pages != null && meta!.pages! > 0) {
|
||||
_lastValidPages = meta.pages!;
|
||||
}
|
||||
if (meta?.limit != null && meta!.limit! > 0) {
|
||||
_lastValidLimit = meta.limit!;
|
||||
}
|
||||
if (meta?.offset != null) {
|
||||
_currentOffset = meta!.offset!;
|
||||
}
|
||||
@@ -299,12 +263,6 @@ class TendersViewModel with ChangeNotifier {
|
||||
data: result.value.data?.copyWith(tenders: combined),
|
||||
);
|
||||
final newMeta = result.value.meta;
|
||||
if (newMeta?.pages != null && newMeta!.pages! > 0) {
|
||||
_lastValidPages = newMeta.pages!;
|
||||
}
|
||||
if (newMeta?.limit != null && newMeta!.limit! > 0) {
|
||||
_lastValidLimit = newMeta.limit!;
|
||||
}
|
||||
_hasMoreData =
|
||||
newMeta?.hasMore ?? (newTenders.length >= _pageSize);
|
||||
} else {
|
||||
@@ -492,54 +450,4 @@ class TendersViewModel with ChangeNotifier {
|
||||
sortOrder = '';
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// [selected] is the absolute 0-based target page index.
|
||||
Future<void> handlePaginationChange(int selected) async {
|
||||
if (selected < 0) {
|
||||
return;
|
||||
}
|
||||
final maxPage = totalPages - 1;
|
||||
if (maxPage >= 0 && selected > maxPage) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selected == currentPageIndex) {
|
||||
return;
|
||||
}
|
||||
|
||||
await _goToOffsetPage(selected);
|
||||
}
|
||||
|
||||
Future<void> _goToOffsetPage(int pageIndex) async {
|
||||
final limit = _tendersResponse?.meta?.limit ?? _pageSize;
|
||||
_currentOffset = pageIndex * limit;
|
||||
await _fetchPage();
|
||||
}
|
||||
|
||||
Future<void> _fetchPage() async {
|
||||
_isLoading = true;
|
||||
notifyListeners();
|
||||
|
||||
final result = await _tendersRepository.getTenders(
|
||||
limit: _pageSize,
|
||||
offset: _currentOffset,
|
||||
query: _searchQuery,
|
||||
sortBy: sortBy,
|
||||
sortOrder: sortOrder,
|
||||
publicationDateFrom: startDateUnix,
|
||||
publicationDateTo: endDateUnix,
|
||||
);
|
||||
|
||||
_handleListResult(result, fetchAllFeedbacks: true);
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
_errorMessage = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Kept for backwards compatibility with existing callers.
|
||||
/// Accepts a 1-based page number.
|
||||
void jumpToPage(int page) {
|
||||
handlePaginationChange(page - 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user