TF-933 Add search filter by mailbox in new search view for mobile/tablet

This commit is contained in:
dab246
2022-09-19 20:53:26 +07:00
committed by Dat H. Pham
parent 639ac62bad
commit 5d0a6e8e15
9 changed files with 222 additions and 30 deletions
@@ -2,8 +2,10 @@ import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.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/main/localizations/app_localizations.dart';
@@ -24,6 +26,8 @@ class MailBoxFolderTileBuilder {
final MailboxDisplayed mailboxDisplayed;
final MailboxNode? lastNode;
final PresentationMailbox? mailboxNodeSelected;
final MailboxActions? mailboxActions;
final MailboxId? mailboxIdSelected;
OnExpandFolderActionClick? _onExpandFolderActionClick;
OnOpenMailboxFolderClick? _onOpenMailboxFolderClick;
@@ -41,6 +45,8 @@ class MailBoxFolderTileBuilder {
this.mailboxDisplayed = MailboxDisplayed.mailbox,
this.lastNode,
this.mailboxNodeSelected,
this.mailboxActions,
this.mailboxIdSelected,
}
);
@@ -105,6 +111,7 @@ class MailBoxFolderTileBuilder {
_buildLeadingMailboxItem(),
const SizedBox(width: 8),
Expanded(child: _buildTitleFolderItem()),
_buildSelectedIcon(),
const SizedBox(width: 8),
_buildTrailingMailboxItem()
])
@@ -132,6 +139,7 @@ class MailBoxFolderTileBuilder {
_buildLeadingMailboxItem(),
const SizedBox(width: 8),
Expanded(child: _buildTitleFolderItem()),
_buildSelectedIcon(),
const SizedBox(width: 8),
_buildTrailingMailboxItem()
]),
@@ -365,4 +373,18 @@ class MailBoxFolderTileBuilder {
}
return const SizedBox.shrink();
}
Widget _buildSelectedIcon() {
if (_mailboxNode.item.id == mailboxIdSelected &&
mailboxDisplayed == MailboxDisplayed.destinationPicker &&
mailboxActions == MailboxActions.select) {
return SvgPicture.asset(
_imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill);
} else {
return const SizedBox.shrink();
}
}
}
@@ -1,8 +1,10 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
typedef OnOpenMailboxActionClick = void Function(PresentationMailbox);
@@ -18,6 +20,8 @@ class MailboxSearchTileBuilder {
final ResponsiveUtils _responsiveUtils;
final BuildContext _context;
final MailboxDisplayed mailboxDisplayed;
final MailboxActions? mailboxActions;
final MailboxId? mailboxIdSelected;
bool isHoverItem = false;
@@ -34,6 +38,8 @@ class MailboxSearchTileBuilder {
this.allSelectMode = SelectMode.INACTIVE,
this.lastMailbox,
this.mailboxDisplayed = MailboxDisplayed.mailbox,
this.mailboxActions,
this.mailboxIdSelected,
}
);
@@ -90,6 +96,7 @@ class MailboxSearchTileBuilder {
leading: _buildLeadingIcon(),
title: _buildTitleItem(),
subtitle: _buildSubtitleItem(),
trailing: _buildSelectedIcon(),
),
if (lastMailbox?.id != _presentationMailbox.id)
Padding(
@@ -183,8 +190,9 @@ class MailboxSearchTileBuilder {
height: 20,
fit: BoxFit.fill)),
);
} else {
return _buildSelectedIcon();
}
return null;
}
Color get backgroundColorItem {
@@ -200,4 +208,21 @@ class MailboxSearchTileBuilder {
}
}
}
Widget? _buildSelectedIcon() {
if (_presentationMailbox.id == mailboxIdSelected &&
mailboxDisplayed == MailboxDisplayed.destinationPicker &&
mailboxActions == MailboxActions.select) {
return Padding(
padding: const EdgeInsets.only(right: 8),
child: SvgPicture.asset(
_imagePaths.icFilterSelected,
width: 20,
height: 20,
fit: BoxFit.fill),
);
} else {
return null;
}
}
}