Refactor tender detail models and UI components for improved clarity and functionality
- Updated the `Lot`, `Organization`, and `OrganizationAddress` models to enhance data mapping for tender details. - Revised the `TenderData` model to include additional fields reflecting the API response structure. - Improved UI components across desktop, mobile, and tablet views by commenting out unused sections for future use. - Added new string constants for lot details in the tender information section. - Enhanced unit tests to cover new model fields and ensure resilience to partial API payloads.
This commit is contained in:
@@ -4,19 +4,11 @@ import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
import 'package:tm_app/view_models/auth_view_model.dart';
|
||||
import 'package:tm_app/view_models/tender_detail_view_model.dart';
|
||||
// AI-NOTE (for PR reviewer): These three imports are kept (commented) because
|
||||
// the post-confirm navigation flow they supported (documents-completion routes
|
||||
// + meeting-time modals) is preserved as commented-out code below, not deleted.
|
||||
// The Accept flow now just shows a confirmation toast instead. Re-enable these
|
||||
// imports if/when the navigation flow is reinstated.
|
||||
// import 'package:tm_app/views/detail/widgets/meeting_time_bottom_sheet.dart';
|
||||
// import 'package:tm_app/views/detail/widgets/meeting_time_dialog.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 '../../../core/constants/tender_submision_mode.dart';
|
||||
// import '../../../core/routes/app_routes.dart';
|
||||
import '../../../core/utils/app_toast.dart';
|
||||
import '../../../data/services/model/tender_data/tender_data.dart';
|
||||
import '../../shared/select_submission_dialog.dart';
|
||||
@@ -73,37 +65,10 @@ class _TenderDetailActionsState extends State<TenderDetailActions> {
|
||||
builder: (context) {
|
||||
return SelectSubmissionBottomSheet(
|
||||
onConfirm: (String value) {
|
||||
// AI-NOTE (for PR reviewer): New behavior —
|
||||
// confirming the submission modal now just
|
||||
// shows a confirmation toast (no API call, no
|
||||
// navigation), per product request. The prior
|
||||
// navigation flow is preserved below for future
|
||||
// use and is intentionally NOT deleted.
|
||||
// Confirming the submission modal shows a
|
||||
// confirmation toast (no API call, no
|
||||
// navigation), per product request.
|
||||
_showSubmissionReceivedToast();
|
||||
// if (value ==
|
||||
// TenderSubmissionMode.selfApply.value) {
|
||||
// // viewModel.submitTenderApproval(
|
||||
// // tenderId: widget.detail.id!,
|
||||
// // submissionMode: value,
|
||||
// // );
|
||||
// CompletionOfDocumentsRouteData(
|
||||
// tenderId: widget.detail.id!,
|
||||
// ).push(context);
|
||||
// } else if (value ==
|
||||
// TenderSubmissionMode.partnership.value) {
|
||||
// Future.delayed(Duration.zero, () {
|
||||
// if (context.mounted) {
|
||||
// showModalBottomSheet(
|
||||
// context: context,
|
||||
// builder: (_) {
|
||||
// return MeetingTimeBottomSheet(
|
||||
// onConfirm: (value) {},
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
},
|
||||
);
|
||||
},
|
||||
@@ -147,10 +112,9 @@ class _TenderDetailActionsState extends State<TenderDetailActions> {
|
||||
);
|
||||
}
|
||||
|
||||
// AI-NOTE (for PR reviewer): New helper added for the Accept flow. Shows a
|
||||
// success toast confirming the submission was received. Guards on `mounted`
|
||||
// because it runs from a modal callback after the sheet/dialog is popped.
|
||||
// Uses the State's own context (stable page context), not the popped modal's.
|
||||
// Shows a success toast confirming the submission was received. Guards on
|
||||
// `mounted` because it runs from a modal callback after the sheet/dialog is
|
||||
// popped, and uses the State's own (stable page) context, not the modal's.
|
||||
void _showSubmissionReceivedToast() {
|
||||
if (!mounted) {
|
||||
return;
|
||||
@@ -221,37 +185,7 @@ class _TenderDetailActionsState extends State<TenderDetailActions> {
|
||||
builder: (context) {
|
||||
return SelectSubmissionDialog(
|
||||
onConfirm: (String value) {
|
||||
// AI-NOTE (for PR reviewer): New behavior —
|
||||
// toast only (no API/navigation). Old role-aware
|
||||
// navigation preserved below for future use.
|
||||
_showSubmissionReceivedToast();
|
||||
// if (value ==
|
||||
// TenderSubmissionMode.selfApply.value) {
|
||||
// if (context.mounted) {
|
||||
// if (userRole == Role.analyst) {
|
||||
// const FinalCompletionOfDocumentsRouteData()
|
||||
// .push(context);
|
||||
// } else {
|
||||
// CompletionOfDocumentsRouteData(
|
||||
// tenderId: widget.detail.id!,
|
||||
// ).push(context);
|
||||
// }
|
||||
// }
|
||||
// } else if (value ==
|
||||
// TenderSubmissionMode.partnership.value) {
|
||||
// Future.delayed(Duration.zero, () {
|
||||
// if (context.mounted) {
|
||||
// showDialog(
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return MeetingTimeDialog(
|
||||
// onConfirm: (value) {},
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
},
|
||||
);
|
||||
},
|
||||
@@ -261,34 +195,7 @@ class _TenderDetailActionsState extends State<TenderDetailActions> {
|
||||
builder: (context) {
|
||||
return SelectSubmissionBottomSheet(
|
||||
onConfirm: (String value) {
|
||||
// AI-NOTE (for PR reviewer): New behavior —
|
||||
// toast only (no API/navigation). Old flow
|
||||
// (final-completion route + meeting-time
|
||||
// bottom sheet) preserved below for future use.
|
||||
_showSubmissionReceivedToast();
|
||||
// if (value ==
|
||||
// TenderSubmissionMode.selfApply.value) {
|
||||
// if (context.mounted) {
|
||||
// const FinalCompletionOfDocumentsRouteData()
|
||||
// .push(context);
|
||||
// }
|
||||
// } else if (value ==
|
||||
// TenderSubmissionMode.partnership.value) {
|
||||
// showDialog(
|
||||
// context: context,
|
||||
// builder: (context) {
|
||||
// return MeetingTimeBottomSheet(
|
||||
// onConfirm: (value) {
|
||||
// AppToast.success(
|
||||
// context,
|
||||
// TenderDetailsStrings
|
||||
// .meetingTimeSuccessfullySet,
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user