import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/constants/strings.dart'; 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/theme/colors.dart'; import '../../../core/utils/size_config.dart'; import '../../shared/select_submission_bottom_sheet.dart'; class TenderActionButtonsRow extends StatelessWidget { final TenderData tender; final bool isDesktop; const TenderActionButtonsRow({ required this.tender, this.isDesktop = false, super.key, }); @override Widget build(BuildContext context) { return Consumer( builder: (context, viewModel, child) { return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox(width: 16.0.w()), // Dislike button _dislikeButton(viewModel), SizedBox(width: 32.0.w()), //reject button _rejectButton(viewModel), SizedBox(width: 32.0.w()), //submit button _submitButton(viewModel, context), SizedBox(width: 32.0.w()), // Like button _likeButton(viewModel), ], ); }, ); } Widget _rejectButton(TendersViewModel viewModel) { // Find approval for this specific tender if (tender.id == null) return const SizedBox.shrink(); final approval = viewModel.getTenderApprovalForTender(tender.id!); final isRejected = approval?.status == 'rejected'; return Tooltip( message: AppStrings.reject, child: InkWell( splashColor: Colors.transparent, onTap: () { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: 'self-apply', status: 'rejected', ); }, child: Column( children: [ Container( width: 32.0.w(), height: 32.0.w(), decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: isRejected ? AppColors.errorColor : AppColors.grey60, width: 1.5.w(), ), ), alignment: Alignment.center, child: Icon( Icons.close, color: isRejected ? AppColors.errorColor : AppColors.grey60, size: 16, ), ), SizedBox(height: 8.0.h()), if (!isDesktop) Text( AppStrings.reject, style: TextStyle( fontSize: 12.0.sp(), fontWeight: FontWeight.w400, color: isRejected ? AppColors.errorColor : AppColors.grey60, ), ), ], ), ), ); } Widget _submitButton(TendersViewModel viewModel, BuildContext context) { // Find approval for this specific tender if (tender.id == null) return const SizedBox.shrink(); final approval = viewModel.getTenderApprovalForTender(tender.id!); final isApproved = approval?.status == 'submitted'; return Tooltip( message: AppStrings.submit, child: InkWell( splashColor: Colors.transparent, onTap: () { if (isApproved) { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: approval?.submissionMode ?? 'self-apply', status: 'submitted', ); } else { showModalBottomSheet( isDismissible: true, context: context, builder: (context) { return SelectSubmissionBottomSheet( onConfirm: (value) { viewModel.toggleApprovals( tenderId: tender.id!, submissionMode: value, status: 'submitted', ); }, ); }, ); } }, child: Column( children: [ Container( width: 32.0.w(), height: 32.0.w(), decoration: BoxDecoration( shape: BoxShape.circle, border: Border.all( color: isApproved ? AppColors.successColor : AppColors.grey60, width: 1.5.w(), ), ), alignment: Alignment.center, child: Icon( Icons.check, color: isApproved ? AppColors.successColor : AppColors.grey60, size: 16, ), ), SizedBox(height: 8.0.h()), if (!isDesktop) Text( AppStrings.submit, style: TextStyle( fontSize: 12.0.sp(), fontWeight: FontWeight.w400, color: isApproved ? AppColors.successColor : AppColors.grey60, ), ), ], ), ), ); } Widget _dislikeButton(TendersViewModel viewModel) { // Find feedback for this specific tender if (tender.id == null) return const SizedBox.shrink(); final feedback = viewModel.getFeedbackForTender(tender.id!); final isDisliked = feedback?.feedbackType == 'dislike'; return Tooltip( message: AppStrings.dislike, child: InkWell( splashColor: Colors.transparent, onTap: () { viewModel.feedback(tenderId: tender.id!, feedbackType: 'dislike'); }, child: Column( children: [ SvgPicture.asset( width: 32.0.w(), height: 32.0.w(), fit: BoxFit.cover, AssetsManager.dislike, colorFilter: ColorFilter.mode( isDisliked ? AppColors.errorColor : AppColors.grey50, BlendMode.srcATop, ), ), SizedBox(height: 8.0.h()), if (!isDesktop) Text( AppStrings.dislike, style: TextStyle( fontSize: 12.0.sp(), fontWeight: FontWeight.w400, color: isDisliked ? AppColors.errorColor : AppColors.grey50, ), ), ], ), ), ); } Widget _likeButton(TendersViewModel viewModel) { // Find feedback for this specific tender if (tender.id == null) return const SizedBox.shrink(); final feedback = viewModel.getFeedbackForTender(tender.id!); final isLiked = feedback?.feedbackType == 'like'; return Tooltip( message: AppStrings.like, child: InkWell( splashColor: Colors.transparent, onTap: () { viewModel.feedback(tenderId: tender.id!, feedbackType: 'like'); }, child: Column( children: [ SvgPicture.asset( width: 32.0.w(), height: 32.0.w(), fit: BoxFit.cover, AssetsManager.like, colorFilter: ColorFilter.mode( isLiked ? AppColors.successColor : AppColors.grey50, BlendMode.srcATop, ), ), SizedBox(height: 8.0.h()), if (!isDesktop) Text( AppStrings.like, style: TextStyle( fontSize: 12.0.sp(), fontWeight: FontWeight.w400, color: isLiked ? AppColors.successColor : AppColors.grey50, ), ), ], ), ), ); } }