diff --git a/lib/features/email/presentation/extensions/list_attendee_extension.dart b/lib/features/email/presentation/extensions/list_attendee_extension.dart new file mode 100644 index 000000000..248fd32b4 --- /dev/null +++ b/lib/features/email/presentation/extensions/list_attendee_extension.dart @@ -0,0 +1,19 @@ + +import 'package:collection/collection.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'; + +extension ListAttendeeExtension on List { + + String get mailtoAsString { + return map((attendee) => attendee.mailto?.mailAddress.value) + .whereNotNull() + .join(', '); + } + + List withoutOrganizer(CalendarOrganizer organizer) { + return where((attendee) => attendee.mailto?.mailAddress != organizer.mailto) + .whereNotNull() + .toList(); + } +} \ No newline at end of file diff --git a/lib/features/email/presentation/styles/event_attendee_information_widget_styles.dart b/lib/features/email/presentation/styles/event_attendee_information_widget_styles.dart new file mode 100644 index 000000000..3458ec504 --- /dev/null +++ b/lib/features/email/presentation/styles/event_attendee_information_widget_styles.dart @@ -0,0 +1,5 @@ + +class EventAttendeeInformationWidgetStyles { + static const double maxWidth = 100; + static const double textSize = 16; +} \ No newline at end of file diff --git a/lib/features/email/presentation/widgets/calendar_event/event_attendee_information_widget.dart b/lib/features/email/presentation/widgets/calendar_event/event_attendee_information_widget.dart new file mode 100644 index 000000000..bc373d6bc --- /dev/null +++ b/lib/features/email/presentation/widgets/calendar_event/event_attendee_information_widget.dart @@ -0,0 +1,61 @@ + +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:flutter/material.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:tmail_ui_user/features/email/presentation/extensions/list_attendee_extension.dart'; +import 'package:tmail_ui_user/features/email/presentation/styles/event_attendee_information_widget_styles.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +class EventAttendeeInformationWidget extends StatelessWidget { + + final List attendees; + final CalendarOrganizer organizer; + + const EventAttendeeInformationWidget({ + super.key, + required this.attendees, + required this.organizer + }); + + @override + Widget build(BuildContext context) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + width: EventAttendeeInformationWidgetStyles.maxWidth, + child: Text( + AppLocalizations.of(context).who, + style: const TextStyle( + fontSize: EventAttendeeInformationWidgetStyles.textSize, + fontWeight: FontWeight.w500, + color: AppColor.colorSubTitleEventActionText + ), + ), + ), + Expanded(child: RichText( + text: TextSpan( + style: const TextStyle( + fontSize: EventAttendeeInformationWidgetStyles.textSize, + fontWeight: FontWeight.w500, + color: Colors.black + ), + children: [ + TextSpan( + text: '${organizer.mailto?.value} (${AppLocalizations.of(context).organizer})', + style: const TextStyle( + color: AppColor.colorOrganizerMailto, + fontSize: EventAttendeeInformationWidgetStyles.textSize, + fontWeight: FontWeight.w500 + ), + ), + const TextSpan(text: ', '), + TextSpan(text: attendees.withoutOrganizer(organizer).mailtoAsString) + ] + ) + )) + ], + ); + } +} \ No newline at end of file