TF-3449 Display mark as important icon in email list
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -8,13 +8,13 @@ import 'package:jmap_dart_client/jmap/mail/email/individual_header_identifier.da
|
||||
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/mail_priority_header.dart';
|
||||
import 'package:model/extensions/email_address_extension.dart';
|
||||
import 'package:model/extensions/session_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/identity_extension.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/create_email_request.dart';
|
||||
import 'package:tmail_ui_user/features/composer/presentation/model/mail_priority_header.dart';
|
||||
import 'package:tmail_ui_user/features/email/domain/extensions/list_attachments_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/model/create_new_mailbox_request.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/extensions/sending_email_extension.dart';
|
||||
@@ -159,13 +159,13 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
|
||||
? {IndividualHeaderIdentifier.identityHeader: identity?.id?.id.value}
|
||||
: null,
|
||||
xPriorityHeader: isMarkAsImportant
|
||||
? {IndividualHeaderIdentifier.xPriorityHeader: MailPriorityHeader.asImportant().xPriority}
|
||||
? {IndividualHeaderIdentifier.xPriorityHeader: MailPriorityHeader.firstXPriority}
|
||||
: null,
|
||||
importanceHeader: isMarkAsImportant
|
||||
? {IndividualHeaderIdentifier.importanceHeader: MailPriorityHeader.asImportant().importance}
|
||||
? {IndividualHeaderIdentifier.importanceHeader: MailPriorityHeader.highImportance}
|
||||
: null,
|
||||
priorityHeader: isMarkAsImportant
|
||||
? {IndividualHeaderIdentifier.priorityHeader: MailPriorityHeader.asImportant().priority}
|
||||
? {IndividualHeaderIdentifier.priorityHeader: MailPriorityHeader.urgentPriority}
|
||||
: null,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class MailPriorityHeader with EquatableMixin {
|
||||
final String? xPriority;
|
||||
final String? importance;
|
||||
final String? priority;
|
||||
|
||||
MailPriorityHeader({
|
||||
this.xPriority,
|
||||
this.importance,
|
||||
this.priority,
|
||||
});
|
||||
|
||||
factory MailPriorityHeader.asImportant() => MailPriorityHeader(
|
||||
xPriority: '1',
|
||||
importance: 'high',
|
||||
priority: 'urgent',
|
||||
);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
xPriority,
|
||||
importance,
|
||||
priority,
|
||||
];
|
||||
}
|
||||
@@ -36,6 +36,21 @@ extension EmailCacheExtension on EmailCache {
|
||||
? Map.fromIterables(headerCalendarEvent!.keys.map((value) => IndividualHeaderIdentifier(value)), headerCalendarEvent!.values)
|
||||
: null,
|
||||
blobId: blobId != null ? Id(blobId!) : null,
|
||||
xPriorityHeader: xPriorityHeader != null
|
||||
? Map.fromIterables(
|
||||
xPriorityHeader!.keys.map((value) => IndividualHeaderIdentifier(value)),
|
||||
xPriorityHeader!.values)
|
||||
: null,
|
||||
importanceHeader: importanceHeader != null
|
||||
? Map.fromIterables(
|
||||
importanceHeader!.keys.map((value) => IndividualHeaderIdentifier(value)),
|
||||
importanceHeader!.values)
|
||||
: null,
|
||||
priorityHeader: priorityHeader != null
|
||||
? Map.fromIterables(
|
||||
priorityHeader!.keys.map((value) => IndividualHeaderIdentifier(value)),
|
||||
priorityHeader!.values)
|
||||
: null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,9 @@ extension EmailExtension on Email {
|
||||
mailboxIds: mailboxIds?.toMapString(),
|
||||
headerCalendarEvent: headerCalendarEvent?.toMapString(),
|
||||
blobId: blobId?.value,
|
||||
xPriorityHeader: xPriorityHeader?.toMapString(),
|
||||
importanceHeader: importanceHeader?.toMapString(),
|
||||
priorityHeader: priorityHeader?.toMapString(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,15 @@ class EmailCache extends HiveObject with EquatableMixin {
|
||||
@HiveField(15)
|
||||
final String? blobId;
|
||||
|
||||
@HiveField(16)
|
||||
Map<String, String?>? xPriorityHeader;
|
||||
|
||||
@HiveField(17)
|
||||
Map<String, String?>? importanceHeader;
|
||||
|
||||
@HiveField(18)
|
||||
Map<String, String?>? priorityHeader;
|
||||
|
||||
EmailCache(
|
||||
this.id,
|
||||
{
|
||||
@@ -75,6 +84,9 @@ class EmailCache extends HiveObject with EquatableMixin {
|
||||
this.mailboxIds,
|
||||
this.headerCalendarEvent,
|
||||
this.blobId,
|
||||
this.xPriorityHeader,
|
||||
this.importanceHeader,
|
||||
this.priorityHeader,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -96,5 +108,8 @@ class EmailCache extends HiveObject with EquatableMixin {
|
||||
mailboxIds,
|
||||
headerCalendarEvent,
|
||||
blobId,
|
||||
xPriorityHeader,
|
||||
importanceHeader,
|
||||
priorityHeader,
|
||||
];
|
||||
}
|
||||
@@ -22,6 +22,9 @@ class ThreadConstants {
|
||||
EmailProperty.hasAttachment,
|
||||
EmailProperty.replyTo,
|
||||
EmailProperty.mailboxIds,
|
||||
IndividualHeaderIdentifier.xPriorityHeader.value,
|
||||
IndividualHeaderIdentifier.importanceHeader.value,
|
||||
IndividualHeaderIdentifier.priorityHeader.value,
|
||||
});
|
||||
static final propertiesUpdatedDefault = Properties({
|
||||
EmailProperty.keywords,
|
||||
@@ -64,21 +67,7 @@ class ThreadConstants {
|
||||
});
|
||||
|
||||
static final propertiesCalendarEvent = Properties({
|
||||
EmailProperty.id,
|
||||
EmailProperty.blobId,
|
||||
EmailProperty.subject,
|
||||
EmailProperty.from,
|
||||
EmailProperty.to,
|
||||
EmailProperty.cc,
|
||||
EmailProperty.bcc,
|
||||
EmailProperty.keywords,
|
||||
EmailProperty.size,
|
||||
EmailProperty.receivedAt,
|
||||
EmailProperty.sentAt,
|
||||
EmailProperty.preview,
|
||||
EmailProperty.hasAttachment,
|
||||
EmailProperty.replyTo,
|
||||
EmailProperty.mailboxIds,
|
||||
...propertiesDefault.value,
|
||||
IndividualHeaderIdentifier.headerCalendarEvent.value,
|
||||
});
|
||||
|
||||
|
||||
@@ -34,6 +34,9 @@ class SearchEmail extends Email {
|
||||
super.headerUserAgent,
|
||||
super.headerMdn,
|
||||
super.headerCalendarEvent,
|
||||
super.xPriorityHeader,
|
||||
super.importanceHeader,
|
||||
super.priorityHeader,
|
||||
super.sMimeStatusHeader,
|
||||
super.identityHeader,
|
||||
required this.searchSnippetSubject,
|
||||
@@ -82,6 +85,9 @@ class SearchEmail extends Email {
|
||||
headerUserAgent: email.headerUserAgent,
|
||||
headerMdn: email.headerMdn,
|
||||
headerCalendarEvent: email.headerCalendarEvent,
|
||||
xPriorityHeader: email.xPriorityHeader,
|
||||
importanceHeader: email.importanceHeader,
|
||||
priorityHeader: email.priorityHeader,
|
||||
sMimeStatusHeader: email.sMimeStatusHeader,
|
||||
identityHeader: email.identityHeader,
|
||||
searchSnippetSubject: searchSnippetSubject,
|
||||
|
||||
@@ -354,4 +354,20 @@ mixin BaseEmailItemTile {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildMarkAsImportantIcon(BuildContext context) {
|
||||
return Padding(
|
||||
padding: ItemEmailTileStyles.getSpaceCalendarEventIcon(
|
||||
context,
|
||||
responsiveUtils,
|
||||
),
|
||||
child: SvgPicture.asset(
|
||||
imagePaths.icMarkAsImportant,
|
||||
width: 20,
|
||||
height: 20,
|
||||
fit: BoxFit.fill,
|
||||
colorFilter: AppColor.steelGray200.asFilter(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -104,6 +104,8 @@ class EmailTileBuilder extends StatelessWidget with BaseEmailItemTile {
|
||||
children: [
|
||||
if (presentationEmail.hasCalendarEvent)
|
||||
buildCalendarEventIcon(context: context, presentationEmail: presentationEmail),
|
||||
if (presentationEmail.isMarkAsImportant)
|
||||
buildMarkAsImportantIcon(context),
|
||||
Expanded(child: buildEmailTitle(
|
||||
context,
|
||||
presentationEmail,
|
||||
|
||||
@@ -140,6 +140,8 @@ class _EmailTileBuilderState extends State<EmailTileBuilder> with BaseEmailItem
|
||||
context: context,
|
||||
presentationEmail: widget.presentationEmail
|
||||
),
|
||||
if (widget.presentationEmail.isMarkAsImportant)
|
||||
buildMarkAsImportantIcon(context),
|
||||
Expanded(
|
||||
child: buildEmailTitle(
|
||||
context,
|
||||
@@ -257,6 +259,8 @@ class _EmailTileBuilderState extends State<EmailTileBuilder> with BaseEmailItem
|
||||
context: context,
|
||||
presentationEmail: widget.presentationEmail
|
||||
),
|
||||
if (widget.presentationEmail.isMarkAsImportant)
|
||||
buildMarkAsImportantIcon(context),
|
||||
Expanded(
|
||||
child: buildEmailTitle(
|
||||
context,
|
||||
@@ -611,6 +615,8 @@ class _EmailTileBuilderState extends State<EmailTileBuilder> with BaseEmailItem
|
||||
return Row(children: [
|
||||
if (widget.presentationEmail.hasCalendarEvent)
|
||||
buildCalendarEventIcon(context: context, presentationEmail: widget.presentationEmail),
|
||||
if (widget.presentationEmail.isMarkAsImportant)
|
||||
buildMarkAsImportantIcon(context),
|
||||
if (widget.presentationEmail.getEmailTitle().isNotEmpty)
|
||||
Container(
|
||||
constraints: BoxConstraints(maxWidth: constraints.maxWidth / 2),
|
||||
|
||||
Reference in New Issue
Block a user