diff --git a/lib/core/constants/status_enums.dart b/lib/core/constants/status_enums.dart new file mode 100644 index 0000000..a799acc --- /dev/null +++ b/lib/core/constants/status_enums.dart @@ -0,0 +1,7 @@ +/// Barrel export for all status enums +library; + +export 'tender_approval_status.dart'; +export 'tender_approval_status_extension.dart'; +export 'tender_feedback.dart'; +export 'tender_feedback_extension.dart'; diff --git a/lib/core/constants/tender_approval_status.dart b/lib/core/constants/tender_approval_status.dart new file mode 100644 index 0000000..1fcc770 --- /dev/null +++ b/lib/core/constants/tender_approval_status.dart @@ -0,0 +1,21 @@ +/// Enum for tender approval statuses +enum TenderApprovalStatus { + submitted, + rejected, + unsubmitted, + unrejected; + + /// Convert enum to string value for API + String get value { + switch (this) { + case TenderApprovalStatus.submitted: + return 'submitted'; + case TenderApprovalStatus.rejected: + return 'rejected'; + case TenderApprovalStatus.unsubmitted: + return 'unsubmitted'; + case TenderApprovalStatus.unrejected: + return 'unrejected'; + } + } +} diff --git a/lib/core/constants/tender_approval_status_extension.dart b/lib/core/constants/tender_approval_status_extension.dart new file mode 100644 index 0000000..87c2923 --- /dev/null +++ b/lib/core/constants/tender_approval_status_extension.dart @@ -0,0 +1,20 @@ +import 'tender_approval_status.dart'; + +/// Extension for parsing string to TenderApprovalStatus +extension TenderApprovalStatusExtension on String { + /// Parse string to TenderApprovalStatus + TenderApprovalStatus? toTenderApprovalStatus() { + switch (toLowerCase()) { + case 'submitted': + return TenderApprovalStatus.submitted; + case 'rejected': + return TenderApprovalStatus.rejected; + case 'unsubmitted': + return TenderApprovalStatus.unsubmitted; + case 'unrejected': + return TenderApprovalStatus.unrejected; + default: + return null; + } + } +} diff --git a/lib/core/constants/tender_feedback.dart b/lib/core/constants/tender_feedback.dart new file mode 100644 index 0000000..e11807e --- /dev/null +++ b/lib/core/constants/tender_feedback.dart @@ -0,0 +1,21 @@ +/// Enum for tender feedback +enum TenderFeedback { + liked, + disliked, + unliked, + undisliked; + + /// Convert enum to string value for API + String get value { + switch (this) { + case TenderFeedback.liked: + return 'like'; + case TenderFeedback.disliked: + return 'dislike'; + case TenderFeedback.unliked: + return 'unlike'; + case TenderFeedback.undisliked: + return 'undislike'; + } + } +} diff --git a/lib/core/constants/tender_feedback_extension.dart b/lib/core/constants/tender_feedback_extension.dart new file mode 100644 index 0000000..203525f --- /dev/null +++ b/lib/core/constants/tender_feedback_extension.dart @@ -0,0 +1,20 @@ +import 'tender_feedback.dart'; + +/// Extension for parsing string to TenderFeedback +extension TenderFeedbackExtension on String { + /// Parse string to TenderFeedback + TenderFeedback? toTenderFeedback() { + switch (this) { + case 'like': + return TenderFeedback.liked; + case 'dislike': + return TenderFeedback.disliked; + case 'unlike': + return TenderFeedback.unliked; + case 'undislike': + return TenderFeedback.undisliked; + default: + return null; + } + } +} diff --git a/lib/core/constants/tender_submision_mode.dart b/lib/core/constants/tender_submision_mode.dart new file mode 100644 index 0000000..b74ef95 --- /dev/null +++ b/lib/core/constants/tender_submision_mode.dart @@ -0,0 +1,15 @@ +/// Enum for tender submission mode +enum TenderSubmissionMode { + selfApply, + partnership; + + /// Convert enum to string value for API + String get value { + switch (this) { + case TenderSubmissionMode.selfApply: + return 'self-apply'; + case TenderSubmissionMode.partnership: + return 'partnership'; + } + } +} diff --git a/lib/core/constants/tender_submission_mode_extension.dart b/lib/core/constants/tender_submission_mode_extension.dart new file mode 100644 index 0000000..9a7ebaa --- /dev/null +++ b/lib/core/constants/tender_submission_mode_extension.dart @@ -0,0 +1,17 @@ +import 'tender_submision_mode.dart'; + +/// Extension for parsing string to TenderSubmissionMode +extension TenderSubmissionModeExtension on String { + /// Parse string to TenderSubmissionMode + TenderSubmissionMode? toTenderSubmissionMode() { + switch (this) { + case 'self-apply': + return TenderSubmissionMode.selfApply; + case 'partnership': + return TenderSubmissionMode.partnership; + + default: + return null; + } + } +} diff --git a/lib/data/repositories/your_tenders_repository.dart b/lib/data/repositories/your_tenders_repository.dart index 7f59ee2..cf95ed2 100644 --- a/lib/data/repositories/your_tenders_repository.dart +++ b/lib/data/repositories/your_tenders_repository.dart @@ -16,20 +16,6 @@ class YourTendersRepository { }) : _yourTendersService = yourTendersService, _likedTendersService = likedTendersService; - Future> getApprovedTenders({ - required int limit, - required int offset, - required String createdFrom, - required String createdTo, - }) { - return _yourTendersService.getApprovedTenders( - limit: limit, - offset: offset, - createdFrom: createdFrom, - createdTo: createdTo, - ); - } - Future> getTenders({ required GetTendersRequestModel requestModel, }) { diff --git a/lib/data/services/api/your_tenders_api.dart b/lib/data/services/api/your_tenders_api.dart index 5dab60b..389b286 100644 --- a/lib/data/services/api/your_tenders_api.dart +++ b/lib/data/services/api/your_tenders_api.dart @@ -1,20 +1,4 @@ class YourTendersApi { - static const String tenderApprovalsStatus = - '/api/v1/tender-approvals?status=submitted'; - - static String getTenderApprovalsStatus({ - required int limit, - required int offset, - required String createdFrom, - required String createdTo, - }) { - if (createdFrom.isNotEmpty && createdTo.isNotEmpty) { - return '$tenderApprovalsStatus&created_from=$createdFrom&created_to=$createdTo'; - } - return tenderApprovalsStatus; - } - // return '$tenderApprovalsStatus?limit=$limit&offset=$offset'; - static const String tenderApproval = '/api/v1/tender-approvals'; static String getTenders({ diff --git a/lib/data/services/your_tenders_service.dart b/lib/data/services/your_tenders_service.dart index 3234744..410ea16 100644 --- a/lib/data/services/your_tenders_service.dart +++ b/lib/data/services/your_tenders_service.dart @@ -11,26 +11,6 @@ class YourTendersService { final NetworkManager _networkManager; - Future> getApprovedTenders({ - required int limit, - required int offset, - required String createdFrom, - required String createdTo, - }) async { - final result = await _networkManager.makeRequest( - YourTendersApi.getTenderApprovalsStatus( - limit: limit, - offset: offset, - createdFrom: createdFrom, - createdTo: createdTo, - ), - (json) => TenderApprovalsResponse.fromJson(json), - method: 'GET', - ); - - return result; - } - Future> getTenders({ required GetTendersRequestModel requestModel, }) async { diff --git a/lib/view_models/liked_tenders_view_model.dart b/lib/view_models/liked_tenders_view_model.dart index 0799a6d..f4b74bc 100644 --- a/lib/view_models/liked_tenders_view_model.dart +++ b/lib/view_models/liked_tenders_view_model.dart @@ -7,6 +7,7 @@ import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_ import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; import 'package:tm_app/view_models/home_view_model.dart'; +import '../core/constants/tender_approval_status.dart'; import '../data/services/model/feedback_response/feedback_response.dart'; import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; @@ -245,12 +246,14 @@ class LikedTendersViewModel with ChangeNotifier { /// Check if tender is submitted bool isTenderSubmitted(String tenderId) { - return getApprovalStatusForTenderId(tenderId) == 'submitted'; + return getApprovalStatusForTenderId(tenderId) == + TenderApprovalStatus.submitted.value; } /// Check if tender is rejected bool isTenderRejected(String tenderId) { - return getApprovalStatusForTenderId(tenderId) == 'rejected'; + return getApprovalStatusForTenderId(tenderId) == + TenderApprovalStatus.rejected.value; } Future submitTenderApproval({ @@ -268,12 +271,15 @@ class LikedTendersViewModel with ChangeNotifier { final existingApproval = getApprovalStatusForTender(tenderId); if (existingApproval != null) { - if (existingApproval.status == 'submitted') { + if (existingApproval.status == TenderApprovalStatus.submitted.value) { // Remove from list if already submitted tenderApprovals.removeWhere((a) => a.tenderId == tenderId); - } else if (existingApproval.status == 'rejected') { + } else if (existingApproval.status == + TenderApprovalStatus.rejected.value) { // Change rejected to submitted - final updatedApproval = existingApproval.copyWith(status: 'submitted'); + final updatedApproval = existingApproval.copyWith( + status: TenderApprovalStatus.submitted.value, + ); final index = tenderApprovals.indexWhere((a) => a.tenderId == tenderId); if (index != -1) { tenderApprovals[index] = updatedApproval; @@ -283,7 +289,7 @@ class LikedTendersViewModel with ChangeNotifier { // Add new approval with submitted status final newApproval = TenderApprovalsData( id: null, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, tenderId: tenderId, companyId: null, submissionMode: submissionMode, @@ -298,7 +304,7 @@ class LikedTendersViewModel with ChangeNotifier { // Make server request final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, submissionMode: submissionMode, ); @@ -334,12 +340,15 @@ class LikedTendersViewModel with ChangeNotifier { final existingApproval = getApprovalStatusForTender(tenderId); if (existingApproval != null) { - if (existingApproval.status == 'rejected') { + if (existingApproval.status == TenderApprovalStatus.rejected.value) { // Remove from list if already rejected tenderApprovals.removeWhere((a) => a.tenderId == tenderId); - } else if (existingApproval.status == 'submitted') { + } else if (existingApproval.status == + TenderApprovalStatus.submitted.value) { // Change submitted to rejected - final updatedApproval = existingApproval.copyWith(status: 'rejected'); + final updatedApproval = existingApproval.copyWith( + status: TenderApprovalStatus.rejected.value, + ); final index = tenderApprovals.indexWhere((a) => a.tenderId == tenderId); if (index != -1) { tenderApprovals[index] = updatedApproval; @@ -349,7 +358,7 @@ class LikedTendersViewModel with ChangeNotifier { // Add new approval with rejected status final newApproval = TenderApprovalsData( id: null, - status: 'rejected', + status: TenderApprovalStatus.rejected.value, tenderId: tenderId, companyId: null, submissionMode: submissionMode, @@ -364,7 +373,7 @@ class LikedTendersViewModel with ChangeNotifier { // Make server request final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'rejected', + status: TenderApprovalStatus.rejected.value, submissionMode: submissionMode, ); diff --git a/lib/view_models/tender_detail_view_model.dart b/lib/view_models/tender_detail_view_model.dart index 627c9ca..649ada4 100644 --- a/lib/view_models/tender_detail_view_model.dart +++ b/lib/view_models/tender_detail_view_model.dart @@ -5,6 +5,7 @@ import 'package:tm_app/data/repositories/tenders_repository.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import 'package:tm_app/data/services/model/tender_detail_response/tender_detail_response_model.dart'; +import '../core/constants/tender_approval_status.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; import '../data/services/model/tender_approvals_data/tender_approvals_data.dart'; import '../data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; @@ -73,7 +74,7 @@ class TenderDetailViewModel with ChangeNotifier { notifyListeners(); final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, submissionMode: submissionMode, ); switch (result) { @@ -102,7 +103,7 @@ class TenderDetailViewModel with ChangeNotifier { notifyListeners(); final result = await _tendersRepository.toggleApprovals( tenderId: tenderId, - status: 'rejected', + status: TenderApprovalStatus.rejected.value, submissionMode: submissionMode, ); switch (result) { diff --git a/lib/view_models/tenders_view_model.dart b/lib/view_models/tenders_view_model.dart index f95c7f7..5f0cf69 100644 --- a/lib/view_models/tenders_view_model.dart +++ b/lib/view_models/tenders_view_model.dart @@ -8,6 +8,7 @@ import 'package:tm_app/data/services/model/tender_approvals_toggle_data/tender_a import 'package:tm_app/data/services/model/tender_approvals_toggle_response/tender_approvals_toggle_response.dart'; import 'package:tm_app/data/services/model/tenders/tenders_response/tenders_response.dart'; +import '../core/constants/tender_submision_mode.dart'; import '../core/utils/result.dart'; import '../data/services/model/tender_approvals_by_id_response/tender_approvals_by_id_response.dart'; import '../data/services/model/tender_approvals_data/tender_approvals_data.dart'; @@ -420,7 +421,10 @@ class TendersViewModel with ChangeNotifier { status: _tenderApprovalToggleData!.status!, tenderId: _tenderApprovalToggleData!.tenderId, companyId: _tenderApprovalToggleData!.companyId, - submissionMode: _tenderApprovalToggleData!.submissionMode, + submissionMode: + (_tenderApprovalToggleData!.submissionMode?.isNotEmpty == true) + ? _tenderApprovalToggleData!.submissionMode + : TenderSubmissionMode.selfApply.value, createdAt: _tenderApprovalToggleData!.createdAt, tender: null, // Tender data is not included in toggle response ); diff --git a/lib/view_models/your_tenders_view_model.dart b/lib/view_models/your_tenders_view_model.dart index 3be71e0..c18ca63 100644 --- a/lib/view_models/your_tenders_view_model.dart +++ b/lib/view_models/your_tenders_view_model.dart @@ -6,6 +6,8 @@ import 'package:tm_app/data/services/model/liked_tenders_response/liked_tenders_ import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart'; import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; +import '../core/constants/tender_approval_status.dart'; +import '../core/constants/tender_feedback.dart'; import '../data/services/model/request_models/get_tenders_request_model/get_tenders_request_model.dart'; import '../data/services/model/request_models/tender_feedback_request_model/tender_feedback_request_model.dart'; @@ -201,7 +203,7 @@ class YourTendersViewModel with ChangeNotifier { await getTenders(requestModel: requestModel); } else if (selectedStatus == YourTendersStrings.tendersSubmitted) { final requestModel = GetTendersRequestModel( - status: 'submitted', + status: TenderApprovalStatus.submitted.value, createdFrom: startDateUnix, createdTo: endDateUnix, limit: _tendersLimit, @@ -272,7 +274,7 @@ class YourTendersViewModel with ChangeNotifier { await getTenders(requestModel: requestModel, reset: true); } else if (selectedStatus == YourTendersStrings.tendersSubmitted) { final requestModel = GetTendersRequestModel( - status: 'submitted', + status: TenderApprovalStatus.submitted.value, createdFrom: startDateUnix, createdTo: endDateUnix, limit: _tendersLimit, @@ -280,9 +282,15 @@ class YourTendersViewModel with ChangeNotifier { ); await getTenders(requestModel: requestModel, reset: true); } else if (selectedStatus == YourTendersStrings.likeTenders) { - await getTendersFeedback(feedbackType: 'like', reset: true); + await getTendersFeedback( + feedbackType: TenderFeedback.liked.value, + reset: true, + ); } else if (selectedStatus == YourTendersStrings.dislikeTenders) { - await getTendersFeedback(feedbackType: 'dislike', reset: true); + await getTendersFeedback( + feedbackType: TenderFeedback.disliked.value, + reset: true, + ); } } } diff --git a/lib/views/detail/pages/detail_desktop_page.dart b/lib/views/detail/pages/detail_desktop_page.dart index 23256c8..c9e2d90 100644 --- a/lib/views/detail/pages/detail_desktop_page.dart +++ b/lib/views/detail/pages/detail_desktop_page.dart @@ -7,6 +7,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_action.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/utils/app_toast.dart'; import '../../shared/desktop_navigation_widget.dart'; import '../strings/tender_details_strings.dart'; @@ -31,7 +32,7 @@ class _TenderDetailDesktopPageState extends State { void _viewModelListener() { if (viewModel.status.isNotEmpty && - viewModel.status == 'submitted' && + viewModel.status == TenderApprovalStatus.submitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -39,7 +40,7 @@ class _TenderDetailDesktopPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unsubmitted' && + viewModel.status == TenderApprovalStatus.unsubmitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -47,7 +48,7 @@ class _TenderDetailDesktopPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'rejected' && + viewModel.status == TenderApprovalStatus.rejected.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -55,7 +56,7 @@ class _TenderDetailDesktopPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unrejected' && + viewModel.status == TenderApprovalStatus.unrejected.value && viewModel.approvalStatus == true) { AppToast.success( context, diff --git a/lib/views/detail/pages/detail_mobile_page.dart b/lib/views/detail/pages/detail_mobile_page.dart index 37fd1b4..3f66d3d 100644 --- a/lib/views/detail/pages/detail_mobile_page.dart +++ b/lib/views/detail/pages/detail_mobile_page.dart @@ -10,6 +10,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import 'package:tm_app/views/shared/tender_app_bar.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/utils/app_toast.dart'; class TenderDetailMobilePage extends StatefulWidget { @@ -31,7 +32,7 @@ class _TenderDetailMobilePageState extends State { void _viewModelListener() { if (viewModel.status.isNotEmpty && - viewModel.status == 'submitted' && + viewModel.status == TenderApprovalStatus.submitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -39,7 +40,7 @@ class _TenderDetailMobilePageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unsubmitted' && + viewModel.status == TenderApprovalStatus.unsubmitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -47,7 +48,7 @@ class _TenderDetailMobilePageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'rejected' && + viewModel.status == TenderApprovalStatus.rejected.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -55,7 +56,7 @@ class _TenderDetailMobilePageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unrejected' && + viewModel.status == TenderApprovalStatus.unrejected.value && viewModel.approvalStatus == true) { AppToast.success( context, diff --git a/lib/views/detail/pages/detail_tablet_page.dart b/lib/views/detail/pages/detail_tablet_page.dart index 7a2b9ad..5299eba 100644 --- a/lib/views/detail/pages/detail_tablet_page.dart +++ b/lib/views/detail/pages/detail_tablet_page.dart @@ -9,6 +9,7 @@ import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import 'package:tm_app/views/shared/tablet_navigation_widget.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/utils/app_toast.dart'; import '../../shared/tender_app_bar.dart'; import '../strings/tender_details_strings.dart'; @@ -32,7 +33,7 @@ class _TenderDetailTabletPageState extends State { void _viewModelListener() { if (viewModel.status.isNotEmpty && - viewModel.status == 'submitted' && + viewModel.status == TenderApprovalStatus.submitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -40,7 +41,7 @@ class _TenderDetailTabletPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unsubmitted' && + viewModel.status == TenderApprovalStatus.unsubmitted.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -48,7 +49,7 @@ class _TenderDetailTabletPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'rejected' && + viewModel.status == TenderApprovalStatus.rejected.value && viewModel.approvalStatus == true) { AppToast.success( context, @@ -56,7 +57,7 @@ class _TenderDetailTabletPageState extends State { ); } if (viewModel.status.isNotEmpty && - viewModel.status == 'unrejected' && + viewModel.status == TenderApprovalStatus.unrejected.value && viewModel.approvalStatus == true) { AppToast.success( context, diff --git a/lib/views/detail/widgets/tender_detail_action.dart b/lib/views/detail/widgets/tender_detail_action.dart index e02e909..165fa33 100644 --- a/lib/views/detail/widgets/tender_detail_action.dart +++ b/lib/views/detail/widgets/tender_detail_action.dart @@ -6,6 +6,7 @@ import 'package:tm_app/view_models/tender_detail_view_model.dart'; import 'package:tm_app/views/shared/base_button.dart'; import 'package:tm_app/views/shared/select_submission_bottom_sheet.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../data/services/model/tender_data/tender_data.dart'; import '../../shared/select_submission_dialog.dart'; import '../strings/tender_details_strings.dart'; @@ -47,7 +48,8 @@ class TenderDetailActions extends StatelessWidget { backgroundColor: AppColors.primary30, textColor: AppColors.mainBlue, onPressed: () { - if (viewModel.status == 'submitted') { + if (viewModel.status == + TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: detail.id!, submissionMode: 'self-apply', @@ -156,7 +158,8 @@ class TenderDetailActions extends StatelessWidget { backgroundColor: AppColors.lightBlue, textColor: AppColors.mainBlue, onPressed: () { - if (viewModel.status == 'submitted') { + if (viewModel.status == + TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: detail.id!, submissionMode: 'self-apply', diff --git a/lib/views/shared/select_submission_bottom_sheet.dart b/lib/views/shared/select_submission_bottom_sheet.dart index 1ccb317..480cb42 100644 --- a/lib/views/shared/select_submission_bottom_sheet.dart +++ b/lib/views/shared/select_submission_bottom_sheet.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:tm_app/core/utils/size_config.dart'; +import '../../core/constants/tender_submision_mode.dart'; import '../../core/theme/colors.dart'; class SelectSubmissionBottomSheet extends StatefulWidget { @@ -16,7 +17,7 @@ class SelectSubmissionBottomSheet extends StatefulWidget { class _SelectSubmissionBottomSheetState extends State { int selectedType = 0; - String type = 'self-apply'; + String type = TenderSubmissionMode.selfApply.value; @override Widget build(BuildContext context) { @@ -46,20 +47,20 @@ class _SelectSubmissionBottomSheetState SizedBox(height: 8.0.h()), _submissionType( title: 'self-apply', - isSelected: type == 'self-apply', + isSelected: type == TenderSubmissionMode.selfApply.value, onTap: () { selectedType = 0; - type = 'self-apply'; + type = TenderSubmissionMode.selfApply.value; setState(() {}); }, ), SizedBox(height: 8.0.h()), _submissionType( title: 'Partnership', - isSelected: type == 'partnership', + isSelected: type == TenderSubmissionMode.partnership.value, onTap: () { selectedType = 1; - type = 'partnership'; + type = TenderSubmissionMode.partnership.value; setState(() {}); }, ), diff --git a/lib/views/shared/select_submission_dialog.dart b/lib/views/shared/select_submission_dialog.dart index 5e59bf3..14ce045 100644 --- a/lib/views/shared/select_submission_dialog.dart +++ b/lib/views/shared/select_submission_dialog.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:tm_app/core/utils/size_config.dart'; +import '../../core/constants/tender_submision_mode.dart'; import '../../core/theme/colors.dart'; class SelectSubmissionDialog extends StatefulWidget { @@ -14,7 +15,7 @@ class SelectSubmissionDialog extends StatefulWidget { class _SelectSubmissionDialogState extends State { int selectedType = 0; - String type = 'self-apply'; + String type = TenderSubmissionMode.selfApply.value; @override Widget build(BuildContext context) { return Dialog( @@ -42,21 +43,21 @@ class _SelectSubmissionDialogState extends State { ), SizedBox(height: 8.0.h()), _submissionType( - title: 'self-apply', - isSelected: type == 'self-apply', + title: 'Self-apply', + isSelected: type == TenderSubmissionMode.selfApply.value, onTap: () { selectedType = 0; - type = 'self-apply'; + type = TenderSubmissionMode.selfApply.value; setState(() {}); }, ), SizedBox(height: 8.0.h()), _submissionType( title: 'Partnership', - isSelected: type == 'partnership', + isSelected: type == TenderSubmissionMode.partnership.value, onTap: () { selectedType = 1; - type = 'partnership'; + type = TenderSubmissionMode.partnership.value; setState(() {}); }, ), diff --git a/lib/views/tenders/widgets/tender_action_buttons_row.dart b/lib/views/tenders/widgets/tender_action_buttons_row.dart index 7b07606..1472c06 100644 --- a/lib/views/tenders/widgets/tender_action_buttons_row.dart +++ b/lib/views/tenders/widgets/tender_action_buttons_row.dart @@ -5,6 +5,9 @@ import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import 'package:tm_app/view_models/tenders_view_model.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/constants/tender_approval_status.dart'; +import '../../../core/constants/tender_feedback.dart'; +import '../../../core/constants/tender_submision_mode.dart'; import '../../../core/theme/colors.dart'; import '../../../core/utils/size_config.dart'; import '../../shared/select_submission_bottom_sheet.dart'; @@ -54,7 +57,7 @@ class TenderActionButtonsRow extends StatelessWidget { } final approval = viewModel.getTenderApprovalForTender(tender.id!); - final isRejected = approval?.status == 'rejected'; + final isRejected = approval?.status == TenderApprovalStatus.rejected.value; return Tooltip( message: TendersStrings.reject, @@ -63,8 +66,8 @@ class TenderActionButtonsRow extends StatelessWidget { onTap: () { viewModel.toggleApprovals( tenderId: tender.id!, - submissionMode: 'self-apply', - status: 'rejected', + submissionMode: TenderSubmissionMode.selfApply.value, + status: TenderApprovalStatus.rejected.value, ); }, child: Column( @@ -109,7 +112,7 @@ class TenderActionButtonsRow extends StatelessWidget { } final approval = viewModel.getTenderApprovalForTender(tender.id!); - final isApproved = approval?.status == 'submitted'; + final isApproved = approval?.status == TenderApprovalStatus.submitted.value; return Tooltip( message: TendersStrings.submit, @@ -119,8 +122,11 @@ class TenderActionButtonsRow extends StatelessWidget { if (isApproved) { viewModel.toggleApprovals( tenderId: tender.id!, - submissionMode: approval?.submissionMode ?? 'self-apply', - status: 'submitted', + submissionMode: + (approval?.submissionMode?.isNotEmpty == true) + ? approval!.submissionMode! + : TenderSubmissionMode.selfApply.value, + status: TenderApprovalStatus.submitted.value, ); } else { final isMobile = MediaQuery.sizeOf(context).width < 600; @@ -134,7 +140,7 @@ class TenderActionButtonsRow extends StatelessWidget { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: value, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, ); }, ); @@ -149,7 +155,7 @@ class TenderActionButtonsRow extends StatelessWidget { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: value, - status: 'submitted', + status: TenderApprovalStatus.submitted.value, ); }, ); @@ -200,7 +206,7 @@ class TenderActionButtonsRow extends StatelessWidget { } final feedback = viewModel.getFeedbackForTender(tender.id!); - final isDisliked = feedback?.feedbackType == 'dislike'; + final isDisliked = feedback?.feedbackType == TenderFeedback.disliked.value; return Tooltip( message: TendersStrings.dislike, @@ -209,7 +215,7 @@ class TenderActionButtonsRow extends StatelessWidget { onTap: () { viewModel.toogleFeedback( tenderId: tender.id!, - feedbackType: 'dislike', + feedbackType: TenderFeedback.disliked.value, ); }, child: Column( @@ -247,14 +253,17 @@ class TenderActionButtonsRow extends StatelessWidget { } final feedback = viewModel.getFeedbackForTender(tender.id!); - final isLiked = feedback?.feedbackType == 'like'; + final isLiked = feedback?.feedbackType == TenderFeedback.liked.value; return Tooltip( message: TendersStrings.like, child: InkWell( splashColor: Colors.transparent, onTap: () { - viewModel.toogleFeedback(tenderId: tender.id!, feedbackType: 'like'); + viewModel.toogleFeedback( + tenderId: tender.id!, + feedbackType: TenderFeedback.liked.value, + ); }, child: Column( children: [ diff --git a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart index fbdaa71..1b1ee5c 100644 --- a/lib/views/your_tenders/pages/your_tenders_desktop_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_desktop_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:tm_app/core/constants/tender_feedback.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/views/your_tenders/strings/your_tenders_strings.dart'; @@ -73,7 +74,7 @@ class _YourTendersDesktopPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'liked', + status: TenderFeedback.liked.value, isDesctop: true, ); } else if (viewModel.selectedStatus == @@ -81,7 +82,7 @@ class _YourTendersDesktopPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'disliked', + status: TenderFeedback.disliked.value, isDesctop: true, ); } else if (viewModel.data != null) { diff --git a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart index 80060c1..27990e0 100644 --- a/lib/views/your_tenders/pages/your_tenders_mobile_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_mobile_page.dart @@ -8,6 +8,8 @@ import 'package:tm_app/views/your_tenders/widgets/filter_button.dart'; import 'package:tm_app/views/your_tenders/widgets/liked_disliked_tenders_list.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; +import '../../../core/constants/tender_feedback.dart'; + class YourTendersMobilePage extends StatefulWidget { const YourTendersMobilePage({super.key}); @@ -65,7 +67,7 @@ class _YourTendersMobilePageState extends State { Expanded( child: LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'liked tenders', + status: TenderFeedback.liked.value, isDesctop: false, ), ) @@ -75,7 +77,7 @@ class _YourTendersMobilePageState extends State { Expanded( child: LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'disliked', + status: TenderFeedback.disliked.value, isDesctop: false, ), ) diff --git a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart index cd39fb3..e58341e 100644 --- a/lib/views/your_tenders/pages/your_tenders_tablet_page.dart +++ b/lib/views/your_tenders/pages/your_tenders_tablet_page.dart @@ -8,6 +8,7 @@ import 'package:tm_app/views/your_tenders/widgets/liked_disliked_tenders_list.da import 'package:tm_app/views/your_tenders/widgets/tablet_desktop_appbar.dart'; import 'package:tm_app/views/your_tenders/widgets/tenders_submitted.dart'; +import '../../../core/constants/tender_feedback.dart'; import '../../shared/tablet_navigation_widget.dart'; import '../../shared/tender_app_bar.dart'; import '../strings/your_tenders_strings.dart'; @@ -85,7 +86,7 @@ class _YourTendersTabletPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'liked', + status: TenderFeedback.liked.value, isDesctop: false, ); } else if (viewModel.selectedStatus == @@ -93,7 +94,7 @@ class _YourTendersTabletPageState extends State viewModel.likedTendersData != null) { return LikedDislikedTendersList( data: viewModel.likedTendersData!, - status: 'disliked', + status: TenderFeedback.disliked.value, isDesctop: false, ); } else if (viewModel.data != null) { diff --git a/lib/views/your_tenders/widgets/tender_card.dart b/lib/views/your_tenders/widgets/tender_card.dart index 6cc016b..d6405e3 100644 --- a/lib/views/your_tenders/widgets/tender_card.dart +++ b/lib/views/your_tenders/widgets/tender_card.dart @@ -5,6 +5,7 @@ import 'package:tm_app/core/utils/date_utils.dart'; import 'package:tm_app/data/services/model/tender_data/tender_data.dart'; import '../../../core/constants/assets.dart'; +import '../../../core/constants/tender_approval_status.dart'; import '../../../core/theme/colors.dart'; import '../../../core/utils/size_config.dart'; @@ -29,7 +30,7 @@ class TenderCard extends StatelessWidget { statusIcon = AssetsManager.tickCircle; statusCardColor = AppColors.green20; statusTextColor = AppColors.green30; - } else if (tender.status == 'submitted') { + } else if (tender.status == TenderApprovalStatus.submitted.value) { backgroundColor = AppColors.grey0; borderColor = AppColors.grey30; statusIcon = null;