TF-899 Implement create mailbox folder in destination picker

This commit is contained in:
dab246
2022-10-26 15:00:48 +07:00
committed by Dat H. Pham
parent 38d403aeed
commit 6554ca5f23
19 changed files with 775 additions and 166 deletions
@@ -529,8 +529,7 @@ class MailboxController extends BaseMailboxController {
.map((mailbox) => mailbox.toSelectedPresentationMailbox(selectMode: SelectMode.INACTIVE))
.toList();
} else {
defaultMailboxTree.value.updateNodesUIMode(selectMode: SelectMode.INACTIVE);
folderMailboxTree.value.updateNodesUIMode(selectMode: SelectMode.INACTIVE);
unAllSelectedMailboxNode();
}
currentSelectMode.value = SelectMode.INACTIVE;
}
@@ -361,7 +361,7 @@ class MailboxView extends GetWidget<MailboxController> {
_responsiveUtils,
controller.listMailboxSearched[index],
allSelectMode: controller.currentSelectMode.value,
lastMailbox: controller.listMailboxSearched.last)
lastMailboxIdInSearchedList: controller.listMailboxSearched.last.id)
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
..addOnSelectMailboxActionClick((mailbox) => controller.selectMailboxSearched(context, mailbox)))
.build())
@@ -361,8 +361,7 @@ class MailboxView extends GetWidget<MailboxController> with AppLoaderMixin, Popu
context,
_imagePaths,
_responsiveUtils,
listMailbox[index],
lastMailbox: controller.listMailboxSearched.last)
listMailbox[index])
..addOnDragItemAccepted(controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction)
..addOnOpenMailboxAction((mailbox) => controller.openMailbox(context, mailbox))
..addOnMenuActionClick((position, mailbox) => _openMailboxMenuAction(context, position, mailbox))
@@ -23,6 +23,8 @@ class MailboxNode with EquatableMixin{
bool get isActivated => nodeState == MailboxState.activated;
bool get isSelected => selectMode == SelectMode.ACTIVE;
MailboxNode(
this.item,
{
@@ -28,7 +28,7 @@ class MailBoxFolderTileBuilder {
final MailboxNode? lastNode;
final PresentationMailbox? mailboxNodeSelected;
final MailboxActions? mailboxActions;
final MailboxId? mailboxIdSelected;
final MailboxId? mailboxIdAlreadySelected;
OnExpandFolderActionClick? _onExpandFolderActionClick;
OnOpenMailboxFolderClick? _onOpenMailboxFolderClick;
@@ -48,7 +48,7 @@ class MailBoxFolderTileBuilder {
this.lastNode,
this.mailboxNodeSelected,
this.mailboxActions,
this.mailboxIdSelected,
this.mailboxIdAlreadySelected
}
);
@@ -159,8 +159,10 @@ class MailBoxFolderTileBuilder {
child: InkWell(
onTap: () => _onOpenMailboxFolderClick?.call(_mailboxNode),
child: Container(
color: Colors.transparent,
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 24),
color: mailboxDisplayed == MailboxDisplayed.destinationPicker && _mailboxNode.isSelected
? AppColor.colorItemSelected
: Colors.transparent,
child: Row(children: [
_buildLeadingMailboxItem(),
const SizedBox(width: 8),
@@ -399,7 +401,7 @@ class MailBoxFolderTileBuilder {
}
Widget _buildSelectedIcon() {
if (_mailboxNode.item.id == mailboxIdSelected &&
if (_mailboxNode.item.id == mailboxIdAlreadySelected &&
mailboxDisplayed == MailboxDisplayed.destinationPicker &&
(mailboxActions == MailboxActions.select ||
mailboxActions == MailboxActions.create)) {
@@ -15,14 +15,15 @@ typedef OnDragItemAccepted = void Function(List<PresentationEmail>, Presentation
class MailboxSearchTileBuilder {
final PresentationMailbox _presentationMailbox;
final PresentationMailbox? lastMailbox;
final SelectMode allSelectMode;
final ImagePaths _imagePaths;
final ResponsiveUtils _responsiveUtils;
final BuildContext _context;
final MailboxDisplayed mailboxDisplayed;
final MailboxActions? mailboxActions;
final MailboxId? mailboxIdSelected;
final MailboxId? mailboxIdAlreadySelected;
final MailboxId? lastMailboxIdInSearchedList;
final MailboxId? mailboxIdDestination;
bool isHoverItem = false;
@@ -38,10 +39,11 @@ class MailboxSearchTileBuilder {
this._presentationMailbox,
{
this.allSelectMode = SelectMode.INACTIVE,
this.lastMailbox,
this.lastMailboxIdInSearchedList,
this.mailboxDisplayed = MailboxDisplayed.mailbox,
this.mailboxActions,
this.mailboxIdSelected,
this.mailboxIdAlreadySelected,
this.mailboxIdDestination,
}
);
@@ -111,19 +113,28 @@ class MailboxSearchTileBuilder {
absorbing: !_presentationMailbox.isActivated,
child: Opacity(
opacity: _presentationMailbox.isActivated ? 1.0 : 0.3,
child: ListTile(
contentPadding: EdgeInsets.zero,
onTap: () => allSelectMode == SelectMode.ACTIVE
? _onSelectMailboxActionClick?.call(_presentationMailbox)
: _onOpenMailboxActionClick?.call(_presentationMailbox),
leading: _buildLeadingIcon(),
title: _buildTitleItem(),
subtitle: _buildSubtitleItem(),
trailing: _buildSelectedIcon(),
child: Container(
color: _presentationMailbox.id == mailboxIdDestination &&
mailboxDisplayed == MailboxDisplayed.destinationPicker
? AppColor.colorItemSelected
: Colors.transparent,
padding: mailboxDisplayed == MailboxDisplayed.destinationPicker
? const EdgeInsets.only(left: 16, right: 8)
: EdgeInsets.zero,
child: ListTile(
contentPadding: EdgeInsets.zero,
onTap: () => allSelectMode == SelectMode.ACTIVE
? _onSelectMailboxActionClick?.call(_presentationMailbox)
: _onOpenMailboxActionClick?.call(_presentationMailbox),
leading: _buildLeadingIcon(),
title: _buildTitleItem(),
subtitle: _buildSubtitleItem(),
trailing: _buildSelectedIcon(),
),
),
),
),
if (lastMailbox?.id != _presentationMailbox.id)
if (lastMailboxIdInSearchedList != _presentationMailbox.id)
Padding(
padding: EdgeInsets.only(left: allSelectMode == SelectMode.ACTIVE ? 50 : 35),
child: const Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)),
@@ -221,21 +232,26 @@ class MailboxSearchTileBuilder {
}
Color get backgroundColorItem {
if (isHoverItem) {
return AppColor.colorBgMailboxSelected;
if (_presentationMailbox.id == mailboxIdDestination &&
mailboxDisplayed == MailboxDisplayed.destinationPicker) {
return AppColor.colorItemSelected;
} else {
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
return _responsiveUtils.isDesktop(_context)
? AppColor.colorBgDesktop
: Colors.white;
if (isHoverItem) {
return AppColor.colorBgMailboxSelected;
} else {
return Colors.white;
if (mailboxDisplayed == MailboxDisplayed.mailbox) {
return _responsiveUtils.isDesktop(_context)
? AppColor.colorBgDesktop
: Colors.white;
} else {
return Colors.white;
}
}
}
}
Widget? _buildSelectedIcon() {
if (_presentationMailbox.id == mailboxIdSelected &&
if (_presentationMailbox.id == mailboxIdAlreadySelected &&
mailboxDisplayed == MailboxDisplayed.destinationPicker &&
(mailboxActions == MailboxActions.select ||
mailboxActions == MailboxActions.create)) {