import 'package:flutter/material.dart'; import 'package:rrule/rrule.dart'; import '../../../../api/mhsl/custom_timetable_event/custom_timetable_event.dart'; import '../../../../extensions/date_time.dart'; import '../../../../widget/centered_leading.dart'; import '../../../../widget/debug/debug_tile.dart'; import '../../../../widget/details_bottom_sheet.dart'; import '../custom_events/custom_event_edit_dialog.dart'; import 'delete_custom_event.dart'; class CustomEventSheet { static void show(BuildContext context, CustomTimetableEvent event) { final timeRange = event.startDate.timeRangeTo(event.endDate); showDetailsBottomSheet( context, header: ListTile( leading: const Icon(Icons.event_outlined, size: 32), title: Text(event.title, style: const TextStyle(fontWeight: FontWeight.bold)), subtitle: Text(timeRange), ), children: (sheetCtx) => [ Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: 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(height: 1), 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()), ], ); } }