TF-233 Create mailbox location
This commit is contained in:
@@ -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<String>();
|
||||
|
||||
List<PresentationMailbox> allMailboxes = <PresentationMailbox>[];
|
||||
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();
|
||||
|
||||
@@ -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<MailboxCreatorController> {
|
||||
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<MailboxCreatorController> {
|
||||
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<MailboxCreatorController> {
|
||||
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)
|
||||
))
|
||||
),
|
||||
)
|
||||
|
||||
@@ -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<PresentationMailbox> allMailboxes;
|
||||
|
||||
MailboxCreatorArguments(this.allMailboxes);
|
||||
MailboxCreatorArguments(this.accountId, this.allMailboxes);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [allMailboxes];
|
||||
List<Object?> get props => [accountId, allMailboxes];
|
||||
}
|
||||
+13
-9
@@ -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)));
|
||||
}
|
||||
Reference in New Issue
Block a user