TF-2068 Fix calendar banner widget is gray bar

(cherry picked from commit 69998d944921d045c2c26acf0c66e01feb79112d)
This commit is contained in:
dab246
2023-08-03 10:52:57 +07:00
committed by Dat Vu
parent 3cd43c33ba
commit 9ee40751e8
5 changed files with 35 additions and 40 deletions
+12 -11
View File
@@ -17,12 +17,14 @@ import 'package:model/email/attachment.dart';
import 'package:model/email/email_action_type.dart'; import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart'; import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/list_attachment_extension.dart'; import 'package:model/extensions/list_attachment_extension.dart';
import 'package:model/extensions/list_email_address_extension.dart';
import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/extensions/presentation_email_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/base/widget/custom_scroll_behavior.dart'; import 'package:tmail_ui_user/features/base/widget/custom_scroll_behavior.dart';
import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart'; import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart'; import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/email_view_styles.dart'; import 'package:tmail_ui_user/features/email/presentation/styles/email_view_styles.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/app_bar_mail_widget_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/app_bar_mail_widget_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_file_tile_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_file_tile_builder.dart';
@@ -289,21 +291,20 @@ class EmailView extends GetWidget<SingleEmailController> with AppLoaderMixin {
)), )),
if (email.hasCalendarEvent) if (email.hasCalendarEvent)
Obx(() { Obx(() {
if (controller.calendarEvent.value != null) { final calendarEvent = controller.calendarEvent.value;
final listEmailAddressSender = controller.currentEmail?.listEmailAddressSender.getListAddress() ?? [];
if (calendarEvent != null) {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
CalendarEventInformationWidget( CalendarEventInformationWidget(calendarEvent: calendarEvent),
calendarEvent: controller.calendarEvent.value! if (calendarEvent.getTitleEventAction(context, listEmailAddressSender).isNotEmpty)
), CalendarEventActionBannerWidget(
CalendarEventActionBannerWidget( calendarEvent: calendarEvent,
calendarEvent: controller.calendarEvent.value!, listEmailAddressSender: listEmailAddressSender
listFromEmailAddress: controller.currentEmail?.from ),
), CalendarEventDetailWidget(calendarEvent: calendarEvent),
CalendarEventDetailWidget(
calendarEvent: controller.calendarEvent.value!
),
], ],
); );
} else { } else {
@@ -14,7 +14,7 @@ import 'package:tmail_ui_user/main/utils/app_utils.dart';
extension CalendarEventExtension on CalendarEvent { extension CalendarEventExtension on CalendarEvent {
Color getColorEventActionBanner(String senderEmailAddress) { Color getColorEventActionBanner(List<String> listEmailAddressSender) {
switch(method) { switch(method) {
case EventMethod.request: case EventMethod.request:
case EventMethod.add: case EventMethod.add:
@@ -26,7 +26,7 @@ extension CalendarEventExtension on CalendarEvent {
case EventMethod.declineCounter: case EventMethod.declineCounter:
return AppColor.colorCanceledEventActionText; return AppColor.colorCanceledEventActionText;
case EventMethod.reply: case EventMethod.reply:
final matchedAttendee = findAttendeeHasUpdatedStatus(senderEmailAddress); final matchedAttendee = findAttendeeHasUpdatedStatus(listEmailAddressSender);
if (matchedAttendee != null) { if (matchedAttendee != null) {
return getAttendeeMessageTextColor(matchedAttendee.participationStatus); return getAttendeeMessageTextColor(matchedAttendee.participationStatus);
} else { } else {
@@ -37,7 +37,7 @@ extension CalendarEventExtension on CalendarEvent {
} }
} }
Color getColorEventActionText(String senderEmailAddress) { Color getColorEventActionText(List<String> listEmailAddressSender) {
switch(method) { switch(method) {
case EventMethod.request: case EventMethod.request:
case EventMethod.add: case EventMethod.add:
@@ -49,7 +49,7 @@ extension CalendarEventExtension on CalendarEvent {
case EventMethod.declineCounter: case EventMethod.declineCounter:
return AppColor.colorCanceledEventActionText; return AppColor.colorCanceledEventActionText;
case EventMethod.reply: case EventMethod.reply:
final matchedAttendee = findAttendeeHasUpdatedStatus(senderEmailAddress); final matchedAttendee = findAttendeeHasUpdatedStatus(listEmailAddressSender);
if (matchedAttendee != null) { if (matchedAttendee != null) {
return getAttendeeMessageTextColor(matchedAttendee.participationStatus); return getAttendeeMessageTextColor(matchedAttendee.participationStatus);
} else { } else {
@@ -74,7 +74,7 @@ extension CalendarEventExtension on CalendarEvent {
} }
} }
String getTitleEventAction(BuildContext context, String senderEmailAddress) { String getTitleEventAction(BuildContext context, List<String> listEmailAddressSender) {
switch(method) { switch(method) {
case EventMethod.request: case EventMethod.request:
case EventMethod.add: case EventMethod.add:
@@ -84,7 +84,7 @@ extension CalendarEventExtension on CalendarEvent {
case EventMethod.cancel: case EventMethod.cancel:
return AppLocalizations.of(context).messageEventActionBannerOrganizerCanceled; return AppLocalizations.of(context).messageEventActionBannerOrganizerCanceled;
case EventMethod.reply: case EventMethod.reply:
final matchedAttendee = findAttendeeHasUpdatedStatus(senderEmailAddress); final matchedAttendee = findAttendeeHasUpdatedStatus(listEmailAddressSender);
if (matchedAttendee != null) { if (matchedAttendee != null) {
return getAttendeeMessageStatus(context, matchedAttendee.participationStatus); return getAttendeeMessageStatus(context, matchedAttendee.participationStatus);
} else { } else {
@@ -113,7 +113,7 @@ extension CalendarEventExtension on CalendarEvent {
String getUserNameEventAction({ String getUserNameEventAction({
required BuildContext context, required BuildContext context,
required ImagePaths imagePaths, required ImagePaths imagePaths,
required String senderEmailAddress required List<String> listEmailAddressSender
}) { }) {
switch(method) { switch(method) {
case EventMethod.request: case EventMethod.request:
@@ -124,7 +124,7 @@ extension CalendarEventExtension on CalendarEvent {
return getOrganizerName(context); return getOrganizerName(context);
case EventMethod.reply: case EventMethod.reply:
case EventMethod.counter: case EventMethod.counter:
return getAttendeeName(context, senderEmailAddress); return getAttendeeName(context, listEmailAddressSender);
default: default:
return ''; return '';
} }
@@ -132,8 +132,8 @@ extension CalendarEventExtension on CalendarEvent {
String getOrganizerName(BuildContext context) => organizer?.name ?? AppLocalizations.of(context).you; String getOrganizerName(BuildContext context) => organizer?.name ?? AppLocalizations.of(context).you;
String getAttendeeName(BuildContext context, String senderEmailAddress) { String getAttendeeName(BuildContext context, List<String> listEmailAddressSender) {
final matchedAttendee = findAttendeeHasUpdatedStatus(senderEmailAddress); final matchedAttendee = findAttendeeHasUpdatedStatus(listEmailAddressSender);
if (matchedAttendee != null) { if (matchedAttendee != null) {
return matchedAttendee.name?.name ?? AppLocalizations.of(context).anAttendee; return matchedAttendee.name?.name ?? AppLocalizations.of(context).anAttendee;
} else { } else {
@@ -141,10 +141,10 @@ extension CalendarEventExtension on CalendarEvent {
} }
} }
CalendarAttendee? findAttendeeHasUpdatedStatus(String senderEmailAddress) { CalendarAttendee? findAttendeeHasUpdatedStatus(List<String> listEmailAddressSender) {
if (participants?.isNotEmpty == true) { if (participants?.isNotEmpty == true) {
final listMatchedAttendee = participants final listMatchedAttendee = participants
!.where((attendee) => attendee.mailto?.mailAddress.value == senderEmailAddress) !.where((attendee) => attendee.mailto != null && listEmailAddressSender.contains(attendee.mailto!.mailAddress.value))
.whereNotNull(); .whereNotNull();
log('CalendarEventExtension::findAttendeeHasUpdatedStatus:listMatchedAttendee: $listMatchedAttendee'); log('CalendarEventExtension::findAttendeeHasUpdatedStatus:listMatchedAttendee: $listMatchedAttendee');
if (listMatchedAttendee.isNotEmpty) { if (listMatchedAttendee.isNotEmpty) {
@@ -5,20 +5,18 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart'; import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/extensions/email_address_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/extensions/calendar_event_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/styles/calendar_event_action_banner_styles.dart'; import 'package:tmail_ui_user/features/email/presentation/styles/calendar_event_action_banner_styles.dart';
class CalendarEventActionBannerWidget extends StatelessWidget { class CalendarEventActionBannerWidget extends StatelessWidget {
final CalendarEvent calendarEvent; final CalendarEvent calendarEvent;
final Set<EmailAddress>? listFromEmailAddress; final List<String> listEmailAddressSender;
const CalendarEventActionBannerWidget({ const CalendarEventActionBannerWidget({
super.key, super.key,
required this.calendarEvent, required this.calendarEvent,
required this.listFromEmailAddress, required this.listEmailAddressSender,
}); });
@override @override
@@ -27,7 +25,7 @@ class CalendarEventActionBannerWidget extends StatelessWidget {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(CalendarEventActionBannerStyles.borderRadius)), borderRadius: const BorderRadius.all(Radius.circular(CalendarEventActionBannerStyles.borderRadius)),
color: calendarEvent.getColorEventActionBanner(_getSenderEmailAddress()).withOpacity(0.12) color: calendarEvent.getColorEventActionBanner(listEmailAddressSender).withOpacity(0.12)
), ),
padding: const EdgeInsets.all(CalendarEventActionBannerStyles.contentPadding), padding: const EdgeInsets.all(CalendarEventActionBannerStyles.contentPadding),
margin: const EdgeInsets.symmetric( margin: const EdgeInsets.symmetric(
@@ -56,22 +54,22 @@ class CalendarEventActionBannerWidget extends StatelessWidget {
style: TextStyle( style: TextStyle(
fontSize: CalendarEventActionBannerStyles.titleTextSize, fontSize: CalendarEventActionBannerStyles.titleTextSize,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
color: calendarEvent.getColorEventActionText(_getSenderEmailAddress()) color: calendarEvent.getColorEventActionText(listEmailAddressSender)
), ),
children: [ children: [
TextSpan( TextSpan(
text: calendarEvent.getUserNameEventAction( text: calendarEvent.getUserNameEventAction(
context: context, context: context,
imagePaths: imagePaths, imagePaths: imagePaths,
senderEmailAddress: _getSenderEmailAddress() listEmailAddressSender: listEmailAddressSender
), ),
style: TextStyle( style: TextStyle(
color: calendarEvent.getColorEventActionText(_getSenderEmailAddress()), color: calendarEvent.getColorEventActionText(listEmailAddressSender),
fontSize: CalendarEventActionBannerStyles.titleTextSize, fontSize: CalendarEventActionBannerStyles.titleTextSize,
fontWeight: FontWeight.w700 fontWeight: FontWeight.w700
), ),
), ),
TextSpan(text: calendarEvent.getTitleEventAction(context, _getSenderEmailAddress())) TextSpan(text: calendarEvent.getTitleEventAction(context, listEmailAddressSender))
] ]
) )
), ),
@@ -90,12 +88,4 @@ class CalendarEventActionBannerWidget extends StatelessWidget {
), ),
); );
} }
String _getSenderEmailAddress() {
if (listFromEmailAddress?.isNotEmpty == true) {
return listFromEmailAddress!.first.emailAddress;
} else {
return '';
}
}
} }
@@ -8,6 +8,8 @@ extension ListEmailAddressExtension on Set<EmailAddress>? {
List<EmailAddress> asList() => this != null ? this!.toList() : List.empty(); List<EmailAddress> asList() => this != null ? this!.toList() : List.empty();
Set<EmailAddress> asSet() => this ?? {};
List<String> emailAddressToListString({ExpandMode expandMode = ExpandMode.EXPAND, int limitAddress = 1, bool isFullEmailAddress = false}) { List<String> emailAddressToListString({ExpandMode expandMode = ExpandMode.EXPAND, int limitAddress = 1, bool isFullEmailAddress = false}) {
if (this != null) { if (this != null) {
if (expandMode == ExpandMode.EXPAND) { if (expandMode == ExpandMode.EXPAND) {
@@ -34,6 +34,8 @@ extension PresentationEmailExtension on PresentationEmail {
return ''; return '';
} }
Set<EmailAddress> get listEmailAddressSender => from.asSet()..addAll(replyTo.asSet());
PresentationEmail toggleSelect() { PresentationEmail toggleSelect() {
return PresentationEmail( return PresentationEmail(
id: this.id, id: this.id,