Refactor completion of documents routing and UI components
- Removed unused mobile route for completion of documents. - Updated app routes to reflect the removal of the mobile route. - Enhanced the desktop and mobile pages for completion of documents with improved layout and added TabletDesktopAppbar. - Introduced meeting time handling in TenderDetailActions, integrating new bottom sheet and dialog components for better user interaction. - Added meeting time state management in TenderDetailViewModel. - Cleaned up deprecated files related to meeting time selection.
This commit is contained in:
@@ -3,30 +3,38 @@ import 'package:provider/provider.dart';
|
||||
import 'package:tm_app/core/theme/colors.dart';
|
||||
import 'package:tm_app/core/utils/size_config.dart';
|
||||
import 'package:tm_app/view_models/tender_detail_view_model.dart';
|
||||
import 'package:tm_app/views/detail/widgets/select_meeting_time_bottom_sheet.dart';
|
||||
import 'package:tm_app/views/detail/widgets/show_select_meeting_time_bottom_sheet.dart';
|
||||
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';
|
||||
import '../strings/tender_details_strings.dart';
|
||||
|
||||
class TenderDetailActions extends StatelessWidget {
|
||||
class TenderDetailActions extends StatefulWidget {
|
||||
final bool isScreenBig;
|
||||
final TenderData detail;
|
||||
final TenderDetailViewModel viewModel;
|
||||
const TenderDetailActions({
|
||||
required this.isScreenBig,
|
||||
required this.detail,
|
||||
required this.viewModel,
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
State<TenderDetailActions> createState() => _TenderDetailActionsState();
|
||||
}
|
||||
|
||||
class _TenderDetailActionsState extends State<TenderDetailActions> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return isScreenBig
|
||||
return widget.isScreenBig
|
||||
? _webActions()
|
||||
: Column(
|
||||
children: [
|
||||
@@ -60,25 +68,34 @@ class TenderDetailActions extends StatelessWidget {
|
||||
onConfirm: (String value) {
|
||||
if (value ==
|
||||
TenderSubmissionMode.selfApply.value) {
|
||||
viewModel.submitTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
submissionMode: value,
|
||||
// viewModel.submitTenderApproval(
|
||||
// tenderId: widget.detail.id!,
|
||||
// submissionMode: value,
|
||||
// );
|
||||
|
||||
const CompletionOfDocumentsRouteData().push(
|
||||
context,
|
||||
);
|
||||
} else if (value ==
|
||||
TenderSubmissionMode.partnership.value) {
|
||||
Future.delayed(Duration.zero, () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return SelectMeetingTimeBottomSheet(
|
||||
onConfirm: (String value) {
|
||||
const CompletionOfDocumentsRouteData()
|
||||
.push(context);
|
||||
},
|
||||
isDialog: false,
|
||||
);
|
||||
},
|
||||
);
|
||||
if (context.mounted) {
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
|
||||
builder: (_) {
|
||||
return MeetingTimeBottomSheet(
|
||||
onConfirm: (value) {
|
||||
AppToast.success(
|
||||
context,
|
||||
TenderDetailsStrings
|
||||
.meetingTimeSuccessfullySet,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
@@ -112,7 +129,7 @@ class TenderDetailActions extends StatelessWidget {
|
||||
borderWidth: 1,
|
||||
onPressed: () {
|
||||
viewModel.rejectTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
tenderId: widget.detail.id!,
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
},
|
||||
@@ -148,7 +165,7 @@ class TenderDetailActions extends StatelessWidget {
|
||||
borderWidth: 1,
|
||||
onPressed: () {
|
||||
viewModel.rejectTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
tenderId: widget.detail.id!,
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
},
|
||||
@@ -177,7 +194,7 @@ class TenderDetailActions extends StatelessWidget {
|
||||
if (viewModel.status ==
|
||||
TenderApprovalStatus.submitted.value) {
|
||||
viewModel.submitTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
tenderId: widget.detail.id!,
|
||||
submissionMode: TenderSubmissionMode.selfApply.value,
|
||||
);
|
||||
} else {
|
||||
@@ -189,20 +206,29 @@ class TenderDetailActions extends StatelessWidget {
|
||||
onConfirm: (String value) {
|
||||
if (value ==
|
||||
TenderSubmissionMode.selfApply.value) {
|
||||
const FinalCompletionOfDocumentsRouteData()
|
||||
.push(context);
|
||||
if (context.mounted) {
|
||||
const FinalCompletionOfDocumentsRouteData()
|
||||
.push(context);
|
||||
}
|
||||
} else if (value ==
|
||||
TenderSubmissionMode.partnership.value) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((
|
||||
timeStamp,
|
||||
) {
|
||||
showSelectMeetingTimeDialog(
|
||||
context: context,
|
||||
onConfirm: (String value) {
|
||||
const CompletionOfDocumentsRouteData()
|
||||
.push(context);
|
||||
},
|
||||
);
|
||||
Future.delayed(Duration.zero, () {
|
||||
if (context.mounted) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return MeetingTimeDialog(
|
||||
onConfirm: (value) {
|
||||
AppToast.success(
|
||||
context,
|
||||
TenderDetailsStrings
|
||||
.meetingTimeSuccessfullySet,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
@@ -216,22 +242,36 @@ class TenderDetailActions extends StatelessWidget {
|
||||
onConfirm: (String value) {
|
||||
if (value ==
|
||||
TenderSubmissionMode.selfApply.value) {
|
||||
viewModel.submitTenderApproval(
|
||||
tenderId: detail.id!,
|
||||
submissionMode: value,
|
||||
);
|
||||
// viewModel.submitTenderApproval(
|
||||
// tenderId: widget.detail.id!,
|
||||
// submissionMode: value,
|
||||
// );
|
||||
if (context.mounted) {
|
||||
const FinalCompletionOfDocumentsRouteData()
|
||||
.push(context);
|
||||
}
|
||||
} else if (value ==
|
||||
TenderSubmissionMode.partnership.value) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return SelectMeetingTimeBottomSheet(
|
||||
onConfirm: (String value) {
|
||||
const CompletionOfDocumentsRouteData()
|
||||
.push(context);
|
||||
return MeetingTimeBottomSheet(
|
||||
onConfirm: (value) {
|
||||
AppToast.success(
|
||||
context,
|
||||
TenderDetailsStrings
|
||||
.meetingTimeSuccessfullySet,
|
||||
);
|
||||
},
|
||||
isDialog: false,
|
||||
);
|
||||
// return MeetingTimeDialog(
|
||||
// onConfirm: (String value) {
|
||||
// if (context.mounted) {
|
||||
// const CompletionOfDocumentsRouteData()
|
||||
// .push(context);
|
||||
// }
|
||||
// },
|
||||
// );
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user