import 'package:flutter/material.dart'; import 'package:manager_api_new/api.dart'; import 'package:manager_app/constants.dart'; import 'package:manager_app/Components/check_input_container.dart'; import 'package:manager_app/Components/multi_string_input_container.dart'; import 'package:manager_app/Components/single_select_container.dart'; import 'showNewOrUpdateEventAgenda.dart'; class AgendaConfig extends StatefulWidget { final String? color; final String? label; final AgendaDTO initialValue; final ValueChanged onChanged; const AgendaConfig({ Key? key, this.color, this.label, required this.initialValue, required this.onChanged, }) : super(key: key); @override _AgendaConfigState createState() => _AgendaConfigState(); } class _AgendaConfigState extends State { late AgendaDTO agendaDTO; @override void initState() { super.initState(); agendaDTO = widget.initialValue; } @override Widget build(BuildContext context) { //Size size = MediaQuery.of(context).size; var mapProviderIn = ""; switch (agendaDTO.agendaMapProvider) { case MapProvider.Google: mapProviderIn = "Google"; break; case MapProvider.MapBox: mapProviderIn = "MapBox"; break; default: mapProviderIn = "Google"; break; } return Column( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ CheckInputContainer( label: "En ligne :", isChecked: agendaDTO.isOnlineAgenda ?? true, onChanged: (value) { setState(() { agendaDTO.isOnlineAgenda = value; widget.onChanged(agendaDTO); }); }, ), SingleSelectContainer( label: "Service carte :", color: Colors.black, initialValue: mapProviderIn, inputValues: ["Google", "MapBox"], onChanged: (String value) { setState(() { switch (value) { case "Google": agendaDTO.agendaMapProvider = MapProvider.Google; break; case "MapBox": agendaDTO.agendaMapProvider = MapProvider.MapBox; break; } widget.onChanged(agendaDTO); }); }, ), if (agendaDTO.isOnlineAgenda == true) MultiStringInputContainer( label: "Fichiers json :", resourceTypes: [ResourceType.Json, ResourceType.JsonUrl], modalLabel: "JSON", color: kPrimaryColor, initialValue: agendaDTO.resourceIds ?? [], isTitle: false, onGetResult: (value) { setState(() { agendaDTO.resourceIds = value; widget.onChanged(agendaDTO); }); }, maxLines: 1, ), ], ), ), if (agendaDTO.isOnlineAgenda == false) ...[ Divider(), Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text("Évènements Manuels", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), ElevatedButton.icon( icon: Icon(Icons.add), label: Text("Ajouter un évènement"), onPressed: () { showNewOrUpdateEventAgenda( context, null, agendaDTO.id ?? "temp", (newEvent) { setState(() { agendaDTO.events = [ ...(agendaDTO.events ?? []), newEvent ]; widget.onChanged(agendaDTO); }); }, ); }, style: ElevatedButton.styleFrom( backgroundColor: kSuccess, foregroundColor: kWhite), ), ], ), ), Expanded( child: (agendaDTO.events == null || agendaDTO.events!.isEmpty) ? Center( child: Text("Aucun évènement manuel", style: TextStyle(fontStyle: FontStyle.italic))) : ListView.builder( itemCount: agendaDTO.events!.length, itemBuilder: (context, index) { final event = agendaDTO.events![index]; return Card( margin: EdgeInsets.symmetric(horizontal: 16, vertical: 4), child: ListTile( title: Text(event.label ?.firstWhere((t) => t.language == 'FR', orElse: () => event.label![0]) .value ?? "Évènement $index"), subtitle: Text(event.address?.address ?? "Pas d'adresse"), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: Icon(Icons.edit, color: kPrimaryColor), onPressed: () { showNewOrUpdateEventAgenda( context, event, agendaDTO.id ?? "temp", (updatedEvent) { setState(() { agendaDTO.events![index] = updatedEvent; widget.onChanged(agendaDTO); }); }, ); }, ), IconButton( icon: Icon(Icons.delete, color: kError), onPressed: () { setState(() { agendaDTO.events!.removeAt(index); widget.onChanged(agendaDTO); }); }, ), ], ), ), ); }, ), ), ], ], ); } }