From d0888e98479e79ce2115f5917bb68bf6a66b3413 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 8 Jun 2023 15:16:55 +0700 Subject: [PATCH] TF-1915 Add SendingState property to SendingEmail (cherry picked from commit 678593583b598f3f06f2a838ce4cd788ed1de513) --- assets/images/ic_avatar_group_delivering.svg | 6 ++ .../images/ic_avatar_personal_delivering.svg | 6 ++ assets/images/ic_delivering.svg | 5 ++ assets/images/ic_error.svg | 5 ++ .../extensions/color_extension.dart | 4 + .../presentation/resources/image_paths.dart | 4 + .../presentation/utils/responsive_utils.dart | 24 +++--- .../composer/domain/model/sending_email.dart | 12 ++- .../offline_mode/model/sending_state.dart | 77 +++++++++++++++++++ lib/l10n/intl_messages.arb | 14 +++- lib/main/localizations/app_localizations.dart | 14 ++++ 11 files changed, 157 insertions(+), 14 deletions(-) create mode 100644 assets/images/ic_avatar_group_delivering.svg create mode 100644 assets/images/ic_avatar_personal_delivering.svg create mode 100644 assets/images/ic_delivering.svg create mode 100644 assets/images/ic_error.svg create mode 100644 lib/features/offline_mode/model/sending_state.dart diff --git a/assets/images/ic_avatar_group_delivering.svg b/assets/images/ic_avatar_group_delivering.svg new file mode 100644 index 000000000..73d7eb9b5 --- /dev/null +++ b/assets/images/ic_avatar_group_delivering.svg @@ -0,0 +1,6 @@ + + + + diff --git a/assets/images/ic_avatar_personal_delivering.svg b/assets/images/ic_avatar_personal_delivering.svg new file mode 100644 index 000000000..8edc70a74 --- /dev/null +++ b/assets/images/ic_avatar_personal_delivering.svg @@ -0,0 +1,6 @@ + + + + diff --git a/assets/images/ic_delivering.svg b/assets/images/ic_delivering.svg new file mode 100644 index 000000000..496e32780 --- /dev/null +++ b/assets/images/ic_delivering.svg @@ -0,0 +1,5 @@ + + + diff --git a/assets/images/ic_error.svg b/assets/images/ic_error.svg new file mode 100644 index 000000000..503936c0e --- /dev/null +++ b/assets/images/ic_error.svg @@ -0,0 +1,5 @@ + + + diff --git a/core/lib/presentation/extensions/color_extension.dart b/core/lib/presentation/extensions/color_extension.dart index 21c7ec65c..84c31c022 100644 --- a/core/lib/presentation/extensions/color_extension.dart +++ b/core/lib/presentation/extensions/color_extension.dart @@ -177,6 +177,10 @@ extension AppColor on Color { static const colorTitleAUnSubscribedMailbox = Color(0xFF818C99); static const colorTitleSendingItem = Color(0xFF818C99); static const colorBannerMessageSendingQueue = Color(0xFFF7F8FA); + static const colorDeliveringState = Color(0xFFAEB7C2); + static const colorErrorState = Color(0xFFE64646); + static const colorBackgroundErrorState = Color(0xFFFAEBEB); + static const colorBackgroundDeliveringState = Color(0xFFF2F3F5); static const mapGradientColor = [ [Color(0xFF21D4FD), Color(0xFFB721FF)], diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart index afc1fd8c8..61bd47931 100644 --- a/core/lib/presentation/resources/image_paths.dart +++ b/core/lib/presentation/resources/image_paths.dart @@ -182,9 +182,13 @@ class ImagePaths { String get icMailboxSendingQueue => _getImagePath('ic_mailbox_sending_queue.svg'); String get icMailboxOutbox => _getImagePath('ic_mailbox_outbox.svg'); String get icAvatarGroup => _getImagePath('ic_avatar_group.svg'); + String get icAvatarGroupDelivering => _getImagePath('ic_avatar_group_delivering.svg'); String get icAvatarPersonal => _getImagePath('ic_avatar_personal.svg'); + String get icAvatarPersonalDelivering => _getImagePath('ic_avatar_personal_delivering.svg'); String get icDialogOfflineMode => _getImagePath('ic_dialog_offline_mode.svg'); String get icMenuMailbox => _getImagePath('ic_menu_mailbox.svg'); + String get icDelivering => _getImagePath('ic_delivering.svg'); + String get icError => _getImagePath('ic_error.svg'); String _getImagePath(String imageName) { return AssetsPaths.images + imageName; diff --git a/core/lib/presentation/utils/responsive_utils.dart b/core/lib/presentation/utils/responsive_utils.dart index bc010a25a..91b39dcaf 100644 --- a/core/lib/presentation/utils/responsive_utils.dart +++ b/core/lib/presentation/utils/responsive_utils.dart @@ -8,20 +8,20 @@ class ResponsiveUtils { static const double defaultSizeDrawer = 320; static const double defaultSizeMenu = 256; - final int heightShortest = 600; + static const int heightShortest = 600; - final int minDesktopWidth = 1200; - final int minTabletWidth = 600; - final int minTabletLargeWidth = 900; + static const int minDesktopWidth = 1200; + static const int minTabletWidth = 600; + static const int minTabletLargeWidth = 900; - final double _loginTextFieldWidthSmallScreen = 280.0; - final double _loginTextFieldWidthLargeScreen = 320.0; - final double _loginButtonWidth = 240.0; + static const double _loginTextFieldWidthSmallScreen = 280.0; + static const double _loginTextFieldWidthLargeScreen = 320.0; + static const double _loginButtonWidth = 240.0; - final double tabletHorizontalMargin = 120.0; - final double tabletVerticalMargin = 200.0; - final double desktopVerticalMargin = 120.0; - final double desktopHorizontalMargin = 200.0; + static const double tabletHorizontalMargin = 120.0; + static const double tabletVerticalMargin = 200.0; + static const double desktopVerticalMargin = 120.0; + static const double desktopHorizontalMargin = 200.0; bool isScreenWithShortestSide(BuildContext context) => context.mediaQueryShortestSide < minTabletWidth; @@ -116,4 +116,6 @@ class ResponsiveUtils { isDesktop(context)); } } + + static bool isMatchedMobileWidth(double width) => width < minTabletWidth; } \ No newline at end of file diff --git a/lib/features/composer/domain/model/sending_email.dart b/lib/features/composer/domain/model/sending_email.dart index 4fdfc95a6..18813647c 100644 --- a/lib/features/composer/domain/model/sending_email.dart +++ b/lib/features/composer/domain/model/sending_email.dart @@ -15,6 +15,7 @@ import 'package:model/email/email_action_type.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/email_extension.dart'; import 'package:model/mailbox/select_mode.dart'; +import 'package:tmail_ui_user/features/offline_mode/model/sending_state.dart'; class SendingEmail with EquatableMixin { final String sendingId; @@ -28,6 +29,7 @@ class SendingEmail with EquatableMixin { final Id? creationIdRequest; final DateTime createTime; final SelectMode selectMode; + final SendingState sendingState; SendingEmail({ required this.sendingId, @@ -40,7 +42,8 @@ class SendingEmail with EquatableMixin { this.identityId, this.mailboxNameRequest, this.creationIdRequest, - this.selectMode = SelectMode.INACTIVE + this.selectMode = SelectMode.INACTIVE, + this.sendingState = SendingState.ready }); Map toJson() { @@ -96,6 +99,10 @@ class SendingEmail with EquatableMixin { bool get isSelected => selectMode == SelectMode.ACTIVE; + bool get isDelivering => sendingState == SendingState.delivering; + + bool get isReady => sendingState == SendingState.ready; + @override List get props => [ sendingId, @@ -108,6 +115,7 @@ class SendingEmail with EquatableMixin { identityId, mailboxNameRequest, creationIdRequest, - selectMode + selectMode, + sendingState, ]; } \ No newline at end of file diff --git a/lib/features/offline_mode/model/sending_state.dart b/lib/features/offline_mode/model/sending_state.dart new file mode 100644 index 000000000..43c8dd2c3 --- /dev/null +++ b/lib/features/offline_mode/model/sending_state.dart @@ -0,0 +1,77 @@ + +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +enum SendingState { + ready, + delivering, + error; + + String getTitle(BuildContext context) { + switch(this) { + case SendingState.delivering: + return AppLocalizations.of(context).delivering; + case SendingState.error: + return AppLocalizations.of(context).error; + case SendingState.ready: + return ''; + } + } + + String getIcon(ImagePaths imagePaths) { + switch(this) { + case SendingState.delivering: + return imagePaths.icDelivering; + case SendingState.error: + return imagePaths.icError; + case SendingState.ready: + return ''; + } + } + + String getAvatarGroup(ImagePaths imagePaths) { + switch(this) { + case SendingState.delivering: + return imagePaths.icAvatarGroupDelivering; + case SendingState.error: + return imagePaths.icAvatarGroup; + case SendingState.ready: + return imagePaths.icAvatarGroup; + } + } + + String getAvatarPersonal(ImagePaths imagePaths) { + switch(this) { + case SendingState.delivering: + return imagePaths.icAvatarPersonalDelivering; + case SendingState.error: + return imagePaths.icAvatarPersonal; + case SendingState.ready: + return imagePaths.icAvatarPersonal; + } + } + + Color getTitleColor() { + switch(this) { + case SendingState.delivering: + return AppColor.colorTitleSendingItem; + case SendingState.error: + return AppColor.colorErrorState; + case SendingState.ready: + return Colors.transparent; + } + } + + Color getBackgroundColor() { + switch(this) { + case SendingState.delivering: + return AppColor.colorBackgroundDeliveringState; + case SendingState.error: + return AppColor.colorBackgroundErrorState; + case SendingState.ready: + return Colors.transparent; + } + } +} \ No newline at end of file diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index ded04f72a..597f6553f 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2023-06-05T09:10:02.535366", + "@@last_modified": "2023-06-08T15:15:04.969556", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -2887,5 +2887,17 @@ "type": "text", "placeholders_order": [], "placeholders": {} + }, + "delivering": "Delivering", + "@delivering": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "error": "Error", + "@error": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 19e2dbe8a..003e9084f 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -2974,4 +2974,18 @@ class AppLocalizations { name: 'deleteSomeOfflineEmailSuccessfully', ); } + + String get delivering { + return Intl.message( + 'Delivering', + name: 'delivering', + ); + } + + String get error { + return Intl.message( + 'Error', + name: 'error', + ); + } } \ No newline at end of file