slot_toggle_controller.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { Controller } from "@hotwired/stimulus"
  2. export default class extends Controller {
  3. connect() {
  4. // Écoute tous les clics sur .open-modal -> détournement vers #lastStep + MAJ des options du formulaire
  5. document.querySelectorAll('.planning-cell-free, .planning-cell-locked').forEach(element => {
  6. element.addEventListener('click', this.handleClick.bind(this))
  7. })
  8. }
  9. handleClick(event) {
  10. event.preventDefault()
  11. const slotId = event.currentTarget.dataset.id
  12. const cell = event.currentTarget;
  13. const path = cell.querySelector('.icon path');
  14. if (!slotId) return
  15. // A partir du slotId ->
  16. // 1. trouver l'état du slot cliqué et le basculer dans la BDD (LOCKED/UNLOCKED/GAME)
  17. // 2. mettre à jour le style de la case cliquée
  18. // Etape 1
  19. fetch(`/api/slot/${slotId}/toggleStatus`, {
  20. method: 'POST',
  21. headers: {
  22. 'Accept': 'application/json'
  23. }
  24. })
  25. .then(response => {
  26. if (!response.ok) {
  27. throw new Error(`Erreur API: ${response.status}`);
  28. }
  29. return response.json();
  30. })
  31. .then(data => {
  32. // Etape 2
  33. console.log('ID du slot cliqué :', slotId);
  34. console.log('ÉTAT DU SLOT :', data.status);
  35. if (data.status === "UNLOCKED") {
  36. cell.classList.add('planning-cell-free');
  37. cell.classList.remove('planning-cell-locked');
  38. path.setAttribute('d', 'M12 0a4 4 0 0 1 4 4v2.5h-1V4a3 3 0 1 0-6 0v2h.5A2.5 2.5 0 0 1 12 8.5v5A2.5 2.5 0 0 1 9.5 16h-7A2.5 2.5 0 0 1 0 13.5v-5A2.5 2.5 0 0 1 2.5 6H8V4a4 4 0 0 1 4-4');
  39. } else if (data.status === "LOCKED") {
  40. cell.classList.remove('planning-cell-free');
  41. cell.classList.add('planning-cell-locked');
  42. path.setAttribute('d', 'M8 0a4 4 0 0 1 4 4v2.05a2.5 2.5 0 0 1 2 2.45v5a2.5 2.5 0 0 1-2.5 2.5h-7A2.5 2.5 0 0 1 2 13.5v-5a2.5 2.5 0 0 1 2-2.45V4a4 4 0 0 1 4-4m0 1a3 3 0 0 0-3 3v2h6V4a3 3 0 0 0-3-3');
  43. } else {
  44. console.warn("Statut de réponse sans action :", data.status);
  45. }
  46. })
  47. .catch(error => {
  48. console.error('Erreur lors de la récupération des slots :', error);
  49. });
  50. }
  51. disconnect() {
  52. this.element.querySelectorAll('.planning-cell-free').forEach(element => {
  53. element.removeEventListener('click', this.handleClick)
  54. })
  55. }
  56. }