Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

dashboard-slot-calendar.js 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /**
  2. * Calendario slot prenotazione (dashboard admin).
  3. */
  4. import { Calendar } from '@fullcalendar/core';
  5. import itLocale from '@fullcalendar/core/locales/it';
  6. import dayGridPlugin from '@fullcalendar/daygrid';
  7. import interactionPlugin from '@fullcalendar/interaction';
  8. import listPlugin from '@fullcalendar/list';
  9. import timeGridPlugin from '@fullcalendar/timegrid';
  10. function initSlotCalendar() {
  11. const calendarEl = document.getElementById('calendarioSlotPrenotazioni');
  12. if (!calendarEl) {
  13. return;
  14. }
  15. const dataEl = document.getElementById('calendarioSlotPrenotazioniData');
  16. let events = [];
  17. try {
  18. events = JSON.parse(dataEl ? dataEl.textContent : '[]');
  19. } catch (e) {
  20. events = [];
  21. }
  22. if (!Array.isArray(events)) {
  23. events = [];
  24. }
  25. const now = Date.now();
  26. const starts = events
  27. .map(function (event) {
  28. return event && event.start ? Date.parse(event.start) : NaN;
  29. })
  30. .filter(function (ts) {
  31. return !Number.isNaN(ts);
  32. })
  33. .sort(function (a, b) {
  34. return a - b;
  35. });
  36. const nextStart = starts.find(function (ts) {
  37. return ts >= now;
  38. });
  39. const initialDate = nextStart || starts[0];
  40. const calendar = new Calendar(calendarEl, {
  41. plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin],
  42. locale: itLocale,
  43. firstDay: 1,
  44. initialView: window.innerWidth < 768 ? 'listWeek' : 'timeGridWeek',
  45. initialDate: initialDate ? new Date(initialDate) : undefined,
  46. headerToolbar: {
  47. left: 'prev,next today',
  48. center: 'title',
  49. right: 'dayGridMonth,timeGridWeek,listWeek'
  50. },
  51. height: 'auto',
  52. navLinks: true,
  53. nowIndicator: true,
  54. slotMinTime: '06:00:00',
  55. slotMaxTime: '22:00:00',
  56. events: events,
  57. eventClick: function (info) {
  58. if (info.event.url) {
  59. info.jsEvent.preventDefault();
  60. window.location.href = info.event.url;
  61. }
  62. }
  63. });
  64. calendar.render();
  65. }
  66. if (document.readyState === 'loading') {
  67. document.addEventListener('DOMContentLoaded', initSlotCalendar);
  68. } else {
  69. initSlotCalendar();
  70. }