import { Controller } from "@hotwired/stimulus" export default class extends Controller { connect() { // Écoute tous les clics sur .open-modal -> détournement vers #lastStep + MAJ des options du formulaire document.querySelectorAll('.planning-cell-free').forEach(element => { element.addEventListener('click', this.handleClick.bind(this)) }) } handleClick(event) { event.preventDefault() const slotId = event.currentTarget.dataset.id if (!slotId) return // A partir du slotId -> // 1. trouver les slots disponible suviants // 2. mettre à jour le formulaire // 3. forcer un scroll jusqu'à #lastStep // Etape 1 fetch(`/api/slot/${slotId}/nexts`, { method: 'POST', headers: { 'Accept': 'application/json' } }) .then(response => { if (!response.ok) { throw new Error(`Erreur API: ${response.status}`); } return response.json(); }) .then(data => { // Etape 2 console.log('ID du slot cliqué :', slotId); console.log('IDs des slots suivants :', data.next_slots); console.log('Horaire de début :', data.start_date); console.log('Horaires de fin :', data.end_dates); const select = document.querySelector('#party_slots'); select.innerHTML = ''; // Vider les anciennes options const ids = data.next_slots; // ex: [1, 2, 3, 4] const labels = data.end_dates; // ex: ["07/08/25 14:00", "07/08/25 16:00", "07/08/25 18:00", "07/08/25 20:00"] let cumulativeIds = []; ids.forEach((id, index) => { cumulativeIds.push(id); // on ajoute l'ID courant à la liste const value = cumulativeIds.join('|'); // ex: "1|2|3" const label = labels[index] || `Créneau ${id}`; // on sécurise const option = document.createElement('option'); option.value = value; option.textContent = label; select.appendChild(option); }); const start = document.querySelector('#party_start'); start.innerHTML = ''; start.innerHTML = data.start_date; document.querySelector('#lastStep')?.scrollIntoView({ behavior: 'smooth' }); }) .catch(error => { console.error('Erreur lors de la récupération des slots :', error); }); } disconnect() { this.element.querySelectorAll('.planning-cell-free').forEach(element => { element.removeEventListener('click', this.handleClick) }) } }