Migrate v0.11.3-patch4-dev to master branch

This commit is contained in:
dab246
2024-06-05 16:19:03 +07:00
committed by Dat H. Pham
parent 1e180f0022
commit 2a862e5a05
28 changed files with 161 additions and 76 deletions
@@ -1,6 +1,6 @@
import 'dart:async' as async;
import 'package:async/async.dart';
import 'package:core/domain/extensions/media_type_extension.dart';
import 'package:core/data/constants/constant.dart';
import 'package:desktop_drop/desktop_drop.dart';
import 'package:flutter/material.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart';
@@ -43,7 +43,7 @@ mixin DragDropFileMixin {
fileName: details.files[i].name,
type: details.files[i].mimeType,
fileSize: bytesList.result![i].length,
isInline: details.files[i].mimeType?.startsWith(MediaTypeExtension.imageType) == true
isInline: details.files[i].mimeType?.startsWith(Constant.imageType) == true
),
);
}
@@ -44,6 +44,8 @@ enum EventActionType {
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): null,
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): true,
});
case EventActionType.mailToAttendees:
return PatchObject({});
}
}
@@ -55,6 +57,8 @@ enum EventActionType {
return AppLocalizations.of(context).youMayAttendThisMeeting;
case EventActionType.no:
return AppLocalizations.of(context).youWillNotAttendThisMeeting;
case EventActionType.mailToAttendees:
return '';
}
}
}
@@ -74,8 +74,8 @@ import 'package:tmail_ui_user/features/email/domain/usecases/store_opened_email_
import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart';
import 'package:tmail_ui_user/features/email/presentation/bindings/calendar_event_interactor_bindings.dart';
import 'package:tmail_ui_user/features/email/presentation/controller/email_supervisor_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
import 'package:tmail_ui_user/features/email/presentation/model/blob_calendar_event.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_loaded.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
@@ -1800,7 +1800,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void handleViewAttachmentAction(BuildContext context, Attachment attachment) {
if (PlatformInfo.isWeb) {
if (PlatformInfo.isCanvasKit && attachment.isDisplayedPDFIcon) {
if (PlatformInfo.isCanvasKit && attachment.validatePDFIcon()) {
previewPDFFileAction(context, attachment);
} else {
downloadAttachmentForWeb(attachment);
@@ -1839,4 +1839,24 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
},
);
}
void handleMailToAttendees(CalendarOrganizer? organizer, List<CalendarAttendee>? attendees) {
final listEmailAddressAttendees = attendees
?.map((attendee) => EmailAddress(attendee.name?.name, attendee.mailto?.mailAddress.value))
.toList() ?? [];
if (organizer != null) {
listEmailAddressAttendees.add(EmailAddress(organizer.name, organizer.mailto?.value));
}
final listEmailAddressMailTo = listEmailAddressAttendees
.where((emailAddress) => emailAddress.emailAddress.isNotEmpty && emailAddress.emailAddress != mailboxDashBoardController.sessionCurrent?.username.value)
.toSet()
.toList();
log('SingleEmailController::handleMailToAttendees: listEmailAddressMailTo = $listEmailAddressMailTo');
mailboxDashBoardController.goToComposer(
ComposerArguments.fromMailtoUri(listEmailAddress: listEmailAddressMailTo)
);
}
}
+31 -36
View File
@@ -16,7 +16,6 @@ import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart';
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.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';
@@ -148,33 +147,30 @@ class EmailView extends GetWidget<SingleEmailController> {
child: Obx(() => _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: controller.calendarEvent.value,
calendarEvent: controller.calendarEvent,
maxBodyHeight: constraints.maxHeight
))
)
);
} else {
return Obx(() {
final calendarEvent = controller.calendarEvent.value;
final calendarEvent = controller.calendarEvent;
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
return Padding(
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
child: ScrollbarListView(
scrollController: controller.emailContentScrollController,
child: SingleChildScrollView(
physics : const ClampingScrollPhysics(),
child: Container(
width: double.infinity,
alignment: Alignment.center,
color: Colors.white,
child: _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: calendarEvent,
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
)
child: SingleChildScrollView(
physics : const ClampingScrollPhysics(),
child: Container(
width: double.infinity,
alignment: Alignment.center,
color: Colors.white,
child: _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: calendarEvent,
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
)
),
)
),
);
} else {
@@ -199,34 +195,31 @@ class EmailView extends GetWidget<SingleEmailController> {
child: Obx(() => _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: controller.calendarEvent.value,
calendarEvent: controller.calendarEvent,
maxBodyHeight: constraints.maxHeight
))
)
);
} else {
return Obx(() {
final calendarEvent = controller.calendarEvent.value;
final calendarEvent = controller.calendarEvent;
if (currentEmail.hasCalendarEvent && calendarEvent != null) {
return Padding(
padding: const EdgeInsetsDirectional.symmetric(horizontal: 4),
child: ScrollbarListView(
scrollController: controller.emailContentScrollController,
child: SingleChildScrollView(
physics : const ClampingScrollPhysics(),
child: Container(
width: double.infinity,
alignment: Alignment.center,
color: Colors.white,
child: _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: calendarEvent,
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
maxBodyHeight: constraints.maxHeight
)
child: SingleChildScrollView(
physics : const ClampingScrollPhysics(),
child: Container(
width: double.infinity,
alignment: Alignment.center,
color: Colors.white,
child: _buildEmailMessage(
context: context,
presentationEmail: currentEmail,
calendarEvent: calendarEvent,
emailAddressSender: currentEmail.listEmailAddressSender.getListAddress(),
maxBodyHeight: constraints.maxHeight
)
),
)
),
);
} else {
@@ -367,6 +360,7 @@ class EmailView extends GetWidget<SingleEmailController> {
controller.onCalendarEventReplyAction(eventActionType, presentationEmail.id!),
calendarEventReplying: controller.calendarEventProcessing,
presentationEmail: controller.currentEmail,
onMailtoAttendeesAction: controller.handleMailToAttendees,
)),
if (calendarEvent.getTitleEventAction(context, emailAddressSender ?? []).isNotEmpty)
CalendarEventActionBannerWidget(
@@ -384,6 +378,7 @@ class EmailView extends GetWidget<SingleEmailController> {
controller.onCalendarEventReplyAction(eventActionType, presentationEmail.id!),
calendarEventReplying: controller.calendarEventProcessing,
presentationEmail: controller.currentEmail,
onMailtoAttendeesAction: controller.handleMailToAttendees,
)),
],
)
@@ -4,4 +4,6 @@ import 'package:tmail_ui_user/features/upload/domain/extensions/media_type_exten
extension AttachmentExtension on Attachment {
String getIcon(ImagePaths imagePaths) => type?.getIcon(imagePaths, fileName: name) ?? imagePaths.icFileEPup;
bool validatePDFIcon() => type?.validatePDFIcon(fileName: name) ?? false;
}
@@ -97,6 +97,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
return CalendarEventActionButtonWidgetStyles.loadingBackgroundColor;
}
return CalendarEventActionButtonWidgetStyles.backgroundColor;
case EventActionType.mailToAttendees:
return CalendarEventActionButtonWidgetStyles.backgroundColor;
}
}
@@ -120,6 +122,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
return CalendarEventActionButtonWidgetStyles.selectedTextColor;
}
return CalendarEventActionButtonWidgetStyles.textColor;
case EventActionType.mailToAttendees:
return CalendarEventActionButtonWidgetStyles.textColor;
}
}
@@ -143,6 +147,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
return CalendarEventActionButtonWidgetStyles.selectedBackgroundColor;
}
return CalendarEventActionButtonWidgetStyles.textColor;
case EventActionType.mailToAttendees:
return CalendarEventActionButtonWidgetStyles.textColor;
}
}
@@ -164,6 +170,8 @@ class CalendarEventActionButtonWidget extends StatelessWidget {
return null;
}
return () => onCalendarEventReplyActionClick(eventActionType);
case EventActionType.mailToAttendees:
return onMailToAttendeesAction;
}
}
}
@@ -1,6 +1,8 @@
import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
import 'package:flutter/material.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/attendee/calendar_attendee.dart';
import 'package:jmap_dart_client/jmap/mail/calendar/properties/calendar_organizer.dart';
import 'package:model/email/presentation_email.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_detail_widget_styles.dart';
@@ -13,6 +15,8 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event
import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_title_widget.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
typedef OnMailtoAttendeesAction = Function(CalendarOrganizer? organizer, List<CalendarAttendee>? participants);
class CalendarEventDetailWidget extends StatelessWidget {
final CalendarEvent calendarEvent;
@@ -24,6 +28,7 @@ class CalendarEventDetailWidget extends StatelessWidget {
final OnCalendarEventReplyActionClick onCalendarEventReplyActionClick;
final bool calendarEventReplying;
final PresentationEmail? presentationEmail;
final OnMailtoAttendeesAction? onMailtoAttendeesAction;
const CalendarEventDetailWidget({
super.key,
@@ -36,6 +41,7 @@ class CalendarEventDetailWidget extends StatelessWidget {
this.onOpenComposerAction,
this.onMailtoDelegateAction,
this.presentationEmail,
this.onMailtoAttendeesAction,
});
@override
@@ -99,6 +105,10 @@ class CalendarEventDetailWidget extends StatelessWidget {
onCalendarEventReplyActionClick: onCalendarEventReplyActionClick,
calendarEventReplying: calendarEventReplying,
presentationEmail: presentationEmail,
onMailToAttendeesAction: () => onMailtoAttendeesAction?.call(
calendarEvent.organizer,
calendarEvent.participants,
),
),
],
),
@@ -25,6 +25,7 @@ class CalendarEventInformationWidget extends StatelessWidget {
final OnCalendarEventReplyActionClick onCalendarEventReplyActionClick;
final bool calendarEventReplying;
final PresentationEmail? presentationEmail;
final OnMailtoAttendeesAction? onMailtoAttendeesAction;
final _responsiveUtils = Get.find<ResponsiveUtils>();
@@ -36,6 +37,7 @@ class CalendarEventInformationWidget extends StatelessWidget {
this.onOpenNewTabAction,
this.onOpenComposerAction,
this.presentationEmail,
this.onMailtoAttendeesAction,
});
@override
@@ -123,6 +125,10 @@ class CalendarEventInformationWidget extends StatelessWidget {
onCalendarEventReplyActionClick: onCalendarEventReplyActionClick,
calendarEventReplying: calendarEventReplying,
presentationEmail: presentationEmail,
onMailToAttendeesAction: () => onMailtoAttendeesAction?.call(
calendarEvent.organizer,
calendarEvent.participants,
),
),
],
),
@@ -194,6 +200,10 @@ class CalendarEventInformationWidget extends StatelessWidget {
onCalendarEventReplyActionClick: onCalendarEventReplyActionClick,
calendarEventReplying: calendarEventReplying,
presentationEmail: presentationEmail,
onMailToAttendeesAction: () => onMailtoAttendeesAction?.call(
calendarEvent.organizer,
calendarEvent.participants,
),
),
],
),
@@ -4,8 +4,6 @@ import 'package:core/presentation/views/image/avatar_builder.dart';
import 'package:core/presentation/views/text/text_overflow_builder.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/user_name.dart';
import 'package:model/extensions/username_extension.dart';
import 'package:tmail_ui_user/features/base/widget/material_text_button.dart';