@opencitylabs/formio-custom-components 0.6.9 → 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,7 +64,7 @@ if(data.calendarId && data.api_url){
64
64
  data.overlaps_validation = -1; document.querySelector("input[name^='data[overlaps_validation]']").value = -1;
65
65
  }
66
66
  );
67
- }`,validateOn:`change`,validate:{customMessage:`Vi sono sovrapposizioni negli orari di apertura`,custom:`if (document.querySelector("input[name^='data[overlaps_validation]']").value === '0') {valid=true} else {valid = 'Sovrapposizione';}`},key:`overlaps_validation`,attributes:{readonly:`true`},required:!0,type:`number`,input:!0,weight:1},{label:`Precisione minima (minuti)`,defaultValue:1,required:!0,inputFormat:`plain`,key:`range_step`,type:`number`,input:!0,weight:1}];function Ke(...e){return i.Components.baseEditForm([{key:`display`,components:Ge}],...e)}function q({day:e,slot:t,i18next:n}){return(0,r.jsx)(`li`,{className:`it-list-item`,children:(0,r.jsx)(`div`,{className:`list-item`,children:(0,r.jsx)(`div`,{className:`it-right-zone`,children:(0,r.jsxs)(`span`,{className:`text pl-4`,children:[(0,r.jsx)(`b`,{children:e}),` `,n.t(`alle`),` `,n.t(`ore`),` `,(0,r.jsx)(`b`,{children:t})]})})})})}var qe=t.Formio.Components.components.field,Je=({component:e,current:t,onChange:n,i18next:i})=>{let[f,p]=(0,a.useState)(),[m,h]=(0,a.useState)([]),[ee,g]=(0,a.useState)([]),[_,v]=(0,a.useState)(!1),[y,b]=(0,a.useState)(null),[x,S]=(0,a.useState)(null),[C,w]=(0,a.useState)(null),[T,E]=(0,a.useState)(null),[D,O]=(0,a.useState)({}),[k,A]=(0,a.useState)(null),[j,te]=(0,a.useState)(!1),[N,P]=(0,a.useState)([]),[F,I]=(0,a.useState)(!1),L=(0,a.useRef)(),R=e.calendarId;c.default.locale(i.language),d.default.locale(i.language);let ne=e=>{let t=(0,c.default)(e).format(`YYYY-MM-DD`);fetch(ie(t)).then(e=>e.json()).then(t=>{let n=re(e||new Date),r=t.filter(e=>e.available==1);r.length===0&&me();let i=[];n.forEach(e=>{t.some(t=>t.date===e&&t.available==1)?i.push({available:!0,date:e}):i.push({available:!1,date:e})}),h(i.map(e=>{if(e.available===!1)return(0,c.default)(e.date,`YYYY-MM-DD`).toDate()})),z(r.length?r[0].date:e)}).catch(e=>console.error(e))},z=e=>{E(null),w(null),g([]);let t=(0,c.default)(e).format(`YYYY-MM-DD`);fetch(ae(t)).then(e=>e.json()).then(t=>{let n=t.filter(e=>e.availability==1);O(n[0]),n.length>0?(g(t),v(!1),w((0,c.default)(e).format(`L`)),p((0,c.default)(e,`YYYY-MM-DD`).toDate())):(t.length>0&&p((0,c.default)(t[0].date,`YYYY-MM-DD`).toDate()),g([]),me())})},B=()=>{if(R!==``&&R!=null)if(!t.dataValue)ne(new Date);else if(e.multiple&&Array.isArray(t.dataValue)){if(t.dataValue.length>0){A(t.dataValue);let e=[];t.dataValue.map(t=>{e.push({...t,date:(0,c.default)(t.date,`YYYY-MM-DD`).format(`DD-MM-YYYY`)})}),P(e)}}else if(!e.multiple&&typeof t.dataValue==`object`){let e={date:t.dataValue.date,slot:t.dataValue.slot};P([{...t.dataValue,date:(0,c.default)(t.dataValue.date,`YYYY-MM-DD`).format(`DD-MM-YYYY`)}]),A(e)}else{let r=t.dataValue.replace(`)`,``).replace(` (`,` @ `).replace(/\//g,`-`).split(` @ `),i=r[2].split(`#`),a={date:(0,c.default)(r[0],`DD-MM-YYYY`).format(`YYYY-MM-DD`),slot:r[1]};e.multiple?(n([{date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}]),P([{date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}])):(n({date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}),P([{date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}])),A(a)}};(0,a.useEffect)(()=>{window.FormioInstance?.formReady.then(()=>{setTimeout(()=>{B()},1e3)})},[]);let re=e=>{let t=(0,c.default)(e,`YYYY-MM`).daysInMonth(),n=[];for(;t;){let r=(0,c.default)(e).date(t);n.push(r.format(`YYYY-MM-DD`)),t--}return n},ie=(t,n=!1)=>{let r=e.calendarId,i=e.select_opening_hours,a=e.select_opening_hours?e.opening_hours:[];window.location.pathname.split(`/`);let o=`${M()}/api/calendars/${r}/availabilities`,s=[`from_time=${(0,c.default)(t).startOf(`month`).format(`YYYY-MM-DD`)}`,`to_time=${(0,c.default)(t).endOf(`month`).format(`YYYY-MM-DD`)}`];return n&&s.push(`available=${n}`),i&&a&&s.push(`opening_hours=${a.join()}`),`${o}?${s.join(`&`)}`},ae=(t,n=!1)=>{let r=e.calendarId,i=e.select_opening_hours,a=e.select_opening_hours?e.opening_hours:[];window.location.pathname.split(`/`);let o=(0,c.default)(t).format(`YYYY-MM-DD`),s=`${M()}/api/calendars/${r}/availabilities/${o}`,l=[];return n&&l.push(`available=${n}`),i&&a&&l.push(`opening_hours=${a.join()}`),l&&(s=`${s}?${l.join(`&`)}`),s},oe=e=>{ne(e)},se=e=>{setTimeout(()=>{te(!j)},1e3),z(e)},ce=e=>{E(null),setTimeout(()=>{e&&(S(e.target.dataset),E(e.target.id))},300)},le=t=>{b(null);let n=`${M()}/it/meetings/new-draft`,r={date:x?.date?(0,c.default)(x?.date).format(`DD-MM-YYYY`):(0,c.default)(t.target.dataset.date).format(`DD-MM-YYYY`),slot:x?.value_start&&x?.value_end?x.value_start+`-`+x.value_end:t.target.dataset.slots,calendar:e.calendarId,opening_hour:x?.opening_hour?x?.opening_hour:t.target.dataset.opening_hour,meeting:y?y.id:``,first_available_date:D.date,first_available_start_time:D.start_time,first_available_end_time:D.end_time,first_availability_updated_at:(0,c.default)().format()};fetch(n,{method:`POST`,body:JSON.stringify(r),headers:{"Content-Type":`application/json; charset=utf-8`},strictErrors:!0}).then(e=>{if(!e.ok)throw Error(i.t(`Intervallo selezionato non disponibile!`));return e.json()}).then(e=>{b(e);let t={date:r.date,slot:r.slot,calendar_id:r.calendar[0],opening_hour_id:r.opening_hour||r.opening_hour_id,meeting_id:e.id};P([...N,t])}).catch(e=>{console.log(e),u.default.fire({title:``,html:`<p>`+e+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1})})},ue=()=>{x&&(le(),te(!j))},de=()=>(0,r.jsx)(`span`,{children:i.t(`Tempo prenotazione scaduto!`)}),fe=({minutes:e,seconds:t,completed:n})=>n?(0,r.jsx)(de,{}):(0,r.jsx)(`div`,{children:(0,r.jsxs)(`div`,{children:[` `,(0,r.jsxs)(`span`,{children:[` `,(0,r.jsxs)(`i`,{children:[i.t(`Per confermare la prenotazione che ti abbiamo riservato procedi con l’invio di questa pratica e con il pagamento (se richiesto) di quanto previsto entro`),`:`]}),` `,(0,r.jsxs)(`b`,{children:[e,` `,i.t(`minuti`),` `,t,` `,i.t(`secondi`)]})]})]})}),pe=t=>{if(t===null||t===``)n(``);else if(Array.isArray(t)&&t.length>0){let t=[];N.map(e=>{t.push({date:(0,c.default)(e.date,`DD-MM-YYYY`).format(`YYYY-MM-DD`),slot:e.slot,calendar_id:e.calendar_id||e.calendar[0],meeting_id:e.meeting_id,opening_hour_id:e.opening_hour||e.opening_hour_id})}),e.multiple?n(t):n(t[0])}else n(``)},me=()=>{v(!0),b(null),w(null),pe(null)},V=()=>{if(i.language===`it`)return Pe;if(i.language===`en`)return Te;if(i.language===`de`)return ye};(0,a.useEffect)(()=>{pe(N)},[N]),(0,a.useEffect)(()=>{document.querySelector(`.formio-read-only`)&&F===!1?(I(!0),setTimeout(()=>{B()},1e3)):(I(!1),setTimeout(()=>{B()},1e3))},[]);let he=(e,t)=>{let n=`${M()}/api/meetings/${t.meeting_id}`;fetch(n,{method:`DELETE`,headers:{"Content-Type":`application/json; charset=utf-8`,Authorization:`Bearer ${W(`auth-token`)}`},strictErrors:!0}).then(t=>{t&&t.status>400?u.default.fire({title:``,html:`<p>${i.t(`Ci sono stati degli errori durante la cancellazione dello slot`)}</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1}):(P([...N.slice(0,e),...N.slice(e+1)]),ne(new Date))})};return(0,r.jsxs)(r.Fragment,{children:[F&&k?(0,r.jsxs)(`div`,{className:`my-5 mx-2 d-print-block d-preview-calendar d-preview-calendar-none`,children:[(0,r.jsxs)(`b`,{children:[Array.isArray(k)&&k.length>1?i.t(`Giorni selezionati per la prenotazione`):i.t(`Giorno selezionato per la prenotazione`),`:`]}),(0,r.jsx)(`div`,{className:`mb-5`,children:(0,r.jsx)(`div`,{className:`it-list-wrapper`,children:(0,r.jsx)(`ul`,{className:`it-list`,children:Array.isArray(k)?k.map(e=>(0,r.jsx)(q,{day:(0,c.default)(e.date,`DD-MM-YYYY`).format(`DD/MM/YYYY`),i18next:i,slot:e.slot})):(0,r.jsx)(q,{day:(0,d.default)(k.date).format(`DD/MM/YYYY`),i18next:i,slot:k.slot})})})})]}):(0,r.jsx)(`div`,{className:`slot-calendar `,children:(0,r.jsxs)(`div`,{className:`row`,children:[e.multiple?(0,r.jsx)(`div`,{className:`col-12 d-print-none d-preview-calendar-none`,children:(0,r.jsxs)(`div`,{className:`m-2`,children:[(0,r.jsx)(`h6`,{children:i.t(e.label)}),(0,r.jsx)(o.DayPicker,{mode:`single`,selected:f,locale:V(),disabled:m,onMonthChange:oe,onDayClick:se})]})}):N.length===1?null:(0,r.jsx)(`div`,{className:`col-12 d-print-none d-preview-calendar-none`,children:(0,r.jsxs)(`div`,{className:`m-2`,children:[(0,r.jsx)(`h6`,{children:i.t(e.label)}),(0,r.jsx)(o.DayPicker,{mode:`single`,selected:f,locale:V(),disabled:m,onMonthChange:oe,onDayClick:se})]})}),(0,r.jsx)(`div`,{className:`col-12`,children:N.length?(0,r.jsx)(`div`,{className:`row m-2`,children:(0,r.jsxs)(`div`,{className:`col-12 mb-4`,children:[(0,r.jsxs)(`b`,{children:[N.length>1?i.t(`Giorni selezionati per la prenotazione`):i.t(`Giorno selezionato per la prenotazione`),`:`,` `]}),(0,r.jsx)(`div`,{className:`mb-5`,children:(0,r.jsx)(`div`,{className:`it-list-wrapper`,children:(0,r.jsx)(`ul`,{className:`it-list`,children:N.map((e,t)=>(0,r.jsx)(`li`,{children:(0,r.jsx)(`div`,{className:`list-item`,children:(0,r.jsxs)(`div`,{className:`it-right-zone`,children:[(0,r.jsxs)(`span`,{className:`text pl-4`,children:[e.date,` `,x||e.slot?`${i.t(`alle`)} ${e.slot}`:``]}),(0,r.jsx)(l.Icon,{icon:`it-delete`,onClick:()=>he(t,e),role:`button`})]})})},`li`+t))})})}),y?(0,r.jsx)(l.Alert,{color:`info`,defaultValue:`string`,className:`d-print-none d-preview-calendar-none`,children:(0,r.jsx)(s.default,{date:y.expiration_time,renderer:fe})}):null]})}):null})]})}),(0,r.jsxs)(l.Modal,{isOpen:j,toggle:()=>te(!j),labelledBy:`daySelected`,size:`lg`,centered:!0,container:He(),children:[(0,r.jsx)(l.ModalHeader,{toggle:()=>te(!j),id:`daySelected`,children:i.t(`Seleziona una fascia oraria`)}),(0,r.jsx)(l.ModalBody,{children:(0,r.jsxs)(`div`,{className:`row`,children:[N.length>=1?(0,r.jsxs)(`div`,{children:[C&&!_?(0,r.jsxs)(`h6`,{children:[i.t(`Orari disponibili del`),` `,(0,d.default)(C).format(`DD/MM/YYYY`)]}):null,(0,r.jsxs)(`div`,{className:`calendar-last-selection col-12 pt-2 mb-5`,children:[(0,r.jsx)(`small`,{className:`pl-2 mb-2 d-flex px-2`,children:(0,r.jsxs)(`b`,{children:[(0,r.jsx)(l.Icon,{icon:`it-clock`,className:`mr-1`,size:`sm`}),` `,i.t(`Ultimo orario selezionato`)]})}),(0,r.jsx)(`div`,{className:`col-6 px-2`,children:(0,r.jsx)(`button`,{type:`button`,id:`slot-last-selection`,onClick:ce,tabIndex:`1`,className:T===`slot-last-selection`?`active btn btn-slot p-0`:`btn btn-slot p-0`,"data-date":(0,c.default)(C,`DD/MM/YYYY`).format(`YYYY-MM-DD`),"data-slots":N[N.length-1].slot,"data-opening_hour":N[N.length-1].opening_hour_id,"data-start":N[N.length-1].slot.split(`-`)[0],"data-end":N[N.length-1].slot.split(`-`)[1],"data-value_start":N[N.length-1].slot.split(`-`)[0],"data-value_end":N[N.length-1].slot.split(`-`)[1],disabled:_,children:N[N.length-1].slot})})]})]}):null,(0,r.jsx)(`div`,{children:C&&N.length>=1?(0,r.jsx)(`h6`,{children:i.t(`Seleziona altri orari`)}):_?null:(0,r.jsxs)(`h6`,{children:[i.t(`Orari disponibili del`),` `,(0,d.default)(C).format(`DD/MM/YYYY`)]})}),ee.map((e,t)=>(0,r.jsx)(`div`,{className:`col-6`,children:(0,r.jsxs)(`button`,{type:`button`,id:`slot-`+t,onClick:ce,ref:L,className:T===`slot-`+t?`active btn btn-slot p-0`:`btn btn-slot p-0`,tabIndex:`1`,"data-date":e.date,"data-start":e.start_time,"data-end":e.end_time,"data-value_start":e.start_time,"data-value_end":e.end_time,"data-slots":e.start_time+`-`+e.end_time,"data-opening_hour":e.opening_hour,"data-min_duration":e.min_duration,disabled:e.slots_available==0,children:[e.start_time,` - `,e.end_time]})},`slot-`+t)),_?(0,r.jsxs)(`div`,{className:`callout callout-highlight warning`,children:[(0,r.jsxs)(`div`,{className:`callout-title`,children:[(0,r.jsx)(l.Icon,{"aria-hidden":!0,icon:`it-help-circle`}),i.t(`Attenzione`)]}),(0,r.jsxs)(`p`,{children:[` `,i.t(`Non è possibile prenotare per la data selezionata`),`.`]})]}):null]})}),(0,r.jsx)(l.ModalFooter,{children:(0,r.jsx)(l.Button,{color:`primary`,onClick:()=>ue(),disabled:!C||!x?.value_start,children:i.t(`Conferma`)})})]})]})},Ye=class e extends qe{constructor(e,t,n){super(e,t,n)}static get builderInfo(){return{title:`Calendar`,group:`basic`,icon:`bi bi-calendar-plus`,documentation:``,weight:70,schema:e.schema()}}static schema(){return qe.schema({type:`calendar`})}static editForm=Ke;attach(e){return super.attach(e).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:`single`});let e=this.refs[`react-${this.id}`];return e?(this.rootComponent=(0,n.createRoot)(e),this.rootComponent.render((0,r.jsx)(Je,{component:this.component,value:this.dataValue,onChange:e=>this.setValue(e),...this,current:this})),this):this})}detach(){return this.rootComponent&&=(this.rootComponent.unmount(),null),super.detach()}setValue(e){if(e)if(Array.isArray(e))this.selectedNextSlots=e,this.updateValue(e),this.shouldSetValue=!0;else if(typeof e==`object`)this.date=e.date,this.slot=e.slot,this.meeting=e.meeting_id,this.meeting_expiration_time=null,this.opening_hour=e.opening_hour_id,this.calendar_id=e.calendar_id,this.updateValue(e),this.shouldSetValue=!0;else{let t=e.replace(`)`,``).replace(` (`,` @ `).replace(/\//g,`-`).split(` @ `),n=t[2].split(`#`);this.date=t[0],this.slot=t[1],this.meeting=n[1],this.meeting_expiration_time=null,this.opening_hour=n.length===3?n[2]:``,this.updateValue({date:this.date,slot:this.slot,calendar_id:this.calendar_id,meeting_id:this.meeting,opening_hour_id:this.opening_hour})}}getValue(){if(!(this.date&&this.slot&&this.meeting&&this.opening_hour)&&!(this.selectedNextSlots&&this.selectedNextSlots.length>0))return null;let e=this.meeting?this.meeting:``,t=this.opening_hour?this.opening_hour:``;return this.component.multiple?this.selectedNextSlots:{date:this.date,slot:this.slot,calendar_id:this.calendar_id,meeting_id:e,opening_hour_id:t}}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}},Xe=[{key:`labelPosition`,ignore:!0},{key:`placeholder`,ignore:!0},{key:`description`,ignore:!0},{key:`hideLabel`,ignore:!0},{key:`autofocus`,ignore:!0},{key:`tooltip`,ignore:!0},{key:`tabindex`,ignore:!0},{key:`disabled`,ignore:!0},{label:`Base url`,calculateValue:`let url = '`+M()+`'; data.url = url; value=url;`,key:`url`,type:`hidden`,input:!0,weight:1},{label:`Tipo di visualizazzione`,widget:`choicesjs`,tableView:!0,data:{values:[{label:`calendar`,value:`calendar`},{label:`select`,value:`select`}]},validateWhenHidden:!1,defaultValue:`calendar`,key:`view`,type:`select`,input:!0}];function Ze(...e){return i.Components.baseEditForm([{key:`display`,components:Xe}],...e)}function Qe({day:e,slot:t,i18next:n}){return(0,r.jsx)(`li`,{className:`it-list-item`,children:(0,r.jsx)(`div`,{className:`list-item`,children:(0,r.jsx)(`div`,{className:`it-right-zone`,children:(0,r.jsxs)(`span`,{className:`text-paragraph pl-4`,children:[(0,r.jsx)(`b`,{children:e}),` `,n.t(`alle`),` `,n.t(`ore`),` `,(0,r.jsx)(`b`,{children:t})]})})})})}function $e(e,t){if(!t||t.length===0)return;let n=t.map(e=>{let t=new Date(e.start);return(new Date(e.end)-t)/6e4}),r=Math.min(...n),i=n.reduce((e,t)=>e+t,0)/n.length,a=0;a=r<=30&&r>15?i*1:r<=15?i*24:i*4,e.setOption(`slotHeight`,a),document.documentElement.style.setProperty(`--slot-height`,`${a}px`)}var et={AVAILABILITY:{key:`availability_data_cache_`,duration:10},SLOTS:{key:`availability_slots_cache_`,duration:10},SUBMISSION:{key:`submission_cache_`,duration:30}},tt=(e,t,n)=>{let r={data:n,timestamp:(0,d.default)().toISOString()};localStorage.setItem(t,JSON.stringify(r))},nt=(e,t)=>{try{let n=localStorage.getItem(t);if(!n)return null;let r=JSON.parse(n),i=(0,d.default)().diff((0,d.default)(r.timestamp),`minutes`);return i>et[e].duration?(localStorage.removeItem(t),console.log(`⏰ Cache scaduto: ${e}`),null):(console.log(`✅ Cache letto: ${e} (${i} minuti fa)`),r.data)}catch(t){return console.error(`Errore nel leggere il cache (${e}):`,t),null}},rt=(e,...t)=>et[e].key+btoa(t),it=`calendar_view_state`,at=`calendar_view_date`,ot=(e,t)=>{try{localStorage.setItem(it,e),localStorage.setItem(at,t||new Date().toISOString())}catch(e){console.error(`Errore nel salvare lo stato della view:`,e)}},J=()=>{try{let e=localStorage.getItem(it),t=localStorage.getItem(at);return{viewType:e||`timeGridWeek`,date:t?new Date(t):new Date}}catch(e){return console.error(`Errore nel leggere lo stato della view:`,e),{viewType:`timeGridWeek`,date:new Date}}},st=()=>!!localStorage.getItem(at),ct=()=>{try{localStorage.removeItem(it),localStorage.removeItem(at)}catch(e){console.error(`Errore nel pulire lo stato della view:`,e)}},lt=t.Formio.Components.components.field,ut=({component:e,current:t,onChange:n,i18next:i})=>{let[o,s]=(0,a.useState)(null),[p,m]=(0,a.useState)(null),[h,ee]=(0,a.useState)([]),[g,_]=(0,a.useState)(!1),[v,y]=(0,a.useState)(!1),[b,x]=(0,a.useState)(null),[S,C]=(0,a.useState)([]),[w,T]=(0,a.useState)([]),[E,D]=(0,a.useState)([]),[O,k]=(0,a.useState)(null),[A,j]=(0,a.useState)(null),[te,N]=(0,a.useState)(null),P=(0,a.useRef)(null),F=(0,a.useRef)(null);i.language,c.default.locale(i.language),d.default.locale(i.language);function I(e){if(!e||e.length===0)return null;let t=e.map(e=>({start:e.start_time,end:e.end_time}));return{earliestStartTime:t.reduce((e,t)=>t.start<e?t.start:e,t[0].start),latestEndTime:t.reduce((e,t)=>t.end>e?t.end:e,t[0].end)}}function L(e){let t=e.map(e=>(0,c.default)(e.date).isoWeekday()),n=[1,2,3,4,5,6,7].filter(e=>!t.includes(e));n.length>0?F.current.setOption(`hiddenDays`,n):F.current.setOption(`hiddenDays`,[])}function R(e,t,n){let r=new URL(e),i=`${r.pathname.split(`/`).slice(0,4).join(`/`)}/${t}/${n}`;return`${r.origin}${i}${r.search}`}function ne(e,t,n){let r=new URL(e),i=`${r.pathname.split(`/`).slice(0,4).join(`/`)}`;return`${r.origin}${i}${r.search}&from_to=${t}&to_date=${n}`}function z(e,t,n){return`${M()}/api/availabilities/${e}/${t}?calendar_ids=${n}&available=true`}let B=e=>{D([]),T([]),n({}),e&&T((o??[]).filter(t=>t.date.startsWith(e)))},re=async(e,t)=>{let r=JSON.parse(e),a=rt(`SLOTS`,r.date,r.calendar_ids);if(t===`manual`)D([]),N(null),x(null),n({});else{let e=nt(`SLOTS`,a);if(e){D(e);return}}try{let e=await window.FormioHelper.anonymousCall(`availabilities/${r.date}?calendar_ids=${r.calendar_ids}`),t=Array.isArray(e)?e:e?.data??[];tt(`SLOTS`,a,t),D(t)}catch(e){console.error(`Errore nel caricamento degli slot:`,e),u.default.fire({icon:`error`,title:i.t(`Errore`),text:i.t(`Errore nel caricamento degli orari`)})}},ie=e=>{let n=t?.dataValue?.id,r=n?`PATCH`:`POST`,i=n?`meetings/${n}`:`meetings`;return window.FormioHelper.authenticatedRequest(r,i,e).catch(t=>{if((t?.response?.status===404||t?.status===404)&&r===`PATCH`)return window.FormioHelper.authenticatedRequest(`POST`,`meetings`,e);throw t})},ae=e=>{let r=JSON.parse(e),a={status:6,calendar:r.calendar_id,opening_hour:r.opening_hour_id,user:null,email:null,fiscal_code:null,name:` `,phone_number:null,from_time:(0,d.default)(`${r.date}T${r.start_time}`).toISOString(),to_time:(0,d.default)(`${r.date}T${r.end_time}`).toISOString(),user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:t?.data?.service_data?.id,calendar_group_office_id:t?.data?.user_group?.id,calendar_group_place_id:t?.data?.place?.id};ie(a).then(e=>{x({day:(0,d.default)(r.date).format(`dddd, DD MMMM YYYY`),startDate:r.start_time,endDate:r.end_time}),n(e?.id?e:e?{...e,id:t.dataValue.id}:t.dataValue.id?{...a,id:t.dataValue.id}:{...a})}).catch(e=>{console.error(e),e.status===400&&e?.response?.data?.type===`validation_error`?u.default.fire({title:``,html:`<p>`+i.t(`Lo slot orario selezionato non è disponibile perché già prenotato Seleziona un altro orario o una data diversa`)+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1}):u.default.fire({title:``,html:`<p>`+e+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1})})},oe=e=>{let t=new Set,n=[];return e.forEach(e=>{let r=(0,d.default)(e.date),i=r.format(`YYYY-MM`);t.has(i)||(t.add(i),n.push({value:i,label:r.format(`MMMM YYYY`).replace(/^\w/,e=>e.toUpperCase())}))}),n},se=async()=>{let e=t?.root?.data?.place?.merge_availabilities?t?.root?.data?.place?.merged_availabilities_link:null,r=(0,c.default)().format(`YYYY-MM-DD`),a=(0,c.default)().add(1,`month`).format(`YYYY-MM-DD`),o=t?.root?.data?.place?.calendars[0]?.id||null,l=e?ne(e,r,a):z(r,a,o),d=rt(`AVAILABILITY`,l),f=nt(`AVAILABILITY`,d);if(f){s(f),C(oe(f));return}else n({});_(!0);try{let e=await window.FormioHelper.fetchAPIUrlLimit(l);if(_(!1),!e?.length){u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`no_meetings`)});return}tt(`AVAILABILITY`,d,e),s(e),C(oe(e))}catch(e){_(!1),console.error(`Errore nel caricamento disponibilità:`,e)}};(0,a.useEffect)(()=>{if(o?.length){let e=t?.dataValue??t?.getValue();if(e?.from_time&&e?.to_time&&!(0,d.default)().isAfter(e?.draft_expiration)){let t=(0,d.default)(e.from_time).format(`YYYY-MM`);k(t),t&&T&&(T(o.filter(e=>e.date.startsWith(t))),j((0,d.default)(e.from_time).format(`YYYY-MM-DD`)))}else e?.draft_expiration&&(0,d.default)().isAfter(e?.draft_expiration)&&u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`expired_meeting`)})}},[o]),(0,a.useEffect)(()=>{let e=t?.dataValue??t?.getValue();if(!S.length||O||e?.from_time||e?.to_time)return;let n=S[0];n&&(k(n.value),B(n.value))},[S,O,t?.dataValue]),(0,a.useEffect)(()=>{if(A&&v===!1){let e=t?.dataValue??t?.getValue();re(JSON.stringify({date:A,calendar_ids:e.calendar.id}))}},[A]);let ce=()=>window.innerWidth>768?`timeGridWeek`:`timeGridDay`;(0,a.useEffect)(()=>{let e=()=>{let e=F.current;if(!e)return;let t=ce();t!==e.getView().type&&e.setOption(`view`,t)};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,a.useEffect)(()=>{let e=t?.dataValue??t?.getValue();E?.length&&e?.from_time&&(N((0,d.default)(e.from_time).format(`HH:mm`)+` - `+(0,d.default)(e.to_time).format(`HH:mm`)),x({day:(0,d.default)(e.from_time).format(`dddd D MMM YYYY`),startDate:(0,d.default)(e.from_time).format(`HH:mm`),endDate:(0,d.default)(e.to_time).format(`HH:mm`)}))},[E]);async function le(){try{let e=t?.root?.data?.place?.calendars?.[0]?.id??``,n=await window.FormioHelper.anonymousCall(`availabilities/first-available-date?calendar_ids=${e}`);n?.date&&ot(ce(),new Date(n.date))}catch(e){console.error(`Errore nel recuperare la prima disponibilità:`,e)}}let ue=()=>{let e=J();F.current=(0,f.createCalendar)(P.current,[f.TimeGrid],{events:[],buttonText:{today:i.t(`Oggi`)},allDaySlot:!1,firstDay:1,date:e.date,slotEventOverlap:!1,view:ce(),height:`400px`,views:{timeGridWeek:{allDaySlot:!1,firstDay:1,slotHeight:48},timeGridDay:{allDaySlot:!1,firstDay:1,slotHeight:48}},datesSet:e=>{ot(e.view.type,e.start)},eventClick({event:e,el:r}){document.querySelectorAll(`.ec-event`).forEach(e=>{e.classList.remove(`highlighted-event`)}),r.classList.add(`highlighted-event`);let a=new Date(e.start),o=new Date(e.end),s=a.toLocaleDateString(`it-IT`,{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),c=a.toLocaleTimeString(`it-IT`,{hour:`2-digit`,minute:`2-digit`}),l=o.toLocaleTimeString(`it-IT`,{hour:`2-digit`,minute:`2-digit`}),d={status:6,calendar:e.extendedProps.calendar_id,opening_hour:e.extendedProps.opening_hour_id,user:null,email:null,fiscal_code:null,name:` `,phone_number:null,from_time:a,to_time:o,user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:t?.data?.service_data?.id,calendar_group_office_id:t?.data?.user_group?.id,calendar_group_place_id:t?.data?.place?.id};ie(d).then(e=>{let r;!e||e===``?r={...d,code:null,id:t?.dataValue?.id}:typeof e==`object`&&(r=e),x({day:s,startDate:c,endDate:l}),n(r)}).catch(e=>{console.error(e),e.status===400&&e?.response?.data?.type===`validation_error`?u.default.fire({title:``,html:`<p>`+i.t(`Lo slot orario selezionato non è disponibile perché già prenotato Seleziona un altro orario o una data diversa`)+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1}):u.default.fire({title:``,html:`<p>`+e+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1})})},viewDidMount:de,eventDidMount:e=>{let{event:t,el:n}=e,r=t.extendedProps;n.setAttribute(`data-event-id`,t.id+`-`+r.date+`-`+r.start_time)},loading:e=>{_(e)}})},de=e=>{t?.root?.data?.place&&F.current.setOption(`eventSources`,[{events:fe}])};async function fe(e){try{F.current.setOption(`events`,[]);let n=(0,c.default)(e.start).format(`YYYY-MM-DD`),r=new Date(e.end);r.setDate(r.getDate()-1);let a=(0,c.default)(r).format(`YYYY-MM-DD`),o=t?.root?.data?.place?.merge_availabilities?t?.root?.data?.place?.merged_availabilities_link:null,s=o?R(o,n,a):z(n,a,null),l=rt(`AVAILABILITY`,s),d=nt(`AVAILABILITY`,l),f;if(d?(f=d,_(!1)):(f=await window.FormioHelper.fetchAPIUrlLimit(s),tt(`AVAILABILITY`,l,f)),!f?.length)return u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`no_meetings`)}),[];let p=f.map(e=>({id:e.opening_hour_id,allDay:!1,start:`${e.date}T${e.start_time}:00`,end:`${e.date}T${e.end_time}:00`,title:``,editable:!1,display:`auto`,color:`#ebeef0`,textColor:`#000`,className:`event-slot`,extendedProps:{...e}})),m=I(f);return F.current.setOption(`slotMinTime`,m.earliestStartTime),F.current.setOption(`slotMaxTime`,m.latestEndTime),L(f),$e(F.current,p),setTimeout(()=>{pe(p)},500),p}catch(e){throw console.error(`Errore nel caricamento disponibilità:`,e),e}}(0,a.useEffect)(()=>{let r,a=!1;async function o(){try{if(await window.FormioInstance?.formReady,a)return;if(!P.current){console.warn(`Elemento calendario non trovato`);return}let r=t?.dataValue??t?.getValue();r&&r?.draft_expiration&&(0,d.default)().isAfter(r.draft_expiration)&&(n({}),ct()),t?.data?.service_data?.view_type===`calendar`||e.view===`calendar`?F?.current||(st()||await le(),ue()):t?.data?.service_data?.view_type===`select`||e.view===`select`?se():alert(i.t(`Il componente non è configurato per la visualizzazione a calendario`))}catch(e){console.error(`Errore durante l'inizializzazione del calendario:`,e)}}return r=setTimeout(o,500),()=>{a=!0,r&&clearTimeout(r),F.current&&=((0,f.destroyCalendar)(F.current),null)}},[t?.root?.data?.place]);function pe(e){let n=t?.dataValue;if(!n?.from_time)return;let r=(0,d.default)(n.from_time).format(`DD-MM-YYYY HH:mm`),i=(0,d.default)(n.to_time).format(`DD-MM-YYYY HH:mm`),a=e.find(e=>(0,d.default)(e.start).format(`DD-MM-YYYY HH:mm`)===r&&(0,d.default)(e.end).format(`DD-MM-YYYY HH:mm`)===i);if(!a)return;let o=document.querySelector(`.ec-event[data-event-id="${a.id}-${(0,d.default)(n?.from_time).format(`YYYY-MM-DD`)}-${(0,d.default)(n?.from_time).format(`HH:mm`)}"]`);o&&(o.classList.add(`highlighted-event`),o.scrollIntoView({behavior:`smooth`,block:`center`}),x({day:(0,d.default)(n?.from_time).format(`dddd, DD MMMM YYYY`),startDate:(0,d.default)(n?.from_time).format(`HH:mm`),endDate:(0,d.default)(n?.to_time).format(`HH:mm`)}))}return(0,a.useEffect)(()=>{document.querySelector(`.formio-read-only`)&&v===!1?y(!0):(t?.data?.service_data?.view_type===`select`&&se(),y(!1))},[]),(0,a.useEffect)(()=>{v&&setTimeout(()=>{let e=t?.dataValue??t?.getValue();e&&m(e)},500)},[v]),(0,r.jsx)(r.Fragment,{children:v&&p?(0,r.jsxs)(`div`,{className:`mx-2`,children:[(0,r.jsxs)(`p`,{className:`text-paragraph`,children:[i.t(`Giorno selezionato per la prenotazione`),`:`]}),(0,r.jsx)(`div`,{className:``,children:(0,r.jsx)(`div`,{className:`it-list-wrapper`,children:(0,r.jsx)(`ul`,{className:`it-list`,children:(0,r.jsx)(Qe,{day:(0,d.default)(p.from_time).format(`dddd D MMM YYYY`),i18next:i,slot:`${(0,d.default)(p.from_time).format(`HH:mm`)} - ${(0,d.default)(p.to_time).format(`HH:mm`)}`})})})})]}):(0,r.jsxs)(`div`,{className:``,children:[(0,r.jsx)(`div`,{ref:P}),S.length>0?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(l.Select,{label:`Mese`,id:`selectMonthYear`,onChange:B,children:[(0,r.jsx)(`option`,{value:``,children:i.t(`Scegli un'opzione`)}),S.map(e=>(0,r.jsx)(`option`,{value:e.value,selected:e.value===O,children:e.label},e.value))]}),(0,r.jsxs)(l.Select,{label:`Giorno`,id:`selectDay`,onChange:e=>re(e,`manual`),disabled:w.length===0,children:[(0,r.jsx)(`option`,{value:``,children:i.t(`Scegli un'opzione`)}),w.map(e=>(0,r.jsx)(`option`,{value:JSON.stringify(e),selected:e.date===A,children:(0,d.default)(e.date).format(`dddd,DD MMMM YYYY`)},e.date))]}),(0,r.jsxs)(l.Select,{label:`Orario`,id:`selectSlot`,onChange:ae,disabled:E.length===0,children:[(0,r.jsx)(`option`,{value:``,children:i.t(`Scegli un'opzione`)}),E.map(e=>(0,r.jsx)(`option`,{value:JSON.stringify(e),selected:e.start_time+` - `+e.end_time===te,children:e.start_time+` - `+e.end_time},e.start_time+` - `+e.end_time))]})]}):null,b?(({day:e,startDate:t,endDate:n})=>(0,r.jsx)(`div`,{className:`mt-3`,children:(0,r.jsxs)(`div`,{className:`row align-items-center gy-3`,children:[(0,r.jsxs)(`div`,{className:`col-12 col-md border-light mx-md-3`,children:[(0,r.jsx)(`div`,{className:`text-paragraph-small`,children:i.t(`Data`)}),(0,r.jsx)(`p`,{className:`data-text`,children:(0,r.jsx)(`strong`,{children:e})})]}),(0,r.jsxs)(`div`,{className:`col-12 col-md border-light mx-md-3`,children:[(0,r.jsx)(`div`,{className:`text-paragraph-small`,children:i.t(`Ora`)}),(0,r.jsx)(`p`,{className:`data-text`,children:(0,r.jsxs)(`strong`,{children:[t,` - `,n]})})]})]})}))({day:b.day,startDate:b.startDate,endDate:b.endDate}):null,g?(0,r.jsx)(`div`,{className:`d-flex align-items-center justify-content-center position-absolute-center`,children:(0,r.jsx)(l.Spinner,{active:!0})}):null]})})},dt=class e extends lt{constructor(e,t,n){super(e,t,n)}static get builderInfo(){return{title:`Calendar Advanced`,group:`basic`,icon:`bi bi-calendar-plus`,documentation:``,weight:70,schema:e.schema()}}static schema(){return lt.schema({type:`calendar-advanced`})}static editForm=Ze;attach(e,t){return super.attach(e).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:`single`});let e=this.refs[`react-${this.id}`];return e?(this.rootComponent&&=(this.rootComponent.unmount(),null),this.rootComponent=(0,n.createRoot)(e),this.builderMode?(this.rootComponent.render((0,r.jsx)(`div`,{className:`my-1 border border-2 border-light rounded p-3 text-secondary`,children:(0,r.jsx)(`div`,{className:`h6 mb-0`,children:this.component?.label||`Calendar Advanced`})})),this):(this.rootComponent.render((0,r.jsx)(ut,{ref:t,component:this.component,value:this.dataValue,onChange:e=>this.setValue(e),...this,current:this})),this)):this})}detach(){return this.rootComponent&&=(this.rootComponent.unmount(),null),super.detach()}setValue(e){e&&(this.updateValue(e),this.shouldSetValue=!0)}getValue(){return this.dataValue}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}},ft=[{key:`defaultValue`,ignore:!0}],pt=[{key:`placeholder`,ignore:!0},{type:`checkbox`,label:`Files Synchronization feature`,tooltip:`Enable ability to control files synchronization. Files will be auto synced before submit.`,key:`autoSync`,input:!0,conditional:{json:{in:[{var:`data.storage`},[`s3`,`azure`,`googledrive`]]}}}],mt=[{type:`select`,input:!0,key:`storage`,label:`Storage`,placeholder:`Select your file storage provider`,weight:0,tooltip:`Which storage to save the files in.`,valueProperty:`value`,dataSrc:`custom`,hidden:!0,data:{custom:function(){return[{label:`url`,value:`url`}]}}},{type:`checkbox`,input:!0,defaultValue:!0,key:`protocol_required`,label:`Richiede protocollazione?`,tooltip:``,weight:10},{type:`checkbox`,input:!0,defaultValue:!1,key:`check_signature`,label:`Effettuare il controllo della firma?`,tooltip:``,weight:15},{type:`checkbox`,input:!0,key:`useMultipartUpload`,label:`Use the S3 Multipart Upload API`,tooltip:`The <a href='https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html'>S3 Multipart Upload API</a> is designed to improve the upload experience for larger objects (> 5GB).`,conditional:{json:{"===":[{var:`data.storage`},`s3`]}}},{label:`Multipart Upload`,tableView:!1,key:`multipart`,type:`container`,input:!0,components:[{label:`Part Size (MB)`,applyMaskOn:`change`,mask:!1,tableView:!1,delimiter:!1,requireDecimal:!1,inputFormat:`plain`,truncateMultipleSpaces:!1,validate:{min:5,max:5e3},key:`partSize`,type:`number`,input:!0,defaultValue:500}],conditional:{json:{"===":[{var:`data.useMultipartUpload`},!0]}}},{type:`textfield`,input:!0,key:`options.indexeddb`,label:`Database`,weight:10,placeholder:`Enter the indexeddb database name`,conditional:{json:{in:[{var:`data.storage`},[`indexeddb`]]}}},{type:`textfield`,input:!0,label:`Table`,key:`options.indexeddbTable`,weight:10,placeholder:`Enter the name for indexeddb table`,conditional:{json:{in:[{var:`data.storage`},[`indexeddb`]]}}},{type:`textarea`,key:`options`,label:`Custom request options`,tooltip:`Pass your custom xhr options(optional)`,rows:5,editor:`ace`,input:!0,weight:15,placeholder:`{
67
+ }`,validateOn:`change`,validate:{customMessage:`Vi sono sovrapposizioni negli orari di apertura`,custom:`if (document.querySelector("input[name^='data[overlaps_validation]']").value === '0') {valid=true} else {valid = 'Sovrapposizione';}`},key:`overlaps_validation`,attributes:{readonly:`true`},required:!0,type:`number`,input:!0,weight:1},{label:`Precisione minima (minuti)`,defaultValue:1,required:!0,inputFormat:`plain`,key:`range_step`,type:`number`,input:!0,weight:1}];function Ke(...e){return i.Components.baseEditForm([{key:`display`,components:Ge}],...e)}function q({day:e,slot:t,i18next:n}){return(0,r.jsx)(`li`,{className:`it-list-item`,children:(0,r.jsx)(`div`,{className:`list-item`,children:(0,r.jsx)(`div`,{className:`it-right-zone`,children:(0,r.jsxs)(`span`,{className:`text pl-4`,children:[(0,r.jsx)(`b`,{children:e}),` `,n.t(`alle`),` `,n.t(`ore`),` `,(0,r.jsx)(`b`,{children:t})]})})})})}var qe=t.Formio.Components.components.field,Je=({component:e,current:t,onChange:n,i18next:i})=>{let[f,p]=(0,a.useState)(),[m,h]=(0,a.useState)([]),[ee,g]=(0,a.useState)([]),[_,v]=(0,a.useState)(!1),[y,b]=(0,a.useState)(null),[x,S]=(0,a.useState)(null),[C,w]=(0,a.useState)(null),[T,E]=(0,a.useState)(null),[D,O]=(0,a.useState)({}),[k,A]=(0,a.useState)(null),[j,te]=(0,a.useState)(!1),[N,P]=(0,a.useState)([]),[F,I]=(0,a.useState)(!1),L=(0,a.useRef)(),R=e.calendarId;c.default.locale(i.language),d.default.locale(i.language);let ne=e=>{let t=(0,c.default)(e).format(`YYYY-MM-DD`);fetch(ie(t)).then(e=>e.json()).then(t=>{let n=re(e||new Date),r=t.filter(e=>e.available==1);r.length===0&&me();let i=[];n.forEach(e=>{t.some(t=>t.date===e&&t.available==1)?i.push({available:!0,date:e}):i.push({available:!1,date:e})}),h(i.map(e=>{if(e.available===!1)return(0,c.default)(e.date,`YYYY-MM-DD`).toDate()})),z(r.length?r[0].date:e)}).catch(e=>console.error(e))},z=e=>{E(null),w(null),g([]);let t=(0,c.default)(e).format(`YYYY-MM-DD`);fetch(ae(t)).then(e=>e.json()).then(t=>{let n=t.filter(e=>e.availability==1);O(n[0]),n.length>0?(g(t),v(!1),w((0,c.default)(e).format(`L`)),p((0,c.default)(e,`YYYY-MM-DD`).toDate())):(t.length>0&&p((0,c.default)(t[0].date,`YYYY-MM-DD`).toDate()),g([]),me())})},B=()=>{if(R!==``&&R!=null)if(!t.dataValue)ne(new Date);else if(e.multiple&&Array.isArray(t.dataValue)){if(t.dataValue.length>0){A(t.dataValue);let e=[];t.dataValue.map(t=>{e.push({...t,date:(0,c.default)(t.date,`YYYY-MM-DD`).format(`DD-MM-YYYY`)})}),P(e)}}else if(!e.multiple&&typeof t.dataValue==`object`){let e={date:t.dataValue.date,slot:t.dataValue.slot};P([{...t.dataValue,date:(0,c.default)(t.dataValue.date,`YYYY-MM-DD`).format(`DD-MM-YYYY`)}]),A(e)}else{let r=t.dataValue.replace(`)`,``).replace(` (`,` @ `).replace(/\//g,`-`).split(` @ `),i=r[2].split(`#`),a={date:(0,c.default)(r[0],`DD-MM-YYYY`).format(`YYYY-MM-DD`),slot:r[1]};e.multiple?(n([{date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}]),P([{date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}])):(n({date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}),P([{date:r[0],slot:r[1],calendar_id:i[0],meeting_id:i[1],opening_hour_id:i.length===3?i[2]:``}])),A(a)}};(0,a.useEffect)(()=>{window.FormioInstance?.formReady.then(()=>{setTimeout(()=>{B()},1e3)})},[]);let re=e=>{let t=(0,c.default)(e,`YYYY-MM`).daysInMonth(),n=[];for(;t;){let r=(0,c.default)(e).date(t);n.push(r.format(`YYYY-MM-DD`)),t--}return n},ie=(t,n=!1)=>{let r=e.calendarId,i=e.select_opening_hours,a=e.select_opening_hours?e.opening_hours:[];window.location.pathname.split(`/`);let o=`${M()}/api/calendars/${r}/availabilities`,s=[`from_time=${(0,c.default)(t).startOf(`month`).format(`YYYY-MM-DD`)}`,`to_time=${(0,c.default)(t).endOf(`month`).format(`YYYY-MM-DD`)}`];return n&&s.push(`available=${n}`),i&&a&&s.push(`opening_hours=${a.join()}`),`${o}?${s.join(`&`)}`},ae=(t,n=!1)=>{let r=e.calendarId,i=e.select_opening_hours,a=e.select_opening_hours?e.opening_hours:[];window.location.pathname.split(`/`);let o=(0,c.default)(t).format(`YYYY-MM-DD`),s=`${M()}/api/calendars/${r}/availabilities/${o}`,l=[];return n&&l.push(`available=${n}`),i&&a&&l.push(`opening_hours=${a.join()}`),l&&(s=`${s}?${l.join(`&`)}`),s},oe=e=>{ne(e)},se=e=>{setTimeout(()=>{te(!j)},1e3),z(e)},ce=e=>{E(null),setTimeout(()=>{e&&(S(e.target.dataset),E(e.target.id))},300)},le=t=>{b(null);let n=`${M()}/it/meetings/new-draft`,r={date:x?.date?(0,c.default)(x?.date).format(`DD-MM-YYYY`):(0,c.default)(t.target.dataset.date).format(`DD-MM-YYYY`),slot:x?.value_start&&x?.value_end?x.value_start+`-`+x.value_end:t.target.dataset.slots,calendar:e.calendarId,opening_hour:x?.opening_hour?x?.opening_hour:t.target.dataset.opening_hour,meeting:y?y.id:``,first_available_date:D.date,first_available_start_time:D.start_time,first_available_end_time:D.end_time,first_availability_updated_at:(0,c.default)().format()};fetch(n,{method:`POST`,body:JSON.stringify(r),headers:{"Content-Type":`application/json; charset=utf-8`},strictErrors:!0}).then(e=>{if(!e.ok)throw Error(i.t(`Intervallo selezionato non disponibile!`));return e.json()}).then(e=>{b(e);let t={date:r.date,slot:r.slot,calendar_id:r.calendar[0],opening_hour_id:r.opening_hour||r.opening_hour_id,meeting_id:e.id};P([...N,t])}).catch(e=>{console.log(e),u.default.fire({title:``,html:`<p>`+e+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1})})},ue=()=>{x&&(le(),te(!j))},de=()=>(0,r.jsx)(`span`,{children:i.t(`Tempo prenotazione scaduto!`)}),fe=({minutes:e,seconds:t,completed:n})=>n?(0,r.jsx)(de,{}):(0,r.jsx)(`div`,{children:(0,r.jsxs)(`div`,{children:[` `,(0,r.jsxs)(`span`,{children:[` `,(0,r.jsxs)(`i`,{children:[i.t(`Per confermare la prenotazione che ti abbiamo riservato procedi con l’invio di questa pratica e con il pagamento (se richiesto) di quanto previsto entro`),`:`]}),` `,(0,r.jsxs)(`b`,{children:[e,` `,i.t(`minuti`),` `,t,` `,i.t(`secondi`)]})]})]})}),pe=t=>{if(t===null||t===``)n(``);else if(Array.isArray(t)&&t.length>0){let t=[];N.map(e=>{t.push({date:(0,c.default)(e.date,`DD-MM-YYYY`).format(`YYYY-MM-DD`),slot:e.slot,calendar_id:e.calendar_id||e.calendar[0],meeting_id:e.meeting_id,opening_hour_id:e.opening_hour||e.opening_hour_id})}),e.multiple?n(t):n(t[0])}else n(``)},me=()=>{v(!0),b(null),w(null),pe(null)},V=()=>{if(i.language===`it`)return Pe;if(i.language===`en`)return Te;if(i.language===`de`)return ye};(0,a.useEffect)(()=>{pe(N)},[N]),(0,a.useEffect)(()=>{document.querySelector(`.formio-read-only`)&&F===!1?(I(!0),setTimeout(()=>{B()},1e3)):(I(!1),setTimeout(()=>{B()},1e3))},[]);let he=(e,t)=>{let n=`${M()}/api/meetings/${t.meeting_id}`;fetch(n,{method:`DELETE`,headers:{"Content-Type":`application/json; charset=utf-8`,Authorization:`Bearer ${W(`auth-token`)}`},strictErrors:!0}).then(t=>{t&&t.status>400?u.default.fire({title:``,html:`<p>${i.t(`Ci sono stati degli errori durante la cancellazione dello slot`)}</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1}):(P([...N.slice(0,e),...N.slice(e+1)]),ne(new Date))})};return(0,r.jsxs)(r.Fragment,{children:[F&&k?(0,r.jsxs)(`div`,{className:`my-5 mx-2 d-print-block d-preview-calendar d-preview-calendar-none`,children:[(0,r.jsxs)(`b`,{children:[Array.isArray(k)&&k.length>1?i.t(`Giorni selezionati per la prenotazione`):i.t(`Giorno selezionato per la prenotazione`),`:`]}),(0,r.jsx)(`div`,{className:`mb-5`,children:(0,r.jsx)(`div`,{className:`it-list-wrapper`,children:(0,r.jsx)(`ul`,{className:`it-list`,children:Array.isArray(k)?k.map(e=>(0,r.jsx)(q,{day:(0,c.default)(e.date,`DD-MM-YYYY`).format(`DD/MM/YYYY`),i18next:i,slot:e.slot})):(0,r.jsx)(q,{day:(0,d.default)(k.date).format(`DD/MM/YYYY`),i18next:i,slot:k.slot})})})})]}):(0,r.jsx)(`div`,{className:`slot-calendar `,children:(0,r.jsxs)(`div`,{className:`row`,children:[e.multiple?(0,r.jsx)(`div`,{className:`col-12 d-print-none d-preview-calendar-none`,children:(0,r.jsxs)(`div`,{className:`m-2`,children:[(0,r.jsx)(`h6`,{children:i.t(e.label)}),(0,r.jsx)(o.DayPicker,{mode:`single`,selected:f,locale:V(),disabled:m,onMonthChange:oe,onDayClick:se})]})}):N.length===1?null:(0,r.jsx)(`div`,{className:`col-12 d-print-none d-preview-calendar-none`,children:(0,r.jsxs)(`div`,{className:`m-2`,children:[(0,r.jsx)(`h6`,{children:i.t(e.label)}),(0,r.jsx)(o.DayPicker,{mode:`single`,selected:f,locale:V(),disabled:m,onMonthChange:oe,onDayClick:se})]})}),(0,r.jsx)(`div`,{className:`col-12`,children:N.length?(0,r.jsx)(`div`,{className:`row m-2`,children:(0,r.jsxs)(`div`,{className:`col-12 mb-4`,children:[(0,r.jsxs)(`b`,{children:[N.length>1?i.t(`Giorni selezionati per la prenotazione`):i.t(`Giorno selezionato per la prenotazione`),`:`,` `]}),(0,r.jsx)(`div`,{className:`mb-5`,children:(0,r.jsx)(`div`,{className:`it-list-wrapper`,children:(0,r.jsx)(`ul`,{className:`it-list`,children:N.map((e,t)=>(0,r.jsx)(`li`,{children:(0,r.jsx)(`div`,{className:`list-item`,children:(0,r.jsxs)(`div`,{className:`it-right-zone`,children:[(0,r.jsxs)(`span`,{className:`text pl-4`,children:[e.date,` `,x||e.slot?`${i.t(`alle`)} ${e.slot}`:``]}),(0,r.jsx)(l.Icon,{icon:`it-delete`,onClick:()=>he(t,e),role:`button`})]})})},`li`+t))})})}),y?(0,r.jsx)(l.Alert,{color:`info`,defaultValue:`string`,className:`d-print-none d-preview-calendar-none`,children:(0,r.jsx)(s.default,{date:y.expiration_time,renderer:fe})}):null]})}):null})]})}),(0,r.jsxs)(l.Modal,{isOpen:j,toggle:()=>te(!j),labelledBy:`daySelected`,size:`lg`,centered:!0,container:He(),children:[(0,r.jsx)(l.ModalHeader,{toggle:()=>te(!j),id:`daySelected`,children:i.t(`Seleziona una fascia oraria`)}),(0,r.jsx)(l.ModalBody,{children:(0,r.jsxs)(`div`,{className:`row`,children:[N.length>=1?(0,r.jsxs)(`div`,{children:[C&&!_?(0,r.jsxs)(`h6`,{children:[i.t(`Orari disponibili del`),` `,(0,d.default)(C).format(`DD/MM/YYYY`)]}):null,(0,r.jsxs)(`div`,{className:`calendar-last-selection col-12 pt-2 mb-5`,children:[(0,r.jsx)(`small`,{className:`pl-2 mb-2 d-flex px-2`,children:(0,r.jsxs)(`b`,{children:[(0,r.jsx)(l.Icon,{icon:`it-clock`,className:`mr-1`,size:`sm`}),` `,i.t(`Ultimo orario selezionato`)]})}),(0,r.jsx)(`div`,{className:`col-6 px-2`,children:(0,r.jsx)(`button`,{type:`button`,id:`slot-last-selection`,onClick:ce,tabIndex:`1`,className:T===`slot-last-selection`?`active btn btn-slot p-0`:`btn btn-slot p-0`,"data-date":(0,c.default)(C,`DD/MM/YYYY`).format(`YYYY-MM-DD`),"data-slots":N[N.length-1].slot,"data-opening_hour":N[N.length-1].opening_hour_id,"data-start":N[N.length-1].slot.split(`-`)[0],"data-end":N[N.length-1].slot.split(`-`)[1],"data-value_start":N[N.length-1].slot.split(`-`)[0],"data-value_end":N[N.length-1].slot.split(`-`)[1],disabled:_,children:N[N.length-1].slot})})]})]}):null,(0,r.jsx)(`div`,{children:C&&N.length>=1?(0,r.jsx)(`h6`,{children:i.t(`Seleziona altri orari`)}):_?null:(0,r.jsxs)(`h6`,{children:[i.t(`Orari disponibili del`),` `,(0,d.default)(C).format(`DD/MM/YYYY`)]})}),ee.map((e,t)=>(0,r.jsx)(`div`,{className:`col-6`,children:(0,r.jsxs)(`button`,{type:`button`,id:`slot-`+t,onClick:ce,ref:L,className:T===`slot-`+t?`active btn btn-slot p-0`:`btn btn-slot p-0`,tabIndex:`1`,"data-date":e.date,"data-start":e.start_time,"data-end":e.end_time,"data-value_start":e.start_time,"data-value_end":e.end_time,"data-slots":e.start_time+`-`+e.end_time,"data-opening_hour":e.opening_hour,"data-min_duration":e.min_duration,disabled:e.slots_available==0,children:[e.start_time,` - `,e.end_time]})},`slot-`+t)),_?(0,r.jsxs)(`div`,{className:`callout callout-highlight warning`,children:[(0,r.jsxs)(`div`,{className:`callout-title`,children:[(0,r.jsx)(l.Icon,{"aria-hidden":!0,icon:`it-help-circle`}),i.t(`Attenzione`)]}),(0,r.jsxs)(`p`,{children:[` `,i.t(`Non è possibile prenotare per la data selezionata`),`.`]})]}):null]})}),(0,r.jsx)(l.ModalFooter,{children:(0,r.jsx)(l.Button,{color:`primary`,onClick:()=>ue(),disabled:!C||!x?.value_start,children:i.t(`Conferma`)})})]})]})},Ye=class e extends qe{constructor(e,t,n){super(e,t,n)}static get builderInfo(){return{title:`Calendar`,group:`basic`,icon:`bi bi-calendar-plus`,documentation:``,weight:70,schema:e.schema()}}static schema(){return qe.schema({type:`calendar`})}static editForm=Ke;attach(e){return super.attach(e).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:`single`});let e=this.refs[`react-${this.id}`];return e?(this.rootComponent=(0,n.createRoot)(e),this.rootComponent.render((0,r.jsx)(Je,{component:this.component,value:this.dataValue,onChange:e=>this.setValue(e),...this,current:this})),this):this})}detach(){return this.rootComponent&&=(this.rootComponent.unmount(),null),super.detach()}setValue(e){if(e)if(Array.isArray(e))this.selectedNextSlots=e,this.updateValue(e),this.shouldSetValue=!0;else if(typeof e==`object`)this.date=e.date,this.slot=e.slot,this.meeting=e.meeting_id,this.meeting_expiration_time=null,this.opening_hour=e.opening_hour_id,this.calendar_id=e.calendar_id,this.updateValue(e),this.shouldSetValue=!0;else{let t=e.replace(`)`,``).replace(` (`,` @ `).replace(/\//g,`-`).split(` @ `),n=t[2].split(`#`);this.date=t[0],this.slot=t[1],this.meeting=n[1],this.meeting_expiration_time=null,this.opening_hour=n.length===3?n[2]:``,this.updateValue({date:this.date,slot:this.slot,calendar_id:this.calendar_id,meeting_id:this.meeting,opening_hour_id:this.opening_hour})}}getValue(){if(!(this.date&&this.slot&&this.meeting&&this.opening_hour)&&!(this.selectedNextSlots&&this.selectedNextSlots.length>0))return null;let e=this.meeting?this.meeting:``,t=this.opening_hour?this.opening_hour:``;return this.component.multiple?this.selectedNextSlots:{date:this.date,slot:this.slot,calendar_id:this.calendar_id,meeting_id:e,opening_hour_id:t}}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}},Xe=[{key:`labelPosition`,ignore:!0},{key:`placeholder`,ignore:!0},{key:`description`,ignore:!0},{key:`hideLabel`,ignore:!0},{key:`autofocus`,ignore:!0},{key:`tooltip`,ignore:!0},{key:`tabindex`,ignore:!0},{key:`disabled`,ignore:!0},{label:`Base url`,calculateValue:`let url = '`+M()+`'; data.url = url; value=url;`,key:`url`,type:`hidden`,input:!0,weight:1},{label:`Tipo di visualizazzione`,widget:`choicesjs`,tableView:!0,data:{values:[{label:`calendar`,value:`calendar`},{label:`select`,value:`select`}]},validateWhenHidden:!1,defaultValue:`calendar`,key:`view`,type:`select`,input:!0}];function Ze(...e){return i.Components.baseEditForm([{key:`display`,components:Xe}],...e)}function Qe({day:e,slot:t,i18next:n}){return(0,r.jsx)(`li`,{className:`it-list-item`,children:(0,r.jsx)(`div`,{className:`list-item`,children:(0,r.jsx)(`div`,{className:`it-right-zone`,children:(0,r.jsxs)(`span`,{className:`text-paragraph pl-4`,children:[(0,r.jsx)(`b`,{children:e}),` `,n.t(`alle`),` `,n.t(`ore`),` `,(0,r.jsx)(`b`,{children:t})]})})})})}function $e(e,t){if(!t||t.length===0)return;let n=t.map(e=>{let t=new Date(e.start);return(new Date(e.end)-t)/6e4}),r=Math.min(...n),i=n.reduce((e,t)=>e+t,0)/n.length,a=0;a=r<=30&&r>15?i*1:r<=15?i*24:i*4,e.setOption(`slotHeight`,a),document.documentElement.style.setProperty(`--slot-height`,`${a}px`)}var et={AVAILABILITY:{key:`availability_data_cache_`,duration:10},SLOTS:{key:`availability_slots_cache_`,duration:10},SUBMISSION:{key:`submission_cache_`,duration:30}},tt=(e,t,n)=>{let r={data:n,timestamp:(0,d.default)().toISOString()};localStorage.setItem(t,JSON.stringify(r))},nt=(e,t)=>{try{let n=localStorage.getItem(t);if(!n)return null;let r=JSON.parse(n),i=(0,d.default)().diff((0,d.default)(r.timestamp),`minutes`);return i>et[e].duration?(localStorage.removeItem(t),console.log(`⏰ Cache scaduto: ${e}`),null):(console.log(`✅ Cache letto: ${e} (${i} minuti fa)`),r.data)}catch(t){return console.error(`Errore nel leggere il cache (${e}):`,t),null}},rt=(e,...t)=>et[e].key+btoa(t),it=`calendar_view_state`,at=`calendar_view_date`,ot=(e,t)=>{try{localStorage.setItem(it,e),localStorage.setItem(at,t||new Date().toISOString())}catch(e){console.error(`Errore nel salvare lo stato della view:`,e)}},J=()=>{try{let e=localStorage.getItem(it),t=localStorage.getItem(at);return{viewType:e||`timeGridWeek`,date:t?new Date(t):new Date}}catch(e){return console.error(`Errore nel leggere lo stato della view:`,e),{viewType:`timeGridWeek`,date:new Date}}},st=()=>!!localStorage.getItem(at),ct=()=>{try{localStorage.removeItem(it),localStorage.removeItem(at)}catch(e){console.error(`Errore nel pulire lo stato della view:`,e)}},lt=t.Formio.Components.components.field,ut=({component:e,current:t,onChange:n,i18next:i})=>{let[o,s]=(0,a.useState)(null),[p,m]=(0,a.useState)(null),[h,ee]=(0,a.useState)([]),[g,_]=(0,a.useState)(!1),[v,y]=(0,a.useState)(!1),[b,x]=(0,a.useState)(null),[S,C]=(0,a.useState)([]),[w,T]=(0,a.useState)([]),[E,D]=(0,a.useState)([]),[O,k]=(0,a.useState)(null),[A,j]=(0,a.useState)(null),[te,N]=(0,a.useState)(null),P=(0,a.useRef)(null),F=(0,a.useRef)(null);i.language,c.default.locale(i.language),d.default.locale(i.language);function I(e){if(!e||e.length===0)return null;let t=e.map(e=>({start:e.start_time,end:e.end_time}));return{earliestStartTime:t.reduce((e,t)=>t.start<e?t.start:e,t[0].start),latestEndTime:t.reduce((e,t)=>t.end>e?t.end:e,t[0].end)}}function L(e){let t=e.map(e=>(0,c.default)(e.date).isoWeekday()),n=[1,2,3,4,5,6,7].filter(e=>!t.includes(e));n.length>0?F.current.setOption(`hiddenDays`,n):F.current.setOption(`hiddenDays`,[])}function R(e,t,n){let r=new URL(e),i=`${r.pathname.split(`/`).slice(0,4).join(`/`)}/${t}/${n}`;return`${r.origin}${i}${r.search}`}function ne(e,t,n){let r=new URL(e),i=`${r.pathname.split(`/`).slice(0,4).join(`/`)}`;return`${r.origin}${i}${r.search}&from_to=${t}&to_date=${n}`}function z(e,t,n){return`${M()}/api/availabilities/${e}/${t}?calendar_ids=${n}&available=true`}let B=e=>{D([]),T([]),n({}),e&&T((o??[]).filter(t=>t.date.startsWith(e)))},re=async(e,t)=>{let r=JSON.parse(e),a=rt(`SLOTS`,r.date,r.calendar_ids);if(t===`manual`)D([]),N(null),x(null),n({});else{let e=nt(`SLOTS`,a);if(e){D(e);return}}try{let e=await window.FormioHelper.anonymousCall(`availabilities/${r.date}?calendar_ids=${r.calendar_ids}`),t=Array.isArray(e)?e:e?.data??[];tt(`SLOTS`,a,t),D(t)}catch(e){console.error(`Errore nel caricamento degli slot:`,e),u.default.fire({icon:`error`,title:i.t(`Errore`),text:i.t(`Errore nel caricamento degli orari`)})}},ie=e=>{let n=t?.dataValue?.id,r=n?`PATCH`:`POST`,i=n?`meetings/${n}`:`meetings`;return window.FormioHelper.authenticatedRequest(r,i,e).catch(t=>{if((t?.response?.status===404||t?.status===404)&&r===`PATCH`)return window.FormioHelper.authenticatedRequest(`POST`,`meetings`,e);throw t})},ae=e=>{let r=JSON.parse(e),a={status:6,calendar:r.calendar_id,opening_hour:r.opening_hour_id,user:null,email:null,fiscal_code:null,name:` `,phone_number:null,from_time:(0,d.default)(`${r.date}T${r.start_time}`).toISOString(),to_time:(0,d.default)(`${r.date}T${r.end_time}`).toISOString(),user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:t?.data?.service_data?.id,calendar_group_office_id:t?.data?.user_group?.id,calendar_group_place_id:t?.data?.place?.id};ie(a).then(e=>{x({day:(0,d.default)(r.date).format(`dddd, DD MMMM YYYY`),startDate:r.start_time,endDate:r.end_time}),n(e?.id?e:e?{...e,id:t.dataValue.id}:t.dataValue.id?{...a,id:t.dataValue.id}:{...a})}).catch(e=>{console.error(e),e.status===400&&e?.response?.data?.type===`validation_error`?u.default.fire({title:``,html:`<p>`+i.t(`Lo slot orario selezionato non è disponibile perché già prenotato Seleziona un altro orario o una data diversa`)+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1}):u.default.fire({title:``,html:`<p>`+e+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1})})},oe=e=>{let t=new Set,n=[];return e.forEach(e=>{let r=(0,d.default)(e.date),i=r.format(`YYYY-MM`);t.has(i)||(t.add(i),n.push({value:i,label:r.format(`MMMM YYYY`).replace(/^\w/,e=>e.toUpperCase())}))}),n},se=async()=>{let e=t?.root?.data?.place?.merge_availabilities?t?.root?.data?.place?.merged_availabilities_link:null,r=(0,c.default)().format(`YYYY-MM-DD`),a=(0,c.default)().add(1,`month`).format(`YYYY-MM-DD`),o=t?.root?.data?.place?.calendars[0]?.id||null,l=e?ne(e,r,a):z(r,a,o),d=rt(`AVAILABILITY`,l),f=nt(`AVAILABILITY`,d);if(f){s(f),C(oe(f));return}else n({});_(!0);try{let e=await window.FormioHelper.fetchAPIUrlLimit(l);if(_(!1),!e?.length){u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`no_meetings`)});return}tt(`AVAILABILITY`,d,e),s(e),C(oe(e))}catch(e){_(!1),console.error(`Errore nel caricamento disponibilità:`,e)}};(0,a.useEffect)(()=>{if(o?.length){let e=t?.dataValue??t?.getValue();if(e?.from_time&&e?.to_time&&!(0,d.default)().isAfter(e?.draft_expiration)){let t=(0,d.default)(e.from_time).format(`YYYY-MM`);k(t),t&&T&&(T(o.filter(e=>e.date.startsWith(t))),j((0,d.default)(e.from_time).format(`YYYY-MM-DD`)))}else e?.draft_expiration&&(0,d.default)().isAfter(e?.draft_expiration)&&u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`expired_meeting`)})}},[o]),(0,a.useEffect)(()=>{let e=t?.dataValue??t?.getValue();if(!S.length||O||e?.from_time||e?.to_time)return;let n=S[0];n&&(k(n.value),B(n.value))},[S,O,t?.dataValue]),(0,a.useEffect)(()=>{if(A&&v===!1){let e=t?.dataValue??t?.getValue();re(JSON.stringify({date:A,calendar_ids:e.calendar.id}))}},[A]);let ce=()=>window.innerWidth>768?`timeGridWeek`:`timeGridDay`;(0,a.useEffect)(()=>{let e=()=>{let e=F.current;if(!e)return;let t=ce();t!==e.getView().type&&e.setOption(`view`,t)};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]),(0,a.useEffect)(()=>{let e=t?.dataValue??t?.getValue();E?.length&&e?.from_time&&(N((0,d.default)(e.from_time).format(`HH:mm`)+` - `+(0,d.default)(e.to_time).format(`HH:mm`)),x({day:(0,d.default)(e.from_time).format(`dddd D MMM YYYY`),startDate:(0,d.default)(e.from_time).format(`HH:mm`),endDate:(0,d.default)(e.to_time).format(`HH:mm`)}))},[E]);async function le(){try{let e=t?.root?.data?.place?.calendars?.[0]?.id??``,n=await window.FormioHelper.anonymousCall(`availabilities/first-available-date?calendar_ids=${e}`);n?.date&&ot(ce(),new Date(n.date))}catch(e){console.error(`Errore nel recuperare la prima disponibilità:`,e)}}let ue=()=>{let e=J();F.current=(0,f.createCalendar)(P.current,[f.TimeGrid],{events:[],buttonText:{today:i.t(`Oggi`)},allDaySlot:!1,firstDay:1,date:e.date,slotEventOverlap:!1,view:ce(),height:`400px`,views:{timeGridWeek:{allDaySlot:!1,firstDay:1,slotHeight:48},timeGridDay:{allDaySlot:!1,firstDay:1,slotHeight:48}},datesSet:e=>{ot(e.view.type,e.start)},eventClick({event:e,el:r}){document.querySelectorAll(`.ec-event`).forEach(e=>{e.classList.remove(`highlighted-event`)}),r.classList.add(`highlighted-event`);let a=new Date(e.start),o=new Date(e.end),s=a.toLocaleDateString(`it-IT`,{weekday:`long`,day:`numeric`,month:`long`,year:`numeric`}),c=a.toLocaleTimeString(`it-IT`,{hour:`2-digit`,minute:`2-digit`}),l=o.toLocaleTimeString(`it-IT`,{hour:`2-digit`,minute:`2-digit`}),d={status:6,calendar:e.extendedProps.calendar_id,opening_hour:e.extendedProps.opening_hour_id,user:null,email:null,fiscal_code:null,name:` `,phone_number:null,from_time:a,to_time:o,user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:t?.data?.service_data?.id,calendar_group_office_id:t?.data?.user_group?.id,calendar_group_place_id:t?.data?.place?.id};ie(d).then(e=>{let r;!e||e===``?r={...d,code:null,id:t?.dataValue?.id}:typeof e==`object`&&(r=e),x({day:s,startDate:c,endDate:l}),n(r)}).catch(e=>{console.error(e),e.status===400&&e?.response?.data?.type===`validation_error`?u.default.fire({title:``,html:`<p>`+i.t(`Lo slot orario selezionato non è disponibile perché già prenotato Seleziona un altro orario o una data diversa`)+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1}):u.default.fire({title:``,html:`<p>`+e+`</p>`,icon:`error`,cancelButtonText:i.t(`Chiudi`),showCancelButton:!0,showConfirmButton:!1})})},viewDidMount:de,eventDidMount:e=>{let{event:t,el:n}=e,r=t.extendedProps;n.setAttribute(`data-event-id`,t.id+`-`+r.date+`-`+r.start_time)},loading:e=>{_(e)}})},de=e=>{t?.root?.data?.place&&F.current.setOption(`eventSources`,[{events:fe}])};async function fe(e){try{F.current.setOption(`events`,[]);let n=(0,c.default)(e.start).format(`YYYY-MM-DD`),r=new Date(e.end);r.setDate(r.getDate()-1);let a=(0,c.default)(r).format(`YYYY-MM-DD`),o=t?.root?.data?.place?.merge_availabilities?t?.root?.data?.place?.merged_availabilities_link:null,s=o?R(o,n,a):z(n,a,null),l=rt(`AVAILABILITY`,s),d=nt(`AVAILABILITY`,l),f;if(d?(f=d,_(!1)):(f=await window.FormioHelper.fetchAPIUrlLimit(s),tt(`AVAILABILITY`,l,f)),!f?.length)return u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`no_meetings`)}),[];let p=f.map(e=>({id:e.opening_hour_id,allDay:!1,start:`${e.date}T${e.start_time}:00`,end:`${e.date}T${e.end_time}:00`,title:``,editable:!1,display:`auto`,color:`#ebeef0`,textColor:`#000`,className:`event-slot`,extendedProps:{...e}})),m=I(f);return F.current.setOption(`slotMinTime`,m.earliestStartTime),F.current.setOption(`slotMaxTime`,m.latestEndTime),L(f),$e(F.current,p),setTimeout(()=>{pe(p)},500),p}catch(e){throw console.error(`Errore nel caricamento disponibilità:`,e),e}}(0,a.useEffect)(()=>{let r,a=!1;async function o(){try{if(await window.FormioInstance?.formReady,a)return;if(!P.current){console.warn(`Elemento calendario non trovato`);return}let r=t?.dataValue??t?.getValue();r&&r?.draft_expiration&&(0,d.default)().isAfter(r.draft_expiration)&&(n({}),ct()),t?.data?.service_data?.view_type===`calendar`||e.view===`calendar`?F?.current||(st()||await le(),ue()):t?.data?.service_data?.view_type===`select`||e.view===`select`?se():alert(i.t(`Il componente non è configurato per la visualizzazione a calendario`))}catch(e){console.error(`Errore durante l'inizializzazione del calendario:`,e)}}return r=setTimeout(o,500),()=>{a=!0,r&&clearTimeout(r),F.current&&=((0,f.destroyCalendar)(F.current),null)}},[t?.root?.data?.place]);function pe(e){let n=t?.dataValue;if(!n?.from_time)return;let r=(0,d.default)(n.from_time).format(`DD-MM-YYYY HH:mm`),i=(0,d.default)(n.to_time).format(`DD-MM-YYYY HH:mm`),a=e.find(e=>(0,d.default)(e.start).format(`DD-MM-YYYY HH:mm`)===r&&(0,d.default)(e.end).format(`DD-MM-YYYY HH:mm`)===i);if(!a)return;let o=document.querySelector(`.ec-event[data-event-id="${a.id}-${(0,d.default)(n?.from_time).format(`YYYY-MM-DD`)}-${(0,d.default)(n?.from_time).format(`HH:mm`)}"]`);o&&(o.classList.add(`highlighted-event`),o.scrollIntoView({behavior:`smooth`,block:`center`}),x({day:(0,d.default)(n?.from_time).format(`dddd, DD MMMM YYYY`),startDate:(0,d.default)(n?.from_time).format(`HH:mm`),endDate:(0,d.default)(n?.to_time).format(`HH:mm`)}))}return(0,a.useEffect)(()=>{document.querySelector(`.formio-read-only`)&&v===!1?y(!0):(t?.data?.service_data?.view_type===`select`?se():t?.data?.service_data?.view_type===`calendar`&&ue(),y(!1))},[]),(0,a.useEffect)(()=>{v&&setTimeout(()=>{let e=t?.dataValue??t?.getValue();e&&m(e)},500)},[v]),(0,r.jsx)(r.Fragment,{children:v&&p?(0,r.jsxs)(`div`,{className:`mx-2`,children:[(0,r.jsxs)(`p`,{className:`text-paragraph`,children:[i.t(`Giorno selezionato per la prenotazione`),`:`]}),(0,r.jsx)(`div`,{className:``,children:(0,r.jsx)(`div`,{className:`it-list-wrapper`,children:(0,r.jsx)(`ul`,{className:`it-list`,children:(0,r.jsx)(Qe,{day:(0,d.default)(p.from_time).format(`dddd D MMM YYYY`),i18next:i,slot:`${(0,d.default)(p.from_time).format(`HH:mm`)} - ${(0,d.default)(p.to_time).format(`HH:mm`)}`})})})})]}):(0,r.jsxs)(`div`,{className:``,children:[(0,r.jsx)(`div`,{ref:P}),S.length>0?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(l.Select,{label:`Mese`,id:`selectMonthYear`,onChange:B,children:[(0,r.jsx)(`option`,{value:``,children:i.t(`Scegli un'opzione`)}),S.map(e=>(0,r.jsx)(`option`,{value:e.value,selected:e.value===O,children:e.label},e.value))]}),(0,r.jsxs)(l.Select,{label:`Giorno`,id:`selectDay`,onChange:e=>re(e,`manual`),disabled:w.length===0,children:[(0,r.jsx)(`option`,{value:``,children:i.t(`Scegli un'opzione`)}),w.map(e=>(0,r.jsx)(`option`,{value:JSON.stringify(e),selected:e.date===A,children:(0,d.default)(e.date).format(`dddd,DD MMMM YYYY`)},e.date))]}),(0,r.jsxs)(l.Select,{label:`Orario`,id:`selectSlot`,onChange:ae,disabled:E.length===0,children:[(0,r.jsx)(`option`,{value:``,children:i.t(`Scegli un'opzione`)}),E.map(e=>(0,r.jsx)(`option`,{value:JSON.stringify(e),selected:e.start_time+` - `+e.end_time===te,children:e.start_time+` - `+e.end_time},e.start_time+` - `+e.end_time))]})]}):null,b?(({day:e,startDate:t,endDate:n})=>(0,r.jsx)(`div`,{className:`mt-3`,children:(0,r.jsxs)(`div`,{className:`row align-items-center gy-3`,children:[(0,r.jsxs)(`div`,{className:`col-12 col-md border-light mx-md-3`,children:[(0,r.jsx)(`div`,{className:`text-paragraph-small`,children:i.t(`Data`)}),(0,r.jsx)(`p`,{className:`data-text`,children:(0,r.jsx)(`strong`,{children:e})})]}),(0,r.jsxs)(`div`,{className:`col-12 col-md border-light mx-md-3`,children:[(0,r.jsx)(`div`,{className:`text-paragraph-small`,children:i.t(`Ora`)}),(0,r.jsx)(`p`,{className:`data-text`,children:(0,r.jsxs)(`strong`,{children:[t,` - `,n]})})]})]})}))({day:b.day,startDate:b.startDate,endDate:b.endDate}):null,g?(0,r.jsx)(`div`,{className:`d-flex align-items-center justify-content-center position-absolute-center`,children:(0,r.jsx)(l.Spinner,{active:!0})}):null]})})},dt=class e extends lt{constructor(e,t,n){super(e,t,n)}static get builderInfo(){return{title:`Calendar Advanced`,group:`basic`,icon:`bi bi-calendar-plus`,documentation:``,weight:70,schema:e.schema()}}static schema(){return lt.schema({type:`calendar-advanced`})}static editForm=Ze;attach(e,t){return super.attach(e).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:`single`});let e=this.refs[`react-${this.id}`];return e?(this.rootComponent&&=(this.rootComponent.unmount(),null),this.rootComponent=(0,n.createRoot)(e),this.builderMode?(this.rootComponent.render((0,r.jsx)(`div`,{className:`my-1 border border-2 border-light rounded p-3 text-secondary`,children:(0,r.jsx)(`div`,{className:`h6 mb-0`,children:this.component?.label||`Calendar Advanced`})})),this):(this.rootComponent.render((0,r.jsx)(ut,{ref:t,component:this.component,value:this.dataValue,onChange:e=>this.setValue(e),...this,current:this})),this)):this})}detach(){return this.rootComponent&&=(this.rootComponent.unmount(),null),super.detach()}setValue(e){e&&(this.updateValue(e),this.shouldSetValue=!0)}getValue(){return this.dataValue}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}},ft=[{key:`defaultValue`,ignore:!0}],pt=[{key:`placeholder`,ignore:!0},{type:`checkbox`,label:`Files Synchronization feature`,tooltip:`Enable ability to control files synchronization. Files will be auto synced before submit.`,key:`autoSync`,input:!0,conditional:{json:{in:[{var:`data.storage`},[`s3`,`azure`,`googledrive`]]}}}],mt=[{type:`select`,input:!0,key:`storage`,label:`Storage`,placeholder:`Select your file storage provider`,weight:0,tooltip:`Which storage to save the files in.`,valueProperty:`value`,dataSrc:`custom`,hidden:!0,data:{custom:function(){return[{label:`url`,value:`url`}]}}},{type:`checkbox`,input:!0,defaultValue:!0,key:`protocol_required`,label:`Richiede protocollazione?`,tooltip:``,weight:10},{type:`checkbox`,input:!0,defaultValue:!1,key:`check_signature`,label:`Effettuare il controllo della firma?`,tooltip:``,weight:15},{type:`checkbox`,input:!0,key:`useMultipartUpload`,label:`Use the S3 Multipart Upload API`,tooltip:`The <a href='https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html'>S3 Multipart Upload API</a> is designed to improve the upload experience for larger objects (> 5GB).`,conditional:{json:{"===":[{var:`data.storage`},`s3`]}}},{label:`Multipart Upload`,tableView:!1,key:`multipart`,type:`container`,input:!0,components:[{label:`Part Size (MB)`,applyMaskOn:`change`,mask:!1,tableView:!1,delimiter:!1,requireDecimal:!1,inputFormat:`plain`,truncateMultipleSpaces:!1,validate:{min:5,max:5e3},key:`partSize`,type:`number`,input:!0,defaultValue:500}],conditional:{json:{"===":[{var:`data.useMultipartUpload`},!0]}}},{type:`textfield`,input:!0,key:`options.indexeddb`,label:`Database`,weight:10,placeholder:`Enter the indexeddb database name`,conditional:{json:{in:[{var:`data.storage`},[`indexeddb`]]}}},{type:`textfield`,input:!0,label:`Table`,key:`options.indexeddbTable`,weight:10,placeholder:`Enter the name for indexeddb table`,conditional:{json:{in:[{var:`data.storage`},[`indexeddb`]]}}},{type:`textarea`,key:`options`,label:`Custom request options`,tooltip:`Pass your custom xhr options(optional)`,rows:5,editor:`ace`,input:!0,weight:15,placeholder:`{
68
68
  "withCredentials": true,
69
69
  "headers": {
70
70
  "Authorization": "Basic <key>"