import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:rrule/rrule.dart'; import '../../../../api/mhsl/customTimetableEvent/customTimetableEvent.dart'; import '../../../../widget/centered_leading.dart'; import '../../../../widget/debug/debug_tile.dart'; import '../custom_events/custom_event_edit_dialog.dart'; import '_bottom_sheet.dart'; import 'delete_custom_event.dart'; class CustomEventSheet { static void show(BuildContext context, CustomTimetableEvent event) { showAppointmentBottomSheet( context, header: (_) => Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Text(event.title, style: const TextStyle(fontSize: 25, overflow: TextOverflow.ellipsis)), Text( '${Jiffy.parseFromDateTime(event.startDate).format(pattern: 'HH:mm')} - ' '${Jiffy.parseFromDateTime(event.endDate).format(pattern: 'HH:mm')}', style: const TextStyle(fontSize: 15), ), ], ), ), body: (sheetCtx) => SliverChildListDelegate([ const Divider(), Center( child: Wrap( children: [ TextButton.icon( onPressed: () { Navigator.of(sheetCtx).pop(); showDialog( context: context, builder: (_) => CustomEventEditDialog(existingEvent: event), ); }, label: const Text('Bearbeiten'), icon: const Icon(Icons.edit_outlined), ), TextButton.icon( onPressed: () { showDeleteCustomEventDialog(context, event).future.then((_) { if (!sheetCtx.mounted) return; Navigator.of(sheetCtx).pop(); }); }, label: const Text('Löschen'), icon: const Icon(Icons.delete_outline), ), ], ), ), const Divider(), ListTile( leading: const Icon(Icons.info_outline), title: Text(event.description.isEmpty ? 'Keine Beschreibung' : event.description), ), ListTile( leading: const CenteredLeading(Icon(Icons.repeat_outlined)), title: Text('Serie: ${event.rrule.isNotEmpty ? "Wiederholend" : "Einmalig"}'), subtitle: FutureBuilder( future: RruleL10nEn.create(), builder: (_, snapshot) { if (event.rrule.isEmpty) return const Text('Keine weiteren Vorkommnisse'); if (snapshot.data == null) return const Text('...'); final rrule = RecurrenceRule.fromString(event.rrule); if (!rrule.canFullyConvertToText) return const Text('Keine genauere Angabe möglich.'); return Text(rrule.toText(l10n: snapshot.data!)); }, ), ), DebugTile(sheetCtx).child( ListTile( leading: const CenteredLeading(Icon(Icons.rule)), title: const Text('RRule'), subtitle: Text(event.rrule.isEmpty ? 'Keine' : event.rrule), ), ), DebugTile(sheetCtx).jsonData(event.toJson()), ]), ); } }