@opencitylabs/formio-custom-components 0.6.1 → 0.6.3
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.
- package/dist/index.iife.js +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.js +19 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.iife.js
CHANGED
|
@@ -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 Ge(...e){return i.Components.baseEditForm([{key:`display`,components:K}],...e)}function Ke({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 q=t.Formio.Components.components.field,qe=({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(ae(t)).then(e=>e.json()).then(t=>{let n=ie(e||new Date),r=t.filter(e=>e.available==1);r.length===0&&he();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()})),re(r.length?r[0].date:e)}).catch(e=>console.error(e))},re=e=>{E(null),w(null),g([]);let t=(0,c.default)(e).format(`YYYY-MM-DD`);fetch(oe(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([]),he())})},z=()=>{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(()=>{z()},1e3)})},[]);let ie=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},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=`${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(`&`)}`},oe=(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},se=e=>{ne(e)},ce=e=>{setTimeout(()=>{te(!j)},1e3),re(e)},le=e=>{E(null),setTimeout(()=>{e&&(S(e.target.dataset),E(e.target.id))},300)},ue=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})})},de=()=>{x&&(ue(),te(!j))},fe=()=>(0,r.jsx)(`span`,{children:i.t(`Tempo prenotazione scaduto!`)}),pe=({minutes:e,seconds:t,completed:n})=>n?(0,r.jsx)(fe,{}):(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`)]})]})]})}),me=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(``)},he=()=>{v(!0),b(null),w(null),me(null)},B=()=>{if(i.language===`it`)return Fe;if(i.language===`en`)return Ee;if(i.language===`de`)return be};(0,a.useEffect)(()=>{me(N)},[N]),(0,a.useEffect)(()=>{document.querySelector(`.formio-read-only`)&&F===!1?(I(!0),setTimeout(()=>{z()},1e3)):(I(!1),setTimeout(()=>{z()},1e3))},[]);let ge=(e,t)=>{let n=`${M()}/api/meetings/${t.meeting_id}`;fetch(n,{method:`DELETE`,headers:{"Content-Type":`application/json; charset=utf-8`,Authorization:`Bearer ${U(`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)(Ke,{day:(0,c.default)(e.date,`DD-MM-YYYY`).format(`DD/MM/YYYY`),i18next:i,slot:e.slot})):(0,r.jsx)(Ke,{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:B(),disabled:m,onMonthChange:se,onDayClick:ce})]})}):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:B(),disabled:m,onMonthChange:se,onDayClick:ce})]})}),(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:()=>ge(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:pe})}):null]})}):null})]})}),(0,r.jsxs)(l.Modal,{isOpen:j,toggle:()=>te(!j),labelledBy:`daySelected`,size:`lg`,centered:!0,container:G(),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:le,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:le,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:()=>de(),disabled:!C||!x?.value_start,children:i.t(`Conferma`)})})]})]})},Je=class e extends q{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 q.schema({type:`calendar`})}static editForm=Ge;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)(qe,{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>`)}},Ye=[{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 Xe(...e){return i.Components.baseEditForm([{key:`display`,components:Ye}],...e)}function Ze({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 Qe(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 $e={AVAILABILITY:{key:`availability_data_cache_`,duration:10},SLOTS:{key:`availability_slots_cache_`,duration:10},SUBMISSION:{key:`submission_cache_`,duration:30}},et=(e,t,n)=>{let r={data:n,timestamp:(0,d.default)().toISOString()};localStorage.setItem(t,JSON.stringify(r))},tt=(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>$e[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}},nt=(e,...t)=>$e[e].key+btoa(t),rt=`calendar_view_state`,it=`calendar_view_date`,at=(e,t)=>{try{localStorage.setItem(rt,e),localStorage.setItem(it,t||new Date().toISOString())}catch(e){console.error(`Errore nel salvare lo stato della view:`,e)}},ot=()=>{try{let e=localStorage.getItem(rt),t=localStorage.getItem(it);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}}},J=()=>{try{localStorage.removeItem(rt),localStorage.removeItem(it)}catch(e){console.error(`Errore nel pulire lo stato della view:`,e)}},st=t.Formio.Components.components.field,ct=({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 re(e,t,n){return`${M()}/api/availabilities/${e}/${t}?calendar_ids=${n}&available=true`}let z=e=>{D([]),T([]),n({}),e&&T(o.filter(t=>t.date.startsWith(e)))},ie=async(e,t)=>{let r=JSON.parse(e),a=nt(`SLOTS`,r.date,r.calendar_ids);if(t===`manual`)D([]),N(null),x(null),n({});else{let e=tt(`SLOTS`,a);if(e){D(e);return}}try{let e=await window.FormioHelper.anonymousCall(`availabilities/${r.date}?calendar_ids=${r.calendar_ids}`);et(`SLOTS`,a,e.data),D(e.data)}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`)})}},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};window.FormioHelper.authenticatedRequest(t?.dataValue?.id?`PATCH`:`POST`,t?.dataValue?.id?`meetings/${t.dataValue.id}`:`meetings`,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):re(r,a,o),d=nt(`AVAILABILITY`,l),f=tt(`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}et(`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),z(n.value))},[S,O,t?.dataValue]),(0,a.useEffect)(()=>{if(A&&v===!1){let e=t?.dataValue??t?.getValue();ie(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]);let le=()=>{let e=ot();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=>{at(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};window.FormioHelper.authenticatedRequest(t?.dataValue?.id?`PATCH`:`POST`,t?.dataValue?.id?`meetings/${t.dataValue.id}`:`meetings`,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:ue,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)}})},ue=e=>{t?.root?.data?.place&&F.current.setOption(`eventSources`,[{events:de}])};async function de(e,n,r){try{F.current.setOption(`events`,[]);let r=(0,c.default)(e.start).format(`YYYY-MM-DD`),a=new Date(e.end);a.setDate(a.getDate()-1);let o=(0,c.default)(a).format(`YYYY-MM-DD`),s=t?.root?.data?.place?.merge_availabilities?t?.root?.data?.place?.merged_availabilities_link:null,l=s?R(s,r,o):re(r,o,null),d=nt(`AVAILABILITY`,l),f=tt(`AVAILABILITY`,d),p;if(f?(p=f,_(!1)):(p=await window.FormioHelper.fetchAPIUrlLimit(l),et(`AVAILABILITY`,d,p)),!p?.length){n([]),u.default.fire({icon:`warning`,title:i.t(`warning`),html:i.t(`no_meetings`)});return}let m=p.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:`${e.start_time} - ${e.end_time}`,editable:!1,display:`auto`,color:`#ebeef0`,textColor:`#000`,className:`event-slot`,extendedProps:{...e}})),h=I(p);F.current.setOption(`slotMinTime`,h.earliestStartTime),F.current.setOption(`slotMaxTime`,h.latestEndTime),L(p),Qe(F.current,m),n(m),setTimeout(()=>{fe(m)},500)}catch(e){console.error(`Errore nel caricamento disponibilità:`,e),r?.(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({}),J()),t?.data?.service_data?.view_type===`calendar`||e.view===`calendar`?F?.current||le():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&&=(P.current?.destroy?.(),null)}},[t?.root?.data?.place]);function fe(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`&&le(),y(!1))},[]),(0,a.useEffect)(()=>{v&&setTimeout(()=>{let e=t?.dataValue??t?.getValue();console.log(`savedValue`,e,v),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)(Ze,{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:z,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=>ie(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]})})},lt=class e extends st{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 st.schema({type:`calendar-advanced`})}static editForm=Xe;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)(ct,{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>`)}},ut=[{key:`defaultValue`,ignore:!0}],dt=[{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`]]}}}],ft=[{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 Ge(...e){return i.Components.baseEditForm([{key:`display`,components:K}],...e)}function Ke({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 q=t.Formio.Components.components.field,qe=({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(ae(t)).then(e=>e.json()).then(t=>{let n=ie(e||new Date),r=t.filter(e=>e.available==1);r.length===0&&he();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()})),re(r.length?r[0].date:e)}).catch(e=>console.error(e))},re=e=>{E(null),w(null),g([]);let t=(0,c.default)(e).format(`YYYY-MM-DD`);fetch(oe(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([]),he())})},z=()=>{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(()=>{z()},1e3)})},[]);let ie=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},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=`${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(`&`)}`},oe=(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},se=e=>{ne(e)},ce=e=>{setTimeout(()=>{te(!j)},1e3),re(e)},le=e=>{E(null),setTimeout(()=>{e&&(S(e.target.dataset),E(e.target.id))},300)},ue=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})})},de=()=>{x&&(ue(),te(!j))},fe=()=>(0,r.jsx)(`span`,{children:i.t(`Tempo prenotazione scaduto!`)}),pe=({minutes:e,seconds:t,completed:n})=>n?(0,r.jsx)(fe,{}):(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`)]})]})]})}),me=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(``)},he=()=>{v(!0),b(null),w(null),me(null)},B=()=>{if(i.language===`it`)return Fe;if(i.language===`en`)return Ee;if(i.language===`de`)return be};(0,a.useEffect)(()=>{me(N)},[N]),(0,a.useEffect)(()=>{document.querySelector(`.formio-read-only`)&&F===!1?(I(!0),setTimeout(()=>{z()},1e3)):(I(!1),setTimeout(()=>{z()},1e3))},[]);let ge=(e,t)=>{let n=`${M()}/api/meetings/${t.meeting_id}`;fetch(n,{method:`DELETE`,headers:{"Content-Type":`application/json; charset=utf-8`,Authorization:`Bearer ${U(`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)(Ke,{day:(0,c.default)(e.date,`DD-MM-YYYY`).format(`DD/MM/YYYY`),i18next:i,slot:e.slot})):(0,r.jsx)(Ke,{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:B(),disabled:m,onMonthChange:se,onDayClick:ce})]})}):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:B(),disabled:m,onMonthChange:se,onDayClick:ce})]})}),(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:()=>ge(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:pe})}):null]})}):null})]})}),(0,r.jsxs)(l.Modal,{isOpen:j,toggle:()=>te(!j),labelledBy:`daySelected`,size:`lg`,centered:!0,container:G(),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:le,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:le,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:()=>de(),disabled:!C||!x?.value_start,children:i.t(`Conferma`)})})]})]})},Je=class e extends q{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 q.schema({type:`calendar`})}static editForm=Ge;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)(qe,{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>`)}},Ye=[{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 Xe(...e){return i.Components.baseEditForm([{key:`display`,components:Ye}],...e)}function Ze({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 Qe(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 $e={AVAILABILITY:{key:`availability_data_cache_`,duration:10},SLOTS:{key:`availability_slots_cache_`,duration:10},SUBMISSION:{key:`submission_cache_`,duration:30}},et=(e,t,n)=>{let r={data:n,timestamp:(0,d.default)().toISOString()};localStorage.setItem(t,JSON.stringify(r))},tt=(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>$e[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}},nt=(e,...t)=>$e[e].key+btoa(t),rt=`calendar_view_state`,it=`calendar_view_date`,at=(e,t)=>{try{localStorage.setItem(rt,e),localStorage.setItem(it,t||new Date().toISOString())}catch(e){console.error(`Errore nel salvare lo stato della view:`,e)}},ot=()=>{try{let e=localStorage.getItem(rt),t=localStorage.getItem(it);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}}},J=()=>{try{localStorage.removeItem(rt),localStorage.removeItem(it)}catch(e){console.error(`Errore nel pulire lo stato della view:`,e)}},st=t.Formio.Components.components.field,ct=({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 re(e,t,n){return`${M()}/api/availabilities/${e}/${t}?calendar_ids=${n}&available=true`}let z=e=>{D([]),T([]),n({}),e&&T((o??[]).filter(t=>t.date.startsWith(e)))},ie=async(e,t)=>{let r=JSON.parse(e),a=nt(`SLOTS`,r.date,r.calendar_ids);if(t===`manual`)D([]),N(null),x(null),n({});else{let e=tt(`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??[];et(`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`)})}},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};window.FormioHelper.authenticatedRequest(t?.dataValue?.id?`PATCH`:`POST`,t?.dataValue?.id?`meetings/${t.dataValue.id}`:`meetings`,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):re(r,a,o),d=nt(`AVAILABILITY`,l),f=tt(`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}et(`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),z(n.value))},[S,O,t?.dataValue]),(0,a.useEffect)(()=>{if(A&&v===!1){let e=t?.dataValue??t?.getValue();ie(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]);let le=()=>{let e=ot();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=>{at(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};window.FormioHelper.authenticatedRequest(t?.dataValue?.id?`PATCH`:`POST`,t?.dataValue?.id?`meetings/${t.dataValue.id}`:`meetings`,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:ue,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)}})},ue=e=>{t?.root?.data?.place&&F.current.setOption(`eventSources`,[{events:de}])};async function de(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):re(n,a,null),l=nt(`AVAILABILITY`,s),d=tt(`AVAILABILITY`,l),f;if(d?(f=d,_(!1)):(f=await window.FormioHelper.fetchAPIUrlLimit(s),et(`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:`${e.start_time} - ${e.end_time}`,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),Qe(F.current,p),setTimeout(()=>{fe(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({}),J()),t?.data?.service_data?.view_type===`calendar`||e.view===`calendar`?F?.current||le():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&&=(P.current?.destroy?.(),null)}},[t?.root?.data?.place]);function fe(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`&&le(),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)(Ze,{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:z,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=>ie(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]})})},lt=class e extends st{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 st.schema({type:`calendar-advanced`})}static editForm=Xe;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)(ct,{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>`)}},ut=[{key:`defaultValue`,ignore:!0}],dt=[{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`]]}}}],ft=[{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>"
|