@happychef/reservation-sidebar 2.8.42 → 2.8.44

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.js CHANGED
@@ -39,7 +39,7 @@ Checking Time: ${v} -> Determined Meal: ${B}`),!B){N0(` Time ${v} has no associ
39
39
  border-color: #48AAAF !important;
40
40
  }
41
41
  `),o0__default.default.createElement("div",{style:g.grid},R.map(N=>o0__default.default.createElement("button",{key:N.value,type:"button",className:`duration-btn ${parseInt(b)===N.value?"active-duration":""}`,tabIndex:"-1",style:{...g.optionBtn,...!a&&parseInt(b)===N.value?g.activeBtn:{}},onClick:()=>B(N.value),onMouseDown:C=>C.preventDefault()},N.label)),v&&o0__default.default.createElement("button",{type:"button",className:`duration-btn ${a?"active-duration":""}`,tabIndex:"-1",style:{...g.optionBtn,...a?g.activeBtn:{},flex:"0 0 auto",width:"auto",minWidth:"40px"},onClick:h,onMouseDown:N=>N.preventDefault()},a?o0__default.default.createElement(fa.FaMinus,{size:12}):o0__default.default.createElement(fa.FaPlus,{size:12}))),o0__default.default.createElement(framerMotion.AnimatePresence,null,a&&o0__default.default.createElement(framerMotion.motion.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},style:{overflow:"hidden"}},o0__default.default.createElement("div",{style:g.stepperContainer},o0__default.default.createElement("button",{type:"button",style:g.stepperBtn,onClick:()=>f(-1)},o0__default.default.createElement(fa.FaMinus,{size:12})),o0__default.default.createElement("span",{style:g.stepperValue},l(parseInt(b)||0)),o0__default.default.createElement("button",{type:"button",style:g.stepperBtn,onClick:()=>f(1)},o0__default.default.createElement(fa.FaPlus,{size:12}))))))},S2=M4;var Qb=o0.memo(({formData:b,errors:c,handleChange:q,handleStepOneSubmit:e,setFormData:W,timeblocks:n,loadingTimeblocks:a,timeblocksError:s,restaurantData:r,isAdmin:R=false})=>{let v=localStorage.getItem("preferredLanguage")||"nl",u=a1[v].reservationStepOne,[B,h]=o0.useState(b.guests||2),[f,g]=o0.useState(null),[l,N]=o0.useState([]),C=o1(),[E,y]=o0.useState([]),[S,m]=o0.useState(false),[j,_]=o0.useState(false),H=o0.useRef(false),A0=o0.useRef(false),p0=o0.useRef(false),a0=o0.useCallback(F=>{W(k=>{let J={...k};return F.forEach(z0=>{J[z0]="";}),(F.includes("date")||F.includes("time")||F.includes("guests"))&&(J.selectedTableNumbers=[],J.selectedTableIds=[],y([])),J});},[W]);o0.useEffect(()=>{let k=(0, Vb.default)().tz("Europe/Amsterdam").startOf("day").clone().startOf("isoWeek");for(;kz(k);)k.add(1,"week");g(k);},[]),o0.useEffect(()=>{(async()=>{if(f&&(b.reservationMode==="met_limieten"||b.reservationMode==="zonder_regels"||b.reservationMode==="vrije_keuze")){let k=r?.["table-settings"]||{},J=k.isInstalled===true&&k.assignmentMode==="automatic";if(b.reservationMode==="met_limieten"||b.reservationMode==="vrije_keuze"||b.reservationMode==="zonder_regels"&&J){let z0=f.format("YYYY-MM-DD"),u0=f.clone().add(13,"days").format("YYYY-MM-DD"),T0=localStorage.getItem("username"),f0=`${window.baseDomain}api/slots/${T0}/${z0}/${u0}`;try{let A=await C.get(f0,{noCache:!0});N(A||[]);}catch(A){console.error("Error fetching reservations:",A),N([]);}}else N([]);}else N([]);})();},[f,C,b.reservationMode,r]),o0.useEffect(()=>{window.__reservationDashboardPreset&&b.date?(window.__reservationDashboardPreset=false,p0.current=true,A0.current=true):_(false);},[b.date]),o0.useEffect(()=>{if(p0.current&&r&&Object.keys(r).length>0&&b.date&&b.reservationMode==="met_limieten"){p0.current=false;let F=r?.["blocked-slots"]||[],k=b.guests||2,J=r?.["table-settings"]||{},z0=J.isInstalled===true&&J.assignmentMode==="automatic",u0;z0?u0=(0, U0.isDateAvailableWithTableCheck)(r,b.date,l,k,F,null,R,null,b.zitplaats||null):u0=(0, U0.isDateAvailable)(r,b.date,l,k,F,null,R),u0?(_(false),A0.current=false):(_(true),A0.current=true,W(T0=>({...T0,reservationMode:"vrije_keuze"})));}},[r,l,b.date,b.guests,b.reservationMode,R,W]);let q0=F=>{g(F),a0(["date","time","selectedTableNumbers","selectedTableIds"]);};o0.useEffect(()=>{if(!H.current){let F=false,k={};b.reservationMode||(k.reservationMode="met_limieten",F=true),(!b.guests||b.guests==="")&&(k.guests=B,F=true),Array.isArray(b.selectedTableNumbers)||(k.selectedTableNumbers=[],F=true),Array.isArray(b.selectedTableIds)||(k.selectedTableIds=[],F=true),F&&setTimeout(()=>{q({target:{multiple:true,updates:k}});},0),H.current=true;}},[b.reservationMode,b.guests,b.selectedTableNumbers,b.selectedTableIds,B,q]);let Y=o0.useMemo(()=>r?.["table-settings"]||{},[r]),X=o0.useMemo(()=>Y.isInstalled===true&&Y.assignmentMode==="automatic",[Y]),U=o0.useMemo(()=>["met_limieten","zonder_regels","vrije_keuze"].includes(b.reservationMode),[b.reservationMode]),x=o0.useMemo(()=>U&&b.date&&b.time&&b.guests>0&&X&&E.length>0,[U,b.date,b.time,b.guests,X,E.length]);o0.useEffect(()=>{if(!X||!b.date||!b.time||b.guests<=0||!r||!l){y([]),m(false);return}m(true);let F=setTimeout(()=>{(window.requestIdleCallback||(J=>setTimeout(J,1)))(()=>{try{let J=new Set;r?.manualFloors&&Array.isArray(r.manualFloors)&&r.manualFloors.forEach(A=>{(A.tables||[]).forEach(d=>{d.tableNumber!=null&&J.add(d.tableNumber);});});let z0=[...r?.floors||[],...r?.manualFloors||[]],u0={...r,floors:z0},f0=F0("getAvailableTablesForTime",U0.getAvailableTablesForTime,u0,b.date,b.time,b.guests,l,b.zitplaats||null).map(A=>({...A,isManual:J.has(A.tableNumber)}));y(f0);}catch(J){console.error("Error calculating available tables:",J),y([]);}finally{m(false);}});},500);return ()=>{clearTimeout(F),m(false);}},[X,b.date,b.time,b.guests,b.zitplaats,r,l]),o0.useEffect(()=>{if(E.length>0){let F=b.selectedTableNumbers||[],k=b.selectedTableIds||[],J=[],z0=[];F.forEach(u0=>{let T0=E.find(f0=>f0.tableNumber===u0);T0&&k.includes(T0.tableId)&&(J.push(u0),z0.push(T0.tableId));}),J.length!==F.length&&setTimeout(()=>{q({target:{multiple:true,updates:{selectedTableNumbers:J,selectedTableIds:z0}}});},0);}else (b.selectedTableNumbers?.length>0||b.selectedTableIds?.length>0)&&setTimeout(()=>{q({target:{multiple:true,updates:{selectedTableNumbers:[],selectedTableIds:[]}}});},0);},[E,b.selectedTableNumbers,b.selectedTableIds]);let I=F=>{let k=parseInt(F.target.value,10)||1;h(k),_(false),W(J=>{let z0={...J,guests:k};if(z0.selectedTableNumbers=[],z0.selectedTableIds=[],z0.reservationMode==="vrije_keuze")return z0;if(z0.date&&r&&Object.keys(r).length>0){let u0=r?.["blocked-slots"]||[],T0=z0.reservationMode!=="met_limieten"?-1e4:k,f0=r?.["table-settings"]||{},A=z0.reservationMode==="met_limieten"&&f0.isInstalled===true&&f0.assignmentMode==="automatic",d;if(A?d=F0("isDateAvailableWithTableCheck",U0.isDateAvailableWithTableCheck,r,z0.date,l,T0,u0,null,R,null,z0.zitplaats||null):d=F0("isDateAvailable",U0.isDateAvailable,r,z0.date,l,T0,u0,null,R),!d)z0.date="",z0.time="";else if(z0.time){let t=(0, U0.getAvailableTimeblocks)(r,z0.date,l,T0,u0,null,R,z0.duration||null);(A?(0, U0.getAvailableTimeblocksWithTableCheck)(r,z0.date,t,T0,l,z0.zitplaats||null,z0.duration||null):t)[z0.time]||(z0.time="");}}return z0});};o0.useEffect(()=>{if(A0.current){A0.current=false;return}a0(["date","time","selectedTableNumbers","selectedTableIds"]);},[b.reservationMode,a0]);let V=F=>{_(false),F==="met_limieten"?q({target:{name:"reservationMode",value:"met_limieten"}}):F==="onbeperkt_parent"&&(["zonder_regels","vrije_keuze"].includes(b.reservationMode)||q({target:{name:"reservationMode",value:"zonder_regels"}}));},c0=F=>{_(false),q({target:{name:"reservationMode",value:F}});},O0=b.reservationMode,d0=!!r?.["general-settings"]?.seatSelectionEnabled,P=Array.isArray(r?.["general-settings"]?.seatAreas)?r["general-settings"].seatAreas:["Terras","Restaurant"],X0=F=>{W(k=>({...k,zitplaats:F}));};return s?o0__default.default.createElement("div",null,u.errors.openingHoursNotSet," ",o0__default.default.createElement("a",{href:"https://happychef.cloud/#/openinghours/dinner",target:"_blank",rel:"noopener noreferrer",style:{color:"var(--color-blue)",textDecoration:"underline"}},u.errors.clickHereToSet)):o0__default.default.createElement("form",{className:"account-manage-form",noValidate:true},o0__default.default.createElement("div",{className:"form-group reservation-mode"},o0__default.default.createElement("div",{className:"reservation-modes-container"},o0__default.default.createElement("button",{type:"button",className:`reservation-mode-button ${O0==="met_limieten"?"active":""}`,onClick:()=>V("met_limieten"),"aria-pressed":O0==="met_limieten"},u.modes.withLimits),o0__default.default.createElement("button",{type:"button",className:`reservation-mode-button ${["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)?"active":""}`,onClick:()=>V("onbeperkt_parent"),"aria-pressed":["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)},u.modes.unlimited)),["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)&&o0__default.default.createElement("div",{className:"reservation-modes-container sub-modes"},o0__default.default.createElement("button",{type:"button",className:`reservation-mode-button ${O0==="zonder_regels"?"active":""}`,onClick:()=>c0("zonder_regels"),"aria-pressed":O0==="zonder_regels"},u.modes.openingHours),o0__default.default.createElement("button",{type:"button",className:`reservation-mode-button ${O0==="vrije_keuze"?"active":""}`,onClick:()=>c0("vrije_keuze"),"aria-pressed":O0==="vrije_keuze"},u.modes.free))),["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)&&o0__default.default.createElement("div",{className:"unlimited-mode-warning"},o0__default.default.createElement("div",{className:"warning-text"},j?u.warnings?.dateNotAvailableWithLimits||"Let op: deze datum is niet beschikbaar met limieten voor dit aantal gasten. De modus is automatisch overgezet naar onbeperkt vrij.":u.warnings?.unlimitedMode||(v==="nl"?"Let op: Bij onbeperkte boekingen wordt geen rekening gehouden met de maximale capaciteit van het restaurant. De maximale zitplaatslimiet kan worden overschreden.":"Warning: Unlimited bookings do not take into account the restaurant's maximum capacity. The maximum seating limit may be exceeded."))),o0__default.default.createElement(d2,{setGuests:h,value:b.guests||B,onChange:I,error:c.guests}),d0&&U&&b.guests>0&&o0__default.default.createElement("div",{className:"form-row",style:{marginTop:12}},o0__default.default.createElement("div",{className:"reservation-mode-buttons"},P.map(F=>o0__default.default.createElement("button",{key:F,type:"button",className:`reservation-mode-button ${b.zitplaats===F?"active":""}`,onClick:()=>X0(F),"aria-pressed":b.zitplaats===F},F))),c.zitplaats&&o0__default.default.createElement("small",{className:"error"},c.zitplaats)),r?.account_type==="bowling"&&o0__default.default.createElement(S2,{duration:b.duration,handleChange:F=>{q(F),a0(["date","time","selectedTableNumbers","selectedTableIds"]);},min:r["general-settings"]?.minDuration||30,max:r["general-settings"]?.maxDuration||120,interval:r["general-settings"]?.durationInterval||30}),U&&b.guests>0&&o0__default.default.createElement(Fb,{guests:b.guests,formData:b,handleChange:q,resetFormDataFields:a0,restaurantData:r,reservations:l,startDate:f,onWeekChange:q0,reservationMode:O0,isAdmin:R}),U&&b.date&&o0__default.default.createElement(jb,{guests:b.guests,formData:b,handleChange:q,field:{id:"time",label:u.fields.time},selectedDate:b.date,setCurrentExpandedField:()=>{},restaurantData:r,reservations:l,reservationMode:O0,zitplaats:b.zitplaats||null,isAdmin:R}),x&&o0__default.default.createElement(y2,{availableTables:E,isFetching:S,formData:b,setFormData:W,handleChange:q}),S&&b.date&&b.time&&b.guests>0&&o0__default.default.createElement("div",{style:{textAlign:"center",padding:"10px",color:"#666",fontSize:"14px"}},"Beschikbare tafels berekenen..."))});Qb.displayName="ReservationStepOne";var yM=Qb;var SM=()=>localStorage.getItem("preferredLanguage")||"nl",j0=(b,c,q="nl")=>{let e=SM();return (b[e]||b[q]||{})[c]||{}};var $b={nl:{formField:{selectPlaceholder:"Selecteer een optie",tooltip:{confirm:"Klik om te Bevestigen",source:"Gevonden met Happy Ai"}}},en:{formField:{selectPlaceholder:"Select an option",tooltip:{confirm:"Click to Confirm",source:"Found with Happy Ai"}}},fr:{formField:{selectPlaceholder:"S\xE9lectionnez une option",tooltip:{confirm:"Cliquez pour confirmer",source:"Trouv\xE9 avec Happy Ai"}}}};R0(`.new-reservation-page .form-group .magic-tooltip{transition:transform .2s ease;transform-origin:bottom right}.new-reservation-page .form-group .magic-tooltip:hover{transform:scale(1.05)}.form-field-label{display:block;font-size:.8rem;font-weight:600;margin-bottom:4px;color:#333}.required-asterisk{color:red;margin-left:2px}.name-match-item{padding:8px 0;cursor:pointer;transition:background-color .15s ease}.name-match-item:hover{background-color:#f5f0f7}.name-match-item:not(:last-child){border-bottom:1px solid #f0f0f0}
42
- `);var A4=({label:b,name:c,type:q="text",icon:e,value:W,onChange:n,onBlur:a,error:s,placeholder:r,halfWidth:R,options:v=[],selectPlaceholder:u,rightIcon:B,onRightIconClick:h,tooltipContent:f,tooltipAlign:g,required:l})=>{let N=j0($b,"formField"),C=u||N.selectPlaceholder,[E,y]=o0.useState(false),S=o0.useRef(null),m=o0.useRef(null),j=B,_=e;o0.useEffect(()=>{let Y=X=>{S.current&&!S.current.contains(X.target)&&(m.current&&clearTimeout(m.current),y(false));};return E&&document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[E]);let A0={name:c,value:W,onChange:n,onBlur:a,"aria-label":b,className:`form-control ${s?"input-error":""}`,style:e?{paddingLeft:"35px",boxSizing:"border-box"}:{}},p0=()=>q==="select"?o0__default.default.createElement("select",{...A0},o0__default.default.createElement("option",{value:""},C),v.map(Y=>o0__default.default.createElement("option",{key:Y.value,value:Y.value},Y.label))):q==="textarea"?o0__default.default.createElement("textarea",{...A0,placeholder:r}):o0__default.default.createElement("input",{type:q,...A0,placeholder:r}),a0=q==="textarea";return o0__default.default.createElement("div",{className:`form-group ${R?"half-width":""}`,style:{position:"relative"}},l&&b&&o0__default.default.createElement("label",{className:"form-field-label"},b," ",o0__default.default.createElement("span",{className:"required-asterisk"},"*")),o0__default.default.createElement("div",{className:"input-container",style:{position:"relative"}},_&&o0__default.default.createElement(_,{className:"input-icon",style:{position:"absolute",left:"10px",top:a0?"12px":"50%",transform:a0?"none":"translateY(-50%)",color:"#6c757d",pointerEvents:"none",zIndex:1}}),p0(),j&&o0__default.default.createElement("div",{className:"magic-wand-container",onClick:h,onMouseEnter:()=>{m.current&&clearTimeout(m.current),y(true);},onMouseLeave:()=>{m.current=setTimeout(()=>y(false),1200);},style:{position:"absolute",top:"50%",right:"10px",transform:"translateY(-50%)",cursor:"pointer"}},o0__default.default.createElement(j,{className:"magic-wand-icon",style:{color:"#B567C2"}}),E&&f&&o0__default.default.createElement("div",{ref:S,className:"magic-tooltip",style:{position:"absolute",bottom:"100%",...g==="left"?{left:0}:{right:0},backgroundColor:"#fff",color:"#333",borderRadius:"8px",fontSize:"0.9rem",boxShadow:"0px 4px 10px rgba(0,0,0,0.15)",zIndex:1e3,marginBottom:"8px",minWidth:"220px",overflow:"hidden"}},o0__default.default.createElement("div",{style:{position:"relative",zIndex:2,padding:"12px 20px"}},o0__default.default.createElement("div",{style:{borderBottom:"1px solid #eee",marginBottom:"8px",paddingBottom:"4px"}},f),o0__default.default.createElement("div",{style:{fontWeight:"bold",fontSize:"13px",textAlign:"center",marginTop:"8px"}},N.tooltip?.confirm),o0__default.default.createElement("div",{style:{fontSize:"0.7rem",textAlign:"center",color:"#999",marginTop:"4px"}},N.tooltip?.source))))),s&&o0__default.default.createElement("p",{className:"form-error"},s))},_0=o0__default.default.memo(A4);var V0=P0(c1());P0(Mp());var zp={nl:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",extraInfo:"Extra info",seatPlace:"Zitplaats"},placeholders:{firstName:"Voornaam",lastName:"Achternaam",email:"E-mailadres",phone:"Mobiel nummer",extraInfo:"Extra informatie",seatPlace:"Selecteer zitplaats"},magic:{title:"Gast Gegevens"}},reservationSummary:{title:"Reservatie Gegevens",guests:"Aantal gasten",date:"Datum",time:"Tijd",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",menu:"Menu",staff:"Aangemaakt door",giftcard:"Cadeaubon",extraInfo:"Extra informatie",seatPlace:"Zitplaats",newReservationButton:"Nieuwe Reservatie Maken"}},en:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",extraInfo:"Extra Info",seatPlace:"Seating area"},placeholders:{firstName:"First Name",lastName:"Last Name",email:"Email Address",phone:"Mobile Number",extraInfo:"Extra Information",seatPlace:"Select seating area"},magic:{title:"Guest Details"}},reservationSummary:{title:"Reservation Details",guests:"Number of Guests",date:"Date",time:"Time",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",menu:"Menu",staff:"Created by",giftcard:"Gift Card",extraInfo:"Extra Information",seatPlace:"Seating area",newReservationButton:"New Reservation"}},fr:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise"},placeholders:{firstName:"Pr\xE9nom",lastName:"Nom",email:"Adresse e-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"S\xE9lectionner une zone d\u2019assise"},magic:{title:"D\xE9tails Invit\xE9"}},reservationSummary:{title:"D\xE9tails de la R\xE9servation",guests:"Nombre d'invit\xE9s",date:"Date",time:"Heure",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",menu:"Menu",staff:"Cr\xE9\xE9 par",giftcard:"Carte Cadeau",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise",newReservationButton:"Nouvelle R\xE9servation"}}};R0(`.new-reservation-page .name-fields{display:flex;gap:20px}.input-container .form-control{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 10px 10px 35px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left;border-radius:5px;font-size:16px;box-sizing:border-box}
42
+ `);var A4=({label:b,name:c,type:q="text",icon:e,value:W,onChange:n,onBlur:a,error:s,placeholder:r,halfWidth:R,options:v=[],selectPlaceholder:u,rightIcon:B,onRightIconClick:h,tooltipContent:f,tooltipAlign:g,required:l})=>{let N=j0($b,"formField"),C=u||N.selectPlaceholder,[E,y]=o0.useState(false),S=o0.useRef(null),m=o0.useRef(null),j=B,_=e;o0.useEffect(()=>{let Y=X=>{S.current&&!S.current.contains(X.target)&&(m.current&&clearTimeout(m.current),y(false));};return E&&document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[E]);let A0={name:c,value:W,onChange:n,onBlur:a,"aria-label":b,className:`form-control ${s?"input-error":""}`,style:e?{paddingLeft:"35px",boxSizing:"border-box"}:{}},p0=()=>q==="select"?o0__default.default.createElement("select",{...A0},o0__default.default.createElement("option",{value:""},C),v.map(Y=>o0__default.default.createElement("option",{key:Y.value,value:Y.value},Y.label))):q==="textarea"?o0__default.default.createElement("textarea",{...A0,placeholder:r}):o0__default.default.createElement("input",{type:q,...A0,placeholder:r}),a0=q==="textarea";return o0__default.default.createElement("div",{className:`form-group ${R?"half-width":""}`,style:{position:"relative"}},l&&b&&o0__default.default.createElement("label",{className:"form-field-label"},b," ",o0__default.default.createElement("span",{className:"required-asterisk"},"*")),o0__default.default.createElement("div",{className:"input-container",style:{position:"relative"}},_&&o0__default.default.createElement(_,{className:"input-icon",style:{position:"absolute",left:"10px",top:a0?"12px":"50%",transform:a0?"none":"translateY(-50%)",color:"#6c757d",pointerEvents:"none",zIndex:1}}),p0(),j&&o0__default.default.createElement("div",{className:"magic-wand-container",onClick:h,onMouseEnter:()=>{m.current&&clearTimeout(m.current),y(true);},onMouseLeave:()=>{m.current=setTimeout(()=>y(false),1200);},style:{position:"absolute",top:"50%",right:"10px",transform:"translateY(-50%)",cursor:"pointer"}},o0__default.default.createElement(j,{className:"magic-wand-icon",style:{color:"#B567C2"}}),E&&f&&o0__default.default.createElement("div",{ref:S,className:"magic-tooltip",style:{position:"absolute",bottom:"100%",...g==="left"?{left:0}:{right:0},backgroundColor:"#fff",color:"#333",borderRadius:"8px",fontSize:"0.9rem",boxShadow:"0px 4px 10px rgba(0,0,0,0.15)",zIndex:1e3,marginBottom:"8px",minWidth:"220px",overflow:"hidden"}},o0__default.default.createElement("div",{style:{position:"relative",zIndex:2,padding:"12px 20px"}},o0__default.default.createElement("div",{style:{borderBottom:"1px solid #eee",marginBottom:"8px",paddingBottom:"4px"}},f),o0__default.default.createElement("div",{style:{fontWeight:"bold",fontSize:"13px",textAlign:"center",marginTop:"8px"}},N.tooltip?.confirm),o0__default.default.createElement("div",{style:{fontSize:"0.7rem",textAlign:"center",color:"#999",marginTop:"4px"}},N.tooltip?.source))))),s&&o0__default.default.createElement("p",{className:"form-error"},s))},_0=o0__default.default.memo(A4);var V0=P0(c1());P0(Mp());var zp={nl:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",extraInfo:"Extra info",seatPlace:"Zitplaats"},placeholders:{firstName:"Voornaam",lastName:"Achternaam",email:"E-mailadres",phone:"Mobiel nummer",extraInfo:"Extra informatie",seatPlace:"Selecteer zitplaats"},magic:{title:"Gast Gegevens"}},reservationSummary:{title:"Reservatie Gegevens",guests:"Aantal gasten",date:"Datum",time:"Tijd",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",menu:"Menu",staff:"Aangemaakt door",giftcard:"Cadeaubon",extraInfo:"Extra informatie",seatPlace:"Zitplaats",newReservationButton:"Nieuwe Reservatie Maken"}},en:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",extraInfo:"Extra Info",seatPlace:"Seating area"},placeholders:{firstName:"First Name",lastName:"Last Name",email:"Email Address",phone:"Mobile Number",extraInfo:"Extra Information",seatPlace:"Select seating area"},magic:{title:"Guest Details"}},reservationSummary:{title:"Reservation Details",guests:"Number of Guests",date:"Date",time:"Time",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",menu:"Menu",staff:"Created by",giftcard:"Gift Card",extraInfo:"Extra Information",seatPlace:"Seating area",newReservationButton:"New Reservation"}},fr:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise"},placeholders:{firstName:"Pr\xE9nom",lastName:"Nom",email:"Adresse e-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"S\xE9lectionner une zone d\u2019assise"},magic:{title:"D\xE9tails Invit\xE9"}},reservationSummary:{title:"D\xE9tails de la R\xE9servation",guests:"Nombre d'invit\xE9s",date:"Date",time:"Heure",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",menu:"Menu",staff:"Cr\xE9\xE9 par",giftcard:"Carte Cadeau",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise",newReservationButton:"Nouvelle R\xE9servation"}}};R0(`.new-reservation-page .name-fields{display:flex;gap:20px}.input-container .form-control{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 10px 10px 30px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left;border-radius:5px;font-size:16px;box-sizing:border-box}
43
43
  `);var cp=o0__default.default.memo(({formData:b,errors:c,handleChange:q,setFormData:e,menuData:W})=>{let n=SM(),a=j0(zp,"reservationStepTwoFiltering"),[s,r]=o0.useState([]),[R,v]=o0.useState(false),[u,B]=o0.useState(null),[h,f]=o0.useState([]),g=o1(),l=fa.FaMagic,N=()=>{u&&E();};o0.useEffect(()=>{if(V0.default.locale(n),!b.date||!b.time||!W.length)return r([]);let Y=(0, V0.default)(`${b.date} ${b.time}`,"YYYY-MM-DD HH:mm"),X=W.filter(U=>{let x=Y.isBetween((0, V0.default)(U.startDate,"YYYY-MM-DD"),(0, V0.default)(U.endDate,"YYYY-MM-DD"),"day","[]"),I=(0, V0.default)(b.time,"HH:mm").isBetween((0, V0.default)(U.startHour,"HH:mm"),(0, V0.default)(U.endHour,"HH:mm"),"minute","[]"),V=(0, V0.default)(Y).locale("nl").format("dddd").toLowerCase(),c0=(0, V0.default)(Y).locale("en").format("dddd").toLowerCase(),O0=(U.daysOfWeek||[]).map(P=>P.toLowerCase()),d0=!O0.length||O0.includes(V)||O0.includes(c0);return x&&I&&d0});r(X);},[b.date,b.time,W,n]);let C=async()=>{if(R||u)return;let Y=(b.email||"").trim().toLowerCase(),X=(b.phone||"").trim(),U=Y&&[".com",".net",".be",".nl"].some(V=>Y.endsWith(V)),x=!!X&&(X.startsWith("+32")?X.length>=12:X.length>=10);if(!U&&!x)return;let I=[];U&&I.push("email"),x&&I.push("phone");try{let V=await g.post(`${window.baseDomain}api/autofill`,{email:Y,phone:X});V?.firstName&&V?.lastName&&V?.email&&V?.phone&&B({...V,sources:I});}catch{console.error("Autofill error");}};o0.useEffect(()=>{C();},[b.email,b.phone]);let E=()=>{u&&(e(Y=>({...Y,firstName:u.firstName,lastName:u.lastName,email:u.email,phone:u.phone})),v(true),B(null));},y=async()=>{let Y=(b.firstName||"").trim(),X=(b.lastName||"").trim();if(Y.length<2&&X.length<2){f([]);return}try{let U=await g.post(`${window.baseDomain}api/autofill-name`,{firstName:Y||void 0,lastName:X||void 0});Array.isArray(U)&&U.length>0?f(U):f([]);}catch{f([]);}},S=Y=>{e(X=>({...X,firstName:Y.firstName,lastName:Y.lastName,email:Y.email,phone:Y.phone})),f([]),v(true);};o0.useEffect(()=>{if(R)return;let Y=(b.firstName||"").trim(),X=(b.lastName||"").trim();if(Y.length<2&&X.length<2){f([]);return}f([]);let U=setTimeout(()=>{y();},500);return ()=>clearTimeout(U)},[b.firstName,b.lastName]);let m=o0.useMemo(()=>{if(!u)return {email:{},phone:{}};let Y=u.sources.includes("email")&&(b.email||"").trim().toLowerCase()===u.email.trim().toLowerCase(),X=u.sources.includes("phone")&&(b.phone||"").trim()===u.phone.trim(),U={rightIcon:l,onRightIconClick:N};return {email:Y?{...U,tooltipContent:o0__default.default.createElement("div",null,o0__default.default.createElement("div",{style:{textAlign:"center",fontWeight:"bold"}},a.magic?.title),o0__default.default.createElement("div",null,u.firstName," ",u.lastName),o0__default.default.createElement("div",null,u.phone))}:{},phone:X?{...U,tooltipContent:o0__default.default.createElement("div",null,o0__default.default.createElement("div",{style:{textAlign:"center",fontWeight:"bold"}},a.magic?.title),o0__default.default.createElement("div",null,u.firstName," ",u.lastName),o0__default.default.createElement("div",null,u.email))}:{}}},[u,b.email,b.phone,a.magic?.title]),j=o0.useMemo(()=>{if(!h.length)return {firstName:{},lastName:{}};let X=(b.lastName||"").trim().length>0?"lastName":"firstName",U=o0__default.default.createElement("div",{style:{maxHeight:"200px",overflowY:"auto"}},h.map((I,V)=>o0__default.default.createElement("div",{key:V,className:"name-match-item",onClick:c0=>{c0.stopPropagation(),S(I);}},o0__default.default.createElement("div",{style:{fontWeight:"500"}},I.firstName," ",I.lastName),o0__default.default.createElement("div",{style:{fontSize:"0.8rem",color:"#666"}},I.email),I.phone&&o0__default.default.createElement("div",{style:{fontSize:"0.8rem",color:"#666"}},I.phone)))),x={rightIcon:fa.FaMagic,onRightIconClick:()=>{},tooltipContent:o0__default.default.createElement("div",null,o0__default.default.createElement("div",{style:{textAlign:"center",fontWeight:"bold"}},a.magic?.title),U)};return {firstName:X==="firstName"?{...x,tooltipAlign:"left"}:{},lastName:X==="lastName"?x:{}}},[h,b.lastName,a.magic?.title]),{reservationMode:_}=b,H=_==="check_in",A0=window.generalSettings?.obligatedFields||[],p0=Y=>A0.includes(Y),a0=Y=>!H&&p0(Y),q0=(Y,X)=>{let U=a.labels?.[Y]||X;return H?`${U} (Optioneel)`:p0(Y)?`${U} *`:U};return o0__default.default.createElement("div",{className:"reservation-step-two"},o0__default.default.createElement("div",{className:"account-manage-form"},s.length>0&&o0__default.default.createElement(_0,{label:`${a.labels?.menu||"Menu"}${H?" (Optioneel)":""}`,name:"menu",type:"select",options:s.map(Y=>({value:Y.name,label:Y.name})),value:b.menu,onChange:q,error:H?null:c.menu}),o0__default.default.createElement("div",{className:"name-fields"},o0__default.default.createElement(_0,{label:q0("firstName","Voornaam"),name:"firstName",placeholder:a.placeholders?.firstName||"",value:b.firstName,onChange:q,error:H?null:c.firstName,icon:fa.FaUser,required:a0("firstName"),...j.firstName}),o0__default.default.createElement(_0,{label:q0("lastName","Achternaam"),name:"lastName",placeholder:a.placeholders?.lastName||"",value:b.lastName,onChange:q,error:H?null:c.lastName,icon:fa.FaUser,required:a0("lastName"),...j.lastName})),o0__default.default.createElement(_0,{label:q0("email","Email"),name:"email",type:"email",placeholder:a.placeholders?.email||"",value:b.email,onChange:q,onBlur:C,error:c.email,icon:fa.FaEnvelope,required:a0("email"),...m.email}),o0__default.default.createElement(_0,{label:q0("phone","Telefoon"),name:"phone",type:"tel",placeholder:a.placeholders?.phone||"",value:b.phone,onChange:q,onBlur:C,error:c.phone,icon:fa.FaPhone,required:a0("phone"),...m.phone}),o0__default.default.createElement(_0,{label:a.labels?.extraInfo||"Extra info",name:"extraInfo",type:"textarea",placeholder:a.placeholders?.extraInfo||"",value:b.extraInfo,onChange:q,error:c.extraInfo,icon:fa.FaInfoCircle})))});cp.displayName="ReservationStepTwo";var k2=cp;var Ap={nl:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",extraInfo:"Extra info",seatPlace:"Zitplaats"},placeholders:{firstName:"Voornaam",lastName:"Achternaam",email:"E-mailadres",phone:"Mobiel nummer",extraInfo:"Extra informatie",seatPlace:"Selecteer zitplaats"},magic:{title:"Gast Gegevens"}},reservationSummary:{title:"Reservatie Gegevens",guests:"Aantal gasten",date:"Datum",time:"Tijd",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",menu:"Menu",staff:"Aangemaakt door",giftcard:"Cadeaubon",extraInfo:"Extra informatie",seatPlace:"Zitplaats",newReservationButton:"Nieuwe Reservatie Maken"}},en:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",extraInfo:"Extra Info",seatPlace:"Seating area"},placeholders:{firstName:"First Name",lastName:"Last Name",email:"Email Address",phone:"Mobile Number",extraInfo:"Extra Information",seatPlace:"Select seating area"},magic:{title:"Guest Details"}},reservationSummary:{title:"Reservation Details",guests:"Number of Guests",date:"Date",time:"Time",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",menu:"Menu",staff:"Created by",giftcard:"Gift Card",extraInfo:"Extra Information",seatPlace:"Seating area",newReservationButton:"New Reservation"}},fr:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise"},placeholders:{firstName:"Pr\xE9nom",lastName:"Nom",email:"Adresse e-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"S\xE9lectionner une zone d\u2019assise"},magic:{title:"D\xE9tails Invit\xE9"}},reservationSummary:{title:"D\xE9tails de la R\xE9servation",guests:"Nombre d'invit\xE9s",date:"Date",time:"Heure",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",menu:"Menu",staff:"Cr\xE9\xE9 par",giftcard:"Carte Cadeau",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise",newReservationButton:"Nouvelle R\xE9servation"}}};R0(`.new-reservation-page .reservation-sidebar-component .reservation-summary .modal-title{margin-top:0;margin-bottom:20px}.new-reservation-page .reservation-sidebar-component .reservation-summary .reservation-details{list-style-type:none;padding:0;margin:0 0 20px;width:100%}.new-reservation-page .reservation-sidebar-component .reservation-summary .reservation-details li{margin-bottom:10px;font-size:15px;align-items:left;text-align:left}.new-reservation-page .reservation-sidebar-component .reservation-summary .reservation-details li strong{font-weight:700}.new-reservation-page .reservation-sidebar-component .reservation-summary{align-items:left}
44
44
  `);var a4=({formData:b,onNewReservation:c})=>{let q=j0(Ap,"reservationSummary");return o0__default.default.createElement("div",{className:"reservation-summary"},o0__default.default.createElement("ul",{className:"reservation-details"},o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.title)),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.guests,":")," ",b.guests),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.date,":")," ",b.date),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.time,":")," ",b.time),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.firstName,":")," ",b.firstName),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.lastName,":")," ",b.lastName),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.email,":")," ",b.email),o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.phone,":")," ",b.phone),b.menu&&o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.menu,":")," ",b.menu),b.personeel&&o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.staff,":")," ",b.personeel),b.giftcard&&o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.giftcard,":")," ",b.giftcard),b.extraInfo&&o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.extraInfo,":")," ",b.extraInfo),b.zitplaats&&o0__default.default.createElement("li",null,o0__default.default.createElement("strong",null,q.seatPlace,":")," ",b.zitplaats)),o0__default.default.createElement("button",{className:"button-style-3",onClick:c},q.newReservationButton))},w2=a4;var op={nl:{zitplaatsSelection:{labels:{seating:"Zitplaats"},options:{noPreference:"Geen voorkeur"}},giftcardSelection:{labels:{giftcard:"Cadeaubon"},options:{noGiftcard:"Geen Cadeaubon"}}},en:{zitplaatsSelection:{labels:{seating:"Seating"},options:{noPreference:"No preference"}},giftcardSelection:{labels:{giftcard:"Gift Card"},options:{noGiftcard:"No Gift Card"}}},fr:{zitplaatsSelection:{labels:{seating:"Place Assise"},options:{noPreference:"Pas de pr\xE9f\xE9rence"}},giftcardSelection:{labels:{giftcard:"Cadeau"},options:{noGiftcard:"Pas de carte"}}}};R0(`.new-reservation-page .giftcard-selection{margin-bottom:20px}.new-reservation-page .giftcard-options{display:flex;gap:20px;margin:10px 0}.new-reservation-page .giftcard-option{display:flex;align-items:center;gap:8px;cursor:pointer}.new-reservation-page .form-label{font-weight:500;margin-bottom:8px;display:block}.new-reservation-page .giftcard-option input[type=radio]{margin:0;cursor:pointer}.new-reservation-page .giftcard-option label{cursor:pointer}
45
45
  `);var r4=({restaurantData:b,formData:c,handleChange:q,resetFormDataFields:e})=>{let W=j0(op,"giftcardSelection"),[n,a]=o0.useState([]);if(o0.useEffect(()=>{if(!b)return;let R=["breakfast","lunch","dinner"],v=new Set;R.forEach(u=>{let B=b[`openinghours-${u}`]?.schemeSettings||{};Object.values(B).forEach(h=>{h?.giftcardsEnabled&&Array.isArray(h.giftcards)&&h.giftcards.forEach(f=>{let g=typeof f=="string"?f.trim():String(f||"").trim();g&&v.add(g);});});}),a([...v]);},[b]),!n.length)return null;let s=n.map(R=>({value:R,label:R})),r=R=>{q({target:{name:"giftcard",value:R.target.value}}),e(["date","time"]);};return o0__default.default.createElement("div",{className:"giftcard-selection"},o0__default.default.createElement(_0,{label:W.labels?.giftcard||"Giftcard",name:"giftcard",type:"select",options:s,value:c.giftcard||"",onChange:r,selectPlaceholder:W.options?.noGiftcard||"Geen giftcard"}))},x2=r4;var P2=P0(c1());var ep={nl:{reservationSidebar:{saveButton:"Opslaan",saveButtonLoading:"Opslaan..."}},en:{reservationSidebar:{saveButton:"Save",saveButtonLoading:"Saving..."}},fr:{reservationSidebar:{saveButton:"Enregistrer",saveButtonLoading:"Enregistrement..."}}};R0(`.reservation-sidebar-component{position:fixed;top:0;right:-400px;width:400px;height:100%;background-color:#fff;box-shadow:-2px 0 5px #0000001a;z-index:var(--z-index-sidebar-reservation);display:flex;flex-direction:column;overflow-y:auto;transition:right .3s ease-in-out}.admin-title{text-align:center;margin-bottom:30px}.reservation-sidebar-component.open{right:0}.reservation-sidebar-content{padding:60px 20px 20px}.close-sidebar-button{position:absolute;top:10px;left:10px;background-color:transparent;border:none;cursor:pointer}.close-sidebar-button svg{color:#000}.sidebar-section-one,.sidebar-section-two{margin-bottom:20px}.reservation-footer{margin-top:auto}.store-reservation-button{width:100%;padding:12px;background-color:var(--color-blue);color:#fff;border:none;border-radius:5px;cursor:pointer;font-size:1.1rem}.open-sidebar-button{position:fixed;bottom:20px;right:20px;background-color:var(--color-blue);color:#fff;border:none;border-radius:50%;width:50px;height:50px;cursor:pointer;z-index:var(--z-index-modal)!important;transition:all .3s ease}.open-sidebar-button:hover{background-color:var(--color-blue-hover-accent)!important}.open-sidebar-button svg{position:relative;top:2px}@media screen and (max-width:480px){.reservation-sidebar-component{width:100%}}.sidebar-section-personeel{margin-bottom:10px}.sidebar-tabs{display:flex;border-bottom:1px solid #ddd;margin-bottom:20px}.sidebar-tab-button{flex:1;padding:10px;border:none;background:transparent;border-bottom:none;font-weight:400;cursor:pointer;color:#666}.sidebar-tab-button.active{border-bottom:2px solid var(--color-blue);font-weight:700;color:var(--color-blue)}
package/dist/index.mjs CHANGED
@@ -39,7 +39,7 @@ Checking Time: ${v} -> Determined Meal: ${B}`),!B){N0(` Time ${v} has no associ
39
39
  border-color: #48AAAF !important;
40
40
  }
41
41
  `),o0.createElement("div",{style:g.grid},R.map(N=>o0.createElement("button",{key:N.value,type:"button",className:`duration-btn ${parseInt(b)===N.value?"active-duration":""}`,tabIndex:"-1",style:{...g.optionBtn,...!a&&parseInt(b)===N.value?g.activeBtn:{}},onClick:()=>B(N.value),onMouseDown:C=>C.preventDefault()},N.label)),v&&o0.createElement("button",{type:"button",className:`duration-btn ${a?"active-duration":""}`,tabIndex:"-1",style:{...g.optionBtn,...a?g.activeBtn:{},flex:"0 0 auto",width:"auto",minWidth:"40px"},onClick:h,onMouseDown:N=>N.preventDefault()},a?o0.createElement(FaMinus,{size:12}):o0.createElement(FaPlus,{size:12}))),o0.createElement(AnimatePresence,null,a&&o0.createElement(motion.div,{initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0},style:{overflow:"hidden"}},o0.createElement("div",{style:g.stepperContainer},o0.createElement("button",{type:"button",style:g.stepperBtn,onClick:()=>f(-1)},o0.createElement(FaMinus,{size:12})),o0.createElement("span",{style:g.stepperValue},l(parseInt(b)||0)),o0.createElement("button",{type:"button",style:g.stepperBtn,onClick:()=>f(1)},o0.createElement(FaPlus,{size:12}))))))},S2=M4;var Qb=memo(({formData:b,errors:c,handleChange:q,handleStepOneSubmit:e,setFormData:W,timeblocks:n,loadingTimeblocks:a,timeblocksError:s,restaurantData:r,isAdmin:R=false})=>{let v=localStorage.getItem("preferredLanguage")||"nl",u=a1[v].reservationStepOne,[B,h]=useState(b.guests||2),[f,g]=useState(null),[l,N]=useState([]),C=o1(),[E,y]=useState([]),[S,m]=useState(false),[j,_]=useState(false),H=useRef(false),A0=useRef(false),p0=useRef(false),a0=useCallback(F=>{W(k=>{let J={...k};return F.forEach(z0=>{J[z0]="";}),(F.includes("date")||F.includes("time")||F.includes("guests"))&&(J.selectedTableNumbers=[],J.selectedTableIds=[],y([])),J});},[W]);useEffect(()=>{let k=(0, Vb.default)().tz("Europe/Amsterdam").startOf("day").clone().startOf("isoWeek");for(;kz(k);)k.add(1,"week");g(k);},[]),useEffect(()=>{(async()=>{if(f&&(b.reservationMode==="met_limieten"||b.reservationMode==="zonder_regels"||b.reservationMode==="vrije_keuze")){let k=r?.["table-settings"]||{},J=k.isInstalled===true&&k.assignmentMode==="automatic";if(b.reservationMode==="met_limieten"||b.reservationMode==="vrije_keuze"||b.reservationMode==="zonder_regels"&&J){let z0=f.format("YYYY-MM-DD"),u0=f.clone().add(13,"days").format("YYYY-MM-DD"),T0=localStorage.getItem("username"),f0=`${window.baseDomain}api/slots/${T0}/${z0}/${u0}`;try{let A=await C.get(f0,{noCache:!0});N(A||[]);}catch(A){console.error("Error fetching reservations:",A),N([]);}}else N([]);}else N([]);})();},[f,C,b.reservationMode,r]),useEffect(()=>{window.__reservationDashboardPreset&&b.date?(window.__reservationDashboardPreset=false,p0.current=true,A0.current=true):_(false);},[b.date]),useEffect(()=>{if(p0.current&&r&&Object.keys(r).length>0&&b.date&&b.reservationMode==="met_limieten"){p0.current=false;let F=r?.["blocked-slots"]||[],k=b.guests||2,J=r?.["table-settings"]||{},z0=J.isInstalled===true&&J.assignmentMode==="automatic",u0;z0?u0=(0, U0.isDateAvailableWithTableCheck)(r,b.date,l,k,F,null,R,null,b.zitplaats||null):u0=(0, U0.isDateAvailable)(r,b.date,l,k,F,null,R),u0?(_(false),A0.current=false):(_(true),A0.current=true,W(T0=>({...T0,reservationMode:"vrije_keuze"})));}},[r,l,b.date,b.guests,b.reservationMode,R,W]);let q0=F=>{g(F),a0(["date","time","selectedTableNumbers","selectedTableIds"]);};useEffect(()=>{if(!H.current){let F=false,k={};b.reservationMode||(k.reservationMode="met_limieten",F=true),(!b.guests||b.guests==="")&&(k.guests=B,F=true),Array.isArray(b.selectedTableNumbers)||(k.selectedTableNumbers=[],F=true),Array.isArray(b.selectedTableIds)||(k.selectedTableIds=[],F=true),F&&setTimeout(()=>{q({target:{multiple:true,updates:k}});},0),H.current=true;}},[b.reservationMode,b.guests,b.selectedTableNumbers,b.selectedTableIds,B,q]);let Y=useMemo(()=>r?.["table-settings"]||{},[r]),X=useMemo(()=>Y.isInstalled===true&&Y.assignmentMode==="automatic",[Y]),U=useMemo(()=>["met_limieten","zonder_regels","vrije_keuze"].includes(b.reservationMode),[b.reservationMode]),x=useMemo(()=>U&&b.date&&b.time&&b.guests>0&&X&&E.length>0,[U,b.date,b.time,b.guests,X,E.length]);useEffect(()=>{if(!X||!b.date||!b.time||b.guests<=0||!r||!l){y([]),m(false);return}m(true);let F=setTimeout(()=>{(window.requestIdleCallback||(J=>setTimeout(J,1)))(()=>{try{let J=new Set;r?.manualFloors&&Array.isArray(r.manualFloors)&&r.manualFloors.forEach(A=>{(A.tables||[]).forEach(d=>{d.tableNumber!=null&&J.add(d.tableNumber);});});let z0=[...r?.floors||[],...r?.manualFloors||[]],u0={...r,floors:z0},f0=F0("getAvailableTablesForTime",U0.getAvailableTablesForTime,u0,b.date,b.time,b.guests,l,b.zitplaats||null).map(A=>({...A,isManual:J.has(A.tableNumber)}));y(f0);}catch(J){console.error("Error calculating available tables:",J),y([]);}finally{m(false);}});},500);return ()=>{clearTimeout(F),m(false);}},[X,b.date,b.time,b.guests,b.zitplaats,r,l]),useEffect(()=>{if(E.length>0){let F=b.selectedTableNumbers||[],k=b.selectedTableIds||[],J=[],z0=[];F.forEach(u0=>{let T0=E.find(f0=>f0.tableNumber===u0);T0&&k.includes(T0.tableId)&&(J.push(u0),z0.push(T0.tableId));}),J.length!==F.length&&setTimeout(()=>{q({target:{multiple:true,updates:{selectedTableNumbers:J,selectedTableIds:z0}}});},0);}else (b.selectedTableNumbers?.length>0||b.selectedTableIds?.length>0)&&setTimeout(()=>{q({target:{multiple:true,updates:{selectedTableNumbers:[],selectedTableIds:[]}}});},0);},[E,b.selectedTableNumbers,b.selectedTableIds]);let I=F=>{let k=parseInt(F.target.value,10)||1;h(k),_(false),W(J=>{let z0={...J,guests:k};if(z0.selectedTableNumbers=[],z0.selectedTableIds=[],z0.reservationMode==="vrije_keuze")return z0;if(z0.date&&r&&Object.keys(r).length>0){let u0=r?.["blocked-slots"]||[],T0=z0.reservationMode!=="met_limieten"?-1e4:k,f0=r?.["table-settings"]||{},A=z0.reservationMode==="met_limieten"&&f0.isInstalled===true&&f0.assignmentMode==="automatic",d;if(A?d=F0("isDateAvailableWithTableCheck",U0.isDateAvailableWithTableCheck,r,z0.date,l,T0,u0,null,R,null,z0.zitplaats||null):d=F0("isDateAvailable",U0.isDateAvailable,r,z0.date,l,T0,u0,null,R),!d)z0.date="",z0.time="";else if(z0.time){let t=(0, U0.getAvailableTimeblocks)(r,z0.date,l,T0,u0,null,R,z0.duration||null);(A?(0, U0.getAvailableTimeblocksWithTableCheck)(r,z0.date,t,T0,l,z0.zitplaats||null,z0.duration||null):t)[z0.time]||(z0.time="");}}return z0});};useEffect(()=>{if(A0.current){A0.current=false;return}a0(["date","time","selectedTableNumbers","selectedTableIds"]);},[b.reservationMode,a0]);let V=F=>{_(false),F==="met_limieten"?q({target:{name:"reservationMode",value:"met_limieten"}}):F==="onbeperkt_parent"&&(["zonder_regels","vrije_keuze"].includes(b.reservationMode)||q({target:{name:"reservationMode",value:"zonder_regels"}}));},c0=F=>{_(false),q({target:{name:"reservationMode",value:F}});},O0=b.reservationMode,d0=!!r?.["general-settings"]?.seatSelectionEnabled,P=Array.isArray(r?.["general-settings"]?.seatAreas)?r["general-settings"].seatAreas:["Terras","Restaurant"],X0=F=>{W(k=>({...k,zitplaats:F}));};return s?o0.createElement("div",null,u.errors.openingHoursNotSet," ",o0.createElement("a",{href:"https://happychef.cloud/#/openinghours/dinner",target:"_blank",rel:"noopener noreferrer",style:{color:"var(--color-blue)",textDecoration:"underline"}},u.errors.clickHereToSet)):o0.createElement("form",{className:"account-manage-form",noValidate:true},o0.createElement("div",{className:"form-group reservation-mode"},o0.createElement("div",{className:"reservation-modes-container"},o0.createElement("button",{type:"button",className:`reservation-mode-button ${O0==="met_limieten"?"active":""}`,onClick:()=>V("met_limieten"),"aria-pressed":O0==="met_limieten"},u.modes.withLimits),o0.createElement("button",{type:"button",className:`reservation-mode-button ${["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)?"active":""}`,onClick:()=>V("onbeperkt_parent"),"aria-pressed":["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)},u.modes.unlimited)),["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)&&o0.createElement("div",{className:"reservation-modes-container sub-modes"},o0.createElement("button",{type:"button",className:`reservation-mode-button ${O0==="zonder_regels"?"active":""}`,onClick:()=>c0("zonder_regels"),"aria-pressed":O0==="zonder_regels"},u.modes.openingHours),o0.createElement("button",{type:"button",className:`reservation-mode-button ${O0==="vrije_keuze"?"active":""}`,onClick:()=>c0("vrije_keuze"),"aria-pressed":O0==="vrije_keuze"},u.modes.free))),["onbeperkt_parent","zonder_regels","vrije_keuze"].includes(O0)&&o0.createElement("div",{className:"unlimited-mode-warning"},o0.createElement("div",{className:"warning-text"},j?u.warnings?.dateNotAvailableWithLimits||"Let op: deze datum is niet beschikbaar met limieten voor dit aantal gasten. De modus is automatisch overgezet naar onbeperkt vrij.":u.warnings?.unlimitedMode||(v==="nl"?"Let op: Bij onbeperkte boekingen wordt geen rekening gehouden met de maximale capaciteit van het restaurant. De maximale zitplaatslimiet kan worden overschreden.":"Warning: Unlimited bookings do not take into account the restaurant's maximum capacity. The maximum seating limit may be exceeded."))),o0.createElement(d2,{setGuests:h,value:b.guests||B,onChange:I,error:c.guests}),d0&&U&&b.guests>0&&o0.createElement("div",{className:"form-row",style:{marginTop:12}},o0.createElement("div",{className:"reservation-mode-buttons"},P.map(F=>o0.createElement("button",{key:F,type:"button",className:`reservation-mode-button ${b.zitplaats===F?"active":""}`,onClick:()=>X0(F),"aria-pressed":b.zitplaats===F},F))),c.zitplaats&&o0.createElement("small",{className:"error"},c.zitplaats)),r?.account_type==="bowling"&&o0.createElement(S2,{duration:b.duration,handleChange:F=>{q(F),a0(["date","time","selectedTableNumbers","selectedTableIds"]);},min:r["general-settings"]?.minDuration||30,max:r["general-settings"]?.maxDuration||120,interval:r["general-settings"]?.durationInterval||30}),U&&b.guests>0&&o0.createElement(Fb,{guests:b.guests,formData:b,handleChange:q,resetFormDataFields:a0,restaurantData:r,reservations:l,startDate:f,onWeekChange:q0,reservationMode:O0,isAdmin:R}),U&&b.date&&o0.createElement(jb,{guests:b.guests,formData:b,handleChange:q,field:{id:"time",label:u.fields.time},selectedDate:b.date,setCurrentExpandedField:()=>{},restaurantData:r,reservations:l,reservationMode:O0,zitplaats:b.zitplaats||null,isAdmin:R}),x&&o0.createElement(y2,{availableTables:E,isFetching:S,formData:b,setFormData:W,handleChange:q}),S&&b.date&&b.time&&b.guests>0&&o0.createElement("div",{style:{textAlign:"center",padding:"10px",color:"#666",fontSize:"14px"}},"Beschikbare tafels berekenen..."))});Qb.displayName="ReservationStepOne";var yM=Qb;var SM=()=>localStorage.getItem("preferredLanguage")||"nl",j0=(b,c,q="nl")=>{let e=SM();return (b[e]||b[q]||{})[c]||{}};var $b={nl:{formField:{selectPlaceholder:"Selecteer een optie",tooltip:{confirm:"Klik om te Bevestigen",source:"Gevonden met Happy Ai"}}},en:{formField:{selectPlaceholder:"Select an option",tooltip:{confirm:"Click to Confirm",source:"Found with Happy Ai"}}},fr:{formField:{selectPlaceholder:"S\xE9lectionnez une option",tooltip:{confirm:"Cliquez pour confirmer",source:"Trouv\xE9 avec Happy Ai"}}}};R0(`.new-reservation-page .form-group .magic-tooltip{transition:transform .2s ease;transform-origin:bottom right}.new-reservation-page .form-group .magic-tooltip:hover{transform:scale(1.05)}.form-field-label{display:block;font-size:.8rem;font-weight:600;margin-bottom:4px;color:#333}.required-asterisk{color:red;margin-left:2px}.name-match-item{padding:8px 0;cursor:pointer;transition:background-color .15s ease}.name-match-item:hover{background-color:#f5f0f7}.name-match-item:not(:last-child){border-bottom:1px solid #f0f0f0}
42
- `);var A4=({label:b,name:c,type:q="text",icon:e,value:W,onChange:n,onBlur:a,error:s,placeholder:r,halfWidth:R,options:v=[],selectPlaceholder:u,rightIcon:B,onRightIconClick:h,tooltipContent:f,tooltipAlign:g,required:l})=>{let N=j0($b,"formField"),C=u||N.selectPlaceholder,[E,y]=useState(false),S=useRef(null),m=useRef(null),j=B,_=e;useEffect(()=>{let Y=X=>{S.current&&!S.current.contains(X.target)&&(m.current&&clearTimeout(m.current),y(false));};return E&&document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[E]);let A0={name:c,value:W,onChange:n,onBlur:a,"aria-label":b,className:`form-control ${s?"input-error":""}`,style:e?{paddingLeft:"35px",boxSizing:"border-box"}:{}},p0=()=>q==="select"?o0.createElement("select",{...A0},o0.createElement("option",{value:""},C),v.map(Y=>o0.createElement("option",{key:Y.value,value:Y.value},Y.label))):q==="textarea"?o0.createElement("textarea",{...A0,placeholder:r}):o0.createElement("input",{type:q,...A0,placeholder:r}),a0=q==="textarea";return o0.createElement("div",{className:`form-group ${R?"half-width":""}`,style:{position:"relative"}},l&&b&&o0.createElement("label",{className:"form-field-label"},b," ",o0.createElement("span",{className:"required-asterisk"},"*")),o0.createElement("div",{className:"input-container",style:{position:"relative"}},_&&o0.createElement(_,{className:"input-icon",style:{position:"absolute",left:"10px",top:a0?"12px":"50%",transform:a0?"none":"translateY(-50%)",color:"#6c757d",pointerEvents:"none",zIndex:1}}),p0(),j&&o0.createElement("div",{className:"magic-wand-container",onClick:h,onMouseEnter:()=>{m.current&&clearTimeout(m.current),y(true);},onMouseLeave:()=>{m.current=setTimeout(()=>y(false),1200);},style:{position:"absolute",top:"50%",right:"10px",transform:"translateY(-50%)",cursor:"pointer"}},o0.createElement(j,{className:"magic-wand-icon",style:{color:"#B567C2"}}),E&&f&&o0.createElement("div",{ref:S,className:"magic-tooltip",style:{position:"absolute",bottom:"100%",...g==="left"?{left:0}:{right:0},backgroundColor:"#fff",color:"#333",borderRadius:"8px",fontSize:"0.9rem",boxShadow:"0px 4px 10px rgba(0,0,0,0.15)",zIndex:1e3,marginBottom:"8px",minWidth:"220px",overflow:"hidden"}},o0.createElement("div",{style:{position:"relative",zIndex:2,padding:"12px 20px"}},o0.createElement("div",{style:{borderBottom:"1px solid #eee",marginBottom:"8px",paddingBottom:"4px"}},f),o0.createElement("div",{style:{fontWeight:"bold",fontSize:"13px",textAlign:"center",marginTop:"8px"}},N.tooltip?.confirm),o0.createElement("div",{style:{fontSize:"0.7rem",textAlign:"center",color:"#999",marginTop:"4px"}},N.tooltip?.source))))),s&&o0.createElement("p",{className:"form-error"},s))},_0=o0.memo(A4);var V0=P0(c1());P0(Mp());var zp={nl:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",extraInfo:"Extra info",seatPlace:"Zitplaats"},placeholders:{firstName:"Voornaam",lastName:"Achternaam",email:"E-mailadres",phone:"Mobiel nummer",extraInfo:"Extra informatie",seatPlace:"Selecteer zitplaats"},magic:{title:"Gast Gegevens"}},reservationSummary:{title:"Reservatie Gegevens",guests:"Aantal gasten",date:"Datum",time:"Tijd",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",menu:"Menu",staff:"Aangemaakt door",giftcard:"Cadeaubon",extraInfo:"Extra informatie",seatPlace:"Zitplaats",newReservationButton:"Nieuwe Reservatie Maken"}},en:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",extraInfo:"Extra Info",seatPlace:"Seating area"},placeholders:{firstName:"First Name",lastName:"Last Name",email:"Email Address",phone:"Mobile Number",extraInfo:"Extra Information",seatPlace:"Select seating area"},magic:{title:"Guest Details"}},reservationSummary:{title:"Reservation Details",guests:"Number of Guests",date:"Date",time:"Time",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",menu:"Menu",staff:"Created by",giftcard:"Gift Card",extraInfo:"Extra Information",seatPlace:"Seating area",newReservationButton:"New Reservation"}},fr:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise"},placeholders:{firstName:"Pr\xE9nom",lastName:"Nom",email:"Adresse e-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"S\xE9lectionner une zone d\u2019assise"},magic:{title:"D\xE9tails Invit\xE9"}},reservationSummary:{title:"D\xE9tails de la R\xE9servation",guests:"Nombre d'invit\xE9s",date:"Date",time:"Heure",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",menu:"Menu",staff:"Cr\xE9\xE9 par",giftcard:"Carte Cadeau",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise",newReservationButton:"Nouvelle R\xE9servation"}}};R0(`.new-reservation-page .name-fields{display:flex;gap:20px}.input-container .form-control{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 10px 10px 35px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left;border-radius:5px;font-size:16px;box-sizing:border-box}
42
+ `);var A4=({label:b,name:c,type:q="text",icon:e,value:W,onChange:n,onBlur:a,error:s,placeholder:r,halfWidth:R,options:v=[],selectPlaceholder:u,rightIcon:B,onRightIconClick:h,tooltipContent:f,tooltipAlign:g,required:l})=>{let N=j0($b,"formField"),C=u||N.selectPlaceholder,[E,y]=useState(false),S=useRef(null),m=useRef(null),j=B,_=e;useEffect(()=>{let Y=X=>{S.current&&!S.current.contains(X.target)&&(m.current&&clearTimeout(m.current),y(false));};return E&&document.addEventListener("mousedown",Y),()=>document.removeEventListener("mousedown",Y)},[E]);let A0={name:c,value:W,onChange:n,onBlur:a,"aria-label":b,className:`form-control ${s?"input-error":""}`,style:e?{paddingLeft:"35px",boxSizing:"border-box"}:{}},p0=()=>q==="select"?o0.createElement("select",{...A0},o0.createElement("option",{value:""},C),v.map(Y=>o0.createElement("option",{key:Y.value,value:Y.value},Y.label))):q==="textarea"?o0.createElement("textarea",{...A0,placeholder:r}):o0.createElement("input",{type:q,...A0,placeholder:r}),a0=q==="textarea";return o0.createElement("div",{className:`form-group ${R?"half-width":""}`,style:{position:"relative"}},l&&b&&o0.createElement("label",{className:"form-field-label"},b," ",o0.createElement("span",{className:"required-asterisk"},"*")),o0.createElement("div",{className:"input-container",style:{position:"relative"}},_&&o0.createElement(_,{className:"input-icon",style:{position:"absolute",left:"10px",top:a0?"12px":"50%",transform:a0?"none":"translateY(-50%)",color:"#6c757d",pointerEvents:"none",zIndex:1}}),p0(),j&&o0.createElement("div",{className:"magic-wand-container",onClick:h,onMouseEnter:()=>{m.current&&clearTimeout(m.current),y(true);},onMouseLeave:()=>{m.current=setTimeout(()=>y(false),1200);},style:{position:"absolute",top:"50%",right:"10px",transform:"translateY(-50%)",cursor:"pointer"}},o0.createElement(j,{className:"magic-wand-icon",style:{color:"#B567C2"}}),E&&f&&o0.createElement("div",{ref:S,className:"magic-tooltip",style:{position:"absolute",bottom:"100%",...g==="left"?{left:0}:{right:0},backgroundColor:"#fff",color:"#333",borderRadius:"8px",fontSize:"0.9rem",boxShadow:"0px 4px 10px rgba(0,0,0,0.15)",zIndex:1e3,marginBottom:"8px",minWidth:"220px",overflow:"hidden"}},o0.createElement("div",{style:{position:"relative",zIndex:2,padding:"12px 20px"}},o0.createElement("div",{style:{borderBottom:"1px solid #eee",marginBottom:"8px",paddingBottom:"4px"}},f),o0.createElement("div",{style:{fontWeight:"bold",fontSize:"13px",textAlign:"center",marginTop:"8px"}},N.tooltip?.confirm),o0.createElement("div",{style:{fontSize:"0.7rem",textAlign:"center",color:"#999",marginTop:"4px"}},N.tooltip?.source))))),s&&o0.createElement("p",{className:"form-error"},s))},_0=o0.memo(A4);var V0=P0(c1());P0(Mp());var zp={nl:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",extraInfo:"Extra info",seatPlace:"Zitplaats"},placeholders:{firstName:"Voornaam",lastName:"Achternaam",email:"E-mailadres",phone:"Mobiel nummer",extraInfo:"Extra informatie",seatPlace:"Selecteer zitplaats"},magic:{title:"Gast Gegevens"}},reservationSummary:{title:"Reservatie Gegevens",guests:"Aantal gasten",date:"Datum",time:"Tijd",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",menu:"Menu",staff:"Aangemaakt door",giftcard:"Cadeaubon",extraInfo:"Extra informatie",seatPlace:"Zitplaats",newReservationButton:"Nieuwe Reservatie Maken"}},en:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",extraInfo:"Extra Info",seatPlace:"Seating area"},placeholders:{firstName:"First Name",lastName:"Last Name",email:"Email Address",phone:"Mobile Number",extraInfo:"Extra Information",seatPlace:"Select seating area"},magic:{title:"Guest Details"}},reservationSummary:{title:"Reservation Details",guests:"Number of Guests",date:"Date",time:"Time",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",menu:"Menu",staff:"Created by",giftcard:"Gift Card",extraInfo:"Extra Information",seatPlace:"Seating area",newReservationButton:"New Reservation"}},fr:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise"},placeholders:{firstName:"Pr\xE9nom",lastName:"Nom",email:"Adresse e-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"S\xE9lectionner une zone d\u2019assise"},magic:{title:"D\xE9tails Invit\xE9"}},reservationSummary:{title:"D\xE9tails de la R\xE9servation",guests:"Nombre d'invit\xE9s",date:"Date",time:"Heure",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",menu:"Menu",staff:"Cr\xE9\xE9 par",giftcard:"Carte Cadeau",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise",newReservationButton:"Nouvelle R\xE9servation"}}};R0(`.new-reservation-page .name-fields{display:flex;gap:20px}.input-container .form-control{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 10px 10px 30px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left;border-radius:5px;font-size:16px;box-sizing:border-box}
43
43
  `);var cp=o0.memo(({formData:b,errors:c,handleChange:q,setFormData:e,menuData:W})=>{let n=SM(),a=j0(zp,"reservationStepTwoFiltering"),[s,r]=useState([]),[R,v]=useState(false),[u,B]=useState(null),[h,f]=useState([]),g=o1(),l=FaMagic,N=()=>{u&&E();};useEffect(()=>{if(V0.default.locale(n),!b.date||!b.time||!W.length)return r([]);let Y=(0, V0.default)(`${b.date} ${b.time}`,"YYYY-MM-DD HH:mm"),X=W.filter(U=>{let x=Y.isBetween((0, V0.default)(U.startDate,"YYYY-MM-DD"),(0, V0.default)(U.endDate,"YYYY-MM-DD"),"day","[]"),I=(0, V0.default)(b.time,"HH:mm").isBetween((0, V0.default)(U.startHour,"HH:mm"),(0, V0.default)(U.endHour,"HH:mm"),"minute","[]"),V=(0, V0.default)(Y).locale("nl").format("dddd").toLowerCase(),c0=(0, V0.default)(Y).locale("en").format("dddd").toLowerCase(),O0=(U.daysOfWeek||[]).map(P=>P.toLowerCase()),d0=!O0.length||O0.includes(V)||O0.includes(c0);return x&&I&&d0});r(X);},[b.date,b.time,W,n]);let C=async()=>{if(R||u)return;let Y=(b.email||"").trim().toLowerCase(),X=(b.phone||"").trim(),U=Y&&[".com",".net",".be",".nl"].some(V=>Y.endsWith(V)),x=!!X&&(X.startsWith("+32")?X.length>=12:X.length>=10);if(!U&&!x)return;let I=[];U&&I.push("email"),x&&I.push("phone");try{let V=await g.post(`${window.baseDomain}api/autofill`,{email:Y,phone:X});V?.firstName&&V?.lastName&&V?.email&&V?.phone&&B({...V,sources:I});}catch{console.error("Autofill error");}};useEffect(()=>{C();},[b.email,b.phone]);let E=()=>{u&&(e(Y=>({...Y,firstName:u.firstName,lastName:u.lastName,email:u.email,phone:u.phone})),v(true),B(null));},y=async()=>{let Y=(b.firstName||"").trim(),X=(b.lastName||"").trim();if(Y.length<2&&X.length<2){f([]);return}try{let U=await g.post(`${window.baseDomain}api/autofill-name`,{firstName:Y||void 0,lastName:X||void 0});Array.isArray(U)&&U.length>0?f(U):f([]);}catch{f([]);}},S=Y=>{e(X=>({...X,firstName:Y.firstName,lastName:Y.lastName,email:Y.email,phone:Y.phone})),f([]),v(true);};useEffect(()=>{if(R)return;let Y=(b.firstName||"").trim(),X=(b.lastName||"").trim();if(Y.length<2&&X.length<2){f([]);return}f([]);let U=setTimeout(()=>{y();},500);return ()=>clearTimeout(U)},[b.firstName,b.lastName]);let m=useMemo(()=>{if(!u)return {email:{},phone:{}};let Y=u.sources.includes("email")&&(b.email||"").trim().toLowerCase()===u.email.trim().toLowerCase(),X=u.sources.includes("phone")&&(b.phone||"").trim()===u.phone.trim(),U={rightIcon:l,onRightIconClick:N};return {email:Y?{...U,tooltipContent:o0.createElement("div",null,o0.createElement("div",{style:{textAlign:"center",fontWeight:"bold"}},a.magic?.title),o0.createElement("div",null,u.firstName," ",u.lastName),o0.createElement("div",null,u.phone))}:{},phone:X?{...U,tooltipContent:o0.createElement("div",null,o0.createElement("div",{style:{textAlign:"center",fontWeight:"bold"}},a.magic?.title),o0.createElement("div",null,u.firstName," ",u.lastName),o0.createElement("div",null,u.email))}:{}}},[u,b.email,b.phone,a.magic?.title]),j=useMemo(()=>{if(!h.length)return {firstName:{},lastName:{}};let X=(b.lastName||"").trim().length>0?"lastName":"firstName",U=o0.createElement("div",{style:{maxHeight:"200px",overflowY:"auto"}},h.map((I,V)=>o0.createElement("div",{key:V,className:"name-match-item",onClick:c0=>{c0.stopPropagation(),S(I);}},o0.createElement("div",{style:{fontWeight:"500"}},I.firstName," ",I.lastName),o0.createElement("div",{style:{fontSize:"0.8rem",color:"#666"}},I.email),I.phone&&o0.createElement("div",{style:{fontSize:"0.8rem",color:"#666"}},I.phone)))),x={rightIcon:FaMagic,onRightIconClick:()=>{},tooltipContent:o0.createElement("div",null,o0.createElement("div",{style:{textAlign:"center",fontWeight:"bold"}},a.magic?.title),U)};return {firstName:X==="firstName"?{...x,tooltipAlign:"left"}:{},lastName:X==="lastName"?x:{}}},[h,b.lastName,a.magic?.title]),{reservationMode:_}=b,H=_==="check_in",A0=window.generalSettings?.obligatedFields||[],p0=Y=>A0.includes(Y),a0=Y=>!H&&p0(Y),q0=(Y,X)=>{let U=a.labels?.[Y]||X;return H?`${U} (Optioneel)`:p0(Y)?`${U} *`:U};return o0.createElement("div",{className:"reservation-step-two"},o0.createElement("div",{className:"account-manage-form"},s.length>0&&o0.createElement(_0,{label:`${a.labels?.menu||"Menu"}${H?" (Optioneel)":""}`,name:"menu",type:"select",options:s.map(Y=>({value:Y.name,label:Y.name})),value:b.menu,onChange:q,error:H?null:c.menu}),o0.createElement("div",{className:"name-fields"},o0.createElement(_0,{label:q0("firstName","Voornaam"),name:"firstName",placeholder:a.placeholders?.firstName||"",value:b.firstName,onChange:q,error:H?null:c.firstName,icon:FaUser,required:a0("firstName"),...j.firstName}),o0.createElement(_0,{label:q0("lastName","Achternaam"),name:"lastName",placeholder:a.placeholders?.lastName||"",value:b.lastName,onChange:q,error:H?null:c.lastName,icon:FaUser,required:a0("lastName"),...j.lastName})),o0.createElement(_0,{label:q0("email","Email"),name:"email",type:"email",placeholder:a.placeholders?.email||"",value:b.email,onChange:q,onBlur:C,error:c.email,icon:FaEnvelope,required:a0("email"),...m.email}),o0.createElement(_0,{label:q0("phone","Telefoon"),name:"phone",type:"tel",placeholder:a.placeholders?.phone||"",value:b.phone,onChange:q,onBlur:C,error:c.phone,icon:FaPhone,required:a0("phone"),...m.phone}),o0.createElement(_0,{label:a.labels?.extraInfo||"Extra info",name:"extraInfo",type:"textarea",placeholder:a.placeholders?.extraInfo||"",value:b.extraInfo,onChange:q,error:c.extraInfo,icon:FaInfoCircle})))});cp.displayName="ReservationStepTwo";var k2=cp;var Ap={nl:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",extraInfo:"Extra info",seatPlace:"Zitplaats"},placeholders:{firstName:"Voornaam",lastName:"Achternaam",email:"E-mailadres",phone:"Mobiel nummer",extraInfo:"Extra informatie",seatPlace:"Selecteer zitplaats"},magic:{title:"Gast Gegevens"}},reservationSummary:{title:"Reservatie Gegevens",guests:"Aantal gasten",date:"Datum",time:"Tijd",firstName:"Voornaam",lastName:"Achternaam",email:"E-mail",phone:"Mobiel nummer",menu:"Menu",staff:"Aangemaakt door",giftcard:"Cadeaubon",extraInfo:"Extra informatie",seatPlace:"Zitplaats",newReservationButton:"Nieuwe Reservatie Maken"}},en:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",extraInfo:"Extra Info",seatPlace:"Seating area"},placeholders:{firstName:"First Name",lastName:"Last Name",email:"Email Address",phone:"Mobile Number",extraInfo:"Extra Information",seatPlace:"Select seating area"},magic:{title:"Guest Details"}},reservationSummary:{title:"Reservation Details",guests:"Number of Guests",date:"Date",time:"Time",firstName:"First Name",lastName:"Last Name",email:"Email",phone:"Mobile Number",menu:"Menu",staff:"Created by",giftcard:"Gift Card",extraInfo:"Extra Information",seatPlace:"Seating area",newReservationButton:"New Reservation"}},fr:{reservationStepTwoFiltering:{labels:{menu:"Menu",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise"},placeholders:{firstName:"Pr\xE9nom",lastName:"Nom",email:"Adresse e-mail",phone:"Num\xE9ro de portable",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"S\xE9lectionner une zone d\u2019assise"},magic:{title:"D\xE9tails Invit\xE9"}},reservationSummary:{title:"D\xE9tails de la R\xE9servation",guests:"Nombre d'invit\xE9s",date:"Date",time:"Heure",firstName:"Pr\xE9nom",lastName:"Nom",email:"E-mail",phone:"Num\xE9ro de portable",menu:"Menu",staff:"Cr\xE9\xE9 par",giftcard:"Carte Cadeau",extraInfo:"Informations suppl\xE9mentaires",seatPlace:"Zone d\u2019assise",newReservationButton:"Nouvelle R\xE9servation"}}};R0(`.new-reservation-page .reservation-sidebar-component .reservation-summary .modal-title{margin-top:0;margin-bottom:20px}.new-reservation-page .reservation-sidebar-component .reservation-summary .reservation-details{list-style-type:none;padding:0;margin:0 0 20px;width:100%}.new-reservation-page .reservation-sidebar-component .reservation-summary .reservation-details li{margin-bottom:10px;font-size:15px;align-items:left;text-align:left}.new-reservation-page .reservation-sidebar-component .reservation-summary .reservation-details li strong{font-weight:700}.new-reservation-page .reservation-sidebar-component .reservation-summary{align-items:left}
44
44
  `);var a4=({formData:b,onNewReservation:c})=>{let q=j0(Ap,"reservationSummary");return o0.createElement("div",{className:"reservation-summary"},o0.createElement("ul",{className:"reservation-details"},o0.createElement("li",null,o0.createElement("strong",null,q.title)),o0.createElement("li",null,o0.createElement("strong",null,q.guests,":")," ",b.guests),o0.createElement("li",null,o0.createElement("strong",null,q.date,":")," ",b.date),o0.createElement("li",null,o0.createElement("strong",null,q.time,":")," ",b.time),o0.createElement("li",null,o0.createElement("strong",null,q.firstName,":")," ",b.firstName),o0.createElement("li",null,o0.createElement("strong",null,q.lastName,":")," ",b.lastName),o0.createElement("li",null,o0.createElement("strong",null,q.email,":")," ",b.email),o0.createElement("li",null,o0.createElement("strong",null,q.phone,":")," ",b.phone),b.menu&&o0.createElement("li",null,o0.createElement("strong",null,q.menu,":")," ",b.menu),b.personeel&&o0.createElement("li",null,o0.createElement("strong",null,q.staff,":")," ",b.personeel),b.giftcard&&o0.createElement("li",null,o0.createElement("strong",null,q.giftcard,":")," ",b.giftcard),b.extraInfo&&o0.createElement("li",null,o0.createElement("strong",null,q.extraInfo,":")," ",b.extraInfo),b.zitplaats&&o0.createElement("li",null,o0.createElement("strong",null,q.seatPlace,":")," ",b.zitplaats)),o0.createElement("button",{className:"button-style-3",onClick:c},q.newReservationButton))},w2=a4;var op={nl:{zitplaatsSelection:{labels:{seating:"Zitplaats"},options:{noPreference:"Geen voorkeur"}},giftcardSelection:{labels:{giftcard:"Cadeaubon"},options:{noGiftcard:"Geen Cadeaubon"}}},en:{zitplaatsSelection:{labels:{seating:"Seating"},options:{noPreference:"No preference"}},giftcardSelection:{labels:{giftcard:"Gift Card"},options:{noGiftcard:"No Gift Card"}}},fr:{zitplaatsSelection:{labels:{seating:"Place Assise"},options:{noPreference:"Pas de pr\xE9f\xE9rence"}},giftcardSelection:{labels:{giftcard:"Cadeau"},options:{noGiftcard:"Pas de carte"}}}};R0(`.new-reservation-page .giftcard-selection{margin-bottom:20px}.new-reservation-page .giftcard-options{display:flex;gap:20px;margin:10px 0}.new-reservation-page .giftcard-option{display:flex;align-items:center;gap:8px;cursor:pointer}.new-reservation-page .form-label{font-weight:500;margin-bottom:8px;display:block}.new-reservation-page .giftcard-option input[type=radio]{margin:0;cursor:pointer}.new-reservation-page .giftcard-option label{cursor:pointer}
45
45
  `);var r4=({restaurantData:b,formData:c,handleChange:q,resetFormDataFields:e})=>{let W=j0(op,"giftcardSelection"),[n,a]=useState([]);if(useEffect(()=>{if(!b)return;let R=["breakfast","lunch","dinner"],v=new Set;R.forEach(u=>{let B=b[`openinghours-${u}`]?.schemeSettings||{};Object.values(B).forEach(h=>{h?.giftcardsEnabled&&Array.isArray(h.giftcards)&&h.giftcards.forEach(f=>{let g=typeof f=="string"?f.trim():String(f||"").trim();g&&v.add(g);});});}),a([...v]);},[b]),!n.length)return null;let s=n.map(R=>({value:R,label:R})),r=R=>{q({target:{name:"giftcard",value:R.target.value}}),e(["date","time"]);};return o0.createElement("div",{className:"giftcard-selection"},o0.createElement(_0,{label:W.labels?.giftcard||"Giftcard",name:"giftcard",type:"select",options:s,value:c.giftcard||"",onChange:r,selectPlaceholder:W.options?.noGiftcard||"Geen giftcard"}))},x2=r4;var P2=P0(c1());var ep={nl:{reservationSidebar:{saveButton:"Opslaan",saveButtonLoading:"Opslaan..."}},en:{reservationSidebar:{saveButton:"Save",saveButtonLoading:"Saving..."}},fr:{reservationSidebar:{saveButton:"Enregistrer",saveButtonLoading:"Enregistrement..."}}};R0(`.reservation-sidebar-component{position:fixed;top:0;right:-400px;width:400px;height:100%;background-color:#fff;box-shadow:-2px 0 5px #0000001a;z-index:var(--z-index-sidebar-reservation);display:flex;flex-direction:column;overflow-y:auto;transition:right .3s ease-in-out}.admin-title{text-align:center;margin-bottom:30px}.reservation-sidebar-component.open{right:0}.reservation-sidebar-content{padding:60px 20px 20px}.close-sidebar-button{position:absolute;top:10px;left:10px;background-color:transparent;border:none;cursor:pointer}.close-sidebar-button svg{color:#000}.sidebar-section-one,.sidebar-section-two{margin-bottom:20px}.reservation-footer{margin-top:auto}.store-reservation-button{width:100%;padding:12px;background-color:var(--color-blue);color:#fff;border:none;border-radius:5px;cursor:pointer;font-size:1.1rem}.open-sidebar-button{position:fixed;bottom:20px;right:20px;background-color:var(--color-blue);color:#fff;border:none;border-radius:50%;width:50px;height:50px;cursor:pointer;z-index:var(--z-index-modal)!important;transition:all .3s ease}.open-sidebar-button:hover{background-color:var(--color-blue-hover-accent)!important}.open-sidebar-button svg{position:relative;top:2px}@media screen and (max-width:480px){.reservation-sidebar-component{width:100%}}.sidebar-section-personeel{margin-bottom:10px}.sidebar-tabs{display:flex;border-bottom:1px solid #ddd;margin-bottom:20px}.sidebar-tab-button{flex:1;padding:10px;border:none;background:transparent;border-bottom:none;font-weight:400;cursor:pointer;color:#666}.sidebar-tab-button.active{border-bottom:2px solid var(--color-blue);font-weight:700;color:var(--color-blue)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happychef/reservation-sidebar",
3
- "version": "2.8.42",
3
+ "version": "2.8.44",
4
4
  "description": "A compound component for managing restaurant reservations - JavaScript version with independent styles",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",