import 'package:flutter/material.dart'; 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/auth_view_model.dart'; import 'package:tm_app/view_models/tender_detail_view_model.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 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 createState() => _TenderDetailActionsState(); } class _TenderDetailActionsState extends State { @override Widget build(BuildContext context) { final userRole = context.watch().userRole; return widget.isScreenBig ? _webActions(userRole!) : Column( children: [ Consumer( builder: (context, viewModel, child) { return viewModel.isSubmitApprovalLoading ? Container( height: 56.0.h(), width: double.infinity, decoration: BoxDecoration( color: AppColors.primary30, borderRadius: BorderRadius.circular(100.0), ), child: const Center( child: CircularProgressIndicator( color: AppColors.mainBlue, ), ), ) : BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderAcceptButton, backgroundColor: AppColors.primary30, textColor: AppColors.mainBlue, onPressed: () { { showModalBottomSheet( context: context, builder: (context) { return SelectSubmissionBottomSheet( onConfirm: (String value) { 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) { // AppToast.success( // context, // TenderDetailsStrings // .meetingTimeSuccessfullySet, // ); }, ); }, ); } }); } }, ); }, ); } }, ); }, ), SizedBox(height: 16.0.h()), Consumer( builder: (context, viewModel, child) { return viewModel.isRejectApprovalLoading ? BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderRejectButton, borderColor: AppColors.error, textColor: AppColors.error, backgroundColor: AppColors.backgroundColor, borderWidth: 1, onPressed: () {}, ) : BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderRejectButton, borderColor: AppColors.error, textColor: AppColors.error, backgroundColor: AppColors.backgroundColor, borderWidth: 1, onPressed: () { viewModel.rejectTenderApproval( tenderId: widget.detail.id!, submissionMode: TenderSubmissionMode.selfApply.value, ); }, ); }, ), SizedBox(height: 16.0.h()), ], ); } Row _webActions(Role userRole) { return Row( children: [ const Spacer(), Consumer( builder: (context, viewModel, child) { return viewModel.isRejectApprovalLoading ? BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderRejectButton, textColor: AppColors.errorColor, backgroundColor: AppColors.backgroundColor, borderWidth: 1, onPressed: () {}, width: 120.0.w(), ) : BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderRejectButton, textColor: AppColors.errorColor, backgroundColor: AppColors.backgroundColor, borderWidth: 1, onPressed: () { viewModel.rejectTenderApproval( tenderId: widget.detail.id!, submissionMode: TenderSubmissionMode.selfApply.value, ); }, width: 120.0.w(), ); }, ), SizedBox(width: 5.0.w()), Consumer( builder: (context, viewModel, child) { return viewModel.isSubmitApprovalLoading ? BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderAcceptButton, backgroundColor: AppColors.lightBlue, textColor: AppColors.mainBlue, onPressed: () {}, width: 120.0.w(), ) : BaseButton( isEnabled: true, text: TenderDetailsStrings.tenderAcceptButton, backgroundColor: AppColors.lightBlue, textColor: AppColors.mainBlue, onPressed: () { if (viewModel.status == TenderApprovalStatus.submitted.value) { viewModel.submitTenderApproval( tenderId: widget.detail.id!, submissionMode: TenderSubmissionMode.selfApply.value, ); } else { (MediaQuery.sizeOf(context).width > 600) ? showDialog( context: context, builder: (context) { return SelectSubmissionDialog( onConfirm: (String value) { 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) {}, ); }, ); } }); } }, ); }, ) : showModalBottomSheet( context: context, builder: (context) { return SelectSubmissionBottomSheet( onConfirm: (String value) { if (value == TenderSubmissionMode.selfApply.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 MeetingTimeBottomSheet( onConfirm: (value) { AppToast.success( context, TenderDetailsStrings .meetingTimeSuccessfullySet, ); }, ); // return MeetingTimeDialog( // onConfirm: (String value) { // if (context.mounted) { // const CompletionOfDocumentsRouteData() // .push(context); // } // }, // ); }, ); } }, ); }, ); } }, width: 120.0.w(), ); }, ), ], ); } }