diff --git a/lib/core/constants/strings.dart b/lib/core/constants/strings.dart index 8d261bf..5bd901e 100644 --- a/lib/core/constants/strings.dart +++ b/lib/core/constants/strings.dart @@ -35,6 +35,7 @@ class AppStrings { static const String recommendation = 'Recommendation'; static const String welcome = 'Welcome'; static const String tenderDeadline = 'Deadline'; + static const String recommendedTenders = 'Recommended Tenders'; //Tenders static const String tendersTitle = 'Tenders'; diff --git a/lib/data/repositories/home_repository.dart b/lib/data/repositories/home_repository.dart index 794743b..2c2d762 100644 --- a/lib/data/repositories/home_repository.dart +++ b/lib/data/repositories/home_repository.dart @@ -3,6 +3,7 @@ import 'package:tm_app/data/services/home_service.dart'; import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart'; import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart'; import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; class HomeRepository { HomeRepository({required HomeService homeService}) @@ -21,4 +22,7 @@ class HomeRepository { }) async { return _homeService.getRecommendedTenders(limit: limit, offset: offset); } + Future> getYourTenders() { + return _homeService.getYourTenders(); + } } diff --git a/lib/data/services/home_service.dart b/lib/data/services/home_service.dart index 0e1dd77..a04fc17 100644 --- a/lib/data/services/home_service.dart +++ b/lib/data/services/home_service.dart @@ -7,6 +7,7 @@ import 'package:tm_app/data/services/mock_data/home_mock_data.dart'; import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart'; import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart'; import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; import '../../core/network/network_manager.dart'; @@ -50,4 +51,21 @@ class HomeService { ); return result; } + Future> getYourTenders() async { + try { + final result = await _networkManager.makeRequest( + '/api/v1/tender-approvals', + (json) => TenderApprovalsResponse.fromJson(json), + method: 'GET', + ); + + return result; + } on DioException catch (e) { + appLogger.error('get approved tenders failed: $e'); + return Result.error(e); + } on Exception catch (e, stackTrace) { + appLogger.error('get approved tenders failed: $e', stackTrace: stackTrace); + return Result.error(Exception(e)); + } + } } diff --git a/lib/view_models/home_view_model.dart b/lib/view_models/home_view_model.dart index 68f28a2..02d0efc 100644 --- a/lib/view_models/home_view_model.dart +++ b/lib/view_models/home_view_model.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:tm_app/core/utils/result.dart'; import 'package:tm_app/data/services/model/home/home_request/home_request_model.dart'; import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart'; +import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import '../data/repositories/home_repository.dart'; @@ -11,14 +12,15 @@ class HomeViewModel with ChangeNotifier { final HomeRepository _homeRepository; HomeViewModel({required HomeRepository homeRepository}) - : _homeRepository = homeRepository { + : _homeRepository = homeRepository { getHome(homeRequestModel: HomeRequestModel(id: '1')); - getHomeRecommandTenders(reset: true); + getYourTenders(); } bool _isLoading = false; String? _errorMessage; HomeResponseModel? _homeResponse; + TenderApprovalsResponse? data; bool get isLoading => _isLoading; String? get errorMessage => _errorMessage; @@ -97,4 +99,36 @@ class HomeViewModel with ChangeNotifier { _isLoadingMore = false; notifyListeners(); } + + Future getYourTenders() async { + _isLoading = true; + notifyListeners(); + + final result = await _homeRepository.getYourTenders(); + + switch (result) { + case Ok(): + data = result.value; + _errorMessage = null; + + if (data?.data?.isEmpty ?? true) { + await getHomeRecommandTenders(reset: true); + } else { + _tenders.clear(); + _tenders.addAll( + data!.data! + .map((e) => e.tender) + .whereType(), + ); + } + + case Error(): + _errorMessage = result.error.toString(); + await getHomeRecommandTenders(reset: true); + break; + } + + _isLoading = false; + notifyListeners(); + } } diff --git a/lib/views/home/pages/m_home_page.dart b/lib/views/home/pages/m_home_page.dart index c625dce..dd9fd8f 100644 --- a/lib/views/home/pages/m_home_page.dart +++ b/lib/views/home/pages/m_home_page.dart @@ -30,6 +30,7 @@ class MobileHomePage extends StatelessWidget { if (homeViewModel.errorMessage != null) { return Center(child: Text(homeViewModel.errorMessage!)); } + if (homeViewModel.homeResponse != null) { return SingleChildScrollView( child: Column( @@ -44,7 +45,7 @@ class MobileHomePage extends StatelessWidget { SizedBox(height: 8.0.h()), _secondTenderCardsRow(homeViewModel.homeResponse!), SizedBox(height: 40.0.h()), - _yourTenderText(), + _yourTenderText(homeViewModel), _bottomListView(homeViewModel), ], ), @@ -149,11 +150,12 @@ class MobileHomePage extends StatelessWidget { ); } - Widget _yourTenderText() { + Widget _yourTenderText(HomeViewModel homeViewModel) { + final isYourTenders = homeViewModel.data?.data?.isNotEmpty ?? false; return Padding( padding: EdgeInsets.symmetric(horizontal: 24.0.w()), child: Text( - AppStrings.recommendation, + isYourTenders ? AppStrings.yourTenders : AppStrings.recommendedTenders, style: TextStyle( fontSize: 18.0.sp(), fontWeight: FontWeight.w700,