From 9c521cde9b1bf6698b49ce6b9c588598d4c157ff Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 22 Feb 2022 17:29:40 +0700 Subject: [PATCH] TF-233 Create mailbox location --- .../destination_picker_controller.dart | 15 +- .../presentation/destination_picker_view.dart | 146 ++++++++++++++---- .../model/destination_picker_arguments.dart | 12 +- .../app_bar_destination_picker_builder.dart | 51 ++++-- .../email/presentation/email_controller.dart | 3 +- .../presentation/mailbox_controller.dart | 11 +- .../presentation/model/mailbox_action.dart | 22 +++ .../widgets/mailbox_tile_builder.dart | 23 +-- .../mailbox_creator_controller.dart | 22 ++- .../presentation/mailbox_creator_view.dart | 21 +-- .../model/mailbox_creator_arguments.dart | 6 +- ...t => app_bar_mailbox_creator_builder.dart} | 22 +-- .../presentation/thread_controller.dart | 3 +- 13 files changed, 264 insertions(+), 93 deletions(-) create mode 100644 lib/features/mailbox/presentation/model/mailbox_action.dart rename lib/features/mailbox_creator/presentation/widgets/{app_bar_mailbox_creator_widget.dart => app_bar_mailbox_creator_builder.dart} (83%) diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart index 667f79e07..091b5e31e 100644 --- a/lib/features/destination_picker/presentation/destination_picker_controller.dart +++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart @@ -1,11 +1,13 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; @@ -21,8 +23,8 @@ class DestinationPickerController extends BaseController { MailboxTree folderMailboxTree = MailboxTree(MailboxNode.root()); final defaultMailboxList = [].obs; final folderMailboxNodeList = [].obs; - - DestinationPickerArguments? destinationPickerArguments; + final mailboxAction = Rxn(); + AccountId? accountId; DestinationPickerController( this._getAllMailboxInteractor, @@ -32,8 +34,10 @@ class DestinationPickerController extends BaseController { @override void onReady() { super.onReady(); - if (Get.arguments != null && Get.arguments is DestinationPickerArguments) { - destinationPickerArguments = Get.arguments; + final arguments = Get.arguments; + if (arguments != null && arguments is DestinationPickerArguments) { + mailboxAction.value = arguments.mailboxAction; + accountId = arguments.accountId; getAllMailboxAction(); } } @@ -61,9 +65,8 @@ class DestinationPickerController extends BaseController { void onError(error) {} void getAllMailboxAction() { - final accountId = destinationPickerArguments?.accountId; if (accountId != null) { - consumeState(_getAllMailboxInteractor.execute(accountId)); + consumeState(_getAllMailboxInteractor.execute(accountId!)); } } diff --git a/lib/features/destination_picker/presentation/destination_picker_view.dart b/lib/features/destination_picker/presentation/destination_picker_view.dart index 7a4875082..d21ee078b 100644 --- a/lib/features/destination_picker/presentation/destination_picker_view.dart +++ b/lib/features/destination_picker/presentation/destination_picker_view.dart @@ -3,8 +3,10 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart'; +import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart'; @@ -17,44 +19,130 @@ class DestinationPickerView extends GetWidget { @override Widget build(BuildContext context) { - return GestureDetector( - onTap: () => controller.closeDestinationPicker(), - child: Card( - margin: EdgeInsets.zero, - borderOnForeground: false, - color: Colors.transparent, - child: Container( - margin: _getMarginDestinationPicker(context), - child: ClipRRect( - borderRadius: _radiusDestinationPicker(context, 20), - child: GestureDetector( - onTap: () => {}, - child: SafeArea( - top: _responsiveUtils.isMobile(context) ? true : false, - bottom: false, - right: false, - left: false, - child: Column( - children: [ - _buildAppBar(context), - Expanded(child: - Container( - color: AppColor.colorBgMailbox, - child: _buildBodyDestinationPicker(context))) - ], + DestinationPickerArguments? _destinationPickerArguments; + final arguments = Get.arguments; + if (arguments != null && arguments is DestinationPickerArguments) { + _destinationPickerArguments = arguments; + } + + if (_destinationPickerArguments?.mailboxAction == MailboxAction.create) { + return Card( + margin: EdgeInsets.zero, + borderOnForeground: false, + color: Colors.transparent, + child: GestureDetector( + onTap: () => controller.closeDestinationPicker(), + child: ResponsiveWidget( + responsiveUtils: _responsiveUtils, + mobile: Container( + child: _buildBody(context), + width: _responsiveUtils.getSizeWidthScreen(context)), + tablet: Container( + child: Row( + children: [ + Expanded(flex: 1, child: Container(color: Colors.transparent)), + Expanded(flex: 1, child: _buildBody(context)), + ] + ) + ), + tabletLarge: Container( + child: Row( + children: [ + Expanded(flex: 7, child: Container(color: Colors.transparent)), + Expanded(flex: 13, child: _buildBody(context)), + ] + ) + ), + desktop: Container( + child: Row( + children: [ + Expanded(flex: 1, child: Container(color: Colors.transparent)), + Expanded(flex: 3, child: _buildBody(context)), + ] + ) + ) + ), + ) + ); + } else { + return GestureDetector( + onTap: () => controller.closeDestinationPicker(), + child: Card( + margin: EdgeInsets.zero, + borderOnForeground: false, + color: Colors.transparent, + child: Container( + margin: _getMarginDestinationPicker(context), + child: ClipRRect( + borderRadius: _radiusDestinationPicker(context, 14), + child: GestureDetector( + onTap: () => {}, + child: SafeArea( + top: _responsiveUtils.isMobile(context) ? true : false, + bottom: false, + right: false, + left: false, + child: Column( + children: [ + _buildAppBar(context), + Expanded(child: + Container( + color: AppColor.colorBgMailbox, + child: _buildBodyDestinationPicker(context))) + ], + ) + ) + ) ) ) - ) ) + ); + } + } + + Widget _buildBody(BuildContext context) { + return SafeArea( + top: _responsiveUtils.isMobile(context) ? true : false, + bottom: false, + left: false, + right: false, + child: ClipRRect( + borderRadius: BorderRadius.only( + topRight: Radius.circular(_responsiveUtils.isMobile(context) ? 14 : 0), + topLeft: Radius.circular(_responsiveUtils.isMobile(context) ? 14 : 0)), + child: Drawer( + child: Container( + color: AppColor.colorBgMailbox, + width: double.infinity, + child: SafeArea( + top: false, + bottom: false, + left: _responsiveUtils.isMobileDevice(context) ? true : false, + right: _responsiveUtils.isMobileDevice(context) ? true : false, + child: Column( + children: [ + _buildAppBar(context), + Expanded(child: + Container( + color: AppColor.colorBgMailbox, + child: _buildBodyDestinationPicker(context))) + ] + ), + ) + ) + ) ) - ) ); } Widget _buildAppBar(BuildContext context) { - return (AppBarDestinationPickerBuilder(context, _imagePaths, _responsiveUtils) + return Obx(() => (AppBarDestinationPickerBuilder( + context, + _imagePaths, + _responsiveUtils, + controller.mailboxAction.value) ..addCloseActionClick(() => controller.closeDestinationPicker())) - .build(); + .build()); } Widget _buildBodyDestinationPicker(BuildContext context) { diff --git a/lib/features/destination_picker/presentation/model/destination_picker_arguments.dart b/lib/features/destination_picker/presentation/model/destination_picker_arguments.dart index 852460eb7..07192e75f 100644 --- a/lib/features/destination_picker/presentation/model/destination_picker_arguments.dart +++ b/lib/features/destination_picker/presentation/model/destination_picker_arguments.dart @@ -1,16 +1,14 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email.dart'; -import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; -class DestinationPickerArguments with EquatableMixin{ +class DestinationPickerArguments with EquatableMixin { final AccountId accountId; - final List emailIds; - final PresentationMailbox currentMailbox; + final MailboxAction mailboxAction; - DestinationPickerArguments(this.accountId, this.emailIds, this.currentMailbox); + DestinationPickerArguments(this.accountId, this.mailboxAction); @override - List get props => [accountId, emailIds, currentMailbox]; + List get props => [accountId, mailboxAction]; } \ No newline at end of file diff --git a/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart b/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart index 77c9777d3..3d3befa1e 100644 --- a/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart +++ b/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart @@ -2,7 +2,7 @@ import 'package:core/core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; typedef OnCloseActionClick = void Function(); @@ -12,8 +12,14 @@ class AppBarDestinationPickerBuilder { final BuildContext _context; final ImagePaths _imagePaths; final ResponsiveUtils _responsiveUtils; + final MailboxAction? _mailboxAction; - AppBarDestinationPickerBuilder(this._context, this._imagePaths, this._responsiveUtils); + AppBarDestinationPickerBuilder( + this._context, + this._imagePaths, + this._responsiveUtils, + this._mailboxAction, + ); void addCloseActionClick(OnCloseActionClick onCloseActionClick) { _onCloseActionClick = onCloseActionClick; @@ -23,7 +29,7 @@ class AppBarDestinationPickerBuilder { return Container( key: Key('app_bar_destination_picker'), alignment: Alignment.center, - padding: EdgeInsets.symmetric(vertical: 8, horizontal: 12), + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), decoration: BoxDecoration( borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)), color: Colors.white), @@ -34,7 +40,7 @@ class AppBarDestinationPickerBuilder { mainAxisAlignment: MainAxisAlignment.end, children: [ _buildBackButton(), - Expanded(child: _buildCountItemSelected()) + Expanded(child: _buildTitle()) ] ) ) @@ -45,24 +51,41 @@ class AppBarDestinationPickerBuilder { return Material( borderRadius: BorderRadius.circular(12), color: Colors.transparent, - child: IconButton( - color: AppColor.baseTextColor, - icon: SvgPicture.asset(_imagePaths.icComposerClose, fit: BoxFit.fill), - onPressed: () => _onCloseActionClick?.call() - ) + child: _responsiveUtils.isMobile(_context) + ? IconButton( + color: _mailboxAction == MailboxAction.create ? AppColor.colorTextButton : AppColor.baseTextColor, + icon: _getBackIcon(), + onPressed: () => _onCloseActionClick?.call()) + : SizedBox(width: 40, height: 40) ); } - Widget _buildCountItemSelected() { + Widget _buildTitle() { return Padding( padding: EdgeInsets.only( left: 12, - right: _responsiveUtils.isMobile(_context) ? 0 : 47), + right: 47), child: Text( - AppLocalizations.of(_context).move_to_mailbox, + _mailboxAction?.getTitle(_context) ?? '', maxLines: 1, overflow: TextOverflow.ellipsis, - textAlign: _responsiveUtils.isMobile(_context) ? TextAlign.start : TextAlign.center, - style: TextStyle(fontSize: 18, color: AppColor.nameUserColor, fontWeight: FontWeight.w500))); + textAlign: _getAlignTitle(), + style: TextStyle(fontSize: 17, color: AppColor.colorNameEmail, fontWeight: FontWeight.w700))); + } + + TextAlign _getAlignTitle() { + if (_mailboxAction == MailboxAction.create) { + return TextAlign.center; + } else { + return _responsiveUtils.isMobile(_context) ? TextAlign.start : TextAlign.center; + } + } + + Widget _getBackIcon() { + if (_mailboxAction == MailboxAction.create) { + return SvgPicture.asset(_imagePaths.icBack, fit: BoxFit.fill); + } else { + return SvgPicture.asset(_imagePaths.icComposerClose, fit: BoxFit.fill); + } } } \ No newline at end of file diff --git a/lib/features/email/presentation/email_controller.dart b/lib/features/email/presentation/email_controller.dart index 09115c1d4..68682812e 100644 --- a/lib/features/email/presentation/email_controller.dart +++ b/lib/features/email/presentation/email_controller.dart @@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_ import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_email_read_interactor.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/move_to_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; @@ -275,7 +276,7 @@ class EmailController extends BaseController { if (currentMailbox != null && accountId != null) { final destinationMailbox = await push( AppRoutes.DESTINATION_PICKER, - arguments: DestinationPickerArguments(accountId, [email.id], currentMailbox) + arguments: DestinationPickerArguments(accountId, MailboxAction.moveEmail) ); if (destinationMailbox != null && destinationMailbox is PresentationMailbox) { diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 0dd290081..22e47aa8b 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -207,10 +207,13 @@ class MailboxController extends BaseController { } void createNewMailbox() async { - final newMailboxArguments = await push( - AppRoutes.MAILBOX_CREATOR, - arguments: MailboxCreatorArguments(allMailboxes) - ); + final accountId = mailboxDashBoardController.accountId.value; + if (accountId != null) { + final newMailboxArguments = await push( + AppRoutes.MAILBOX_CREATOR, + arguments: MailboxCreatorArguments(accountId, allMailboxes) + ); + } } void closeMailboxScreen() { diff --git a/lib/features/mailbox/presentation/model/mailbox_action.dart b/lib/features/mailbox/presentation/model/mailbox_action.dart new file mode 100644 index 000000000..f7779785b --- /dev/null +++ b/lib/features/mailbox/presentation/model/mailbox_action.dart @@ -0,0 +1,22 @@ + +import 'package:flutter/cupertino.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +enum MailboxAction { + create, + moveEmail, +} + +extension MailboxActionExtension on MailboxAction { + + String getTitle(BuildContext context) { + switch(this) { + case MailboxAction.create: + return AppLocalizations.of(context).mailbox_location; + case MailboxAction.moveEmail: + return AppLocalizations.of(context).move_to_mailbox; + default: + return ''; + } + } +} \ No newline at end of file diff --git a/lib/features/mailbox/presentation/widgets/mailbox_tile_builder.dart b/lib/features/mailbox/presentation/widgets/mailbox_tile_builder.dart index 99534777a..814841409 100644 --- a/lib/features/mailbox/presentation/widgets/mailbox_tile_builder.dart +++ b/lib/features/mailbox/presentation/widgets/mailbox_tile_builder.dart @@ -77,17 +77,20 @@ class MailboxTileBuilder { maxLines: 1, style: TextStyle(fontSize: 13, color: AppColor.colorNameEmail))) ])), - trailing: Transform( - transform: Matrix4.translationValues(8.0, 0.0, 0.0), - child: IconButton( - color: AppColor.primaryColor, - icon: SvgPicture.asset(_imagePaths.icFolderArrow, color: AppColor.colorArrowUserMailbox, fit: BoxFit.fill), - onPressed: () { - if (_onOpenMailboxActionClick != null) { - _onOpenMailboxActionClick!(_presentationMailbox); + trailing: (mailboxDisplayed == MailboxDisplayed.mailbox) + ? Transform( + transform: Matrix4.translationValues(8.0, 0.0, 0.0), + child: IconButton( + color: AppColor.primaryColor, + icon: SvgPicture.asset(_imagePaths.icFolderArrow, color: AppColor.colorArrowUserMailbox, fit: BoxFit.fill), + onPressed: () { + if (_onOpenMailboxActionClick != null) { + _onOpenMailboxActionClick!(_presentationMailbox); + } } - } - )) + ) + ) + : null ), if (!isLastElement) Padding( diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart index 746e95a85..6e2bc0809 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart @@ -3,8 +3,11 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/duplicate_name_validator.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/special_character_validator.dart'; @@ -12,6 +15,7 @@ import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_ import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart'; +import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/utils/app_logger.dart'; @@ -23,6 +27,7 @@ class MailboxCreatorController extends BaseController { final newNameMailbox = Rxn(); List allMailboxes = []; + AccountId? accountId; MailboxCreatorController( this._verifyNameInteractor, @@ -36,7 +41,8 @@ class MailboxCreatorController extends BaseController { final arguments = Get.arguments; if (arguments is MailboxCreatorArguments) { allMailboxes = arguments.allMailboxes; - log('allMailboxes: $allMailboxes'); + accountId = arguments.accountId; + log('allMailboxes: $allMailboxes | accountId: $accountId'); } } @@ -85,6 +91,20 @@ class MailboxCreatorController extends BaseController { ); } + void selectMailboxLocation(BuildContext context) async { + FocusScope.of(context).unfocus(); + + if (accountId != null) { + final destinationMailbox = await push( + AppRoutes.DESTINATION_PICKER, + arguments: DestinationPickerArguments(accountId!, MailboxAction.create) + ); + if (destinationMailbox != null && destinationMailbox is PresentationMailbox) { + selectedMailbox.value = destinationMailbox; + } + } + } + void closeMailboxCreator(BuildContext context) { FocusScope.of(context).unfocus(); popBack(); diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart index 209233e5a..45f1dc68c 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/mailbox_creator_controller.dart'; -import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_widget.dart'; +import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/widgets/create_mailbox_name_input_decoration_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -93,11 +93,12 @@ class MailboxCreatorView extends GetWidget { Widget _buildAppBar(BuildContext context) { return Padding( padding: EdgeInsets.only(top: 5), - child: Obx(() => (AppBarMailboxCreatorWidget( + child: Obx(() => (AppBarMailboxCreatorBuilder( context, + title: AppLocalizations.of(context).new_mailbox, isValidated: controller.isCreateMailboxValidated(context)) ..addOnCancelActionClick(() => controller.closeMailboxCreator(context)) - ..addOnCreateActionClick(() => {})) + ..addOnDoneActionClick(() => {})) .build()) ); } @@ -139,7 +140,7 @@ class MailboxCreatorView extends GetWidget { data: MediaQueryData(padding: EdgeInsets.zero), child: ListTile( contentPadding: EdgeInsets.zero, - onTap: () => {}, + onTap: () => controller.selectMailboxLocation(context), leading: Padding( padding: EdgeInsets.only(left: 16), child: SvgPicture.asset( @@ -150,21 +151,23 @@ class MailboxCreatorView extends GetWidget { title: Transform( transform: Matrix4.translationValues(-5.0, 0.0, 0.0), child: Row(children: [ - Expanded(child: Text( + Expanded(child: Obx(() => Text( '${controller.selectedMailbox.value?.name?.name ?? AppLocalizations.of(context).default_mailbox}', maxLines: 1, overflow:TextOverflow.ellipsis, style: TextStyle( fontSize: 15, - color: controller.selectedMailbox.isBlank == true ? AppColor.colorHintSearchBar : AppColor.colorNameEmail), - )), + color: controller.selectedMailbox.value == null + ? AppColor.colorHintSearchBar + : AppColor.colorNameEmail), + ))), ])), trailing: Transform( - transform: Matrix4.translationValues(8.0, 0.0, 0.0), + transform: Matrix4.translationValues(4.0, 0.0, 0.0), child: IconButton( color: AppColor.primaryColor, icon: SvgPicture.asset(_imagePaths.icFolderArrow, color: AppColor.colorArrowUserMailbox, fit: BoxFit.fill), - onPressed: () {} + onPressed: () => controller.selectMailboxLocation(context) )) ), ) diff --git a/lib/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart b/lib/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart index 0ea8534be..115c10315 100644 --- a/lib/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart +++ b/lib/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart @@ -1,12 +1,14 @@ import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; class MailboxCreatorArguments with EquatableMixin{ + final AccountId accountId; final List allMailboxes; - MailboxCreatorArguments(this.allMailboxes); + MailboxCreatorArguments(this.accountId, this.allMailboxes); @override - List get props => [allMailboxes]; + List get props => [accountId, allMailboxes]; } \ No newline at end of file diff --git a/lib/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_widget.dart b/lib/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart similarity index 83% rename from lib/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_widget.dart rename to lib/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart index 43b30e2f6..681a60e84 100644 --- a/lib/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_widget.dart +++ b/lib/features/mailbox_creator/presentation/widgets/app_bar_mailbox_creator_builder.dart @@ -4,26 +4,30 @@ import 'package:flutter/material.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; typedef OnCancelActionClick = void Function(); -typedef OnCreateActionClick = void Function(); +typedef OnDoneActionClick = void Function(); -class AppBarMailboxCreatorWidget { +class AppBarMailboxCreatorBuilder { OnCancelActionClick? _cancelActionClick; - OnCreateActionClick? _createActionClick; + OnDoneActionClick? _onDoneActionClick; final BuildContext _context; final bool isValidated; + final String? title; - AppBarMailboxCreatorWidget( + AppBarMailboxCreatorBuilder( this._context, - {this.isValidated = false} + { + this.title, + this.isValidated = false + } ); void addOnCancelActionClick(OnCancelActionClick onCancelActionClick) { _cancelActionClick = onCancelActionClick; } - void addOnCreateActionClick(OnCreateActionClick onCreateActionClick) { - _createActionClick = onCreateActionClick; + void addOnDoneActionClick(OnDoneActionClick onDoneActionClick) { + _onDoneActionClick = onDoneActionClick; } Widget build() { @@ -71,7 +75,7 @@ class AppBarMailboxCreatorWidget { AppLocalizations.of(_context).done, style: TextStyle(fontSize: 17, color: isValidated ? AppColor.colorTextButton : AppColor.colorDisableMailboxCreateButton), ), - onPressed: () => isValidated ? _createActionClick?.call() : null + onPressed: () => isValidated ? _onDoneActionClick?.call() : null ) ); } @@ -80,7 +84,7 @@ class AppBarMailboxCreatorWidget { return Padding( padding: EdgeInsets.symmetric(horizontal: 8), child: Text( - AppLocalizations.of(_context).new_mailbox, + title ?? '', textAlign: TextAlign.center, style: TextStyle(fontSize: 17, color: AppColor.colorNameEmail, fontWeight: FontWeight.w700))); } diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index cf634576a..cd19ace92 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -21,6 +21,7 @@ import 'package:tmail_ui_user/features/email/domain/state/mark_as_email_read_sta import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.dart'; import 'package:tmail_ui_user/features/email/domain/usecases/mark_as_star_email_interactor.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; @@ -479,7 +480,7 @@ class ThreadController extends BaseController { final listEmailIds = listEmail.map((email) => email.id).toList(); final destinationMailbox = await push( AppRoutes.DESTINATION_PICKER, - arguments: DestinationPickerArguments(_accountId!, listEmailIds, currentMailbox) + arguments: DestinationPickerArguments(_accountId!, MailboxAction.moveEmail) ); if (destinationMailbox != null && destinationMailbox is PresentationMailbox) {