@opencitylabs/formio-custom-components 0.4.14 → 0.5.0
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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +889 -889
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -76,7 +76,7 @@ if(data.calendarId && data.api_url){
|
|
|
76
76
|
data.overlaps_validation = -1; document.querySelector("input[name^='data[overlaps_validation]']").value = -1;
|
|
77
77
|
}
|
|
78
78
|
);
|
|
79
|
-
}`,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 Th(...o){return Bt.Components.baseEditForm([{key:"display",components:jh}],...o)}function Yi({day:o,slot:s,i18next:u}){return m.jsx("li",{className:"it-list-item",children:m.jsx("div",{className:"list-item",children:m.jsx("div",{className:"it-right-zone",children:m.jsxs("span",{className:"text pl-4",children:[m.jsx("b",{children:o})," ",u.t("alle")," ",u.t("ore")," ",m.jsx("b",{children:s})]})})})})}const ji=Ct.Formio.Components.components.field,Ph=({component:o,current:s,onChange:u,i18next:i})=>{const[b,M]=G.useState(),[I,l]=G.useState([]),[y,r]=G.useState([]),[c,h]=G.useState(!1),[f,p]=G.useState(null),[g,C]=G.useState(null),[_,k]=G.useState(null),[Y,j]=G.useState(null),[F,R]=G.useState({}),[O,v]=G.useState(null),[T,S]=G.useState(!1),[x,V]=G.useState([]),[E,A]=G.useState(!1),z=G.useRef(),B=o.calendarId;he.locale(i.language),Se.locale(i.language);const ee=P=>{let H=he(P).format("YYYY-MM-DD");fetch(te(H)).then(N=>N.json()).then(N=>{let W=fe(P||new Date);const q=N.filter(_e=>_e.available==!0);q.length===0&&$();let se=[];W.forEach(_e=>{N.some($e=>$e.date===_e&&$e.available==!0)?se.push({available:!0,date:_e}):se.push({available:!1,date:_e})});const Pe=se.map(_e=>{if(_e.available===!1)return he(_e.date,"YYYY-MM-DD").toDate()});l(Pe);const ge=q.length?q[0].date:P;ie(ge)}).catch(N=>console.error(N))},ie=P=>{j(null),k(null),r([]);let H=he(P).format("YYYY-MM-DD");fetch(de(H)).then(N=>N.json()).then(N=>{const W=N.filter(q=>q.availability==!0);R(W[0]),W.length>0?(r(N),h(!1),k(he(P).format("L")),M(he(P,"YYYY-MM-DD").toDate())):(N.length>0&&M(he(N[0].date,"YYYY-MM-DD").toDate()),r([]),$())})},re=()=>{if(B!==""&&B!=null)if(!s.dataValue)ee(new Date);else if(o.multiple&&Array.isArray(s.dataValue)){if(s.dataValue.length>0){v(s.dataValue);let P=[];s.dataValue.map(H=>{P.push({...H,date:he(H.date,"YYYY-MM-DD").format("DD-MM-YYYY")})}),V(P)}}else if(!o.multiple&&typeof s.dataValue=="object"){const P={date:s.dataValue.date,slot:s.dataValue.slot},H={...s.dataValue,date:he(s.dataValue.date,"YYYY-MM-DD").format("DD-MM-YYYY")};V([H]),v(P)}else{let P=s.dataValue.replace(")","").replace(" ("," @ ").replace(/\//g,"-").split(" @ "),H=P[2].split("#");const N={date:he(P[0],"DD-MM-YYYY").format("YYYY-MM-DD"),slot:P[1]};o.multiple?(u([{date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}]),V([{date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}])):(u({date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}),V([{date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}])),v(N)}};G.useEffect(()=>{window.FormioInstance?.formReady.then(()=>{setTimeout(()=>{re()},1e3)})},[]);const fe=P=>{let N=he(P,"YYYY-MM").daysInMonth(),W=[];for(;N;){let q=he(P).date(N);W.push(q.format("YYYY-MM-DD")),N--}return W},te=(P,H=!1)=>{let N=o.calendarId,W=o.select_opening_hours,q=o.select_opening_hours?o.opening_hours:[];window.location.pathname.split("/");let se=`${Ee()}/api/calendars/${N}/availabilities`,Pe=[`from_time=${he(P).startOf("month").format("YYYY-MM-DD")}`,`to_time=${he(P).endOf("month").format("YYYY-MM-DD")}`];return H&&Pe.push(`available=${H}`),W&&q&&Pe.push(`opening_hours=${q.join()}`),`${se}?${Pe.join("&")}`},de=(P,H=!1)=>{let N=o.calendarId,W=o.select_opening_hours,q=o.select_opening_hours?o.opening_hours:[];window.location.pathname.split("/");const se=he(P).format("YYYY-MM-DD");let Pe=`${Ee()}/api/calendars/${N}/availabilities/${se}`,ge=[];return H&&ge.push(`available=${H}`),W&&q&&ge.push(`opening_hours=${q.join()}`),ge&&(Pe=`${Pe}?${ge.join("&")}`),Pe},ve=P=>{ee(P)},me=P=>{setTimeout(()=>{S(!T)},1e3),ie(P)},oe=P=>{j(null),setTimeout(()=>{P&&(C(P.target.dataset),j(P.target.id))},300)},Z=P=>{p(null);let H=`${Ee()}/it/meetings/new-draft`,N={date:g?.date?he(g?.date).format("DD-MM-YYYY"):he(P.target.dataset.date).format("DD-MM-YYYY"),slot:g?.value_start&&g?.value_end?g.value_start+"-"+g.value_end:P.target.dataset.slots,calendar:o.calendarId,opening_hour:g?.opening_hour?g?.opening_hour:P.target.dataset.opening_hour,meeting:f?f.id:"",first_available_date:F.date,first_available_start_time:F.start_time,first_available_end_time:F.end_time,first_availability_updated_at:he().format()};fetch(H,{method:"POST",body:JSON.stringify(N),headers:{"Content-Type":"application/json; charset=utf-8"},strictErrors:!0}).then(W=>{if(!W.ok)throw new Error(i.t("Intervallo selezionato non disponibile!"));return W.json()}).then(W=>{p(W);const q={date:N.date,slot:N.slot,calendar_id:N.calendar[0],opening_hour_id:N.opening_hour||N.opening_hour_id,meeting_id:W.id};V([...x,q])}).catch(W=>{console.log(W),He.fire({title:"",html:"<p>"+W+"</p>",icon:"error",cancelButtonText:i.t("Chiudi"),showCancelButton:!0,showConfirmButton:!1})})},Ne=()=>{g&&(Z(),S(!T))},Ie=()=>m.jsx("span",{children:i.t("Tempo prenotazione scaduto!")}),Ye=({minutes:P,seconds:H,completed:N})=>N?m.jsx(Ie,{}):m.jsx("div",{children:m.jsxs("div",{children:[" ",m.jsxs("span",{children:[" ",m.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"),":"]})," ",m.jsxs("b",{children:[P," ",i.t("minuti")," ",H," ",i.t("secondi")]})]})]})}),Oe=P=>{if(P===null||P==="")u("");else if(Array.isArray(P)&&P.length>0){let H=[];x.map(N=>{H.push({date:he(N.date,"DD-MM-YYYY").format("YYYY-MM-DD"),slot:N.slot,calendar_id:N.calendar_id||N.calendar[0],meeting_id:N.meeting_id,opening_hour_id:N.opening_hour||N.opening_hour_id})}),o.multiple?u(H):u(H[0])}else u("")},$=()=>{h(!0),p(null),k(null),Oe(null)},J=()=>{if(i.language==="it")return $s;if(i.language==="en")return Hs;if(i.language==="de")return qs};G.useEffect(()=>{Oe(x)},[x]),G.useEffect(()=>{document.querySelector(".formio-read-only")&&E===!1?(A(!0),setTimeout(()=>{re()},1e3)):(A(!1),setTimeout(()=>{re()},1e3))},[]);const X=(P,H)=>{let N=`${Ee()}/api/meetings/${H.meeting_id}`;fetch(N,{method:"DELETE",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${tr("auth-token")}`},strictErrors:!0}).then(W=>{if(W&&W.status>400)He.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});else{const q=[...x.slice(0,P),...x.slice(P+1)];V(q),ee(new Date)}})};return m.jsxs(m.Fragment,{children:[E&&O?m.jsxs("div",{className:"my-5 mx-2 d-print-block d-preview-calendar d-preview-calendar-none",children:[m.jsxs("b",{children:[Array.isArray(O)&&O.length>1?i.t("Giorni selezionati per la prenotazione"):i.t("Giorno selezionato per la prenotazione"),":"]}),m.jsx("div",{className:"mb-5",children:m.jsx("div",{className:"it-list-wrapper",children:m.jsx("ul",{className:"it-list",children:Array.isArray(O)?O.map(P=>m.jsx(Yi,{day:he(P.date,"DD-MM-YYYY").format("DD/MM/YYYY"),i18next:i,slot:P.slot})):m.jsx(Yi,{day:Se(O.date).format("DD/MM/YYYY"),i18next:i,slot:O.slot})})})})]}):m.jsx("div",{className:"slot-calendar ",children:m.jsxs("div",{className:"row",children:[o.multiple?m.jsx("div",{className:"col-12 d-print-none d-preview-calendar-none",children:m.jsxs("div",{className:"m-2",children:[m.jsx("h6",{children:i.t(o.label)}),m.jsx(yr.DayPicker,{mode:"single",selected:b,locale:J(),disabled:I,onMonthChange:ve,onDayClick:me})]})}):x.length!==1?m.jsx("div",{className:"col-12 d-print-none d-preview-calendar-none",children:m.jsxs("div",{className:"m-2",children:[m.jsx("h6",{children:i.t(o.label)}),m.jsx(yr.DayPicker,{mode:"single",selected:b,locale:J(),disabled:I,onMonthChange:ve,onDayClick:me})]})}):null,m.jsx("div",{className:"col-12",children:x.length?m.jsx("div",{className:"row m-2",children:m.jsxs("div",{className:"col-12 mb-4",children:[m.jsxs("b",{children:[x.length>1?i.t("Giorni selezionati per la prenotazione"):i.t("Giorno selezionato per la prenotazione"),":"," "]}),m.jsx("div",{className:"mb-5",children:m.jsx("div",{className:"it-list-wrapper",children:m.jsx("ul",{className:"it-list",children:x.map((P,H)=>m.jsx("li",{children:m.jsx("div",{className:"list-item",children:m.jsxs("div",{className:"it-right-zone",children:[m.jsxs("span",{className:"text pl-4",children:[P.date," ",g||P.slot?`${i.t("alle")} ${P.slot}`:""]}),m.jsx(ue.Icon,{icon:"it-delete",onClick:()=>X(H,P),role:"button"})]})})},"li"+H))})})}),f?m.jsx(ue.Alert,{color:"info",defaultValue:"string",className:"d-print-none d-preview-calendar-none",children:m.jsx(zs,{date:f.expiration_time,renderer:Ye})}):null]})}):null})]})}),m.jsxs(ue.Modal,{isOpen:T,toggle:()=>S(!T),labelledBy:"daySelected",size:"lg",centered:!0,container:_r(),children:[m.jsx(ue.ModalHeader,{toggle:()=>S(!T),id:"daySelected",children:i.t("Seleziona una fascia oraria")}),m.jsx(ue.ModalBody,{children:m.jsxs("div",{className:"row",children:[x.length>=1?m.jsxs("div",{children:[_&&!c?m.jsxs("h6",{children:[i.t("Orari disponibili del")," ",Se(_).format("DD/MM/YYYY")]}):null,m.jsxs("div",{className:"calendar-last-selection col-12 pt-2 mb-5",children:[m.jsx("small",{className:"pl-2 mb-2 d-flex px-2",children:m.jsxs("b",{children:[m.jsx(ue.Icon,{icon:"it-clock",className:"mr-1",size:"sm"})," ",i.t("Ultimo orario selezionato")]})}),m.jsx("div",{className:"col-6 px-2",children:m.jsx("button",{type:"button",id:"slot-last-selection",onClick:oe,tabIndex:"1",className:Y==="slot-last-selection"?"active btn btn-slot p-0":"btn btn-slot p-0","data-date":he(_,"DD/MM/YYYY").format("YYYY-MM-DD"),"data-slots":x[x.length-1].slot,"data-opening_hour":x[x.length-1].opening_hour_id,"data-start":x[x.length-1].slot.split("-")[0],"data-end":x[x.length-1].slot.split("-")[1],"data-value_start":x[x.length-1].slot.split("-")[0],"data-value_end":x[x.length-1].slot.split("-")[1],disabled:c,children:x[x.length-1].slot})})]})]}):null,m.jsx("div",{children:_&&x.length>=1?m.jsx("h6",{children:i.t("Seleziona altri orari")}):c?null:m.jsxs("h6",{children:[i.t("Orari disponibili del")," ",Se(_).format("DD/MM/YYYY")]})}),y.map((P,H)=>m.jsx("div",{className:"col-6",children:m.jsxs("button",{type:"button",id:"slot-"+H,onClick:oe,ref:z,className:Y==="slot-"+H?"active btn btn-slot p-0":"btn btn-slot p-0",tabIndex:"1","data-date":P.date,"data-start":P.start_time,"data-end":P.end_time,"data-value_start":P.start_time,"data-value_end":P.end_time,"data-slots":P.start_time+"-"+P.end_time,"data-opening_hour":P.opening_hour,"data-min_duration":P.min_duration,disabled:P.slots_available==0,children:[P.start_time," - ",P.end_time]})},"slot-"+H)),c?m.jsxs("div",{className:"callout callout-highlight warning",children:[m.jsxs("div",{className:"callout-title",children:[m.jsx(ue.Icon,{"aria-hidden":!0,icon:"it-help-circle"}),i.t("Attenzione")]}),m.jsxs("p",{children:[" ",i.t("Non è possibile prenotare per la data selezionata"),"."]})]}):null]})}),m.jsx(ue.ModalFooter,{children:m.jsx(ue.Button,{color:"primary",onClick:()=>Ne(),disabled:!_||!g?.value_start,children:i.t("Conferma")})})]})]})};class Sr extends ji{constructor(s,u,i){super(s,u,i)}static get builderInfo(){return{title:"Calendar",group:"basic",icon:"bi bi-calendar-plus",documentation:"",weight:70,schema:Sr.schema()}}static schema(){return ji.schema({type:"calendar"})}static editForm=Th;attach(s){return super.attach(s).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:"single"});const u=this.refs[`react-${this.id}`];return u?(this.rootComponent=Et.createRoot(u),this.rootComponent.render(m.jsx(Ph,{component:this.component,value:this.dataValue,onChange:i=>this.setValue(i),...this,current:this})),this):this})}detach(){return this.rootComponent&&(this.rootComponent.unmount(),this.rootComponent=null),super.detach()}setValue(s){if(s)if(Array.isArray(s))this.selectedNextSlots=s,this.updateValue(s),this.shouldSetValue=!0;else if(typeof s=="object")this.date=s.date,this.slot=s.slot,this.meeting=s.meeting_id,this.meeting_expiration_time=null,this.opening_hour=s.opening_hour_id,this.calendar_id=s.calendar_id,this.updateValue(s),this.shouldSetValue=!0;else{let u=s.replace(")","").replace(" ("," @ ").replace(/\//g,"-").split(" @ "),i=u[2].split("#");this.date=u[0],this.slot=u[1],this.meeting=i[1],this.meeting_expiration_time=null,this.opening_hour=i.length===3?i[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 s=this.meeting?this.meeting:"",u=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:s,opening_hour_id:u}}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}}const Nh=[{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 = '"+Ee()+"'; 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 Rh(...o){return Bt.Components.baseEditForm([{key:"display",components:Nh}],...o)}function Eh({day:o,slot:s,i18next:u}){return m.jsx("li",{className:"it-list-item",children:m.jsx("div",{className:"list-item",children:m.jsx("div",{className:"it-right-zone",children:m.jsxs("span",{className:"text-paragraph pl-4",children:[m.jsx("b",{children:o})," ",u.t("alle")," ",u.t("ore")," ",m.jsx("b",{children:s})]})})})})}function Ah(o,s){if(!s||s.length===0)return;const u=s.map(I=>{const l=new Date(I.start);return(new Date(I.end)-l)/6e4}),i=Math.min(...u),b=u.reduce((I,l)=>I+l,0)/u.length;let M=0;i<=30&&i>15?M=b*1:i<=15?M=b*24:M=b*4,o.setOption("slotHeight",M),document.documentElement.style.setProperty("--slot-height",`${M}px`)}const Gs={AVAILABILITY:{key:"availability_data_cache_",duration:10},SLOTS:{key:"availability_slots_cache_",duration:10},SUBMISSION:{key:"submission_cache_",duration:30}},Zr=(o,s,u)=>{const i={data:u,timestamp:Se().toISOString()};sessionStorage.setItem(s,JSON.stringify(i)),console.log(`✅ Cache salvato: ${o}`)},Qr=(o,s)=>{try{const u=sessionStorage.getItem(s);if(!u)return null;const i=JSON.parse(u),b=Se().diff(Se(i.timestamp),"minutes");return b>Gs[o].duration?(sessionStorage.removeItem(s),console.log(`⏰ Cache scaduto: ${o}`),null):(console.log(`✅ Cache letto: ${o} (${b} minuti fa)`),i.data)}catch(u){return console.error(`Errore nel leggere il cache (${o}):`,u),null}},ea=(o,...s)=>Gs[o].key+btoa(s),bn="calendar_view_state",wn="calendar_view_date",Ih=(o,s)=>{try{sessionStorage.setItem(bn,o),sessionStorage.setItem(wn,s||new Date().toISOString())}catch(u){console.error("Errore nel salvare lo stato della view:",u)}},Fh=()=>{try{const o=sessionStorage.getItem(bn),s=sessionStorage.getItem(wn);return{viewType:o||"timeGridWeek",date:s?new Date(s):new Date}}catch(o){return console.error("Errore nel leggere lo stato della view:",o),{viewType:"timeGridWeek",date:new Date}}},Js=()=>{try{sessionStorage.removeItem(bn),sessionStorage.removeItem(wn)}catch(o){console.error("Errore nel pulire lo stato della view:",o)}},Ti=Ct.Formio.Components.components.field,Vh=({component:o,current:s,onChange:u,i18next:i})=>{const[b,M]=G.useState(null),[I,l]=G.useState(null),[y,r]=G.useState([]),[c,h]=G.useState(!1),[f,p]=G.useState(!1),[g,C]=G.useState(null),[_,k]=G.useState([]),[Y,j]=G.useState([]),[F,R]=G.useState([]),[O,v]=G.useState(null),[T,S]=G.useState(null),[x,V]=G.useState(null),E=G.useRef(null),A=G.useRef(null);i.language,he.locale(i.language),Se.locale(i.language);function z($){if(!$||$.length===0)return null;const J=$.map(H=>({start:H.start_time,end:H.end_time})),X=J.reduce((H,N)=>N.start<H?N.start:H,J[0].start),P=J.reduce((H,N)=>N.end>H?N.end:H,J[0].end);return{earliestStartTime:X,latestEndTime:P}}function B($){const J=$.map(H=>he(H.date).isoWeekday()),P=[1,2,3,4,5,6,7].filter(H=>!J.includes(H));P.length>0?A.current.setOption("hiddenDays",P):A.current.setOption("hiddenDays",[])}function ee($,J,X){const P=new URL($),N=`${P.pathname.split("/").slice(0,4).join("/")}/${J}/${X}`;return`${P.origin}${N}${P.search}`}function ie($,J,X){const P=new URL($),N=`${P.pathname.split("/").slice(0,4).join("/")}`;return`${P.origin}${N}${P.search}&from_to=${J}&to_date=${X}`}function re($,J,X){return`${Ee()}/api/availabilities/${$}/${J}?calendar_ids=${X}&available=true`}const fe=$=>{R([]),j([]),u({}),$&&j(b.filter(J=>J.date.startsWith($)))},te=async($,J)=>{const X=JSON.parse($),P=ea("SLOTS",X.date,X.calendar_ids);if(J==="manual")R([]),V(null),C(null),u({});else{const H=Qr("SLOTS",P);if(H){R(H);return}}try{const H=await window.FormioHelper.anonymousCall(`availabilities/${X.date}?calendar_ids=${X.calendar_ids}`);Zr("SLOTS",P,H.data),R(H.data)}catch(H){console.error("Errore nel caricamento degli slot:",H),He.fire({icon:"error",title:i.t("Errore"),text:i.t("Errore nel caricamento degli orari")})}},de=$=>{const J=JSON.parse($),X={status:6,calendar:J.calendar_id,opening_hour:J.opening_hour_id,user:null,email:null,fiscal_code:null,name:" ",phone_number:null,from_time:Se(`${J.date}T${J.start_time}`).toISOString(),to_time:Se(`${J.date}T${J.end_time}`).toISOString(),user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:s?.data?.service_data?.id,calendar_group_office_id:s?.data?.user_group?.id,calendar_group_place_id:s?.data?.place?.id};window.FormioHelper.authenticatedRequest(s?.dataValue?.id?"PATCH":"POST",s?.dataValue?.id?`meetings/${s.dataValue.id}`:"meetings",X).then(P=>{C({day:Se(J.date).format("dddd, DD MMMM YYYY"),startDate:J.start_time,endDate:J.end_time}),u(P?.id?P:P?{...P,id:s.dataValue.id}:s.dataValue.id?{...X,id:s.dataValue.id}:{...X})}).catch(P=>{console.error(P),P.status===400&&P?.response?.data?.type==="validation_error"?He.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}):He.fire({title:"",html:"<p>"+P+"</p>",icon:"error",cancelButtonText:i.t("Chiudi"),showCancelButton:!0,showConfirmButton:!1})})},ve=$=>{const J=new Set,X=[];return $.forEach(P=>{const H=Se(P.date),N=H.format("YYYY-MM");J.has(N)||(J.add(N),X.push({value:N,label:H.format("MMMM YYYY").replace(/^\w/,W=>W.toUpperCase())}))}),X},me=async()=>{const $=s?.root?.data?.place?.merge_availabilities?s?.root?.data?.place?.merged_availabilities_link:null,J=he().format("YYYY-MM-DD"),X=he().add(1,"month").format("YYYY-MM-DD"),P=s?.root?.data?.place?.calendars[0]?.id||null,H=$?ie($,J,X):re(J,X,P),N=ea("AVAILABILITY",H),W=Qr("AVAILABILITY",N);if(W){M(W),k(ve(W));return}else u({});h(!0);try{const q=await window.FormioHelper.fetchAPIUrlLimit(H);if(h(!1),!q?.length){He.fire({icon:"warning",title:i.t("warning"),html:i.t("no_meetings")});return}Zr("AVAILABILITY",N,q),M(q),k(ve(q))}catch(q){h(!1),console.error("Errore nel caricamento disponibilità:",q)}};G.useEffect(()=>{if(b?.length){const $=s?.dataValue??s?.getValue();if($?.from_time&&$?.to_time&&!Se().isAfter($?.draft_expiration)){const J=Se($.from_time).format("YYYY-MM");v(J),J&&j&&(j(b.filter(X=>X.date.startsWith(J))),S(Se($.from_time).format("YYYY-MM-DD")))}else $?.draft_expiration&&Se().isAfter($?.draft_expiration)&&He.fire({icon:"warning",title:i.t("warning"),html:i.t("expired_meeting")})}},[b]),G.useEffect(()=>{const $=s?.dataValue??s?.getValue();if(!_.length||O||$?.from_time||$?.to_time)return;const J=_[0];J&&(v(J.value),fe(J.value))},[_,O,s?.dataValue]),G.useEffect(()=>{if(T&&f===!1){const $=s?.dataValue??s?.getValue();te(JSON.stringify({date:T,calendar_ids:$.calendar.id}))}},[T]);const oe=()=>window.innerWidth>768?"timeGridWeek":"timeGridDay";G.useEffect(()=>{const $=()=>{const J=A.current;if(!J)return;const X=oe(),P=J.getView().type;X!==P&&J.setOption("view",X)};return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},[]),G.useEffect(()=>{const $=s?.dataValue??s?.getValue();F?.length&&$?.from_time&&(V(Se($.from_time).format("HH:mm")+" - "+Se($.to_time).format("HH:mm")),C({day:Se($.from_time).format("dddd D MMM YYYY"),startDate:Se($.from_time).format("HH:mm"),endDate:Se($.to_time).format("HH:mm")}))},[F]);const Z=()=>{const $=Fh();A.current=di.createCalendar(E.current,[di.TimeGrid],{events:[],buttonText:{today:i.t("Oggi")},allDaySlot:!1,firstDay:1,date:$.date,slotEventOverlap:!1,view:oe(),height:"400px",views:{timeGridWeek:{allDaySlot:!1,firstDay:1,slotHeight:48},timeGridDay:{allDaySlot:!1,firstDay:1,slotHeight:48}},datesSet:J=>{Ih(J.view.type,J.start)},eventClick({event:J,el:X}){document.querySelectorAll(".ec-event").forEach(se=>{se.classList.remove("highlighted-event")}),X.classList.add("highlighted-event");const P=new Date(J.start),H=new Date(J.end),N=P.toLocaleDateString("it-IT",{weekday:"long",day:"numeric",month:"long",year:"numeric"}),W=P.toLocaleTimeString("it-IT",{hour:"2-digit",minute:"2-digit"}),q=H.toLocaleTimeString("it-IT",{hour:"2-digit",minute:"2-digit"}),ce={status:6,calendar:J.extendedProps.calendar_id,opening_hour:J.extendedProps.opening_hour_id,user:null,email:null,fiscal_code:null,name:" ",phone_number:null,from_time:P,to_time:H,user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:s?.data?.service_data?.id,calendar_group_office_id:s?.data?.user_group?.id,calendar_group_place_id:s?.data?.place?.id};window.FormioHelper.authenticatedRequest(s?.dataValue?.id?"PATCH":"POST",s?.dataValue?.id?`meetings/${s.dataValue.id}`:"meetings",ce).then(se=>{let Pe;!se||se===""?Pe={...ce,code:null,id:s?.dataValue?.id}:typeof se=="object"&&(Pe=se),C({day:N,startDate:W,endDate:q}),u(Pe)}).catch(se=>{console.error(se),se.status===400&&se?.response?.data?.type==="validation_error"?He.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}):He.fire({title:"",html:"<p>"+se+"</p>",icon:"error",cancelButtonText:i.t("Chiudi"),showCancelButton:!0,showConfirmButton:!1})})},viewDidMount:Ne,eventDidMount:J=>{const{event:X,el:P}=J,H=X.extendedProps;P.setAttribute("data-event-id",X.id+"-"+H.date+"-"+H.start_time)},loading:J=>{h(J)}})},Ne=$=>{s?.root?.data?.place&&A.current.setOption("eventSources",[{events:Ie}])};async function Ie($,J,X){try{A.current.setOption("events",[]);const P=he($.start).format("YYYY-MM-DD"),H=new Date($.end);H.setDate(H.getDate()-1);const N=he(H).format("YYYY-MM-DD"),W=null,q=s?.root?.data?.place?.merge_availabilities?s?.root?.data?.place?.merged_availabilities_link:null,ce=q?ee(q,P,N):re(P,N,W),se=ea("AVAILABILITY",ce),Pe=Qr("AVAILABILITY",se);let ge;if(Pe?(ge=Pe,h(!1)):(ge=await window.FormioHelper.fetchAPIUrlLimit(ce),Zr("AVAILABILITY",se,ge)),!ge?.length){J([]),He.fire({icon:"warning",title:i.t("warning"),html:i.t("no_meetings")});return}const _e=ge.map(Re=>({id:Re.opening_hour_id,allDay:!1,start:`${Re.date}T${Re.start_time}:00`,end:`${Re.date}T${Re.end_time}:00`,title:`${Re.start_time} - ${Re.end_time}`,editable:!1,display:"auto",color:"#ebeef0",textColor:"#000",className:"event-slot",extendedProps:{...Re}})),$e=z(ge);A.current.setOption("slotMinTime",$e.earliestStartTime),A.current.setOption("slotMaxTime",$e.latestEndTime),B(ge),Ah(A.current,_e),J(_e),setTimeout(()=>{Ye(_e)},500)}catch(P){console.error("Errore nel caricamento disponibilità:",P),X?.(P)}}G.useEffect(()=>{let $,J=!1;async function X(){try{if(await window.FormioInstance?.formReady,J)return;if(!E.current){console.warn("Elemento calendario non trovato");return}const P=s?.dataValue??s?.getValue();P&&P?.draft_expiration&&Se().isAfter(P.draft_expiration)&&(u({}),Js()),s?.data?.service_data?.view_type==="calendar"||o.view==="calendar"?A?.current||Z():s?.data?.service_data?.view_type==="select"||o.view==="select"?me():alert(i.t("Il componente non è configurato per la visualizzazione a calendario"))}catch(P){console.error("Errore durante l'inizializzazione del calendario:",P)}}return $=setTimeout(X,500),()=>{J=!0,$&&clearTimeout($),A.current&&(E.current?.destroy?.(),A.current=null)}},[s?.root?.data?.place]);function Ye($){const J=s?.dataValue;if(!J?.from_time)return;const X=Se(J.from_time).format("DD-MM-YYYY HH:mm"),P=Se(J.to_time).format("DD-MM-YYYY HH:mm"),H=$.find(W=>Se(W.start).format("DD-MM-YYYY HH:mm")===X&&Se(W.end).format("DD-MM-YYYY HH:mm")===P);if(!H)return;const N=document.querySelector(`.ec-event[data-event-id="${H.id}-${Se(J?.from_time).format("YYYY-MM-DD")}-${Se(J?.from_time).format("HH:mm")}"]`);N&&(N.classList.add("highlighted-event"),N.scrollIntoView({behavior:"smooth",block:"center"}),C({day:Se(J?.from_time).format("dddd, DD MMMM YYYY"),startDate:Se(J?.from_time).format("HH:mm"),endDate:Se(J?.to_time).format("HH:mm")}))}const Oe=({day:$,startDate:J,endDate:X})=>m.jsx("div",{className:"mt-3",children:m.jsxs("div",{className:"row align-items-center gy-3",children:[m.jsxs("div",{className:"col-12 col-md border-light mx-md-3",children:[m.jsx("div",{className:"text-paragraph-small",children:i.t("Data")}),m.jsx("p",{className:"data-text",children:m.jsx("strong",{children:$})})]}),m.jsxs("div",{className:"col-12 col-md border-light mx-md-3",children:[m.jsx("div",{className:"text-paragraph-small",children:i.t("Ora")}),m.jsx("p",{className:"data-text",children:m.jsxs("strong",{children:[J," - ",X]})})]})]})});return G.useEffect(()=>{document.querySelector(".formio-read-only")&&f===!1?p(!0):(s?.data?.service_data?.view_type==="select"?me():s?.data?.service_data?.view_type==="calendar"&&Z(),p(!1))},[]),G.useEffect(()=>{f&&setTimeout(()=>{const $=s?.dataValue??s?.getValue();console.log("savedValue",$,f),$&&l($)},500)},[f]),m.jsx(m.Fragment,{children:f&&I?m.jsxs("div",{className:"mx-2",children:[m.jsxs("p",{className:"text-paragraph",children:[i.t("Giorno selezionato per la prenotazione"),":"]}),m.jsx("div",{className:"",children:m.jsx("div",{className:"it-list-wrapper",children:m.jsx("ul",{className:"it-list",children:m.jsx(Eh,{day:Se(I.from_time).format("dddd D MMM YYYY"),i18next:i,slot:`${Se(I.from_time).format("HH:mm")} - ${Se(I.to_time).format("HH:mm")}`})})})})]}):m.jsxs("div",{className:"",children:[m.jsx("div",{ref:E}),_.length>0?m.jsxs(m.Fragment,{children:[m.jsxs(ue.Select,{label:"Mese",id:"selectMonthYear",onChange:fe,children:[m.jsx("option",{value:"",children:i.t("Scegli un'opzione")}),_.map($=>m.jsx("option",{value:$.value,selected:$.value===O,children:$.label},$.value))]}),m.jsxs(ue.Select,{label:"Giorno",id:"selectDay",onChange:$=>te($,"manual"),disabled:Y.length===0,children:[m.jsx("option",{value:"",children:i.t("Scegli un'opzione")}),Y.map($=>m.jsx("option",{value:JSON.stringify($),selected:$.date===T,children:Se($.date).format("dddd,DD MMMM YYYY")},$.date))]}),m.jsxs(ue.Select,{label:"Orario",id:"selectSlot",onChange:de,disabled:F.length===0,children:[m.jsx("option",{value:"",children:i.t("Scegli un'opzione")}),F.map($=>m.jsx("option",{value:JSON.stringify($),selected:$.start_time+" - "+$.end_time===x,children:$.start_time+" - "+$.end_time},$.start_time+" - "+$.end_time))]})]}):null,g?Oe({day:g.day,startDate:g.startDate,endDate:g.endDate}):null,c?m.jsx("div",{className:"d-flex align-items-center justify-content-center position-absolute-center",children:m.jsx(ue.Spinner,{active:!0})}):null]})})};class Mr extends Ti{constructor(s,u,i){super(s,u,i)}static get builderInfo(){return{title:"Calendar Advanced",group:"basic",icon:"bi bi-calendar-plus",documentation:"",weight:70,schema:Mr.schema()}}static schema(){return Ti.schema({type:"calendar-advanced"})}static editForm=Rh;attach(s,u){return super.attach(s).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:"single"});const i=this.refs[`react-${this.id}`];return i?(this.rootComponent&&(this.rootComponent.unmount(),this.rootComponent=null),this.rootComponent=Et.createRoot(i),this.builderMode?(this.rootComponent.render(m.jsx("div",{className:"my-1 border border-2 border-light rounded p-3 text-secondary",children:m.jsx("div",{className:"h6 mb-0",children:this.component?.label||"Calendar Advanced"})})),this):(this.rootComponent.render(m.jsx(Vh,{ref:u,component:this.component,value:this.dataValue,onChange:b=>this.setValue(b),...this,current:this})),this)):this})}detach(){return this.rootComponent&&(this.rootComponent.unmount(),this.rootComponent=null),super.detach()}setValue(s){s&&(this.updateValue(s),this.shouldSetValue=!0)}getValue(){return this.dataValue}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}}const zh=[{key:"defaultValue",ignore:!0}],Lh=[{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"]]}}}],Wh=[{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:`{
|
|
79
|
+
}`,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 Th(...o){return Bt.Components.baseEditForm([{key:"display",components:jh}],...o)}function Yi({day:o,slot:s,i18next:u}){return m.jsx("li",{className:"it-list-item",children:m.jsx("div",{className:"list-item",children:m.jsx("div",{className:"it-right-zone",children:m.jsxs("span",{className:"text pl-4",children:[m.jsx("b",{children:o})," ",u.t("alle")," ",u.t("ore")," ",m.jsx("b",{children:s})]})})})})}const ji=Ct.Formio.Components.components.field,Ph=({component:o,current:s,onChange:u,i18next:i})=>{const[b,M]=G.useState(),[I,l]=G.useState([]),[y,r]=G.useState([]),[c,h]=G.useState(!1),[f,p]=G.useState(null),[g,C]=G.useState(null),[_,k]=G.useState(null),[Y,j]=G.useState(null),[F,R]=G.useState({}),[O,v]=G.useState(null),[T,S]=G.useState(!1),[x,V]=G.useState([]),[E,A]=G.useState(!1),z=G.useRef(),B=o.calendarId;he.locale(i.language),Se.locale(i.language);const ee=P=>{let H=he(P).format("YYYY-MM-DD");fetch(te(H)).then(N=>N.json()).then(N=>{let W=fe(P||new Date);const q=N.filter(_e=>_e.available==!0);q.length===0&&$();let se=[];W.forEach(_e=>{N.some($e=>$e.date===_e&&$e.available==!0)?se.push({available:!0,date:_e}):se.push({available:!1,date:_e})});const Pe=se.map(_e=>{if(_e.available===!1)return he(_e.date,"YYYY-MM-DD").toDate()});l(Pe);const ge=q.length?q[0].date:P;ie(ge)}).catch(N=>console.error(N))},ie=P=>{j(null),k(null),r([]);let H=he(P).format("YYYY-MM-DD");fetch(de(H)).then(N=>N.json()).then(N=>{const W=N.filter(q=>q.availability==!0);R(W[0]),W.length>0?(r(N),h(!1),k(he(P).format("L")),M(he(P,"YYYY-MM-DD").toDate())):(N.length>0&&M(he(N[0].date,"YYYY-MM-DD").toDate()),r([]),$())})},re=()=>{if(B!==""&&B!=null)if(!s.dataValue)ee(new Date);else if(o.multiple&&Array.isArray(s.dataValue)){if(s.dataValue.length>0){v(s.dataValue);let P=[];s.dataValue.map(H=>{P.push({...H,date:he(H.date,"YYYY-MM-DD").format("DD-MM-YYYY")})}),V(P)}}else if(!o.multiple&&typeof s.dataValue=="object"){const P={date:s.dataValue.date,slot:s.dataValue.slot},H={...s.dataValue,date:he(s.dataValue.date,"YYYY-MM-DD").format("DD-MM-YYYY")};V([H]),v(P)}else{let P=s.dataValue.replace(")","").replace(" ("," @ ").replace(/\//g,"-").split(" @ "),H=P[2].split("#");const N={date:he(P[0],"DD-MM-YYYY").format("YYYY-MM-DD"),slot:P[1]};o.multiple?(u([{date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}]),V([{date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}])):(u({date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}),V([{date:P[0],slot:P[1],calendar_id:H[0],meeting_id:H[1],opening_hour_id:H.length===3?H[2]:""}])),v(N)}};G.useEffect(()=>{window.FormioInstance?.formReady.then(()=>{setTimeout(()=>{re()},1e3)})},[]);const fe=P=>{let N=he(P,"YYYY-MM").daysInMonth(),W=[];for(;N;){let q=he(P).date(N);W.push(q.format("YYYY-MM-DD")),N--}return W},te=(P,H=!1)=>{let N=o.calendarId,W=o.select_opening_hours,q=o.select_opening_hours?o.opening_hours:[];window.location.pathname.split("/");let se=`${Ee()}/api/calendars/${N}/availabilities`,Pe=[`from_time=${he(P).startOf("month").format("YYYY-MM-DD")}`,`to_time=${he(P).endOf("month").format("YYYY-MM-DD")}`];return H&&Pe.push(`available=${H}`),W&&q&&Pe.push(`opening_hours=${q.join()}`),`${se}?${Pe.join("&")}`},de=(P,H=!1)=>{let N=o.calendarId,W=o.select_opening_hours,q=o.select_opening_hours?o.opening_hours:[];window.location.pathname.split("/");const se=he(P).format("YYYY-MM-DD");let Pe=`${Ee()}/api/calendars/${N}/availabilities/${se}`,ge=[];return H&&ge.push(`available=${H}`),W&&q&&ge.push(`opening_hours=${q.join()}`),ge&&(Pe=`${Pe}?${ge.join("&")}`),Pe},ve=P=>{ee(P)},me=P=>{setTimeout(()=>{S(!T)},1e3),ie(P)},oe=P=>{j(null),setTimeout(()=>{P&&(C(P.target.dataset),j(P.target.id))},300)},Z=P=>{p(null);let H=`${Ee()}/it/meetings/new-draft`,N={date:g?.date?he(g?.date).format("DD-MM-YYYY"):he(P.target.dataset.date).format("DD-MM-YYYY"),slot:g?.value_start&&g?.value_end?g.value_start+"-"+g.value_end:P.target.dataset.slots,calendar:o.calendarId,opening_hour:g?.opening_hour?g?.opening_hour:P.target.dataset.opening_hour,meeting:f?f.id:"",first_available_date:F.date,first_available_start_time:F.start_time,first_available_end_time:F.end_time,first_availability_updated_at:he().format()};fetch(H,{method:"POST",body:JSON.stringify(N),headers:{"Content-Type":"application/json; charset=utf-8"},strictErrors:!0}).then(W=>{if(!W.ok)throw new Error(i.t("Intervallo selezionato non disponibile!"));return W.json()}).then(W=>{p(W);const q={date:N.date,slot:N.slot,calendar_id:N.calendar[0],opening_hour_id:N.opening_hour||N.opening_hour_id,meeting_id:W.id};V([...x,q])}).catch(W=>{console.log(W),He.fire({title:"",html:"<p>"+W+"</p>",icon:"error",cancelButtonText:i.t("Chiudi"),showCancelButton:!0,showConfirmButton:!1})})},Ne=()=>{g&&(Z(),S(!T))},Ie=()=>m.jsx("span",{children:i.t("Tempo prenotazione scaduto!")}),Ye=({minutes:P,seconds:H,completed:N})=>N?m.jsx(Ie,{}):m.jsx("div",{children:m.jsxs("div",{children:[" ",m.jsxs("span",{children:[" ",m.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"),":"]})," ",m.jsxs("b",{children:[P," ",i.t("minuti")," ",H," ",i.t("secondi")]})]})]})}),Oe=P=>{if(P===null||P==="")u("");else if(Array.isArray(P)&&P.length>0){let H=[];x.map(N=>{H.push({date:he(N.date,"DD-MM-YYYY").format("YYYY-MM-DD"),slot:N.slot,calendar_id:N.calendar_id||N.calendar[0],meeting_id:N.meeting_id,opening_hour_id:N.opening_hour||N.opening_hour_id})}),o.multiple?u(H):u(H[0])}else u("")},$=()=>{h(!0),p(null),k(null),Oe(null)},J=()=>{if(i.language==="it")return $s;if(i.language==="en")return Hs;if(i.language==="de")return qs};G.useEffect(()=>{Oe(x)},[x]),G.useEffect(()=>{document.querySelector(".formio-read-only")&&E===!1?(A(!0),setTimeout(()=>{re()},1e3)):(A(!1),setTimeout(()=>{re()},1e3))},[]);const X=(P,H)=>{let N=`${Ee()}/api/meetings/${H.meeting_id}`;fetch(N,{method:"DELETE",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${tr("auth-token")}`},strictErrors:!0}).then(W=>{if(W&&W.status>400)He.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});else{const q=[...x.slice(0,P),...x.slice(P+1)];V(q),ee(new Date)}})};return m.jsxs(m.Fragment,{children:[E&&O?m.jsxs("div",{className:"my-5 mx-2 d-print-block d-preview-calendar d-preview-calendar-none",children:[m.jsxs("b",{children:[Array.isArray(O)&&O.length>1?i.t("Giorni selezionati per la prenotazione"):i.t("Giorno selezionato per la prenotazione"),":"]}),m.jsx("div",{className:"mb-5",children:m.jsx("div",{className:"it-list-wrapper",children:m.jsx("ul",{className:"it-list",children:Array.isArray(O)?O.map(P=>m.jsx(Yi,{day:he(P.date,"DD-MM-YYYY").format("DD/MM/YYYY"),i18next:i,slot:P.slot})):m.jsx(Yi,{day:Se(O.date).format("DD/MM/YYYY"),i18next:i,slot:O.slot})})})})]}):m.jsx("div",{className:"slot-calendar ",children:m.jsxs("div",{className:"row",children:[o.multiple?m.jsx("div",{className:"col-12 d-print-none d-preview-calendar-none",children:m.jsxs("div",{className:"m-2",children:[m.jsx("h6",{children:i.t(o.label)}),m.jsx(yr.DayPicker,{mode:"single",selected:b,locale:J(),disabled:I,onMonthChange:ve,onDayClick:me})]})}):x.length!==1?m.jsx("div",{className:"col-12 d-print-none d-preview-calendar-none",children:m.jsxs("div",{className:"m-2",children:[m.jsx("h6",{children:i.t(o.label)}),m.jsx(yr.DayPicker,{mode:"single",selected:b,locale:J(),disabled:I,onMonthChange:ve,onDayClick:me})]})}):null,m.jsx("div",{className:"col-12",children:x.length?m.jsx("div",{className:"row m-2",children:m.jsxs("div",{className:"col-12 mb-4",children:[m.jsxs("b",{children:[x.length>1?i.t("Giorni selezionati per la prenotazione"):i.t("Giorno selezionato per la prenotazione"),":"," "]}),m.jsx("div",{className:"mb-5",children:m.jsx("div",{className:"it-list-wrapper",children:m.jsx("ul",{className:"it-list",children:x.map((P,H)=>m.jsx("li",{children:m.jsx("div",{className:"list-item",children:m.jsxs("div",{className:"it-right-zone",children:[m.jsxs("span",{className:"text pl-4",children:[P.date," ",g||P.slot?`${i.t("alle")} ${P.slot}`:""]}),m.jsx(ue.Icon,{icon:"it-delete",onClick:()=>X(H,P),role:"button"})]})})},"li"+H))})})}),f?m.jsx(ue.Alert,{color:"info",defaultValue:"string",className:"d-print-none d-preview-calendar-none",children:m.jsx(zs,{date:f.expiration_time,renderer:Ye})}):null]})}):null})]})}),m.jsxs(ue.Modal,{isOpen:T,toggle:()=>S(!T),labelledBy:"daySelected",size:"lg",centered:!0,container:_r(),children:[m.jsx(ue.ModalHeader,{toggle:()=>S(!T),id:"daySelected",children:i.t("Seleziona una fascia oraria")}),m.jsx(ue.ModalBody,{children:m.jsxs("div",{className:"row",children:[x.length>=1?m.jsxs("div",{children:[_&&!c?m.jsxs("h6",{children:[i.t("Orari disponibili del")," ",Se(_).format("DD/MM/YYYY")]}):null,m.jsxs("div",{className:"calendar-last-selection col-12 pt-2 mb-5",children:[m.jsx("small",{className:"pl-2 mb-2 d-flex px-2",children:m.jsxs("b",{children:[m.jsx(ue.Icon,{icon:"it-clock",className:"mr-1",size:"sm"})," ",i.t("Ultimo orario selezionato")]})}),m.jsx("div",{className:"col-6 px-2",children:m.jsx("button",{type:"button",id:"slot-last-selection",onClick:oe,tabIndex:"1",className:Y==="slot-last-selection"?"active btn btn-slot p-0":"btn btn-slot p-0","data-date":he(_,"DD/MM/YYYY").format("YYYY-MM-DD"),"data-slots":x[x.length-1].slot,"data-opening_hour":x[x.length-1].opening_hour_id,"data-start":x[x.length-1].slot.split("-")[0],"data-end":x[x.length-1].slot.split("-")[1],"data-value_start":x[x.length-1].slot.split("-")[0],"data-value_end":x[x.length-1].slot.split("-")[1],disabled:c,children:x[x.length-1].slot})})]})]}):null,m.jsx("div",{children:_&&x.length>=1?m.jsx("h6",{children:i.t("Seleziona altri orari")}):c?null:m.jsxs("h6",{children:[i.t("Orari disponibili del")," ",Se(_).format("DD/MM/YYYY")]})}),y.map((P,H)=>m.jsx("div",{className:"col-6",children:m.jsxs("button",{type:"button",id:"slot-"+H,onClick:oe,ref:z,className:Y==="slot-"+H?"active btn btn-slot p-0":"btn btn-slot p-0",tabIndex:"1","data-date":P.date,"data-start":P.start_time,"data-end":P.end_time,"data-value_start":P.start_time,"data-value_end":P.end_time,"data-slots":P.start_time+"-"+P.end_time,"data-opening_hour":P.opening_hour,"data-min_duration":P.min_duration,disabled:P.slots_available==0,children:[P.start_time," - ",P.end_time]})},"slot-"+H)),c?m.jsxs("div",{className:"callout callout-highlight warning",children:[m.jsxs("div",{className:"callout-title",children:[m.jsx(ue.Icon,{"aria-hidden":!0,icon:"it-help-circle"}),i.t("Attenzione")]}),m.jsxs("p",{children:[" ",i.t("Non è possibile prenotare per la data selezionata"),"."]})]}):null]})}),m.jsx(ue.ModalFooter,{children:m.jsx(ue.Button,{color:"primary",onClick:()=>Ne(),disabled:!_||!g?.value_start,children:i.t("Conferma")})})]})]})};class Sr extends ji{constructor(s,u,i){super(s,u,i)}static get builderInfo(){return{title:"Calendar",group:"basic",icon:"bi bi-calendar-plus",documentation:"",weight:70,schema:Sr.schema()}}static schema(){return ji.schema({type:"calendar"})}static editForm=Th;attach(s){return super.attach(s).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:"single"});const u=this.refs[`react-${this.id}`];return u?(this.rootComponent=Et.createRoot(u),this.rootComponent.render(m.jsx(Ph,{component:this.component,value:this.dataValue,onChange:i=>this.setValue(i),...this,current:this})),this):this})}detach(){return this.rootComponent&&(this.rootComponent.unmount(),this.rootComponent=null),super.detach()}setValue(s){if(s)if(Array.isArray(s))this.selectedNextSlots=s,this.updateValue(s),this.shouldSetValue=!0;else if(typeof s=="object")this.date=s.date,this.slot=s.slot,this.meeting=s.meeting_id,this.meeting_expiration_time=null,this.opening_hour=s.opening_hour_id,this.calendar_id=s.calendar_id,this.updateValue(s),this.shouldSetValue=!0;else{let u=s.replace(")","").replace(" ("," @ ").replace(/\//g,"-").split(" @ "),i=u[2].split("#");this.date=u[0],this.slot=u[1],this.meeting=i[1],this.meeting_expiration_time=null,this.opening_hour=i.length===3?i[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 s=this.meeting?this.meeting:"",u=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:s,opening_hour_id:u}}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}}const Nh=[{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 = '"+Ee()+"'; 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 Rh(...o){return Bt.Components.baseEditForm([{key:"display",components:Nh}],...o)}function Eh({day:o,slot:s,i18next:u}){return m.jsx("li",{className:"it-list-item",children:m.jsx("div",{className:"list-item",children:m.jsx("div",{className:"it-right-zone",children:m.jsxs("span",{className:"text-paragraph pl-4",children:[m.jsx("b",{children:o})," ",u.t("alle")," ",u.t("ore")," ",m.jsx("b",{children:s})]})})})})}function Ah(o,s){if(!s||s.length===0)return;const u=s.map(I=>{const l=new Date(I.start);return(new Date(I.end)-l)/6e4}),i=Math.min(...u),b=u.reduce((I,l)=>I+l,0)/u.length;let M=0;i<=30&&i>15?M=b*1:i<=15?M=b*24:M=b*4,o.setOption("slotHeight",M),document.documentElement.style.setProperty("--slot-height",`${M}px`)}const Gs={AVAILABILITY:{key:"availability_data_cache_",duration:10},SLOTS:{key:"availability_slots_cache_",duration:10},SUBMISSION:{key:"submission_cache_",duration:30}},Zr=(o,s,u)=>{const i={data:u,timestamp:Se().toISOString()};localStorage.setItem(s,JSON.stringify(i)),console.log(`✅ Cache salvato: ${o}`)},Qr=(o,s)=>{try{const u=localStorage.getItem(s);if(!u)return null;const i=JSON.parse(u),b=Se().diff(Se(i.timestamp),"minutes");return b>Gs[o].duration?(localStorage.removeItem(s),console.log(`⏰ Cache scaduto: ${o}`),null):(console.log(`✅ Cache letto: ${o} (${b} minuti fa)`),i.data)}catch(u){return console.error(`Errore nel leggere il cache (${o}):`,u),null}},ea=(o,...s)=>Gs[o].key+btoa(s),bn="calendar_view_state",wn="calendar_view_date",Ih=(o,s)=>{try{localStorage.setItem(bn,o),localStorage.setItem(wn,s||new Date().toISOString())}catch(u){console.error("Errore nel salvare lo stato della view:",u)}},Fh=()=>{try{const o=localStorage.getItem(bn),s=localStorage.getItem(wn);return{viewType:o||"timeGridWeek",date:s?new Date(s):new Date}}catch(o){return console.error("Errore nel leggere lo stato della view:",o),{viewType:"timeGridWeek",date:new Date}}},Js=()=>{try{localStorage.removeItem(bn),localStorage.removeItem(wn)}catch(o){console.error("Errore nel pulire lo stato della view:",o)}},Ti=Ct.Formio.Components.components.field,Vh=({component:o,current:s,onChange:u,i18next:i})=>{const[b,M]=G.useState(null),[I,l]=G.useState(null),[y,r]=G.useState([]),[c,h]=G.useState(!1),[f,p]=G.useState(!1),[g,C]=G.useState(null),[_,k]=G.useState([]),[Y,j]=G.useState([]),[F,R]=G.useState([]),[O,v]=G.useState(null),[T,S]=G.useState(null),[x,V]=G.useState(null),E=G.useRef(null),A=G.useRef(null);i.language,he.locale(i.language),Se.locale(i.language);function z($){if(!$||$.length===0)return null;const J=$.map(H=>({start:H.start_time,end:H.end_time})),X=J.reduce((H,N)=>N.start<H?N.start:H,J[0].start),P=J.reduce((H,N)=>N.end>H?N.end:H,J[0].end);return{earliestStartTime:X,latestEndTime:P}}function B($){const J=$.map(H=>he(H.date).isoWeekday()),P=[1,2,3,4,5,6,7].filter(H=>!J.includes(H));P.length>0?A.current.setOption("hiddenDays",P):A.current.setOption("hiddenDays",[])}function ee($,J,X){const P=new URL($),N=`${P.pathname.split("/").slice(0,4).join("/")}/${J}/${X}`;return`${P.origin}${N}${P.search}`}function ie($,J,X){const P=new URL($),N=`${P.pathname.split("/").slice(0,4).join("/")}`;return`${P.origin}${N}${P.search}&from_to=${J}&to_date=${X}`}function re($,J,X){return`${Ee()}/api/availabilities/${$}/${J}?calendar_ids=${X}&available=true`}const fe=$=>{R([]),j([]),u({}),$&&j(b.filter(J=>J.date.startsWith($)))},te=async($,J)=>{const X=JSON.parse($),P=ea("SLOTS",X.date,X.calendar_ids);if(J==="manual")R([]),V(null),C(null),u({});else{const H=Qr("SLOTS",P);if(H){R(H);return}}try{const H=await window.FormioHelper.anonymousCall(`availabilities/${X.date}?calendar_ids=${X.calendar_ids}`);Zr("SLOTS",P,H.data),R(H.data)}catch(H){console.error("Errore nel caricamento degli slot:",H),He.fire({icon:"error",title:i.t("Errore"),text:i.t("Errore nel caricamento degli orari")})}},de=$=>{const J=JSON.parse($),X={status:6,calendar:J.calendar_id,opening_hour:J.opening_hour_id,user:null,email:null,fiscal_code:null,name:" ",phone_number:null,from_time:Se(`${J.date}T${J.start_time}`).toISOString(),to_time:Se(`${J.date}T${J.end_time}`).toISOString(),user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:s?.data?.service_data?.id,calendar_group_office_id:s?.data?.user_group?.id,calendar_group_place_id:s?.data?.place?.id};window.FormioHelper.authenticatedRequest(s?.dataValue?.id?"PATCH":"POST",s?.dataValue?.id?`meetings/${s.dataValue.id}`:"meetings",X).then(P=>{C({day:Se(J.date).format("dddd, DD MMMM YYYY"),startDate:J.start_time,endDate:J.end_time}),u(P?.id?P:P?{...P,id:s.dataValue.id}:s.dataValue.id?{...X,id:s.dataValue.id}:{...X})}).catch(P=>{console.error(P),P.status===400&&P?.response?.data?.type==="validation_error"?He.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}):He.fire({title:"",html:"<p>"+P+"</p>",icon:"error",cancelButtonText:i.t("Chiudi"),showCancelButton:!0,showConfirmButton:!1})})},ve=$=>{const J=new Set,X=[];return $.forEach(P=>{const H=Se(P.date),N=H.format("YYYY-MM");J.has(N)||(J.add(N),X.push({value:N,label:H.format("MMMM YYYY").replace(/^\w/,W=>W.toUpperCase())}))}),X},me=async()=>{const $=s?.root?.data?.place?.merge_availabilities?s?.root?.data?.place?.merged_availabilities_link:null,J=he().format("YYYY-MM-DD"),X=he().add(1,"month").format("YYYY-MM-DD"),P=s?.root?.data?.place?.calendars[0]?.id||null,H=$?ie($,J,X):re(J,X,P),N=ea("AVAILABILITY",H),W=Qr("AVAILABILITY",N);if(W){M(W),k(ve(W));return}else u({});h(!0);try{const q=await window.FormioHelper.fetchAPIUrlLimit(H);if(h(!1),!q?.length){He.fire({icon:"warning",title:i.t("warning"),html:i.t("no_meetings")});return}Zr("AVAILABILITY",N,q),M(q),k(ve(q))}catch(q){h(!1),console.error("Errore nel caricamento disponibilità:",q)}};G.useEffect(()=>{if(b?.length){const $=s?.dataValue??s?.getValue();if($?.from_time&&$?.to_time&&!Se().isAfter($?.draft_expiration)){const J=Se($.from_time).format("YYYY-MM");v(J),J&&j&&(j(b.filter(X=>X.date.startsWith(J))),S(Se($.from_time).format("YYYY-MM-DD")))}else $?.draft_expiration&&Se().isAfter($?.draft_expiration)&&He.fire({icon:"warning",title:i.t("warning"),html:i.t("expired_meeting")})}},[b]),G.useEffect(()=>{const $=s?.dataValue??s?.getValue();if(!_.length||O||$?.from_time||$?.to_time)return;const J=_[0];J&&(v(J.value),fe(J.value))},[_,O,s?.dataValue]),G.useEffect(()=>{if(T&&f===!1){const $=s?.dataValue??s?.getValue();te(JSON.stringify({date:T,calendar_ids:$.calendar.id}))}},[T]);const oe=()=>window.innerWidth>768?"timeGridWeek":"timeGridDay";G.useEffect(()=>{const $=()=>{const J=A.current;if(!J)return;const X=oe(),P=J.getView().type;X!==P&&J.setOption("view",X)};return window.addEventListener("resize",$),()=>window.removeEventListener("resize",$)},[]),G.useEffect(()=>{const $=s?.dataValue??s?.getValue();F?.length&&$?.from_time&&(V(Se($.from_time).format("HH:mm")+" - "+Se($.to_time).format("HH:mm")),C({day:Se($.from_time).format("dddd D MMM YYYY"),startDate:Se($.from_time).format("HH:mm"),endDate:Se($.to_time).format("HH:mm")}))},[F]);const Z=()=>{const $=Fh();A.current=di.createCalendar(E.current,[di.TimeGrid],{events:[],buttonText:{today:i.t("Oggi")},allDaySlot:!1,firstDay:1,date:$.date,slotEventOverlap:!1,view:oe(),height:"400px",views:{timeGridWeek:{allDaySlot:!1,firstDay:1,slotHeight:48},timeGridDay:{allDaySlot:!1,firstDay:1,slotHeight:48}},datesSet:J=>{Ih(J.view.type,J.start)},eventClick({event:J,el:X}){document.querySelectorAll(".ec-event").forEach(se=>{se.classList.remove("highlighted-event")}),X.classList.add("highlighted-event");const P=new Date(J.start),H=new Date(J.end),N=P.toLocaleDateString("it-IT",{weekday:"long",day:"numeric",month:"long",year:"numeric"}),W=P.toLocaleTimeString("it-IT",{hour:"2-digit",minute:"2-digit"}),q=H.toLocaleTimeString("it-IT",{hour:"2-digit",minute:"2-digit"}),ce={status:6,calendar:J.extendedProps.calendar_id,opening_hour:J.extendedProps.opening_hour_id,user:null,email:null,fiscal_code:null,name:" ",phone_number:null,from_time:P,to_time:H,user_message:null,reason:null,location:null,motivation_outcome:null,calendar_group_config_id:s?.data?.service_data?.id,calendar_group_office_id:s?.data?.user_group?.id,calendar_group_place_id:s?.data?.place?.id};window.FormioHelper.authenticatedRequest(s?.dataValue?.id?"PATCH":"POST",s?.dataValue?.id?`meetings/${s.dataValue.id}`:"meetings",ce).then(se=>{let Pe;!se||se===""?Pe={...ce,code:null,id:s?.dataValue?.id}:typeof se=="object"&&(Pe=se),C({day:N,startDate:W,endDate:q}),u(Pe)}).catch(se=>{console.error(se),se.status===400&&se?.response?.data?.type==="validation_error"?He.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}):He.fire({title:"",html:"<p>"+se+"</p>",icon:"error",cancelButtonText:i.t("Chiudi"),showCancelButton:!0,showConfirmButton:!1})})},viewDidMount:Ne,eventDidMount:J=>{const{event:X,el:P}=J,H=X.extendedProps;P.setAttribute("data-event-id",X.id+"-"+H.date+"-"+H.start_time)},loading:J=>{h(J)}})},Ne=$=>{s?.root?.data?.place&&A.current.setOption("eventSources",[{events:Ie}])};async function Ie($,J,X){try{A.current.setOption("events",[]);const P=he($.start).format("YYYY-MM-DD"),H=new Date($.end);H.setDate(H.getDate()-1);const N=he(H).format("YYYY-MM-DD"),W=null,q=s?.root?.data?.place?.merge_availabilities?s?.root?.data?.place?.merged_availabilities_link:null,ce=q?ee(q,P,N):re(P,N,W),se=ea("AVAILABILITY",ce),Pe=Qr("AVAILABILITY",se);let ge;if(Pe?(ge=Pe,h(!1)):(ge=await window.FormioHelper.fetchAPIUrlLimit(ce),Zr("AVAILABILITY",se,ge)),!ge?.length){J([]),He.fire({icon:"warning",title:i.t("warning"),html:i.t("no_meetings")});return}const _e=ge.map(Re=>({id:Re.opening_hour_id,allDay:!1,start:`${Re.date}T${Re.start_time}:00`,end:`${Re.date}T${Re.end_time}:00`,title:`${Re.start_time} - ${Re.end_time}`,editable:!1,display:"auto",color:"#ebeef0",textColor:"#000",className:"event-slot",extendedProps:{...Re}})),$e=z(ge);A.current.setOption("slotMinTime",$e.earliestStartTime),A.current.setOption("slotMaxTime",$e.latestEndTime),B(ge),Ah(A.current,_e),J(_e),setTimeout(()=>{Ye(_e)},500)}catch(P){console.error("Errore nel caricamento disponibilità:",P),X?.(P)}}G.useEffect(()=>{let $,J=!1;async function X(){try{if(await window.FormioInstance?.formReady,J)return;if(!E.current){console.warn("Elemento calendario non trovato");return}const P=s?.dataValue??s?.getValue();P&&P?.draft_expiration&&Se().isAfter(P.draft_expiration)&&(u({}),Js()),s?.data?.service_data?.view_type==="calendar"||o.view==="calendar"?A?.current||Z():s?.data?.service_data?.view_type==="select"||o.view==="select"?me():alert(i.t("Il componente non è configurato per la visualizzazione a calendario"))}catch(P){console.error("Errore durante l'inizializzazione del calendario:",P)}}return $=setTimeout(X,500),()=>{J=!0,$&&clearTimeout($),A.current&&(E.current?.destroy?.(),A.current=null)}},[s?.root?.data?.place]);function Ye($){const J=s?.dataValue;if(!J?.from_time)return;const X=Se(J.from_time).format("DD-MM-YYYY HH:mm"),P=Se(J.to_time).format("DD-MM-YYYY HH:mm"),H=$.find(W=>Se(W.start).format("DD-MM-YYYY HH:mm")===X&&Se(W.end).format("DD-MM-YYYY HH:mm")===P);if(!H)return;const N=document.querySelector(`.ec-event[data-event-id="${H.id}-${Se(J?.from_time).format("YYYY-MM-DD")}-${Se(J?.from_time).format("HH:mm")}"]`);N&&(N.classList.add("highlighted-event"),N.scrollIntoView({behavior:"smooth",block:"center"}),C({day:Se(J?.from_time).format("dddd, DD MMMM YYYY"),startDate:Se(J?.from_time).format("HH:mm"),endDate:Se(J?.to_time).format("HH:mm")}))}const Oe=({day:$,startDate:J,endDate:X})=>m.jsx("div",{className:"mt-3",children:m.jsxs("div",{className:"row align-items-center gy-3",children:[m.jsxs("div",{className:"col-12 col-md border-light mx-md-3",children:[m.jsx("div",{className:"text-paragraph-small",children:i.t("Data")}),m.jsx("p",{className:"data-text",children:m.jsx("strong",{children:$})})]}),m.jsxs("div",{className:"col-12 col-md border-light mx-md-3",children:[m.jsx("div",{className:"text-paragraph-small",children:i.t("Ora")}),m.jsx("p",{className:"data-text",children:m.jsxs("strong",{children:[J," - ",X]})})]})]})});return G.useEffect(()=>{document.querySelector(".formio-read-only")&&f===!1?p(!0):(s?.data?.service_data?.view_type==="select"?me():s?.data?.service_data?.view_type==="calendar"&&Z(),p(!1))},[]),G.useEffect(()=>{f&&setTimeout(()=>{const $=s?.dataValue??s?.getValue();console.log("savedValue",$,f),$&&l($)},500)},[f]),m.jsx(m.Fragment,{children:f&&I?m.jsxs("div",{className:"mx-2",children:[m.jsxs("p",{className:"text-paragraph",children:[i.t("Giorno selezionato per la prenotazione"),":"]}),m.jsx("div",{className:"",children:m.jsx("div",{className:"it-list-wrapper",children:m.jsx("ul",{className:"it-list",children:m.jsx(Eh,{day:Se(I.from_time).format("dddd D MMM YYYY"),i18next:i,slot:`${Se(I.from_time).format("HH:mm")} - ${Se(I.to_time).format("HH:mm")}`})})})})]}):m.jsxs("div",{className:"",children:[m.jsx("div",{ref:E}),_.length>0?m.jsxs(m.Fragment,{children:[m.jsxs(ue.Select,{label:"Mese",id:"selectMonthYear",onChange:fe,children:[m.jsx("option",{value:"",children:i.t("Scegli un'opzione")}),_.map($=>m.jsx("option",{value:$.value,selected:$.value===O,children:$.label},$.value))]}),m.jsxs(ue.Select,{label:"Giorno",id:"selectDay",onChange:$=>te($,"manual"),disabled:Y.length===0,children:[m.jsx("option",{value:"",children:i.t("Scegli un'opzione")}),Y.map($=>m.jsx("option",{value:JSON.stringify($),selected:$.date===T,children:Se($.date).format("dddd,DD MMMM YYYY")},$.date))]}),m.jsxs(ue.Select,{label:"Orario",id:"selectSlot",onChange:de,disabled:F.length===0,children:[m.jsx("option",{value:"",children:i.t("Scegli un'opzione")}),F.map($=>m.jsx("option",{value:JSON.stringify($),selected:$.start_time+" - "+$.end_time===x,children:$.start_time+" - "+$.end_time},$.start_time+" - "+$.end_time))]})]}):null,g?Oe({day:g.day,startDate:g.startDate,endDate:g.endDate}):null,c?m.jsx("div",{className:"d-flex align-items-center justify-content-center position-absolute-center",children:m.jsx(ue.Spinner,{active:!0})}):null]})})};class Mr extends Ti{constructor(s,u,i){super(s,u,i)}static get builderInfo(){return{title:"Calendar Advanced",group:"basic",icon:"bi bi-calendar-plus",documentation:"",weight:70,schema:Mr.schema()}}static schema(){return Ti.schema({type:"calendar-advanced"})}static editForm=Rh;attach(s,u){return super.attach(s).then(()=>{this.loadRefs(this.element,{[`react-${this.id}`]:"single"});const i=this.refs[`react-${this.id}`];return i?(this.rootComponent&&(this.rootComponent.unmount(),this.rootComponent=null),this.rootComponent=Et.createRoot(i),this.builderMode?(this.rootComponent.render(m.jsx("div",{className:"my-1 border border-2 border-light rounded p-3 text-secondary",children:m.jsx("div",{className:"h6 mb-0",children:this.component?.label||"Calendar Advanced"})})),this):(this.rootComponent.render(m.jsx(Vh,{ref:u,component:this.component,value:this.dataValue,onChange:b=>this.setValue(b),...this,current:this})),this)):this})}detach(){return this.rootComponent&&(this.rootComponent.unmount(),this.rootComponent=null),super.detach()}setValue(s){s&&(this.updateValue(s),this.shouldSetValue=!0)}getValue(){return this.dataValue}init(){super.init()}render(){return super.render(`<div ref="react-${this.id}"></div>`)}}const zh=[{key:"defaultValue",ignore:!0}],Lh=[{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"]]}}}],Wh=[{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:`{
|
|
80
80
|
"withCredentials": true,
|
|
81
81
|
"headers": {
|
|
82
82
|
"Authorization": "Basic <key>"
|