import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:provider/provider.dart'; import '../../../api/mhsl/customTimetableEvent/get/getCustomTimetableEventResponse.dart'; import '../../../model/timetable/timetableProps.dart'; import '../../../widget/centeredLeading.dart'; import '../../../widget/loadingSpinner.dart'; import '../../../widget/placeholderView.dart'; import 'appointmentDetails.dart'; import 'customTimetableEventEditDialog.dart'; class ViewCustomTimetableEvents extends StatefulWidget { const ViewCustomTimetableEvents({super.key}); @override State createState() => _ViewCustomTimetableEventsState(); } class _ViewCustomTimetableEventsState extends State { late Future events; @override void initState() { super.initState(); } _openCreateDialog() { showDialog( context: context, builder: (context) => const CustomTimetableEventEditDialog(), barrierDismissible: false, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Eigene Termine'), actions: [ IconButton( icon: const Icon(Icons.add), onPressed: _openCreateDialog, ) ], ), body: Consumer(builder: (context, value, child) { if(value.primaryLoading()) return const LoadingSpinner(); var listView = ListView( children: value.getCustomTimetableEventResponse.events.map((e) { return ListTile( title: Text(e.title), subtitle: Text("${e.rrule.isNotEmpty ? "wiederholdend, " : ""}beginnend ${Jiffy.parseFromDateTime(e.startDate).fromNow()}"), leading: CenteredLeading(Icon(e.rrule.isEmpty ? Icons.event_outlined : Icons.event_repeat_outlined)), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: const Icon(Icons.edit_outlined), onPressed: () { showDialog(context: context, builder: (context) => CustomTimetableEventEditDialog(existingEvent: e)); }, ), IconButton( icon: const Icon(Icons.delete_outline), onPressed: () { AppointmentDetails.deleteCustomEvent(context, e); }, ) ], ), ); }).toList(), ); var placeholder = PlaceholderView( icon: Icons.calendar_today_outlined, text: 'Keine Einträge vorhanden', button: TextButton( onPressed: _openCreateDialog, child: const Text('Termin erstellen'), ), ); return RefreshIndicator( onRefresh: () { Provider.of(context, listen: false).run(renew: true); return Future.delayed(const Duration(seconds: 3)); }, child: value.getCustomTimetableEventResponse.events.isEmpty ? placeholder : listView ); }), ); } }