@salla.sa/twilight-components 2.13.90 → 2.13.91
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/cjs/app-globals-c5340b59.js.map +1 -1
- package/dist/cjs/salla-add-product-button_48.cjs.entry.js +3 -3
- package/dist/cjs/salla-add-product-button_48.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-booking-field_2.cjs.entry.js +16 -4
- package/dist/cjs/salla-booking-field_2.cjs.entry.js.map +1 -1
- package/dist/collection/components/salla-booking-field/salla-booking-field.js +16 -4
- package/dist/collection/components/salla-booking-field/salla-booking-field.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/salla-booking-field2.js +16 -4
- package/dist/components/salla-booking-field2.js.map +1 -1
- package/dist/components/salla-quick-buy2.js +3 -3
- package/dist/components/salla-quick-buy2.js.map +1 -1
- package/dist/esm/app-globals-0280e1d0.js.map +1 -1
- package/dist/esm/salla-add-product-button_48.entry.js +3 -3
- package/dist/esm/salla-add-product-button_48.entry.js.map +1 -1
- package/dist/esm/salla-booking-field_2.entry.js +16 -4
- package/dist/esm/salla-booking-field_2.entry.js.map +1 -1
- package/dist/esm-es5/app-globals-0280e1d0.js.map +1 -1
- package/dist/esm-es5/salla-add-product-button_48.entry.js +1 -1
- package/dist/esm-es5/salla-add-product-button_48.entry.js.map +1 -1
- package/dist/esm-es5/salla-booking-field_2.entry.js +1 -1
- package/dist/esm-es5/salla-booking-field_2.entry.js.map +1 -1
- package/dist/twilight/p-365e17fa.system.entry.js +5 -0
- package/dist/twilight/p-365e17fa.system.entry.js.map +1 -0
- package/dist/twilight/p-47574f56.entry.js +5 -0
- package/dist/twilight/p-47574f56.entry.js.map +1 -0
- package/dist/twilight/p-4a9df09e.js.map +1 -1
- package/dist/twilight/p-4c2194e3.system.js.map +1 -1
- package/dist/twilight/p-54e1a882.system.js +1 -1
- package/dist/twilight/{p-411485fc.entry.js → p-d05e9338.entry.js} +2 -2
- package/dist/twilight/p-d05e9338.entry.js.map +1 -0
- package/dist/twilight/{p-4e795693.system.entry.js → p-d271d691.system.entry.js} +2 -2
- package/dist/twilight/p-d271d691.system.entry.js.map +1 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/package.json +5 -5
- package/dist/twilight/p-1f9a3721.system.entry.js +0 -5
- package/dist/twilight/p-1f9a3721.system.entry.js.map +0 -1
- package/dist/twilight/p-411485fc.entry.js.map +0 -1
- package/dist/twilight/p-4e795693.system.entry.js.map +0 -1
- package/dist/twilight/p-fc0f037b.entry.js +0 -5
- package/dist/twilight/p-fc0f037b.entry.js.map +0 -1
- package/dist/types/global.d.ts +0 -20
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var __awaiter=this&&this.__awaiter||function(e,t,n,a){function o(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function r(e){try{l(a.next(e))}catch(e){i(e)}}function s(e){try{l(a["throw"](e))}catch(e){i(e)}}function l(e){e.done?n(e.value):o(e.value).then(r,s)}l((a=a.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},a,o,i,r;return r={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(r[Symbol.iterator]=function(){return this}),r;function s(e){return function(t){return l([e,t])}}function l(s){if(a)throw new TypeError("Generator is already executing.");while(r&&(r=0,s[0]&&(n=0)),n)try{if(a=1,o&&(i=s[0]&2?o["return"]:s[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;if(o=0,i)s=[s[0]&2,i.value];switch(s[0]){case 0:case 1:i=s;break;case 4:n.label++;return{value:s[1],done:false};case 5:n.label++;o=s[1];s=[0];continue;case 7:s=n.ops.pop();n.trys.pop();continue;default:if(!(i=n.trys,i=i.length>0&&i[i.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]<i[3])){n.label=s[1];break}if(s[0]===6&&n.label<i[1]){n.label=i[1];i=s;break}if(i&&n.label<i[2]){n.label=i[2];n.ops.push(s);break}if(i[2])n.ops.pop();n.trys.pop();continue}s=t.call(e,n)}catch(e){s=[6,e];o=0}finally{a=i=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};
|
|
2
2
|
/*!
|
|
3
3
|
* Crafted with ❤ by Salla
|
|
4
|
-
*/import{r as registerInstance,c as createEvent,h,H as Host,g as getElement}from"./index-114c614f.js";var BookingTime='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar-time</title>\n<path d="M22.667 17.333c-0.737 0-1.333 0.596-1.333 1.333v2.667h-2.667c-0.737 0-1.333 0.596-1.333 1.333s0.596 1.333 1.333 1.333h4c0.737 0 1.333-0.596 1.333-1.333v-4c0-0.737-0.596-1.333-1.333-1.333zM28 2.667h-2.667v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h5.363c0.737 0 1.333-0.596 1.333-1.333s-0.596-1.333-1.333-1.333h-5.363c-0.736 0-1.333-0.597-1.333-1.333v-21.333c0-0.736 0.597-1.333 1.333-1.333h2.667v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333v2.696c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.696c0-2.205-1.795-4-4-4zM22 12c-5.515 0-10 4.485-10 10s4.485 10 10 10 10-4.485 10-10-4.485-10-10-10zM22 29.333c-4.043 0-7.333-3.291-7.333-7.333s3.291-7.333 7.333-7.333 7.333 3.291 7.333 7.333-3.291 7.333-7.333 7.333z"></path>\n</svg>\n';var Calendar='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar</title>\n<path d="M28 2.667h-2.667v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h24c2.205 0 4-1.795 4-4v-21.333c0-2.205-1.795-4-4-4zM29.333 28c0 0.736-0.599 1.333-1.333 1.333h-24c-0.736 0-1.333-0.599-1.333-1.333v-13.333h26.667zM29.333 12h-26.667v-5.333c0-0.736 0.599-1.333 1.333-1.333h2.667v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333z"></path>\n</svg>\n';var TimeIcon='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>time</title>\n<path d="M16 0c-8.823 0-16 7.177-16 16s7.177 16 16 16 16-7.177 16-16-7.177-16-16-16zM16 29.333c-7.352 0-13.333-5.981-13.333-13.333s5.981-13.333 13.333-13.333 13.333 5.981 13.333 13.333-5.981 13.333-13.333 13.333zM16 8c-0.736 0-1.333 0.596-1.333 1.333v6.667h-4c-0.736 0-1.333 0.596-1.333 1.333s0.597 1.333 1.333 1.333h5.333c0.736 0 1.333-0.596 1.333-1.333v-8c0-0.737-0.597-1.333-1.333-1.333z"></path>\n</svg>\n';var sallaBookingFieldCss=":host{display:block}";var SallaBookingField=function(){function e(e){var t=this;registerInstance(this,e);this.invalidInput=createEvent(this,"invalidInput",7);this.reservationsInput=undefined;this.option=undefined;this.productId=undefined;this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment","حجز موعد");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment","تعديل الموعد");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully","تمت اضافة الموعد بنجاح");this.selectDate=salla.lang.get("pages.cart.select_appointment_date","حدد تاريخ الموعد");this.bookingUrl="";this.iframeReady=false;this.reservations=[];salla.lang.onLoaded((function(){var e=function(e,t,n){return new Promise((function(a){salla.helpers.setNested(salla.lang.messages[e],t,n);a(true)}))};var n=function(){return __awaiter(t,void 0,void 0,(function(){return __generator(this,(function(t){switch(t.label){case 0:return[4,e("ar.trans","pages.cart.book_an_appointment","حجز موعد")];case 1:t.sent();return[4,e("en.trans","pages.cart.book_an_appointment","Book an Appointment")];case 2:t.sent();return[4,e("ar.trans","pages.cart.edit_an_appointment","تعديل الموعد")];case 3:t.sent();return[4,e("en.trans","pages.cart.edit_an_appointment","Edit an Appointment")];case 4:t.sent();return[4,e("ar.trans","pages.cart.booked_successfully","تمت اضافة الموعد بنجاح")];case 5:t.sent();return[4,e("en.trans","pages.cart.booked_successfully","Booked Successfully")];case 6:t.sent();return[4,e("ar.trans","pages.cart.select_appointment_date","حدد تاريخ الموعد")];case 7:t.sent();return[4,e("en.trans","pages.cart.select_appointment_date","Select appointment date")];case 8:t.sent();this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully");this.selectDate=salla.lang.get("pages.cart.select_appointment_date");return[2]}}))}))};n()}));Salla.event.on("booking::open",(function(e){t.bookingUrl=salla.url.addParamToUrl("product_id",t.productId,e);t.iframeReady=true;setTimeout((function(){t.modal.setTitle(t.selectDate);t.modal.open()}),100)}))}e.prototype.openBookingModal=function(e){e.preventDefault();if(salla.config.isGuest()){salla.auth.api.setAfterLoginEvent("booking::open",this.productId);salla.event.dispatch("login::open");return}return salla.booking.add(this.productId,false).then((function(e){if(e.data.redirect.to!=="booking"){throw new Error("Unexpected redirect!")}salla.event.dispatch("booking::open",e.data.redirect.url)})).catch((function(e){salla.error(salla.lang.get("common.errors.error_occurred"));salla.logger.error(e.response)}))};e.prototype.componentWillLoad=function(){if(this.option&&this.option.details.length){this.reservations=this.option.details}};e.prototype.bookingModal=function(){var e=this;return h("salla-modal",{class:"s-booking-field-modal",ref:function(t){return e.modal=t},width:"md",position:"middle",noPadding:true,isClosable:false},h("iframe",{ref:function(t){return e.iframe=t},src:this.bookingUrl,frameborder:"0"}))};e.prototype.componentDidLoad=function(){var e=this;window.addEventListener("message",(function(t){if(t.data.source!="booking"){return}var n=t.data.type;var a=t.data.message;localStorage.getItem("debug")&&console.log("recived an action:".concat(n),t.data);if(n=="error"){salla.notify.error(a.fields.reservations[0])}if(n=="success"){e.reservations=a.reservations;salla.notify.success(e.bookedLabel);e.modal.close()}if(n=="height"){return e.iframe.height=(a===null||a===void 0?void 0:a.height)+"px"}}));this.reservationsInput.addEventListener("invalid",(function(t){e.invalidInput.emit(t)}));this.reservationsInput.addEventListener("input",(function(){e.reservationsInput.setCustomValidity("");e.reservationsInput.reportValidity()}))};e.prototype.render=function(){var e=this;return h(Host,null,h("div",{class:"s-booking-field-main"},h("div",{class:"s-booking-field-price"},h("span",null,salla.money(this.option.price))),h("salla-button",{class:"s-booking-field-book-now",size:"small",loaderPosition:"center",fill:"outline",onClick:function(t){return e.openBookingModal(t)}},h("span",{class:"s-booking-field-book-now-content"},h("span",{innerHTML:BookingTime}),this.reservations.length?this.editLabel:this.bookNowLabel))),this.reservations.length?h("div",{class:"s-booking-field-reservations"},this.reservations.map((function(t,n){return h("div",{key:n,class:"s-booking-field-reservations-item"},e.renderReservationDate(t),e.renderReservationTime(t))}))):"",h("input",{class:"s-hidden",name:this.option.name,required:this.option.required,value:JSON.stringify(this.reservations)==="[]"?"":JSON.stringify(this.reservations),ref:function(t){return e.reservationsInput=t}}),this.iframeReady&&this.bookingModal())};e.prototype.renderReservationDate=function(e){return h("span",{class:e.from_timestamp?"s-booking-field-reservations-has-time":""},h("i",{class:"s-booking-field-reservations-icon",innerHTML:Calendar}),e.date)};e.prototype.renderReservationTime=function(e){if(!e.from_timestamp){return""}return h("span",{class:"s-booking-field-reservations-time"},h("i",{class:"s-booking-field-reservations-icon",innerHTML:TimeIcon}),h("span",null," ",e.from_timestamp," - ",e.to_timestamp))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return e}();SallaBookingField.style=sallaBookingFieldCss;var SallaConditionalFields=function(){function e(e){registerInstance(this,e)}e.prototype.hideAllOptions=function(e){var t=this;this.host.querySelectorAll('[data-show-when^="options['.concat(e,'"]')).forEach((function(e){e.classList.add("hidden");t.hideAllOptions(e.dataset.optionId);t.disableInputs(e)}))};e.prototype.disableInputs=function(e){e.querySelectorAll("[name]").forEach((function(e){var t;e.setAttribute("disabled","");e.removeAttribute("required");if(((t=e===null||e===void 0?void 0:e.tagName)===null||t===void 0?void 0:t.toLowerCase())==="select"){e.value=""}if(["checkbox"].includes(e.getAttribute("type"))&&e.hasOwnProperty("checked")){e.checked=false}}))};e.prototype.changeHandler=function(e){var t=this;var n;salla.event.emit("salla-onditional-fields::change",e);salla.log("Received the change event: ",e);if(!e.target||!["SELECT"].includes(e.target.tagName)&&!["checkbox"].includes(e.target.getAttribute("type"))){salla.log("Ignore the change because is not support input: "+(((n=e===null||e===void 0?void 0:e.target)===null||n===void 0?void 0:n.tagName)||"N/A"));return}var a=e.target.name.replace("[]","");var o=e.target.getAttribute("type")==="checkbox";salla.log("Trying to find all the element with condition:",'[data-show-when^="'.concat(a,'"]'));this.host.querySelectorAll('[data-show-when^="'.concat(a,'"]')).forEach((function(n){var a=!(n===null||n===void 0?void 0:n.dataset.showWhen.includes("!="));var i=n===null||n===void 0?void 0:n.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$3").trim();var r;if(o){var s=Array.from(t.host.querySelectorAll('input[name="'.concat(e.target.name,'"]:checked')),(function(e){return e===null||e===void 0?void 0:e.value}));r=s.includes(i.toString())}else{r=i===e.target.value}salla.log("The input is ",o?"Multiple":"Single"," value:",r);var l=a&&r||!a&&!r;if(l){n.classList.remove("hidden");n.querySelectorAll("[name]").forEach((function(e){e.removeAttribute("disabled");var t=e.closest(".s-product-options-option");if(t.dataset.optionRequired==="true"){e.setAttribute("required","")}if(e.getAttribute("type")==="checkbox"){var a=Array.from(document.querySelectorAll('input[type="checkbox"][name="'.concat(e.getAttribute("name"),'"]')));var o=a.some((function(e){return e.checked}));if(o){a.forEach((function(e){e.removeAttribute("required")}))}}if(!["checkbox"].includes(e.getAttribute("type"))&&n.getElementsByClassName("required").length){e.setAttribute("required","")}}))}else{t.hideAllOptions(n.dataset.optionId);n.classList.add("hidden");t.disableInputs(n)}}))};e.prototype.componentDidRender=function(){var e=this;this.host.querySelectorAll("[data-show-when]").forEach((function(t){var n;var a=(n=t===null||t===void 0?void 0:t.dataset)===null||n===void 0?void 0:n.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$1").trim();if(!a){return}e.changeHandler({target:e.host.querySelector('[name^="'+a+'"]')})}))};e.prototype.render=function(){return h(Host,null,h("slot",null))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return e}();export{SallaBookingField as salla_booking_field,SallaConditionalFields as salla_conditional_fields};
|
|
4
|
+
*/import{r as registerInstance,c as createEvent,h,H as Host,g as getElement}from"./index-114c614f.js";var BookingTime='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar-time</title>\n<path d="M22.667 17.333c-0.737 0-1.333 0.596-1.333 1.333v2.667h-2.667c-0.737 0-1.333 0.596-1.333 1.333s0.596 1.333 1.333 1.333h4c0.737 0 1.333-0.596 1.333-1.333v-4c0-0.737-0.596-1.333-1.333-1.333zM28 2.667h-2.667v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h5.363c0.737 0 1.333-0.596 1.333-1.333s-0.596-1.333-1.333-1.333h-5.363c-0.736 0-1.333-0.597-1.333-1.333v-21.333c0-0.736 0.597-1.333 1.333-1.333h2.667v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333v2.696c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.696c0-2.205-1.795-4-4-4zM22 12c-5.515 0-10 4.485-10 10s4.485 10 10 10 10-4.485 10-10-4.485-10-10-10zM22 29.333c-4.043 0-7.333-3.291-7.333-7.333s3.291-7.333 7.333-7.333 7.333 3.291 7.333 7.333-3.291 7.333-7.333 7.333z"></path>\n</svg>\n';var Calendar='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar</title>\n<path d="M28 2.667h-2.667v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h24c2.205 0 4-1.795 4-4v-21.333c0-2.205-1.795-4-4-4zM29.333 28c0 0.736-0.599 1.333-1.333 1.333h-24c-0.736 0-1.333-0.599-1.333-1.333v-13.333h26.667zM29.333 12h-26.667v-5.333c0-0.736 0.599-1.333 1.333-1.333h2.667v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333z"></path>\n</svg>\n';var TimeIcon='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>time</title>\n<path d="M16 0c-8.823 0-16 7.177-16 16s7.177 16 16 16 16-7.177 16-16-7.177-16-16-16zM16 29.333c-7.352 0-13.333-5.981-13.333-13.333s5.981-13.333 13.333-13.333 13.333 5.981 13.333 13.333-5.981 13.333-13.333 13.333zM16 8c-0.736 0-1.333 0.596-1.333 1.333v6.667h-4c-0.736 0-1.333 0.596-1.333 1.333s0.597 1.333 1.333 1.333h5.333c0.736 0 1.333-0.596 1.333-1.333v-8c0-0.737-0.597-1.333-1.333-1.333z"></path>\n</svg>\n';var sallaBookingFieldCss=":host{display:block}";var SallaBookingField=function(){function e(e){var t=this;registerInstance(this,e);this.invalidInput=createEvent(this,"invalidInput",7);this.reservationsInput=undefined;this.option=undefined;this.productId=undefined;this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment","حجز موعد");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment","تعديل الموعد");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully","تمت اضافة الموعد بنجاح");this.selectDate=salla.lang.get("pages.cart.select_appointment_date","حدد تاريخ الموعد");this.bookingUrl="";this.iframeReady=false;this.reservations=[];salla.lang.onLoaded((function(){var e=function(e,t,n){return new Promise((function(a){salla.helpers.setNested(salla.lang.messages[e],t,n);a(true)}))};var n=function(){return __awaiter(t,void 0,void 0,(function(){return __generator(this,(function(t){switch(t.label){case 0:return[4,e("ar.trans","pages.cart.book_an_appointment","حجز موعد")];case 1:t.sent();return[4,e("en.trans","pages.cart.book_an_appointment","Book an Appointment")];case 2:t.sent();return[4,e("ar.trans","pages.cart.edit_an_appointment","تعديل الموعد")];case 3:t.sent();return[4,e("en.trans","pages.cart.edit_an_appointment","Edit an Appointment")];case 4:t.sent();return[4,e("ar.trans","pages.cart.booked_successfully","تمت اضافة الموعد بنجاح")];case 5:t.sent();return[4,e("en.trans","pages.cart.booked_successfully","Booked Successfully")];case 6:t.sent();return[4,e("ar.trans","pages.cart.select_appointment_date","حدد تاريخ الموعد")];case 7:t.sent();return[4,e("en.trans","pages.cart.select_appointment_date","Select appointment date")];case 8:t.sent();this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully");this.selectDate=salla.lang.get("pages.cart.select_appointment_date");return[2]}}))}))};n()}));Salla.event.on("booking::open",(function(e){if(e.id!==t.productId){return}t.bookingUrl=salla.url.addParamToUrl("product_id",e.id,e.url);t.iframeReady=true;setTimeout((function(){t.modal.setTitle(t.selectDate);t.modal.open()}),100)}))}e.prototype.openBookingModal=function(e){var t=this;e.preventDefault();if(salla.config.isGuest()){salla.auth.api.setAfterLoginEvent("booking::open",this.productId);salla.event.dispatch("login::open");return}return salla.booking.add(this.productId,false).then((function(e){if(e.data.redirect.to!=="booking"){throw new Error("Unexpected redirect!")}salla.event.dispatch("booking::open",{url:e.data.redirect.url,id:t.productId})})).catch((function(e){salla.error(salla.lang.get("common.errors.error_occurred"));salla.logger.error(e.response)}))};e.prototype.componentWillLoad=function(){if(this.option&&this.option.details.length){this.reservations=this.option.details}};e.prototype.bookingModal=function(){var e=this;return h("salla-modal",{class:"s-booking-field-modal",ref:function(t){return e.modal=t},width:"md",position:"middle",noPadding:true,isClosable:false},h("iframe",{ref:function(t){return e.iframe=t},src:this.bookingUrl,frameborder:"0"}))};e.prototype.componentDidLoad=function(){var e=this;window.addEventListener("message",(function(t){if(t.data.source!="booking"){return}var n=t.data.type;var a=t.data.message;localStorage.getItem("debug")&&console.log("recived an action:".concat(n),t.data);if(n=="error"){salla.notify.error(a.fields.reservations[0])}if(n=="success"){if(Number(a.productId)!==Number(e.productId)){return}e.reservations=a.data.reservations;salla.notify.success(e.bookedLabel);if(!e.modal){return}e.modal.close()}if(n=="height"){if(!e.iframe){return}return e.iframe.height=(a===null||a===void 0?void 0:a.height)+"px"}}));this.reservationsInput.addEventListener("invalid",(function(t){e.invalidInput.emit(t)}));this.reservationsInput.addEventListener("input",(function(){e.reservationsInput.setCustomValidity("");e.reservationsInput.reportValidity()}))};e.prototype.render=function(){var e=this;return h(Host,null,h("div",{class:"s-booking-field-main"},h("div",{class:"s-booking-field-price"},h("span",null,salla.money(this.option.price))),h("salla-button",{class:"s-booking-field-book-now",size:"small",loaderPosition:"center",fill:"outline",onClick:function(t){return e.openBookingModal(t)}},h("span",{class:"s-booking-field-book-now-content"},h("span",{innerHTML:BookingTime}),this.reservations.length?this.editLabel:this.bookNowLabel))),this.reservations.length?h("div",{class:"s-booking-field-reservations"},this.reservations.map((function(t,n){return h("div",{key:n,class:"s-booking-field-reservations-item"},e.renderReservationDate(t),e.renderReservationTime(t))}))):"",h("input",{class:"s-hidden",name:this.option.name,required:this.option.required,value:JSON.stringify(this.reservations)==="[]"?"":JSON.stringify(this.reservations),ref:function(t){return e.reservationsInput=t}}),this.iframeReady&&this.bookingModal())};e.prototype.renderReservationDate=function(e){return h("span",{class:e.from_timestamp?"s-booking-field-reservations-has-time":""},h("i",{class:"s-booking-field-reservations-icon",innerHTML:Calendar}),e.date)};e.prototype.renderReservationTime=function(e){if(!e.from_timestamp){return""}return h("span",{class:"s-booking-field-reservations-time"},h("i",{class:"s-booking-field-reservations-icon",innerHTML:TimeIcon}),h("span",null," ",e.from_timestamp," - ",e.to_timestamp))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return e}();SallaBookingField.style=sallaBookingFieldCss;var SallaConditionalFields=function(){function e(e){registerInstance(this,e)}e.prototype.hideAllOptions=function(e){var t=this;this.host.querySelectorAll('[data-show-when^="options['.concat(e,'"]')).forEach((function(e){e.classList.add("hidden");t.hideAllOptions(e.dataset.optionId);t.disableInputs(e)}))};e.prototype.disableInputs=function(e){e.querySelectorAll("[name]").forEach((function(e){var t;e.setAttribute("disabled","");e.removeAttribute("required");if(((t=e===null||e===void 0?void 0:e.tagName)===null||t===void 0?void 0:t.toLowerCase())==="select"){e.value=""}if(["checkbox"].includes(e.getAttribute("type"))&&e.hasOwnProperty("checked")){e.checked=false}}))};e.prototype.changeHandler=function(e){var t=this;var n;salla.event.emit("salla-onditional-fields::change",e);salla.log("Received the change event: ",e);if(!e.target||!["SELECT"].includes(e.target.tagName)&&!["checkbox"].includes(e.target.getAttribute("type"))){salla.log("Ignore the change because is not support input: "+(((n=e===null||e===void 0?void 0:e.target)===null||n===void 0?void 0:n.tagName)||"N/A"));return}var a=e.target.name.replace("[]","");var o=e.target.getAttribute("type")==="checkbox";salla.log("Trying to find all the element with condition:",'[data-show-when^="'.concat(a,'"]'));this.host.querySelectorAll('[data-show-when^="'.concat(a,'"]')).forEach((function(n){var a=!(n===null||n===void 0?void 0:n.dataset.showWhen.includes("!="));var i=n===null||n===void 0?void 0:n.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$3").trim();var r;if(o){var s=Array.from(t.host.querySelectorAll('input[name="'.concat(e.target.name,'"]:checked')),(function(e){return e===null||e===void 0?void 0:e.value}));r=s.includes(i.toString())}else{r=i===e.target.value}salla.log("The input is ",o?"Multiple":"Single"," value:",r);var l=a&&r||!a&&!r;if(l){n.classList.remove("hidden");n.querySelectorAll("[name]").forEach((function(e){e.removeAttribute("disabled");var t=e.closest(".s-product-options-option");if(t.dataset.optionRequired==="true"){e.setAttribute("required","")}if(e.getAttribute("type")==="checkbox"){var a=Array.from(document.querySelectorAll('input[type="checkbox"][name="'.concat(e.getAttribute("name"),'"]')));var o=a.some((function(e){return e.checked}));if(o){a.forEach((function(e){e.removeAttribute("required")}))}}if(!["checkbox"].includes(e.getAttribute("type"))&&n.getElementsByClassName("required").length){e.setAttribute("required","")}}))}else{t.hideAllOptions(n.dataset.optionId);n.classList.add("hidden");t.disableInputs(n)}}))};e.prototype.componentDidRender=function(){var e=this;this.host.querySelectorAll("[data-show-when]").forEach((function(t){var n;var a=(n=t===null||t===void 0?void 0:t.dataset)===null||n===void 0?void 0:n.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$1").trim();if(!a){return}e.changeHandler({target:e.host.querySelector('[name^="'+a+'"]')})}))};e.prototype.render=function(){return h(Host,null,h("slot",null))};Object.defineProperty(e.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return e}();export{SallaBookingField as salla_booking_field,SallaConditionalFields as salla_conditional_fields};
|
|
5
5
|
//# sourceMappingURL=salla-booking-field_2.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sallaBookingFieldCss","SallaBookingField","class_1","hostRef","_this","this","salla","lang","get","onLoaded","setNestedAsync","key","value","Promise","resolve","helpers","setNested","messages","setTranslations","__awaiter","_b","sent","bookNowLabel","editLabel","bookedLabel","selectDate","Salla","event","on","bookingUrl","url","addParamToUrl","productId","iframeReady","setTimeout","modal","setTitle","open","prototype","openBookingModal","preventDefault","config","isGuest","auth","api","setAfterLoginEvent","dispatch","booking","add","then","resp","data","redirect","to","Error","catch","error","logger","response","componentWillLoad","option","details","length","reservations","bookingModal","h","class","ref","width","position","noPadding","isClosable","iframe","src","frameborder","componentDidLoad","window","addEventListener","source","action","type","message","localStorage","getItem","console","log","concat","notify","fields","success","close","height","reservationsInput","e","invalidInput","emit","setCustomValidity","reportValidity","render","Host","money","price","size","loaderPosition","fill","onClick","innerHTML","BookingTime","map","reservation","index","renderReservationDate","renderReservationTime","name","required","JSON","stringify","from_timestamp","Calendar","date","TimeIcon","to_timestamp","SallaConditionalFields","hideAllOptions","optionId","host","querySelectorAll","forEach","field","classList","dataset","disableInputs","input","setAttribute","removeAttribute","_a","tagName","toLowerCase","includes","getAttribute","hasOwnProperty","checked","changeHandler","target","replace","isMultiple","isEqual","showWhen","trim","isSelected","selectedValues","Array","from","toString","showTheInput","remove","closestProductOption","closest","optionRequired","checkboxes","document","isAnyChecked","some","checkbox","getElementsByClassName","componentDidRender","optionName","querySelector"],"sources":["src/components/salla-booking-field/salla-booking-field.scss?tag=salla-booking-field","src/components/salla-booking-field/salla-booking-field.tsx","src/components/salla-conditional-fields/salla-conditional-fields.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, Prop, h, Element, State, Event, EventEmitter } from '@stencil/core';\nimport { Option, Reservation } from './interfaces';\nimport BookingTime from '../../assets/svg/calendar-time.svg';\nimport Calendar from '../../assets/svg/calendar.svg';\nimport TimeIcon from '../../assets/svg/time.svg';\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss'\n})\nexport class SallaBookingField {\n constructor() {\n salla.lang.onLoaded(() => {\n const setNestedAsync = (lang, key, value) => {\n return new Promise((resolve) => {\n salla.helpers.setNested(salla.lang.messages[lang], key, value);\n resolve(true);\n });\n };\n\n const setTranslations = async () => {\n await setNestedAsync('ar.trans', 'pages.cart.book_an_appointment', 'حجز موعد');\n await setNestedAsync('en.trans', 'pages.cart.book_an_appointment', 'Book an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.edit_an_appointment', 'تعديل الموعد');\n await setNestedAsync('en.trans', 'pages.cart.edit_an_appointment', 'Edit an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n await setNestedAsync('en.trans', 'pages.cart.booked_successfully', 'Booked Successfully');\n await setNestedAsync('ar.trans', 'pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n await setNestedAsync('en.trans', 'pages.cart.select_appointment_date', 'Select appointment date');\n\n \n this.bookNowLabel = salla.lang.get('pages.cart.book_an_appointment');\n this.editLabel = salla.lang.get('pages.cart.edit_an_appointment');\n this.bookedLabel = salla.lang.get('pages.cart.booked_successfully');\n this.selectDate = salla.lang.get('pages.cart.select_appointment_date');\n };\n\n setTranslations();\n });\n\n Salla.event.on('booking::open', (bookingUrl) => {\n this.bookingUrl = salla.url.addParamToUrl('product_id', this.productId, bookingUrl);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate)\n this.modal.open();\n }, 100);\n });\n\n }\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n @State() reservationsInput: HTMLInputElement;\n @Prop() option: Option;\n @Prop() productId: Number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private openBookingModal(event) {\n event.preventDefault();\n if (salla.config.isGuest()) {\n salla.auth.api.setAfterLoginEvent('booking::open', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n return salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', resp.data.redirect.url);\n })\n .catch((error) =>{\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response);\n });\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details\n }\n }\n private bookingModal() {\n return (\n <salla-modal class=\"s-booking-field-modal\" ref={modal => this.modal = modal} width=\"md\" position=\"middle\" noPadding isClosable={false}>\n <iframe\n ref={iframe => this.iframe = iframe}\n src={this.bookingUrl}\n frameborder=\"0\">\n </iframe>\n </salla-modal>\n )\n }\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"booking\") {\n return;\n }\n let action = event.data.type;\n let value = event.data.message;\n localStorage.getItem('debug') && console.log(`recived an action:${action}`, event.data);\n if (action == 'error') {\n salla.notify.error(value.fields.reservations[0]);\n }\n\n if (action == 'success') {\n this.reservations = value.reservations;\n salla.notify.success(this.bookedLabel);\n this.modal.close();\n }\n\n if (action == \"height\") {\n return this.iframe.height = value?.height + \"px\";\n }\n\n });\n\n this.reservationsInput.addEventListener('invalid', e => {\n this.invalidInput.emit(e);\n });\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div>\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition='center' fill=\"outline\" onClick={event => this.openBookingModal(event)}>\n <span class=\"s-booking-field-book-now-content\">\n <span innerHTML={BookingTime}></span>\n {this.reservations.length ? this.editLabel : this.bookNowLabel}\n </span>\n </salla-button>\n </div>\n {this.reservations.length ? (\n <div class=\"s-booking-field-reservations\">\n {this.reservations.map((reservation, index) => (\n <div key={index} class=\"s-booking-field-reservations-item\">\n {this.renderReservationDate(reservation)}\n {this.renderReservationTime(reservation)}\n\n </div>\n ))}\n </div>\n ) : ''}\n <input class=\"s-hidden\" name={this.option.name} required={this.option.required} value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n\n renderReservationDate(reservation:Reservation){\n return <span class={reservation.from_timestamp ? 's-booking-field-reservations-has-time' : ''}>\n <i class=\"s-booking-field-reservations-icon\" innerHTML={Calendar}></i>\n {reservation.date}\n </span>;\n }\n\n renderReservationTime(reservation:Reservation){\n if(!reservation.from_timestamp){\n return '';\n }\n return <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span> {reservation.from_timestamp} - {reservation.to_timestamp}</span>\n </span>\n }\n}\n","import { Component, Element, Host, Listen, h } from '@stencil/core';\n\n/**\n * its to easy to use, currenlty its support select & checkbox input as trigger for show/hide the dom\n * the dom you can put it like this data-show-when=\"{name of the field} {= or !=} {value of the field}\"\n */\n@Component({\n tag: 'salla-conditional-fields'\n})\nexport class SallaConditionalFields {\n\n @Element() host: HTMLElement;\n\n private hideAllOptions(optionId) {\n this.host.querySelectorAll(`[data-show-when^=\"options[${optionId}\"]`).forEach((field: HTMLElement) => {\n field.classList.add('hidden');\n this.hideAllOptions(field.dataset.optionId);\n this.disableInputs(field);\n });\n }\n\n private disableInputs(field) {\n field.querySelectorAll('[name]').forEach((input) => {\n\n input.setAttribute('disabled', '');\n input.removeAttribute('required');\n if (input?.tagName?.toLowerCase() === 'select') {\n input.value = ''\n }\n if (['checkbox'].includes(input.getAttribute('type')) && input.hasOwnProperty('checked')) {\n // @ts-ignore\n input.checked = false;\n }\n });\n }\n \n @Listen('change')\n changeHandler(event) {\n salla.event.emit('salla-onditional-fields::change', event);\n salla.log('Received the change event: ', event);\n\n if (!event.target || !['SELECT'].includes(event.target.tagName) && !['checkbox'].includes(event.target.getAttribute('type'))) {\n salla.log('Ignore the change because is not support input: ' + (event?.target?.tagName || 'N/A'));\n return;\n }\n\n // to extract the option id from the input name, the supported names are name[*] and name[*][]\n let optionId = event.target.name.replace('[]', '');\n let isMultiple = event.target.getAttribute('type') === 'checkbox';\n\n\n salla.log('Trying to find all the element with condition:', `[data-show-when^=\"${optionId}\"]`);\n\n this.host.querySelectorAll(`[data-show-when^=\"${optionId}\"]`)\n .forEach((field: HTMLElement) => {\n let isEqual = !field?.dataset.showWhen.includes('!=');\n let value = field?.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$3').trim();\n // let isSelected = isMultiple ? event.target?.checked : value === event.target.value;\n let isSelected;\n\n if (isMultiple) {\n // @ts-ignore\n let selectedValues = Array.from(this.host.querySelectorAll(`input[name=\"${event.target.name}\"]:checked`), e => e?.value);\n isSelected = selectedValues.includes(value.toString());\n } else {\n isSelected = value === event.target.value;\n }\n\n salla.log('The input is ', (isMultiple ? 'Multiple' : 'Single'), ' value:', isSelected);\n\n let showTheInput = (isEqual && isSelected) || (!isEqual && !isSelected);\n if (showTheInput) {\n field.classList.remove('hidden');\n field.querySelectorAll('[name]').forEach((input) => {\n input.removeAttribute('disabled');\n\n\n // Return required attribute to the input if the option is required\n const closestProductOption = (input as HTMLInputElement).closest('.s-product-options-option') as HTMLElement;\n if (closestProductOption.dataset.optionRequired === 'true') {\n input.setAttribute('required', '');\n }\n\n\n // Handle multiple checkboxes with same name and required attribute \n if (input.getAttribute('type') === 'checkbox') {\n const checkboxes = Array.from(document.querySelectorAll(`input[type=\"checkbox\"][name=\"${input.getAttribute('name')}\"]`)) as HTMLInputElement[];\n const isAnyChecked = checkboxes.some((checkbox) => checkbox.checked); \n if (isAnyChecked) {\n checkboxes.forEach((checkbox) => {\n checkbox.removeAttribute('required');\n });\n }\n }\n //To handle focus on hidden input error\n if (!['checkbox'].includes(input.getAttribute('type')) && field.getElementsByClassName('required').length) {\n input.setAttribute('required', '');\n }\n });\n } else {\n this.hideAllOptions(field.dataset.optionId);\n field.classList.add('hidden');\n this.disableInputs(field);\n }\n });\n }\n\n componentDidRender() {\n this.host.querySelectorAll(`[data-show-when]`).forEach((field) => {\n // @ts-ignore\n let optionName = field?.dataset?.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$1').trim();\n if (!optionName) {\n return;\n }\n\n this.changeHandler({\n target: this.host.querySelector('[name^=\"' + optionName + '\"]')\n })\n });\n }\n\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["sallaBookingFieldCss","SallaBookingField","class_1","hostRef","_this","this","salla","lang","get","onLoaded","setNestedAsync","key","value","Promise","resolve","helpers","setNested","messages","setTranslations","__awaiter","_b","sent","bookNowLabel","editLabel","bookedLabel","selectDate","Salla","event","on","data","id","productId","bookingUrl","url","addParamToUrl","iframeReady","setTimeout","modal","setTitle","open","prototype","openBookingModal","preventDefault","config","isGuest","auth","api","setAfterLoginEvent","dispatch","booking","add","then","resp","redirect","to","Error","catch","error","logger","response","componentWillLoad","option","details","length","reservations","bookingModal","h","class","ref","width","position","noPadding","isClosable","iframe","src","frameborder","componentDidLoad","window","addEventListener","source","action","type","message","localStorage","getItem","console","log","concat","notify","fields","Number","success","close","height","reservationsInput","e","invalidInput","emit","setCustomValidity","reportValidity","render","Host","money","price","size","loaderPosition","fill","onClick","innerHTML","BookingTime","map","reservation","index","renderReservationDate","renderReservationTime","name","required","JSON","stringify","from_timestamp","Calendar","date","TimeIcon","to_timestamp","SallaConditionalFields","hideAllOptions","optionId","host","querySelectorAll","forEach","field","classList","dataset","disableInputs","input","setAttribute","removeAttribute","_a","tagName","toLowerCase","includes","getAttribute","hasOwnProperty","checked","changeHandler","target","replace","isMultiple","isEqual","showWhen","trim","isSelected","selectedValues","Array","from","toString","showTheInput","remove","closestProductOption","closest","optionRequired","checkboxes","document","isAnyChecked","some","checkbox","getElementsByClassName","componentDidRender","optionName","querySelector"],"sources":["src/components/salla-booking-field/salla-booking-field.scss?tag=salla-booking-field","src/components/salla-booking-field/salla-booking-field.tsx","src/components/salla-conditional-fields/salla-conditional-fields.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, Prop, h, Element, State, Event, EventEmitter } from '@stencil/core';\nimport { Option, Reservation } from './interfaces';\nimport BookingTime from '../../assets/svg/calendar-time.svg';\nimport Calendar from '../../assets/svg/calendar.svg';\nimport TimeIcon from '../../assets/svg/time.svg';\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss'\n})\nexport class SallaBookingField {\n constructor() {\n salla.lang.onLoaded(() => {\n const setNestedAsync = (lang, key, value) => {\n return new Promise((resolve) => {\n salla.helpers.setNested(salla.lang.messages[lang], key, value);\n resolve(true);\n });\n };\n\n const setTranslations = async () => {\n await setNestedAsync('ar.trans', 'pages.cart.book_an_appointment', 'حجز موعد');\n await setNestedAsync('en.trans', 'pages.cart.book_an_appointment', 'Book an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.edit_an_appointment', 'تعديل الموعد');\n await setNestedAsync('en.trans', 'pages.cart.edit_an_appointment', 'Edit an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n await setNestedAsync('en.trans', 'pages.cart.booked_successfully', 'Booked Successfully');\n await setNestedAsync('ar.trans', 'pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n await setNestedAsync('en.trans', 'pages.cart.select_appointment_date', 'Select appointment date');\n\n \n this.bookNowLabel = salla.lang.get('pages.cart.book_an_appointment');\n this.editLabel = salla.lang.get('pages.cart.edit_an_appointment');\n this.bookedLabel = salla.lang.get('pages.cart.booked_successfully');\n this.selectDate = salla.lang.get('pages.cart.select_appointment_date');\n };\n\n setTranslations();\n });\n\n Salla.event.on('booking::open', (data) => {\n if (data.id !== this.productId) {\n return\n }\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate)\n this.modal.open();\n }, 100);\n });\n\n }\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n @State() reservationsInput: HTMLInputElement;\n @Prop() option: Option;\n @Prop() productId: Number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private openBookingModal(event) {\n event.preventDefault();\n if (salla.config.isGuest()) {\n salla.auth.api.setAfterLoginEvent('booking::open', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n return salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response);\n });\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details\n }\n }\n private bookingModal() {\n return (\n <salla-modal class=\"s-booking-field-modal\" ref={modal => this.modal = modal} width=\"md\" position=\"middle\" noPadding isClosable={false}>\n <iframe\n ref={iframe => this.iframe = iframe}\n src={this.bookingUrl}\n frameborder=\"0\">\n </iframe>\n </salla-modal>\n )\n }\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"booking\") {\n return;\n }\n let action = event.data.type;\n let value = event.data.message;\n localStorage.getItem('debug') && console.log(`recived an action:${action}`, event.data);\n if (action == 'error') {\n salla.notify.error(value.fields.reservations[0]);\n }\n\n if (action == 'success') {\n if (Number(value.productId) !== Number(this.productId)) {\n return;\n }\n this.reservations = value.data.reservations;\n salla.notify.success(this.bookedLabel);\n if (!this.modal) {\n return;\n }\n this.modal.close();\n }\n\n if (action == \"height\") {\n if (!this.iframe) {\n return\n }\n return this.iframe.height = value?.height + \"px\";\n }\n\n });\n\n this.reservationsInput.addEventListener('invalid', e => {\n this.invalidInput.emit(e);\n });\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div>\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition='center' fill=\"outline\" onClick={event => this.openBookingModal(event)}>\n <span class=\"s-booking-field-book-now-content\">\n <span innerHTML={BookingTime}></span>\n {this.reservations.length ? this.editLabel : this.bookNowLabel}\n </span>\n </salla-button>\n </div>\n {this.reservations.length ? (\n <div class=\"s-booking-field-reservations\">\n {this.reservations.map((reservation, index) => (\n <div key={index} class=\"s-booking-field-reservations-item\">\n {this.renderReservationDate(reservation)}\n {this.renderReservationTime(reservation)}\n\n </div>\n ))}\n </div>\n ) : ''}\n <input class=\"s-hidden\" name={this.option.name} required={this.option.required} value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return <span class={reservation.from_timestamp ? 's-booking-field-reservations-has-time' : ''}>\n <i class=\"s-booking-field-reservations-icon\" innerHTML={Calendar}></i>\n {reservation.date}\n </span>;\n }\n\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) {\n return '';\n }\n return <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span> {reservation.from_timestamp} - {reservation.to_timestamp}</span>\n </span>\n }\n}\n","import { Component, Element, Host, Listen, h } from '@stencil/core';\n\n/**\n * its to easy to use, currenlty its support select & checkbox input as trigger for show/hide the dom\n * the dom you can put it like this data-show-when=\"{name of the field} {= or !=} {value of the field}\"\n */\n@Component({\n tag: 'salla-conditional-fields'\n})\nexport class SallaConditionalFields {\n\n @Element() host: HTMLElement;\n\n private hideAllOptions(optionId) {\n this.host.querySelectorAll(`[data-show-when^=\"options[${optionId}\"]`).forEach((field: HTMLElement) => {\n field.classList.add('hidden');\n this.hideAllOptions(field.dataset.optionId);\n this.disableInputs(field);\n });\n }\n\n private disableInputs(field) {\n field.querySelectorAll('[name]').forEach((input) => {\n\n input.setAttribute('disabled', '');\n input.removeAttribute('required');\n if (input?.tagName?.toLowerCase() === 'select') {\n input.value = ''\n }\n if (['checkbox'].includes(input.getAttribute('type')) && input.hasOwnProperty('checked')) {\n // @ts-ignore\n input.checked = false;\n }\n });\n }\n \n @Listen('change')\n changeHandler(event) {\n salla.event.emit('salla-onditional-fields::change', event);\n salla.log('Received the change event: ', event);\n\n if (!event.target || !['SELECT'].includes(event.target.tagName) && !['checkbox'].includes(event.target.getAttribute('type'))) {\n salla.log('Ignore the change because is not support input: ' + (event?.target?.tagName || 'N/A'));\n return;\n }\n\n // to extract the option id from the input name, the supported names are name[*] and name[*][]\n let optionId = event.target.name.replace('[]', '');\n let isMultiple = event.target.getAttribute('type') === 'checkbox';\n\n\n salla.log('Trying to find all the element with condition:', `[data-show-when^=\"${optionId}\"]`);\n\n this.host.querySelectorAll(`[data-show-when^=\"${optionId}\"]`)\n .forEach((field: HTMLElement) => {\n let isEqual = !field?.dataset.showWhen.includes('!=');\n let value = field?.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$3').trim();\n // let isSelected = isMultiple ? event.target?.checked : value === event.target.value;\n let isSelected;\n\n if (isMultiple) {\n // @ts-ignore\n let selectedValues = Array.from(this.host.querySelectorAll(`input[name=\"${event.target.name}\"]:checked`), e => e?.value);\n isSelected = selectedValues.includes(value.toString());\n } else {\n isSelected = value === event.target.value;\n }\n\n salla.log('The input is ', (isMultiple ? 'Multiple' : 'Single'), ' value:', isSelected);\n\n let showTheInput = (isEqual && isSelected) || (!isEqual && !isSelected);\n if (showTheInput) {\n field.classList.remove('hidden');\n field.querySelectorAll('[name]').forEach((input) => {\n input.removeAttribute('disabled');\n\n\n // Return required attribute to the input if the option is required\n const closestProductOption = (input as HTMLInputElement).closest('.s-product-options-option') as HTMLElement;\n if (closestProductOption.dataset.optionRequired === 'true') {\n input.setAttribute('required', '');\n }\n\n\n // Handle multiple checkboxes with same name and required attribute \n if (input.getAttribute('type') === 'checkbox') {\n const checkboxes = Array.from(document.querySelectorAll(`input[type=\"checkbox\"][name=\"${input.getAttribute('name')}\"]`)) as HTMLInputElement[];\n const isAnyChecked = checkboxes.some((checkbox) => checkbox.checked); \n if (isAnyChecked) {\n checkboxes.forEach((checkbox) => {\n checkbox.removeAttribute('required');\n });\n }\n }\n //To handle focus on hidden input error\n if (!['checkbox'].includes(input.getAttribute('type')) && field.getElementsByClassName('required').length) {\n input.setAttribute('required', '');\n }\n });\n } else {\n this.hideAllOptions(field.dataset.optionId);\n field.classList.add('hidden');\n this.disableInputs(field);\n }\n });\n }\n\n componentDidRender() {\n this.host.querySelectorAll(`[data-show-when]`).forEach((field) => {\n // @ts-ignore\n let optionName = field?.dataset?.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$1').trim();\n if (!optionName) {\n return;\n }\n\n this.changeHandler({\n target: this.host.querySelector('[name^=\"' + optionName + '\"]')\n })\n });\n }\n\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(e,t,n,a){function o(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function r(e){try{l(a.next(e))}catch(e){i(e)}}function s(e){try{l(a["throw"](e))}catch(e){i(e)}}function l(e){e.done?n(e.value):o(e.value).then(r,s)}l((a=a.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},a,o,i,r;return r={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(r[Symbol.iterator]=function(){return this}),r;function s(e){return function(t){return l([e,t])}}function l(s){if(a)throw new TypeError("Generator is already executing.");while(r&&(r=0,s[0]&&(n=0)),n)try{if(a=1,o&&(i=s[0]&2?o["return"]:s[0]?o["throw"]||((i=o["return"])&&i.call(o),0):o.next)&&!(i=i.call(o,s[1])).done)return i;if(o=0,i)s=[s[0]&2,i.value];switch(s[0]){case 0:case 1:i=s;break;case 4:n.label++;return{value:s[1],done:false};case 5:n.label++;o=s[1];s=[0];continue;case 7:s=n.ops.pop();n.trys.pop();continue;default:if(!(i=n.trys,i=i.length>0&&i[i.length-1])&&(s[0]===6||s[0]===2)){n=0;continue}if(s[0]===3&&(!i||s[1]>i[0]&&s[1]<i[3])){n.label=s[1];break}if(s[0]===6&&n.label<i[1]){n.label=i[1];i=s;break}if(i&&n.label<i[2]){n.label=i[2];n.ops.push(s);break}if(i[2])n.ops.pop();n.trys.pop();continue}s=t.call(e,n)}catch(e){s=[6,e];o=0}finally{a=i=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}};
|
|
2
|
+
/*!
|
|
3
|
+
* Crafted with ❤ by Salla
|
|
4
|
+
*/System.register(["./p-f422bbf9.system.js"],(function(e){"use strict";var t,n,a,o,i;return{setters:[function(e){t=e.r;n=e.c;a=e.h;o=e.H;i=e.g}],execute:function(){var r='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar-time</title>\n<path d="M22.667 17.333c-0.737 0-1.333 0.596-1.333 1.333v2.667h-2.667c-0.737 0-1.333 0.596-1.333 1.333s0.596 1.333 1.333 1.333h4c0.737 0 1.333-0.596 1.333-1.333v-4c0-0.737-0.596-1.333-1.333-1.333zM28 2.667h-2.667v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h5.363c0.737 0 1.333-0.596 1.333-1.333s-0.596-1.333-1.333-1.333h-5.363c-0.736 0-1.333-0.597-1.333-1.333v-21.333c0-0.736 0.597-1.333 1.333-1.333h2.667v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333v2.696c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.696c0-2.205-1.795-4-4-4zM22 12c-5.515 0-10 4.485-10 10s4.485 10 10 10 10-4.485 10-10-4.485-10-10-10zM22 29.333c-4.043 0-7.333-3.291-7.333-7.333s3.291-7.333 7.333-7.333 7.333 3.291 7.333 7.333-3.291 7.333-7.333 7.333z"></path>\n</svg>\n';var s='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar</title>\n<path d="M28 2.667h-2.667v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h24c2.205 0 4-1.795 4-4v-21.333c0-2.205-1.795-4-4-4zM29.333 28c0 0.736-0.599 1.333-1.333 1.333h-24c-0.736 0-1.333-0.599-1.333-1.333v-13.333h26.667zM29.333 12h-26.667v-5.333c0-0.736 0.599-1.333 1.333-1.333h2.667v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333z"></path>\n</svg>\n';var l='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>time</title>\n<path d="M16 0c-8.823 0-16 7.177-16 16s7.177 16 16 16 16-7.177 16-16-7.177-16-16-16zM16 29.333c-7.352 0-13.333-5.981-13.333-13.333s5.981-13.333 13.333-13.333 13.333 5.981 13.333 13.333-5.981 13.333-13.333 13.333zM16 8c-0.736 0-1.333 0.596-1.333 1.333v6.667h-4c-0.736 0-1.333 0.596-1.333 1.333s0.597 1.333 1.333 1.333h5.333c0.736 0 1.333-0.596 1.333-1.333v-8c0-0.737-0.597-1.333-1.333-1.333z"></path>\n</svg>\n';var c=":host{display:block}";var u=e("salla_booking_field",function(){function e(e){var a=this;t(this,e);this.invalidInput=n(this,"invalidInput",7);this.reservationsInput=undefined;this.option=undefined;this.productId=undefined;this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment","حجز موعد");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment","تعديل الموعد");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully","تمت اضافة الموعد بنجاح");this.selectDate=salla.lang.get("pages.cart.select_appointment_date","حدد تاريخ الموعد");this.bookingUrl="";this.iframeReady=false;this.reservations=[];salla.lang.onLoaded((function(){var e=function(e,t,n){return new Promise((function(a){salla.helpers.setNested(salla.lang.messages[e],t,n);a(true)}))};var t=function(){return __awaiter(a,void 0,void 0,(function(){return __generator(this,(function(t){switch(t.label){case 0:return[4,e("ar.trans","pages.cart.book_an_appointment","حجز موعد")];case 1:t.sent();return[4,e("en.trans","pages.cart.book_an_appointment","Book an Appointment")];case 2:t.sent();return[4,e("ar.trans","pages.cart.edit_an_appointment","تعديل الموعد")];case 3:t.sent();return[4,e("en.trans","pages.cart.edit_an_appointment","Edit an Appointment")];case 4:t.sent();return[4,e("ar.trans","pages.cart.booked_successfully","تمت اضافة الموعد بنجاح")];case 5:t.sent();return[4,e("en.trans","pages.cart.booked_successfully","Booked Successfully")];case 6:t.sent();return[4,e("ar.trans","pages.cart.select_appointment_date","حدد تاريخ الموعد")];case 7:t.sent();return[4,e("en.trans","pages.cart.select_appointment_date","Select appointment date")];case 8:t.sent();this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully");this.selectDate=salla.lang.get("pages.cart.select_appointment_date");return[2]}}))}))};t()}));Salla.event.on("booking::open",(function(e){if(e.id!==a.productId){return}a.bookingUrl=salla.url.addParamToUrl("product_id",e.id,e.url);a.iframeReady=true;setTimeout((function(){a.modal.setTitle(a.selectDate);a.modal.open()}),100)}))}e.prototype.openBookingModal=function(e){var t=this;e.preventDefault();if(salla.config.isGuest()){salla.auth.api.setAfterLoginEvent("booking::open",this.productId);salla.event.dispatch("login::open");return}return salla.booking.add(this.productId,false).then((function(e){if(e.data.redirect.to!=="booking"){throw new Error("Unexpected redirect!")}salla.event.dispatch("booking::open",{url:e.data.redirect.url,id:t.productId})})).catch((function(e){salla.error(salla.lang.get("common.errors.error_occurred"));salla.logger.error(e.response)}))};e.prototype.componentWillLoad=function(){if(this.option&&this.option.details.length){this.reservations=this.option.details}};e.prototype.bookingModal=function(){var e=this;return a("salla-modal",{class:"s-booking-field-modal",ref:function(t){return e.modal=t},width:"md",position:"middle",noPadding:true,isClosable:false},a("iframe",{ref:function(t){return e.iframe=t},src:this.bookingUrl,frameborder:"0"}))};e.prototype.componentDidLoad=function(){var e=this;window.addEventListener("message",(function(t){if(t.data.source!="booking"){return}var n=t.data.type;var a=t.data.message;localStorage.getItem("debug")&&console.log("recived an action:".concat(n),t.data);if(n=="error"){salla.notify.error(a.fields.reservations[0])}if(n=="success"){if(Number(a.productId)!==Number(e.productId)){return}e.reservations=a.data.reservations;salla.notify.success(e.bookedLabel);if(!e.modal){return}e.modal.close()}if(n=="height"){if(!e.iframe){return}return e.iframe.height=(a===null||a===void 0?void 0:a.height)+"px"}}));this.reservationsInput.addEventListener("invalid",(function(t){e.invalidInput.emit(t)}));this.reservationsInput.addEventListener("input",(function(){e.reservationsInput.setCustomValidity("");e.reservationsInput.reportValidity()}))};e.prototype.render=function(){var e=this;return a(o,null,a("div",{class:"s-booking-field-main"},a("div",{class:"s-booking-field-price"},a("span",null,salla.money(this.option.price))),a("salla-button",{class:"s-booking-field-book-now",size:"small",loaderPosition:"center",fill:"outline",onClick:function(t){return e.openBookingModal(t)}},a("span",{class:"s-booking-field-book-now-content"},a("span",{innerHTML:r}),this.reservations.length?this.editLabel:this.bookNowLabel))),this.reservations.length?a("div",{class:"s-booking-field-reservations"},this.reservations.map((function(t,n){return a("div",{key:n,class:"s-booking-field-reservations-item"},e.renderReservationDate(t),e.renderReservationTime(t))}))):"",a("input",{class:"s-hidden",name:this.option.name,required:this.option.required,value:JSON.stringify(this.reservations)==="[]"?"":JSON.stringify(this.reservations),ref:function(t){return e.reservationsInput=t}}),this.iframeReady&&this.bookingModal())};e.prototype.renderReservationDate=function(e){return a("span",{class:e.from_timestamp?"s-booking-field-reservations-has-time":""},a("i",{class:"s-booking-field-reservations-icon",innerHTML:s}),e.date)};e.prototype.renderReservationTime=function(e){if(!e.from_timestamp){return""}return a("span",{class:"s-booking-field-reservations-time"},a("i",{class:"s-booking-field-reservations-icon",innerHTML:l}),a("span",null," ",e.from_timestamp," - ",e.to_timestamp))};Object.defineProperty(e.prototype,"host",{get:function(){return i(this)},enumerable:false,configurable:true});return e}());u.style=c;var d=e("salla_conditional_fields",function(){function e(e){t(this,e)}e.prototype.hideAllOptions=function(e){var t=this;this.host.querySelectorAll('[data-show-when^="options['.concat(e,'"]')).forEach((function(e){e.classList.add("hidden");t.hideAllOptions(e.dataset.optionId);t.disableInputs(e)}))};e.prototype.disableInputs=function(e){e.querySelectorAll("[name]").forEach((function(e){var t;e.setAttribute("disabled","");e.removeAttribute("required");if(((t=e===null||e===void 0?void 0:e.tagName)===null||t===void 0?void 0:t.toLowerCase())==="select"){e.value=""}if(["checkbox"].includes(e.getAttribute("type"))&&e.hasOwnProperty("checked")){e.checked=false}}))};e.prototype.changeHandler=function(e){var t=this;var n;salla.event.emit("salla-onditional-fields::change",e);salla.log("Received the change event: ",e);if(!e.target||!["SELECT"].includes(e.target.tagName)&&!["checkbox"].includes(e.target.getAttribute("type"))){salla.log("Ignore the change because is not support input: "+(((n=e===null||e===void 0?void 0:e.target)===null||n===void 0?void 0:n.tagName)||"N/A"));return}var a=e.target.name.replace("[]","");var o=e.target.getAttribute("type")==="checkbox";salla.log("Trying to find all the element with condition:",'[data-show-when^="'.concat(a,'"]'));this.host.querySelectorAll('[data-show-when^="'.concat(a,'"]')).forEach((function(n){var a=!(n===null||n===void 0?void 0:n.dataset.showWhen.includes("!="));var i=n===null||n===void 0?void 0:n.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$3").trim();var r;if(o){var s=Array.from(t.host.querySelectorAll('input[name="'.concat(e.target.name,'"]:checked')),(function(e){return e===null||e===void 0?void 0:e.value}));r=s.includes(i.toString())}else{r=i===e.target.value}salla.log("The input is ",o?"Multiple":"Single"," value:",r);var l=a&&r||!a&&!r;if(l){n.classList.remove("hidden");n.querySelectorAll("[name]").forEach((function(e){e.removeAttribute("disabled");var t=e.closest(".s-product-options-option");if(t.dataset.optionRequired==="true"){e.setAttribute("required","")}if(e.getAttribute("type")==="checkbox"){var a=Array.from(document.querySelectorAll('input[type="checkbox"][name="'.concat(e.getAttribute("name"),'"]')));var o=a.some((function(e){return e.checked}));if(o){a.forEach((function(e){e.removeAttribute("required")}))}}if(!["checkbox"].includes(e.getAttribute("type"))&&n.getElementsByClassName("required").length){e.setAttribute("required","")}}))}else{t.hideAllOptions(n.dataset.optionId);n.classList.add("hidden");t.disableInputs(n)}}))};e.prototype.componentDidRender=function(){var e=this;this.host.querySelectorAll("[data-show-when]").forEach((function(t){var n;var a=(n=t===null||t===void 0?void 0:t.dataset)===null||n===void 0?void 0:n.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$1").trim();if(!a){return}e.changeHandler({target:e.host.querySelector('[name^="'+a+'"]')})}))};e.prototype.render=function(){return a(o,null,a("slot",null))};Object.defineProperty(e.prototype,"host",{get:function(){return i(this)},enumerable:false,configurable:true});return e}())}}}));
|
|
5
|
+
//# sourceMappingURL=p-365e17fa.system.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["sallaBookingFieldCss","SallaBookingField","exports","class_1","hostRef","_this","this","salla","lang","get","onLoaded","setNestedAsync","key","value","Promise","resolve","helpers","setNested","messages","setTranslations","__awaiter","_b","sent","bookNowLabel","editLabel","bookedLabel","selectDate","Salla","event","on","data","id","productId","bookingUrl","url","addParamToUrl","iframeReady","setTimeout","modal","setTitle","open","prototype","openBookingModal","preventDefault","config","isGuest","auth","api","setAfterLoginEvent","dispatch","booking","add","then","resp","redirect","to","Error","catch","error","logger","response","componentWillLoad","option","details","length","reservations","bookingModal","h","class","ref","width","position","noPadding","isClosable","iframe","src","frameborder","componentDidLoad","window","addEventListener","source","action","type","message","localStorage","getItem","console","log","concat","notify","fields","Number","success","close","height","reservationsInput","e","invalidInput","emit","setCustomValidity","reportValidity","render","Host","money","price","size","loaderPosition","fill","onClick","innerHTML","BookingTime","map","reservation","index","renderReservationDate","renderReservationTime","name","required","JSON","stringify","from_timestamp","Calendar","date","TimeIcon","to_timestamp","SallaConditionalFields","class_2","hideAllOptions","optionId","host","querySelectorAll","forEach","field","classList","dataset","disableInputs","input","setAttribute","removeAttribute","_a","tagName","toLowerCase","includes","getAttribute","hasOwnProperty","checked","changeHandler","target","replace","isMultiple","isEqual","showWhen","trim","isSelected","selectedValues","Array","from","toString","showTheInput","remove","closestProductOption","closest","optionRequired","checkboxes","document","isAnyChecked","some","checkbox","getElementsByClassName","componentDidRender","optionName","querySelector"],"sources":["src/components/salla-booking-field/salla-booking-field.scss?tag=salla-booking-field","src/components/salla-booking-field/salla-booking-field.tsx","src/components/salla-conditional-fields/salla-conditional-fields.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, Prop, h, Element, State, Event, EventEmitter } from '@stencil/core';\nimport { Option, Reservation } from './interfaces';\nimport BookingTime from '../../assets/svg/calendar-time.svg';\nimport Calendar from '../../assets/svg/calendar.svg';\nimport TimeIcon from '../../assets/svg/time.svg';\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss'\n})\nexport class SallaBookingField {\n constructor() {\n salla.lang.onLoaded(() => {\n const setNestedAsync = (lang, key, value) => {\n return new Promise((resolve) => {\n salla.helpers.setNested(salla.lang.messages[lang], key, value);\n resolve(true);\n });\n };\n\n const setTranslations = async () => {\n await setNestedAsync('ar.trans', 'pages.cart.book_an_appointment', 'حجز موعد');\n await setNestedAsync('en.trans', 'pages.cart.book_an_appointment', 'Book an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.edit_an_appointment', 'تعديل الموعد');\n await setNestedAsync('en.trans', 'pages.cart.edit_an_appointment', 'Edit an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n await setNestedAsync('en.trans', 'pages.cart.booked_successfully', 'Booked Successfully');\n await setNestedAsync('ar.trans', 'pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n await setNestedAsync('en.trans', 'pages.cart.select_appointment_date', 'Select appointment date');\n\n \n this.bookNowLabel = salla.lang.get('pages.cart.book_an_appointment');\n this.editLabel = salla.lang.get('pages.cart.edit_an_appointment');\n this.bookedLabel = salla.lang.get('pages.cart.booked_successfully');\n this.selectDate = salla.lang.get('pages.cart.select_appointment_date');\n };\n\n setTranslations();\n });\n\n Salla.event.on('booking::open', (data) => {\n if (data.id !== this.productId) {\n return\n }\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate)\n this.modal.open();\n }, 100);\n });\n\n }\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n @State() reservationsInput: HTMLInputElement;\n @Prop() option: Option;\n @Prop() productId: Number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private openBookingModal(event) {\n event.preventDefault();\n if (salla.config.isGuest()) {\n salla.auth.api.setAfterLoginEvent('booking::open', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n return salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response);\n });\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details\n }\n }\n private bookingModal() {\n return (\n <salla-modal class=\"s-booking-field-modal\" ref={modal => this.modal = modal} width=\"md\" position=\"middle\" noPadding isClosable={false}>\n <iframe\n ref={iframe => this.iframe = iframe}\n src={this.bookingUrl}\n frameborder=\"0\">\n </iframe>\n </salla-modal>\n )\n }\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"booking\") {\n return;\n }\n let action = event.data.type;\n let value = event.data.message;\n localStorage.getItem('debug') && console.log(`recived an action:${action}`, event.data);\n if (action == 'error') {\n salla.notify.error(value.fields.reservations[0]);\n }\n\n if (action == 'success') {\n if (Number(value.productId) !== Number(this.productId)) {\n return;\n }\n this.reservations = value.data.reservations;\n salla.notify.success(this.bookedLabel);\n if (!this.modal) {\n return;\n }\n this.modal.close();\n }\n\n if (action == \"height\") {\n if (!this.iframe) {\n return\n }\n return this.iframe.height = value?.height + \"px\";\n }\n\n });\n\n this.reservationsInput.addEventListener('invalid', e => {\n this.invalidInput.emit(e);\n });\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div>\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition='center' fill=\"outline\" onClick={event => this.openBookingModal(event)}>\n <span class=\"s-booking-field-book-now-content\">\n <span innerHTML={BookingTime}></span>\n {this.reservations.length ? this.editLabel : this.bookNowLabel}\n </span>\n </salla-button>\n </div>\n {this.reservations.length ? (\n <div class=\"s-booking-field-reservations\">\n {this.reservations.map((reservation, index) => (\n <div key={index} class=\"s-booking-field-reservations-item\">\n {this.renderReservationDate(reservation)}\n {this.renderReservationTime(reservation)}\n\n </div>\n ))}\n </div>\n ) : ''}\n <input class=\"s-hidden\" name={this.option.name} required={this.option.required} value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return <span class={reservation.from_timestamp ? 's-booking-field-reservations-has-time' : ''}>\n <i class=\"s-booking-field-reservations-icon\" innerHTML={Calendar}></i>\n {reservation.date}\n </span>;\n }\n\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) {\n return '';\n }\n return <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span> {reservation.from_timestamp} - {reservation.to_timestamp}</span>\n </span>\n }\n}\n","import { Component, Element, Host, Listen, h } from '@stencil/core';\n\n/**\n * its to easy to use, currenlty its support select & checkbox input as trigger for show/hide the dom\n * the dom you can put it like this data-show-when=\"{name of the field} {= or !=} {value of the field}\"\n */\n@Component({\n tag: 'salla-conditional-fields'\n})\nexport class SallaConditionalFields {\n\n @Element() host: HTMLElement;\n\n private hideAllOptions(optionId) {\n this.host.querySelectorAll(`[data-show-when^=\"options[${optionId}\"]`).forEach((field: HTMLElement) => {\n field.classList.add('hidden');\n this.hideAllOptions(field.dataset.optionId);\n this.disableInputs(field);\n });\n }\n\n private disableInputs(field) {\n field.querySelectorAll('[name]').forEach((input) => {\n\n input.setAttribute('disabled', '');\n input.removeAttribute('required');\n if (input?.tagName?.toLowerCase() === 'select') {\n input.value = ''\n }\n if (['checkbox'].includes(input.getAttribute('type')) && input.hasOwnProperty('checked')) {\n // @ts-ignore\n input.checked = false;\n }\n });\n }\n \n @Listen('change')\n changeHandler(event) {\n salla.event.emit('salla-onditional-fields::change', event);\n salla.log('Received the change event: ', event);\n\n if (!event.target || !['SELECT'].includes(event.target.tagName) && !['checkbox'].includes(event.target.getAttribute('type'))) {\n salla.log('Ignore the change because is not support input: ' + (event?.target?.tagName || 'N/A'));\n return;\n }\n\n // to extract the option id from the input name, the supported names are name[*] and name[*][]\n let optionId = event.target.name.replace('[]', '');\n let isMultiple = event.target.getAttribute('type') === 'checkbox';\n\n\n salla.log('Trying to find all the element with condition:', `[data-show-when^=\"${optionId}\"]`);\n\n this.host.querySelectorAll(`[data-show-when^=\"${optionId}\"]`)\n .forEach((field: HTMLElement) => {\n let isEqual = !field?.dataset.showWhen.includes('!=');\n let value = field?.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$3').trim();\n // let isSelected = isMultiple ? event.target?.checked : value === event.target.value;\n let isSelected;\n\n if (isMultiple) {\n // @ts-ignore\n let selectedValues = Array.from(this.host.querySelectorAll(`input[name=\"${event.target.name}\"]:checked`), e => e?.value);\n isSelected = selectedValues.includes(value.toString());\n } else {\n isSelected = value === event.target.value;\n }\n\n salla.log('The input is ', (isMultiple ? 'Multiple' : 'Single'), ' value:', isSelected);\n\n let showTheInput = (isEqual && isSelected) || (!isEqual && !isSelected);\n if (showTheInput) {\n field.classList.remove('hidden');\n field.querySelectorAll('[name]').forEach((input) => {\n input.removeAttribute('disabled');\n\n\n // Return required attribute to the input if the option is required\n const closestProductOption = (input as HTMLInputElement).closest('.s-product-options-option') as HTMLElement;\n if (closestProductOption.dataset.optionRequired === 'true') {\n input.setAttribute('required', '');\n }\n\n\n // Handle multiple checkboxes with same name and required attribute \n if (input.getAttribute('type') === 'checkbox') {\n const checkboxes = Array.from(document.querySelectorAll(`input[type=\"checkbox\"][name=\"${input.getAttribute('name')}\"]`)) as HTMLInputElement[];\n const isAnyChecked = checkboxes.some((checkbox) => checkbox.checked); \n if (isAnyChecked) {\n checkboxes.forEach((checkbox) => {\n checkbox.removeAttribute('required');\n });\n }\n }\n //To handle focus on hidden input error\n if (!['checkbox'].includes(input.getAttribute('type')) && field.getElementsByClassName('required').length) {\n input.setAttribute('required', '');\n }\n });\n } else {\n this.hideAllOptions(field.dataset.optionId);\n field.classList.add('hidden');\n this.disableInputs(field);\n }\n });\n }\n\n componentDidRender() {\n this.host.querySelectorAll(`[data-show-when]`).forEach((field) => {\n // @ts-ignore\n let optionName = field?.dataset?.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$1').trim();\n if (!optionName) {\n return;\n }\n\n this.changeHandler({\n target: this.host.querySelector('[name^=\"' + optionName + '\"]')\n })\n });\n }\n\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":";;;+tFAAA,IAAMA,EAAuB,uB,ICShBC,EAAiBC,EAAA,iCAC5B,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,K,uJAiDgCC,MAAMC,KAAKC,IAAI,iCAAkC,Y,eACpDF,MAAMC,KAAKC,IAAI,iCAAkC,gB,iBAC/CF,MAAMC,KAAKC,IAAI,iCAAkC,0B,gBAClDF,MAAMC,KAAKC,IAAI,qCAAsC,oB,gBACrD,G,iBACE,M,kBACO,GAtDrCF,MAAMC,KAAKE,UAAS,WAClB,IAAMC,EAAiB,SAACH,EAAMI,EAAKC,GACjC,OAAO,IAAIC,SAAQ,SAACC,GAClBR,MAAMS,QAAQC,UAAUV,MAAMC,KAAKU,SAASV,GAAOI,EAAKC,GACxDE,EAAQ,K,KAIZ,IAAMI,EAAkB,kBAAAC,UAAAf,OAAA,qB,4DACtB,SAAMM,EAAe,WAAY,iCAAkC,a,OAAnEU,EAAAC,OACA,SAAMX,EAAe,WAAY,iCAAkC,wB,OAAnEU,EAAAC,OACA,SAAMX,EAAe,WAAY,iCAAkC,iB,OAAnEU,EAAAC,OACA,SAAMX,EAAe,WAAY,iCAAkC,wB,OAAnEU,EAAAC,OACA,SAAMX,EAAe,WAAY,iCAAkC,2B,OAAnEU,EAAAC,OACA,SAAMX,EAAe,WAAY,iCAAkC,wB,OAAnEU,EAAAC,OACA,SAAMX,EAAe,WAAY,qCAAsC,qB,OAAvEU,EAAAC,OACA,SAAMX,EAAe,WAAY,qCAAsC,4B,OAAvEU,EAAAC,OAGAhB,KAAKiB,aAAehB,MAAMC,KAAKC,IAAI,kCACnCH,KAAKkB,UAAYjB,MAAMC,KAAKC,IAAI,kCAChCH,KAAKmB,YAAclB,MAAMC,KAAKC,IAAI,kCAClCH,KAAKoB,WAAanB,MAAMC,KAAKC,IAAI,sC,kBAGnCU,G,IAGFQ,MAAMC,MAAMC,GAAG,iBAAiB,SAACC,GAC/B,GAAIA,EAAKC,KAAO1B,EAAK2B,UAAW,CAC9B,M,CAEF3B,EAAK4B,WAAa1B,MAAM2B,IAAIC,cAAc,aAAcL,EAAKC,GAAID,EAAKI,KACtE7B,EAAK+B,YAAc,KACnBC,YAAW,WACThC,EAAKiC,MAAMC,SAASlC,EAAKqB,YACzBrB,EAAKiC,MAAME,M,GACV,I,IAuBCrC,EAAAsC,UAAAC,iBAAA,SAAiBd,GAAjB,IAAAvB,EAAAC,KACNsB,EAAMe,iBACN,GAAIpC,MAAMqC,OAAOC,UAAW,CAC1BtC,MAAMuC,KAAKC,IAAIC,mBAAmB,gBAAiB1C,KAAK0B,WACxDzB,MAAMqB,MAAMqB,SAAS,eACrB,M,CAEF,OAAO1C,MAAM2C,QAAQC,IAAI7C,KAAK0B,UAAW,OACtCoB,MAAK,SAACC,GACL,GAAIA,EAAKvB,KAAKwB,SAASC,KAAO,UAAW,CACvC,MAAM,IAAIC,MAAM,uB,CAElBjD,MAAMqB,MAAMqB,SAAS,gBAAiB,CAAEf,IAAKmB,EAAKvB,KAAKwB,SAASpB,IAAKH,GAAI1B,EAAK2B,W,IAE/EyB,OAAM,SAACC,GACNnD,MAAMmD,MAAMnD,MAAMC,KAAKC,IAAI,iCAC3BF,MAAMoD,OAAOD,MAAMA,EAAME,S,KAI/BzD,EAAAsC,UAAAoB,kBAAA,WACE,GAAIvD,KAAKwD,QAAUxD,KAAKwD,OAAOC,QAAQC,OAAQ,CAC7C1D,KAAK2D,aAAe3D,KAAKwD,OAAOC,O,GAG5B5D,EAAAsC,UAAAyB,aAAA,eAAA7D,EAAAC,KACN,OACE6D,EAAA,eAAaC,MAAM,wBAAwBC,IAAK,SAAA/B,GAAS,OAAAjC,EAAKiC,MAAQA,CAAb,EAAoBgC,MAAM,KAAKC,SAAS,SAASC,UAAS,KAACC,WAAY,OAC9HN,EAAA,UACEE,IAAK,SAAAK,GAAU,OAAArE,EAAKqE,OAASA,CAAd,EACfC,IAAKrE,KAAK2B,WACV2C,YAAY,M,EAKpBzE,EAAAsC,UAAAoC,iBAAA,eAAAxE,EAAAC,KACEwE,OAAOC,iBAAiB,WAAW,SAACnD,GAClC,GAAIA,EAAME,KAAKkD,QAAU,UAAW,CAClC,M,CAEF,IAAIC,EAASrD,EAAME,KAAKoD,KACxB,IAAIrE,EAAQe,EAAME,KAAKqD,QACvBC,aAAaC,QAAQ,UAAYC,QAAQC,IAAI,qBAAAC,OAAqBP,GAAUrD,EAAME,MAClF,GAAImD,GAAU,QAAS,CACrB1E,MAAMkF,OAAO/B,MAAM7C,EAAM6E,OAAOzB,aAAa,G,CAG/C,GAAIgB,GAAU,UAAW,CACvB,GAAIU,OAAO9E,EAAMmB,aAAe2D,OAAOtF,EAAK2B,WAAY,CACtD,M,CAEF3B,EAAK4D,aAAepD,EAAMiB,KAAKmC,aAC/B1D,MAAMkF,OAAOG,QAAQvF,EAAKoB,aAC1B,IAAKpB,EAAKiC,MAAO,CACf,M,CAEFjC,EAAKiC,MAAMuD,O,CAGb,GAAIZ,GAAU,SAAU,CACtB,IAAK5E,EAAKqE,OAAQ,CAChB,M,CAEF,OAAOrE,EAAKqE,OAAOoB,QAASjF,IAAK,MAALA,SAAK,SAALA,EAAOiF,QAAS,I,KAKhDxF,KAAKyF,kBAAkBhB,iBAAiB,WAAW,SAAAiB,GACjD3F,EAAK4F,aAAaC,KAAKF,E,IAEzB1F,KAAKyF,kBAAkBhB,iBAAiB,SAAS,WAC/C1E,EAAK0F,kBAAkBI,kBAAkB,IACzC9F,EAAK0F,kBAAkBK,gB,KAG3BjG,EAAAsC,UAAA4D,OAAA,eAAAhG,EAAAC,KACE,OACE6D,EAACmC,EAAI,KACHnC,EAAA,OAAKC,MAAM,wBACTD,EAAA,OAAKC,MAAM,yBACTD,EAAA,YAAO5D,MAAMgG,MAAMjG,KAAKwD,OAAO0C,SAEjCrC,EAAA,gBAAcC,MAAM,2BAA2BqC,KAAK,QAAQC,eAAe,SAASC,KAAK,UAAUC,QAAS,SAAAhF,GAAS,OAAAvB,EAAKqC,iBAAiBd,EAAtB,GACnHuC,EAAA,QAAMC,MAAM,oCACVD,EAAA,QAAM0C,UAAWC,IAChBxG,KAAK2D,aAAaD,OAAS1D,KAAKkB,UAAYlB,KAAKiB,gBAIvDjB,KAAK2D,aAAaD,OACjBG,EAAA,OAAKC,MAAM,gCACR9D,KAAK2D,aAAa8C,KAAI,SAACC,EAAaC,GAAK,OACxC9C,EAAA,OAAKvD,IAAKqG,EAAO7C,MAAM,qCACpB/D,EAAK6G,sBAAsBF,GAC3B3G,EAAK8G,sBAAsBH,GAHU,KAQ1C,GACJ7C,EAAA,SAAOC,MAAM,WAAWgD,KAAM9G,KAAKwD,OAAOsD,KAAMC,SAAU/G,KAAKwD,OAAOuD,SAAUxG,MAAOyG,KAAKC,UAAUjH,KAAK2D,gBAAkB,KAAO,GAAKqD,KAAKC,UAAUjH,KAAK2D,cAC3JI,IAAK,SAAAJ,GAAgB,OAAA5D,EAAK0F,kBAAoB9B,CAAzB,IACtB3D,KAAK8B,aAAe9B,KAAK4D,e,EAKhC/D,EAAAsC,UAAAyE,sBAAA,SAAsBF,GACpB,OAAO7C,EAAA,QAAMC,MAAO4C,EAAYQ,eAAiB,wCAA0C,IACzFrD,EAAA,KAAGC,MAAM,oCAAoCyC,UAAWY,IACvDT,EAAYU,K,EAIjBvH,EAAAsC,UAAA0E,sBAAA,SAAsBH,GACpB,IAAKA,EAAYQ,eAAgB,CAC/B,MAAO,E,CAET,OAAOrD,EAAA,QAAMC,MAAM,qCACjBD,EAAA,KAAGC,MAAM,oCAAoCyC,UAAWc,IACxDxD,EAAA,gBAAQ6C,EAAYQ,eAAc,MAAKR,EAAYY,c,yHAxL3B,I,cCAjBC,EAAsB3H,EAAA,sC,wBAIzB4H,EAAArF,UAAAsF,eAAA,SAAeC,GAAf,IAAA3H,EAAAC,KACNA,KAAK2H,KAAKC,iBAAiB,6BAAA1C,OAA6BwC,EAAQ,OAAMG,SAAQ,SAACC,GAC7EA,EAAMC,UAAUlF,IAAI,UACpB9C,EAAK0H,eAAeK,EAAME,QAAQN,UAClC3H,EAAKkI,cAAcH,E,KAIfN,EAAArF,UAAA8F,cAAA,SAAcH,GACpBA,EAAMF,iBAAiB,UAAUC,SAAQ,SAACK,G,MAExCA,EAAMC,aAAa,WAAY,IAC/BD,EAAME,gBAAgB,YACtB,KAAIC,EAAAH,IAAK,MAALA,SAAK,SAALA,EAAOI,WAAO,MAAAD,SAAA,SAAAA,EAAEE,iBAAkB,SAAU,CAC9CL,EAAM3H,MAAQ,E,CAEhB,GAAI,CAAC,YAAYiI,SAASN,EAAMO,aAAa,UAAYP,EAAMQ,eAAe,WAAY,CAExFR,EAAMS,QAAU,K,MAMtBnB,EAAArF,UAAAyG,cAAA,SAActH,GAAd,IAAAvB,EAAAC,K,MACEC,MAAMqB,MAAMsE,KAAK,kCAAmCtE,GACpDrB,MAAMgF,IAAI,8BAA+B3D,GAEzC,IAAKA,EAAMuH,SAAW,CAAC,UAAUL,SAASlH,EAAMuH,OAAOP,WAAa,CAAC,YAAYE,SAASlH,EAAMuH,OAAOJ,aAAa,SAAU,CAC5HxI,MAAMgF,IAAI,sDAAsDoD,EAAA/G,IAAK,MAALA,SAAK,SAALA,EAAOuH,UAAM,MAAAR,SAAA,SAAAA,EAAEC,UAAW,QAC1F,M,CAIF,IAAIZ,EAAWpG,EAAMuH,OAAO/B,KAAKgC,QAAQ,KAAM,IAC/C,IAAIC,EAAazH,EAAMuH,OAAOJ,aAAa,UAAY,WAGvDxI,MAAMgF,IAAI,iDAAkD,qBAAAC,OAAqBwC,EAAQ,OAEzF1H,KAAK2H,KAAKC,iBAAiB,qBAAA1C,OAAqBwC,EAAQ,OACrDG,SAAQ,SAACC,GACR,IAAIkB,IAAWlB,IAAK,MAALA,SAAK,SAALA,EAAOE,QAAQiB,SAAST,SAAS,OAChD,IAAIjI,EAAQuH,IAAK,MAALA,SAAK,SAALA,EAAOE,QAAQiB,SAASH,QAAQ,mBAAoB,MAAMI,OAEtE,IAAIC,EAEJ,GAAIJ,EAAY,CAEd,IAAIK,EAAiBC,MAAMC,KAAKvJ,EAAK4H,KAAKC,iBAAiB,eAAA1C,OAAe5D,EAAMuH,OAAO/B,KAAI,gBAAe,SAAApB,GAAK,OAAAA,IAAC,MAADA,SAAC,SAADA,EAAGnF,KAAH,IAC/G4I,EAAaC,EAAeZ,SAASjI,EAAMgJ,W,KACtC,CACLJ,EAAa5I,IAAUe,EAAMuH,OAAOtI,K,CAGtCN,MAAMgF,IAAI,gBAAkB8D,EAAa,WAAa,SAAW,UAAWI,GAE5E,IAAIK,EAAgBR,GAAWG,IAAiBH,IAAYG,EAC5D,GAAIK,EAAc,CAChB1B,EAAMC,UAAU0B,OAAO,UACvB3B,EAAMF,iBAAiB,UAAUC,SAAQ,SAACK,GACxCA,EAAME,gBAAgB,YAItB,IAAMsB,EAAwBxB,EAA2ByB,QAAQ,6BACjE,GAAID,EAAqB1B,QAAQ4B,iBAAmB,OAAQ,CAC1D1B,EAAMC,aAAa,WAAY,G,CAKjC,GAAID,EAAMO,aAAa,UAAY,WAAY,CAC7C,IAAMoB,EAAaR,MAAMC,KAAKQ,SAASlC,iBAAiB,gCAAA1C,OAAgCgD,EAAMO,aAAa,QAAO,QAClH,IAAMsB,EAAeF,EAAWG,MAAK,SAACC,GAAa,OAAAA,EAAStB,OAAT,IACnD,GAAIoB,EAAc,CAChBF,EAAWhC,SAAQ,SAACoC,GAClBA,EAAS7B,gBAAgB,W,KAK/B,IAAK,CAAC,YAAYI,SAASN,EAAMO,aAAa,UAAYX,EAAMoC,uBAAuB,YAAYxG,OAAQ,CACzGwE,EAAMC,aAAa,WAAY,G,SAG9B,CACLpI,EAAK0H,eAAeK,EAAME,QAAQN,UAClCI,EAAMC,UAAUlF,IAAI,UACpB9C,EAAKkI,cAAcH,E,MAK3BN,EAAArF,UAAAgI,mBAAA,eAAApK,EAAAC,KACEA,KAAK2H,KAAKC,iBAAiB,oBAAoBC,SAAQ,SAACC,G,MAEtD,IAAIsC,GAAa/B,EAAAP,IAAK,MAALA,SAAK,SAALA,EAAOE,WAAO,MAAAK,SAAA,SAAAA,EAAEY,SAASH,QAAQ,mBAAoB,MAAMI,OAC5E,IAAKkB,EAAY,CACf,M,CAGFrK,EAAK6I,cAAc,CACjBC,OAAQ9I,EAAK4H,KAAK0C,cAAc,WAAaD,EAAa,O,KAKhE5C,EAAArF,UAAA4D,OAAA,WACE,OACElC,EAACmC,EAAI,KACHnC,EAAA,a,yHAnH2B,G"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Crafted with ❤ by Salla
|
|
3
|
+
*/
|
|
4
|
+
import{r as e,c as t,h as s,H as i,g as a}from"./p-bdd00808.js";const n=`\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar-time</title>\n<path d="M22.667 17.333c-0.737 0-1.333 0.596-1.333 1.333v2.667h-2.667c-0.737 0-1.333 0.596-1.333 1.333s0.596 1.333 1.333 1.333h4c0.737 0 1.333-0.596 1.333-1.333v-4c0-0.737-0.596-1.333-1.333-1.333zM28 2.667h-2.667v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.596-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h5.363c0.737 0 1.333-0.596 1.333-1.333s-0.596-1.333-1.333-1.333h-5.363c-0.736 0-1.333-0.597-1.333-1.333v-21.333c0-0.736 0.597-1.333 1.333-1.333h2.667v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333v2.696c0 0.736 0.596 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.696c0-2.205-1.795-4-4-4zM22 12c-5.515 0-10 4.485-10 10s4.485 10 10 10 10-4.485 10-10-4.485-10-10-10zM22 29.333c-4.043 0-7.333-3.291-7.333-7.333s3.291-7.333 7.333-7.333 7.333 3.291 7.333 7.333-3.291 7.333-7.333 7.333z"></path>\n</svg>\n`;const o=`\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>calendar</title>\n<path d="M28 2.667h-2.667v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-13.333v-1.333c0-0.736-0.597-1.333-1.333-1.333s-1.333 0.597-1.333 1.333v1.333h-2.667c-2.205 0-4 1.795-4 4v21.333c0 2.205 1.795 4 4 4h24c2.205 0 4-1.795 4-4v-21.333c0-2.205-1.795-4-4-4zM29.333 28c0 0.736-0.599 1.333-1.333 1.333h-24c-0.736 0-1.333-0.599-1.333-1.333v-13.333h26.667zM29.333 12h-26.667v-5.333c0-0.736 0.599-1.333 1.333-1.333h2.667v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h13.333v2.667c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-2.667h2.667c0.736 0 1.333 0.599 1.333 1.333z"></path>\n</svg>\n`;const l=`\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>time</title>\n<path d="M16 0c-8.823 0-16 7.177-16 16s7.177 16 16 16 16-7.177 16-16-7.177-16-16-16zM16 29.333c-7.352 0-13.333-5.981-13.333-13.333s5.981-13.333 13.333-13.333 13.333 5.981 13.333 13.333-5.981 13.333-13.333 13.333zM16 8c-0.736 0-1.333 0.596-1.333 1.333v6.667h-4c-0.736 0-1.333 0.596-1.333 1.333s0.597 1.333 1.333 1.333h5.333c0.736 0 1.333-0.596 1.333-1.333v-8c0-0.737-0.597-1.333-1.333-1.333z"></path>\n</svg>\n`;const r=":host{display:block}";const c=class{constructor(s){e(this,s);this.invalidInput=t(this,"invalidInput",7);this.reservationsInput=undefined;this.option=undefined;this.productId=undefined;this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment","حجز موعد");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment","تعديل الموعد");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully","تمت اضافة الموعد بنجاح");this.selectDate=salla.lang.get("pages.cart.select_appointment_date","حدد تاريخ الموعد");this.bookingUrl="";this.iframeReady=false;this.reservations=[];salla.lang.onLoaded((()=>{const e=(e,t,s)=>new Promise((i=>{salla.helpers.setNested(salla.lang.messages[e],t,s);i(true)}));const t=async()=>{await e("ar.trans","pages.cart.book_an_appointment","حجز موعد");await e("en.trans","pages.cart.book_an_appointment","Book an Appointment");await e("ar.trans","pages.cart.edit_an_appointment","تعديل الموعد");await e("en.trans","pages.cart.edit_an_appointment","Edit an Appointment");await e("ar.trans","pages.cart.booked_successfully","تمت اضافة الموعد بنجاح");await e("en.trans","pages.cart.booked_successfully","Booked Successfully");await e("ar.trans","pages.cart.select_appointment_date","حدد تاريخ الموعد");await e("en.trans","pages.cart.select_appointment_date","Select appointment date");this.bookNowLabel=salla.lang.get("pages.cart.book_an_appointment");this.editLabel=salla.lang.get("pages.cart.edit_an_appointment");this.bookedLabel=salla.lang.get("pages.cart.booked_successfully");this.selectDate=salla.lang.get("pages.cart.select_appointment_date")};t()}));Salla.event.on("booking::open",(e=>{if(e.id!==this.productId){return}this.bookingUrl=salla.url.addParamToUrl("product_id",e.id,e.url);this.iframeReady=true;setTimeout((()=>{this.modal.setTitle(this.selectDate);this.modal.open()}),100)}))}openBookingModal(e){e.preventDefault();if(salla.config.isGuest()){salla.auth.api.setAfterLoginEvent("booking::open",this.productId);salla.event.dispatch("login::open");return}return salla.booking.add(this.productId,false).then((e=>{if(e.data.redirect.to!=="booking"){throw new Error("Unexpected redirect!")}salla.event.dispatch("booking::open",{url:e.data.redirect.url,id:this.productId})})).catch((e=>{salla.error(salla.lang.get("common.errors.error_occurred"));salla.logger.error(e.response)}))}componentWillLoad(){if(this.option&&this.option.details.length){this.reservations=this.option.details}}bookingModal(){return s("salla-modal",{class:"s-booking-field-modal",ref:e=>this.modal=e,width:"md",position:"middle",noPadding:true,isClosable:false},s("iframe",{ref:e=>this.iframe=e,src:this.bookingUrl,frameborder:"0"}))}componentDidLoad(){window.addEventListener("message",(e=>{if(e.data.source!="booking"){return}let t=e.data.type;let s=e.data.message;localStorage.getItem("debug")&&console.log(`recived an action:${t}`,e.data);if(t=="error"){salla.notify.error(s.fields.reservations[0])}if(t=="success"){if(Number(s.productId)!==Number(this.productId)){return}this.reservations=s.data.reservations;salla.notify.success(this.bookedLabel);if(!this.modal){return}this.modal.close()}if(t=="height"){if(!this.iframe){return}return this.iframe.height=(s===null||s===void 0?void 0:s.height)+"px"}}));this.reservationsInput.addEventListener("invalid",(e=>{this.invalidInput.emit(e)}));this.reservationsInput.addEventListener("input",(()=>{this.reservationsInput.setCustomValidity("");this.reservationsInput.reportValidity()}))}render(){return s(i,null,s("div",{class:"s-booking-field-main"},s("div",{class:"s-booking-field-price"},s("span",null,salla.money(this.option.price))),s("salla-button",{class:"s-booking-field-book-now",size:"small",loaderPosition:"center",fill:"outline",onClick:e=>this.openBookingModal(e)},s("span",{class:"s-booking-field-book-now-content"},s("span",{innerHTML:n}),this.reservations.length?this.editLabel:this.bookNowLabel))),this.reservations.length?s("div",{class:"s-booking-field-reservations"},this.reservations.map(((e,t)=>s("div",{key:t,class:"s-booking-field-reservations-item"},this.renderReservationDate(e),this.renderReservationTime(e))))):"",s("input",{class:"s-hidden",name:this.option.name,required:this.option.required,value:JSON.stringify(this.reservations)==="[]"?"":JSON.stringify(this.reservations),ref:e=>this.reservationsInput=e}),this.iframeReady&&this.bookingModal())}renderReservationDate(e){return s("span",{class:e.from_timestamp?"s-booking-field-reservations-has-time":""},s("i",{class:"s-booking-field-reservations-icon",innerHTML:o}),e.date)}renderReservationTime(e){if(!e.from_timestamp){return""}return s("span",{class:"s-booking-field-reservations-time"},s("i",{class:"s-booking-field-reservations-icon",innerHTML:l}),s("span",null," ",e.from_timestamp," - ",e.to_timestamp))}get host(){return a(this)}};c.style=r;const h=class{constructor(t){e(this,t)}hideAllOptions(e){this.host.querySelectorAll(`[data-show-when^="options[${e}"]`).forEach((e=>{e.classList.add("hidden");this.hideAllOptions(e.dataset.optionId);this.disableInputs(e)}))}disableInputs(e){e.querySelectorAll("[name]").forEach((e=>{var t;e.setAttribute("disabled","");e.removeAttribute("required");if(((t=e===null||e===void 0?void 0:e.tagName)===null||t===void 0?void 0:t.toLowerCase())==="select"){e.value=""}if(["checkbox"].includes(e.getAttribute("type"))&&e.hasOwnProperty("checked")){e.checked=false}}))}changeHandler(e){var t;salla.event.emit("salla-onditional-fields::change",e);salla.log("Received the change event: ",e);if(!e.target||!["SELECT"].includes(e.target.tagName)&&!["checkbox"].includes(e.target.getAttribute("type"))){salla.log("Ignore the change because is not support input: "+(((t=e===null||e===void 0?void 0:e.target)===null||t===void 0?void 0:t.tagName)||"N/A"));return}let s=e.target.name.replace("[]","");let i=e.target.getAttribute("type")==="checkbox";salla.log("Trying to find all the element with condition:",`[data-show-when^="${s}"]`);this.host.querySelectorAll(`[data-show-when^="${s}"]`).forEach((t=>{let s=!(t===null||t===void 0?void 0:t.dataset.showWhen.includes("!="));let a=t===null||t===void 0?void 0:t.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$3").trim();let n;if(i){let t=Array.from(this.host.querySelectorAll(`input[name="${e.target.name}"]:checked`),(e=>e===null||e===void 0?void 0:e.value));n=t.includes(a.toString())}else{n=a===e.target.value}salla.log("The input is ",i?"Multiple":"Single"," value:",n);let o=s&&n||!s&&!n;if(o){t.classList.remove("hidden");t.querySelectorAll("[name]").forEach((e=>{e.removeAttribute("disabled");const s=e.closest(".s-product-options-option");if(s.dataset.optionRequired==="true"){e.setAttribute("required","")}if(e.getAttribute("type")==="checkbox"){const t=Array.from(document.querySelectorAll(`input[type="checkbox"][name="${e.getAttribute("name")}"]`));const s=t.some((e=>e.checked));if(s){t.forEach((e=>{e.removeAttribute("required")}))}}if(!["checkbox"].includes(e.getAttribute("type"))&&t.getElementsByClassName("required").length){e.setAttribute("required","")}}))}else{this.hideAllOptions(t.dataset.optionId);t.classList.add("hidden");this.disableInputs(t)}}))}componentDidRender(){this.host.querySelectorAll(`[data-show-when]`).forEach((e=>{var t;let s=(t=e===null||e===void 0?void 0:e.dataset)===null||t===void 0?void 0:t.showWhen.replace(/(.*)(=|!=)(.*)/gm,"$1").trim();if(!s){return}this.changeHandler({target:this.host.querySelector('[name^="'+s+'"]')})}))}render(){return s(i,null,s("slot",null))}get host(){return a(this)}};export{c as salla_booking_field,h as salla_conditional_fields};
|
|
5
|
+
//# sourceMappingURL=p-47574f56.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["sallaBookingFieldCss","SallaBookingField","constructor","hostRef","salla","lang","get","onLoaded","setNestedAsync","key","value","Promise","resolve","helpers","setNested","messages","setTranslations","async","this","bookNowLabel","editLabel","bookedLabel","selectDate","Salla","event","on","data","id","productId","bookingUrl","url","addParamToUrl","iframeReady","setTimeout","modal","setTitle","open","openBookingModal","preventDefault","config","isGuest","auth","api","setAfterLoginEvent","dispatch","booking","add","then","resp","redirect","to","Error","catch","error","logger","response","componentWillLoad","option","details","length","reservations","bookingModal","h","class","ref","width","position","noPadding","isClosable","iframe","src","frameborder","componentDidLoad","window","addEventListener","source","action","type","message","localStorage","getItem","console","log","notify","fields","Number","success","close","height","reservationsInput","e","invalidInput","emit","setCustomValidity","reportValidity","render","Host","money","price","size","loaderPosition","fill","onClick","innerHTML","BookingTime","map","reservation","index","renderReservationDate","renderReservationTime","name","required","JSON","stringify","from_timestamp","Calendar","date","TimeIcon","to_timestamp","SallaConditionalFields","hideAllOptions","optionId","host","querySelectorAll","forEach","field","classList","dataset","disableInputs","input","setAttribute","removeAttribute","_a","tagName","toLowerCase","includes","getAttribute","hasOwnProperty","checked","changeHandler","target","replace","isMultiple","isEqual","showWhen","trim","isSelected","selectedValues","Array","from","toString","showTheInput","remove","closestProductOption","closest","optionRequired","checkboxes","document","isAnyChecked","some","checkbox","getElementsByClassName","componentDidRender","optionName","querySelector"],"sources":["src/components/salla-booking-field/salla-booking-field.scss?tag=salla-booking-field","src/components/salla-booking-field/salla-booking-field.tsx","src/components/salla-conditional-fields/salla-conditional-fields.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, Prop, h, Element, State, Event, EventEmitter } from '@stencil/core';\nimport { Option, Reservation } from './interfaces';\nimport BookingTime from '../../assets/svg/calendar-time.svg';\nimport Calendar from '../../assets/svg/calendar.svg';\nimport TimeIcon from '../../assets/svg/time.svg';\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss'\n})\nexport class SallaBookingField {\n constructor() {\n salla.lang.onLoaded(() => {\n const setNestedAsync = (lang, key, value) => {\n return new Promise((resolve) => {\n salla.helpers.setNested(salla.lang.messages[lang], key, value);\n resolve(true);\n });\n };\n\n const setTranslations = async () => {\n await setNestedAsync('ar.trans', 'pages.cart.book_an_appointment', 'حجز موعد');\n await setNestedAsync('en.trans', 'pages.cart.book_an_appointment', 'Book an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.edit_an_appointment', 'تعديل الموعد');\n await setNestedAsync('en.trans', 'pages.cart.edit_an_appointment', 'Edit an Appointment');\n await setNestedAsync('ar.trans', 'pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n await setNestedAsync('en.trans', 'pages.cart.booked_successfully', 'Booked Successfully');\n await setNestedAsync('ar.trans', 'pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n await setNestedAsync('en.trans', 'pages.cart.select_appointment_date', 'Select appointment date');\n\n \n this.bookNowLabel = salla.lang.get('pages.cart.book_an_appointment');\n this.editLabel = salla.lang.get('pages.cart.edit_an_appointment');\n this.bookedLabel = salla.lang.get('pages.cart.booked_successfully');\n this.selectDate = salla.lang.get('pages.cart.select_appointment_date');\n };\n\n setTranslations();\n });\n\n Salla.event.on('booking::open', (data) => {\n if (data.id !== this.productId) {\n return\n }\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate)\n this.modal.open();\n }, 100);\n });\n\n }\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n @State() reservationsInput: HTMLInputElement;\n @Prop() option: Option;\n @Prop() productId: Number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private openBookingModal(event) {\n event.preventDefault();\n if (salla.config.isGuest()) {\n salla.auth.api.setAfterLoginEvent('booking::open', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n return salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response);\n });\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details\n }\n }\n private bookingModal() {\n return (\n <salla-modal class=\"s-booking-field-modal\" ref={modal => this.modal = modal} width=\"md\" position=\"middle\" noPadding isClosable={false}>\n <iframe\n ref={iframe => this.iframe = iframe}\n src={this.bookingUrl}\n frameborder=\"0\">\n </iframe>\n </salla-modal>\n )\n }\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"booking\") {\n return;\n }\n let action = event.data.type;\n let value = event.data.message;\n localStorage.getItem('debug') && console.log(`recived an action:${action}`, event.data);\n if (action == 'error') {\n salla.notify.error(value.fields.reservations[0]);\n }\n\n if (action == 'success') {\n if (Number(value.productId) !== Number(this.productId)) {\n return;\n }\n this.reservations = value.data.reservations;\n salla.notify.success(this.bookedLabel);\n if (!this.modal) {\n return;\n }\n this.modal.close();\n }\n\n if (action == \"height\") {\n if (!this.iframe) {\n return\n }\n return this.iframe.height = value?.height + \"px\";\n }\n\n });\n\n this.reservationsInput.addEventListener('invalid', e => {\n this.invalidInput.emit(e);\n });\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div>\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition='center' fill=\"outline\" onClick={event => this.openBookingModal(event)}>\n <span class=\"s-booking-field-book-now-content\">\n <span innerHTML={BookingTime}></span>\n {this.reservations.length ? this.editLabel : this.bookNowLabel}\n </span>\n </salla-button>\n </div>\n {this.reservations.length ? (\n <div class=\"s-booking-field-reservations\">\n {this.reservations.map((reservation, index) => (\n <div key={index} class=\"s-booking-field-reservations-item\">\n {this.renderReservationDate(reservation)}\n {this.renderReservationTime(reservation)}\n\n </div>\n ))}\n </div>\n ) : ''}\n <input class=\"s-hidden\" name={this.option.name} required={this.option.required} value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return <span class={reservation.from_timestamp ? 's-booking-field-reservations-has-time' : ''}>\n <i class=\"s-booking-field-reservations-icon\" innerHTML={Calendar}></i>\n {reservation.date}\n </span>;\n }\n\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) {\n return '';\n }\n return <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span> {reservation.from_timestamp} - {reservation.to_timestamp}</span>\n </span>\n }\n}\n","import { Component, Element, Host, Listen, h } from '@stencil/core';\n\n/**\n * its to easy to use, currenlty its support select & checkbox input as trigger for show/hide the dom\n * the dom you can put it like this data-show-when=\"{name of the field} {= or !=} {value of the field}\"\n */\n@Component({\n tag: 'salla-conditional-fields'\n})\nexport class SallaConditionalFields {\n\n @Element() host: HTMLElement;\n\n private hideAllOptions(optionId) {\n this.host.querySelectorAll(`[data-show-when^=\"options[${optionId}\"]`).forEach((field: HTMLElement) => {\n field.classList.add('hidden');\n this.hideAllOptions(field.dataset.optionId);\n this.disableInputs(field);\n });\n }\n\n private disableInputs(field) {\n field.querySelectorAll('[name]').forEach((input) => {\n\n input.setAttribute('disabled', '');\n input.removeAttribute('required');\n if (input?.tagName?.toLowerCase() === 'select') {\n input.value = ''\n }\n if (['checkbox'].includes(input.getAttribute('type')) && input.hasOwnProperty('checked')) {\n // @ts-ignore\n input.checked = false;\n }\n });\n }\n \n @Listen('change')\n changeHandler(event) {\n salla.event.emit('salla-onditional-fields::change', event);\n salla.log('Received the change event: ', event);\n\n if (!event.target || !['SELECT'].includes(event.target.tagName) && !['checkbox'].includes(event.target.getAttribute('type'))) {\n salla.log('Ignore the change because is not support input: ' + (event?.target?.tagName || 'N/A'));\n return;\n }\n\n // to extract the option id from the input name, the supported names are name[*] and name[*][]\n let optionId = event.target.name.replace('[]', '');\n let isMultiple = event.target.getAttribute('type') === 'checkbox';\n\n\n salla.log('Trying to find all the element with condition:', `[data-show-when^=\"${optionId}\"]`);\n\n this.host.querySelectorAll(`[data-show-when^=\"${optionId}\"]`)\n .forEach((field: HTMLElement) => {\n let isEqual = !field?.dataset.showWhen.includes('!=');\n let value = field?.dataset.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$3').trim();\n // let isSelected = isMultiple ? event.target?.checked : value === event.target.value;\n let isSelected;\n\n if (isMultiple) {\n // @ts-ignore\n let selectedValues = Array.from(this.host.querySelectorAll(`input[name=\"${event.target.name}\"]:checked`), e => e?.value);\n isSelected = selectedValues.includes(value.toString());\n } else {\n isSelected = value === event.target.value;\n }\n\n salla.log('The input is ', (isMultiple ? 'Multiple' : 'Single'), ' value:', isSelected);\n\n let showTheInput = (isEqual && isSelected) || (!isEqual && !isSelected);\n if (showTheInput) {\n field.classList.remove('hidden');\n field.querySelectorAll('[name]').forEach((input) => {\n input.removeAttribute('disabled');\n\n\n // Return required attribute to the input if the option is required\n const closestProductOption = (input as HTMLInputElement).closest('.s-product-options-option') as HTMLElement;\n if (closestProductOption.dataset.optionRequired === 'true') {\n input.setAttribute('required', '');\n }\n\n\n // Handle multiple checkboxes with same name and required attribute \n if (input.getAttribute('type') === 'checkbox') {\n const checkboxes = Array.from(document.querySelectorAll(`input[type=\"checkbox\"][name=\"${input.getAttribute('name')}\"]`)) as HTMLInputElement[];\n const isAnyChecked = checkboxes.some((checkbox) => checkbox.checked); \n if (isAnyChecked) {\n checkboxes.forEach((checkbox) => {\n checkbox.removeAttribute('required');\n });\n }\n }\n //To handle focus on hidden input error\n if (!['checkbox'].includes(input.getAttribute('type')) && field.getElementsByClassName('required').length) {\n input.setAttribute('required', '');\n }\n });\n } else {\n this.hideAllOptions(field.dataset.optionId);\n field.classList.add('hidden');\n this.disableInputs(field);\n }\n });\n }\n\n componentDidRender() {\n this.host.querySelectorAll(`[data-show-when]`).forEach((field) => {\n // @ts-ignore\n let optionName = field?.dataset?.showWhen.replace(/(.*)(=|!=)(.*)/gm, '$1').trim();\n if (!optionName) {\n return;\n }\n\n this.changeHandler({\n target: this.host.querySelector('[name^=\"' + optionName + '\"]')\n })\n });\n }\n\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
|