diff --git a/lib/features/email/presentation/email_view.dart b/lib/features/email/presentation/email_view.dart index f47912de2..f9d844fc4 100644 --- a/lib/features/email/presentation/email_view.dart +++ b/lib/features/email/presentation/email_view.dart @@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/app_bar_mail_w import 'package:tmail_ui_user/features/email/presentation/widgets/attachment_file_tile_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/bottom_bar_mail_widget_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_action_banner_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/calendar_event_information_widget.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart'; import 'package:tmail_ui_user/features/email/presentation/widgets/information_sender_and_receiver_builder.dart'; @@ -302,6 +303,15 @@ class EmailView extends GetWidget with AppLoaderMixin { return const SizedBox.shrink(); } }), + Obx(() { + if (controller.calendarEvent.value != null) { + return CalendarEventDetailWidget( + calendarEvent: controller.calendarEvent.value! + ); + } else { + return const SizedBox.shrink(); + } + }), if (PlatformInfo.isWeb) Expanded(child: Padding( padding: const EdgeInsetsDirectional.only(start: 16, bottom: 16), diff --git a/lib/features/email/presentation/styles/calendar_event_detail_widget_styles.dart b/lib/features/email/presentation/styles/calendar_event_detail_widget_styles.dart new file mode 100644 index 000000000..f76e33717 --- /dev/null +++ b/lib/features/email/presentation/styles/calendar_event_detail_widget_styles.dart @@ -0,0 +1,9 @@ + +class CalendarEventDetailWidgetStyles { + static const double textSize = 24; + static const double borderRadius = 16; + static const double verticalMargin = 12; + static const double horizontalMargin = 16; + static const double contentPadding = 16; + static const double fieldTopPadding = 16; +} \ No newline at end of file diff --git a/lib/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart b/lib/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart new file mode 100644 index 000000000..d0e2f5140 --- /dev/null +++ b/lib/features/email/presentation/widgets/calendar_event/calendar_event_detail_widget.dart @@ -0,0 +1,73 @@ + +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:jmap_dart_client/jmap/mail/calendar/calendar_event.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'; +import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_attendee_detail_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_description_detail_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_location_detail_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_time_detail_widget.dart'; +import 'package:tmail_ui_user/features/email/presentation/widgets/calendar_event/event_title_widget.dart'; + +class CalendarEventDetailWidget extends StatelessWidget { + + final CalendarEvent calendarEvent; + + const CalendarEventDetailWidget({ + super.key, + required this.calendarEvent + }); + + @override + Widget build(BuildContext context) { + return Container( + clipBehavior: Clip.antiAlias, + decoration: const ShapeDecoration( + color: Colors.white, + shape: RoundedRectangleBorder( + side: BorderSide( + width: 0.5, + color: AppColor.colorCalendarEventInformationStroke, + ), + borderRadius: BorderRadius.all(Radius.circular(CalendarEventDetailWidgetStyles.borderRadius)), + ), + ), + margin: const EdgeInsetsDirectional.symmetric( + vertical: CalendarEventDetailWidgetStyles.verticalMargin, + horizontal: CalendarEventDetailWidgetStyles.horizontalMargin), + padding: const EdgeInsets.all(CalendarEventDetailWidgetStyles.contentPadding), + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (calendarEvent.title?.isNotEmpty == true) + EventTitleWidget(title: calendarEvent.title!), + if (calendarEvent.description?.isNotEmpty == true) + Padding( + padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding), + child: EventDescriptionDetailWidget(description: calendarEvent.description!) + ), + if (calendarEvent.dateTimeEventAsString.isNotEmpty) + Padding( + padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding), + child: EventTimeWidgetWidget(timeEvent: calendarEvent.dateTimeEventAsString), + ), + if (calendarEvent.location?.isNotEmpty == true) + Padding( + padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding), + child: EventLocationDetailWidget(locationEvent: calendarEvent.location!), + ), + if (calendarEvent.participants?.isNotEmpty == true && calendarEvent.organizer != null) + Padding( + padding: const EdgeInsets.only(top: CalendarEventDetailWidgetStyles.fieldTopPadding), + child: EventAttendeeDetailWidget( + attendees: calendarEvent.participants!, + organizer: calendarEvent.organizer!, + ), + ), + ], + ), + ); + } +}