@salla.sa/twilight-components 2.13.86 → 2.13.88
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.map +1 -1
- package/dist/cjs/salla-booking-field_2.cjs.entry.js +1 -1
- package/dist/cjs/salla-booking-field_2.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-filters-widget.cjs.entry.js +1 -1
- package/dist/cjs/salla-filters-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-product-options.cjs.entry.js +1 -1
- package/dist/cjs/salla-product-options.cjs.entry.js.map +1 -1
- package/dist/collection/components/salla-booking-field/salla-booking-field.js +1 -1
- package/dist/collection/components/salla-booking-field/salla-booking-field.js.map +1 -1
- package/dist/collection/components/salla-filters-widget/salla-filters-widget.js +1 -1
- package/dist/collection/components/salla-filters-widget/salla-filters-widget.js.map +1 -1
- package/dist/collection/components/salla-product-options/salla-product-options.js +1 -1
- package/dist/collection/components/salla-product-options/salla-product-options.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/salla-booking-field2.js +1 -1
- package/dist/components/salla-booking-field2.js.map +1 -1
- package/dist/components/salla-filters-widget2.js +1 -1
- package/dist/components/salla-filters-widget2.js.map +1 -1
- package/dist/components/salla-product-options.js +1 -1
- package/dist/components/salla-product-options.js.map +1 -1
- 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.map +1 -1
- package/dist/esm/salla-booking-field_2.entry.js +1 -1
- package/dist/esm/salla-booking-field_2.entry.js.map +1 -1
- package/dist/esm/salla-filters-widget.entry.js +1 -1
- package/dist/esm/salla-filters-widget.entry.js.map +1 -1
- package/dist/esm/salla-product-options.entry.js +1 -1
- package/dist/esm/salla-product-options.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.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/esm-es5/salla-filters-widget.entry.js +1 -1
- package/dist/esm-es5/salla-filters-widget.entry.js.map +1 -1
- package/dist/esm-es5/salla-product-options.entry.js +1 -1
- package/dist/esm-es5/salla-product-options.entry.js.map +1 -1
- package/dist/twilight/{p-edee796d.system.entry.js → p-1b730cf7.system.entry.js} +2 -2
- package/dist/twilight/p-1b730cf7.system.entry.js.map +1 -0
- package/dist/twilight/p-411485fc.entry.js.map +1 -1
- package/dist/twilight/p-4a9df09e.js.map +1 -1
- package/dist/twilight/p-4c2194e3.system.js.map +1 -1
- package/dist/twilight/p-4e795693.system.entry.js.map +1 -1
- package/dist/twilight/p-54e1a882.system.js +1 -1
- package/dist/twilight/{p-f904674c.system.entry.js → p-5ba21699.system.entry.js} +2 -2
- package/dist/twilight/p-5ba21699.system.entry.js.map +1 -0
- package/dist/twilight/p-6cce417a.entry.js +5 -0
- package/dist/twilight/p-6cce417a.entry.js.map +1 -0
- package/dist/twilight/p-a642b326.system.entry.js +5 -0
- package/dist/twilight/{p-f0c9a140.system.entry.js.map → p-a642b326.system.entry.js.map} +1 -1
- package/dist/twilight/p-bd26e79e.entry.js +5 -0
- package/dist/twilight/{p-5a27af8a.entry.js.map → p-bd26e79e.entry.js.map} +1 -1
- package/dist/twilight/{p-bebc6fdf.entry.js → p-e82c0359.entry.js} +2 -2
- package/dist/twilight/p-e82c0359.entry.js.map +1 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/package.json +5 -5
- package/dist/twilight/p-5a27af8a.entry.js +0 -5
- package/dist/twilight/p-79e07ffc.entry.js +0 -5
- package/dist/twilight/p-79e07ffc.entry.js.map +0 -1
- package/dist/twilight/p-bebc6fdf.entry.js.map +0 -1
- package/dist/twilight/p-edee796d.system.entry.js.map +0 -1
- package/dist/twilight/p-f0c9a140.system.entry.js +0 -5
- package/dist/twilight/p-f904674c.system.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.priceLabel=salla.lang.get("pages.products.price");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.priceLabel=salla.lang.get("pages.products.price");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,this.priceLabel),h("span",null,salla.money(this.option.price))),h("salla-button",{class:"s-booking-field-book-now",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.priceLabel=salla.lang.get("pages.products.price");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.priceLabel=salla.lang.get("pages.products.price");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,this.priceLabel),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","priceLabel","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","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 this.priceLabel = salla.lang.get('pages.products.price');\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() priceLabel: string = salla.lang.get('pages.products.price');\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>{this.priceLabel}</span>\n <span>{salla.money(this.option.price)}</span>\n </div>\n <salla-button class=\"s-booking-field-book-now\" 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","priceLabel","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 this.priceLabel = salla.lang.get('pages.products.price');\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() priceLabel: string = salla.lang.get('pages.products.price');\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>{this.priceLabel}</span>\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,5 +1,5 @@
|
|
|
1
1
|
var __awaiter=this&&this.__awaiter||function(t,e,i,n){function s(t){return t instanceof i?t:new i((function(e){e(t)}))}return new(i||(i=Promise))((function(i,r){function o(t){try{l(n.next(t))}catch(t){r(t)}}function a(t){try{l(n["throw"](t))}catch(t){r(t)}}function l(t){t.done?i(t.value):s(t.value).then(o,a)}l((n=n.apply(t,e||[])).next())}))};var __generator=this&&this.__generator||function(t,e){var i={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},n,s,r,o;return o={next:a(0),throw:a(1),return:a(2)},typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o;function a(t){return function(e){return l([t,e])}}function l(a){if(n)throw new TypeError("Generator is already executing.");while(o&&(o=0,a[0]&&(i=0)),i)try{if(n=1,s&&(r=a[0]&2?s["return"]:a[0]?s["throw"]||((r=s["return"])&&r.call(s),0):s.next)&&!(r=r.call(s,a[1])).done)return r;if(s=0,r)a=[a[0]&2,r.value];switch(a[0]){case 0:case 1:r=a;break;case 4:i.label++;return{value:a[1],done:false};case 5:i.label++;s=a[1];a=[0];continue;case 7:a=i.ops.pop();i.trys.pop();continue;default:if(!(r=i.trys,r=r.length>0&&r[r.length-1])&&(a[0]===6||a[0]===2)){i=0;continue}if(a[0]===3&&(!r||a[1]>r[0]&&a[1]<r[3])){i.label=a[1];break}if(a[0]===6&&i.label<r[1]){i.label=r[1];r=a;break}if(r&&i.label<r[2]){i.label=r[2];i.ops.push(a);break}if(r[2])i.ops.pop();i.trys.pop();continue}a=e.call(t,i)}catch(t){a=[6,t];s=0}finally{n=r=0}if(a[0]&5)throw a[1];return{value:a[0]?a[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";import{H as Helper}from"./Helper-bf538e34.js";import{F as FilterOptionTypes}from"./interfaces-3159d022.js";import"./anime.es-6b92d9cd.js";var sallaFiltersWidgetCss=":host{display:block}";var SallaFiltersWidget=function(){function t(t){registerInstance(this,t);this.changed=createEvent(this,"changed",7);this.initHeight=195;this.withLoadMore=undefined;this.filtersData=undefined;this.option=undefined;this.isOpen=true;this.isShowMore=false;this.showMoreLabel="عرض المزيد";this.showLessLabel="عرض أقل";this.page=salla.config.get("page")}t.prototype.connectedCallback=function(){var t=this;this.withLoadMore=this.option.key!="price"&&Array.isArray(this.option.values)&&this.option.values.length>8;salla.onReady((function(){t.page=salla.config.get("page")}));salla.lang.onLoaded((function(){t.showMoreLabel=salla.lang.getWithDefault("common.titles.more",t.showMoreLabel);t.showLessLabel=salla.lang.getWithDefault("common.elements.show_less",t.showLessLabel)}))};t.prototype.componentDidLoad=function(){this.widgetValues.scrollHeight<this.initHeight&&(this.withLoadMore=false);this.withLoadMore&&this.widgetValues&&(this.widgetValues.style.maxHeight="".concat(this.initHeight,"px"));this.widgetContent.style.height="".concat(this.widgetContent.scrollHeight,"px")};t.prototype.setWidgetHeight=function(t){if(t===void 0){t=250}return __awaiter(this,void 0,void 0,(function(){var e=this;return __generator(this,(function(i){this.widgetContent.removeAttribute("style");setTimeout((function(){var t=e.widgetContent.offsetHeight;e.widgetContent.style.height=t+"px"}),t);return[2]}))}))};t.prototype.reset=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){if(this.option.type===FilterOptionTypes.RANGE){this.priceRange.reset()}Array.from(this.host.querySelectorAll("input")).forEach((function(t){return t.checked=false}));return[2]}))}))};t.prototype.showMore=function(){return __awaiter(this,void 0,void 0,(function(){var t=this;return __generator(this,(function(e){this.isShowMore=!this.isShowMore;this.widgetContent.style.height="auto";this.widgetValues.style.maxHeight=this.isShowMore?"".concat(this.widgetValues.scrollHeight,"px"):"".concat(this.initHeight,"px");setTimeout((function(){t.widgetContent.style.height="".concat(t.widgetContent.scrollHeight,"px")}),400);return[2]}))}))};t.prototype.toggleWidget=function(){return __awaiter(this,void 0,void 0,(function(){var t=this;return __generator(this,(function(e){this.isOpen=!this.isOpen;Helper.toggleElementClassIf(this.widgetContent,"s-filters-widget-opened","s-filters-widget-closed",(function(){return t.isOpen}));return[2]}))}))};t.prototype.renderFilterOption=function(t){var e=this;if(![FilterOptionTypes.VALUES,FilterOptionTypes.MINIMUM,FilterOptionTypes.VARIANTS].includes(t.type)){return""}return t.values.map((function(i,n){var s=typeof i=="number"?i:i.key||i.value;return h("label",{class:"s-filters-label",htmlFor:"".concat(t.key,"-option-").concat(
|
|
4
|
+
*/import{r as registerInstance,c as createEvent,h,H as Host,g as getElement}from"./index-114c614f.js";import{H as Helper}from"./Helper-bf538e34.js";import{F as FilterOptionTypes}from"./interfaces-3159d022.js";import"./anime.es-6b92d9cd.js";var sallaFiltersWidgetCss=":host{display:block}";var SallaFiltersWidget=function(){function t(t){registerInstance(this,t);this.changed=createEvent(this,"changed",7);this.initHeight=195;this.withLoadMore=undefined;this.filtersData=undefined;this.option=undefined;this.isOpen=true;this.isShowMore=false;this.showMoreLabel="عرض المزيد";this.showLessLabel="عرض أقل";this.page=salla.config.get("page")}t.prototype.connectedCallback=function(){var t=this;this.withLoadMore=this.option.key!="price"&&Array.isArray(this.option.values)&&this.option.values.length>8;salla.onReady((function(){t.page=salla.config.get("page")}));salla.lang.onLoaded((function(){t.showMoreLabel=salla.lang.getWithDefault("common.titles.more",t.showMoreLabel);t.showLessLabel=salla.lang.getWithDefault("common.elements.show_less",t.showLessLabel)}))};t.prototype.componentDidLoad=function(){this.widgetValues.scrollHeight<this.initHeight&&(this.withLoadMore=false);this.withLoadMore&&this.widgetValues&&(this.widgetValues.style.maxHeight="".concat(this.initHeight,"px"));this.widgetContent.style.height="".concat(this.widgetContent.scrollHeight,"px")};t.prototype.setWidgetHeight=function(t){if(t===void 0){t=250}return __awaiter(this,void 0,void 0,(function(){var e=this;return __generator(this,(function(i){this.widgetContent.removeAttribute("style");setTimeout((function(){var t=e.widgetContent.offsetHeight;e.widgetContent.style.height=t+"px"}),t);return[2]}))}))};t.prototype.reset=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){if(this.option.type===FilterOptionTypes.RANGE){this.priceRange.reset()}Array.from(this.host.querySelectorAll("input")).forEach((function(t){return t.checked=false}));return[2]}))}))};t.prototype.showMore=function(){return __awaiter(this,void 0,void 0,(function(){var t=this;return __generator(this,(function(e){this.isShowMore=!this.isShowMore;this.widgetContent.style.height="auto";this.widgetValues.style.maxHeight=this.isShowMore?"".concat(this.widgetValues.scrollHeight,"px"):"".concat(this.initHeight,"px");setTimeout((function(){t.widgetContent.style.height="".concat(t.widgetContent.scrollHeight,"px")}),400);return[2]}))}))};t.prototype.toggleWidget=function(){return __awaiter(this,void 0,void 0,(function(){var t=this;return __generator(this,(function(e){this.isOpen=!this.isOpen;Helper.toggleElementClassIf(this.widgetContent,"s-filters-widget-opened","s-filters-widget-closed",(function(){return t.isOpen}));return[2]}))}))};t.prototype.renderFilterOption=function(t){var e=this;if(![FilterOptionTypes.VALUES,FilterOptionTypes.MINIMUM,FilterOptionTypes.VARIANTS].includes(t.type)){return""}return t.values.map((function(i,n){var s=typeof i=="number"?i:i.key||i.value;return h("label",{class:"s-filters-label",htmlFor:"".concat(t.key,"-option-").concat(s),key:"".concat(t.key,"-option-").concat(s)},h("input",{id:"".concat(t.key,"-option-").concat(s),name:t.key,type:"radio",checked:e.isSelectedOption(t,s),class:"s-filters-radio",onChange:function(i){return e.changed.emit({event:i,option:t,value:s})}}),e.getOptionLabel(t,i))}))};t.prototype.isSelectedOption=function(t,e){if(t.type===FilterOptionTypes.MINIMUM){return this.filtersData[t.key]==e}if(t.type===FilterOptionTypes.VARIANTS){return this.filtersData[t.type]&&this.filtersData[t.type][Object.keys(this.filtersData[t.type])[0]]==e}if(t.type===FilterOptionTypes.RANGE){return this.filtersData[t.key]&&this.filtersData[t.key].min==e.min&&this.filtersData[t.key].max==e.max}if(t.type===FilterOptionTypes.VALUES){return this.filtersData[t.key]&&Number(this.filtersData[t.key])==Number(e)}return false};t.prototype.getOptionLabel=function(t,e){if(t.key=="rating"){return h("salla-rating-stars",{size:"small",value:e})}var i=e.value||"null";return h("span",{class:"s-filters-option-name"},i)};t.prototype.render=function(){var t=this;return h(Host,{class:"s-filters-widget-container"},h("h3",{class:"s-filters-widget-title",onClick:function(){return t.toggleWidget()}},h("span",null,this.option.label),h("span",{class:"s-filters-widget-plusminus ".concat(this.isOpen?"s-filters-widget-plusminus-active":"")})),h("div",{class:"s-filters-widget-content",ref:function(e){return t.widgetContent=e}},h("div",{class:"s-filters-widget-values",ref:function(e){return t.widgetValues=e}},h("slot",null),this.option.type!==FilterOptionTypes.RANGE?this.renderFilterOption(this.option):h("salla-price-range",{onChanged:function(e){t.changed.emit(e.detail)},ref:function(e){return t.priceRange=e},filtersData:this.filtersData,option:this.option})),this.withLoadMore&&h("a",{class:"s-filters-widget-more",onClick:function(){return t.showMore()}},!this.isShowMore?this.showMoreLabel:this.showLessLabel)))};Object.defineProperty(t.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return t}();SallaFiltersWidget.style=sallaFiltersWidgetCss;export{SallaFiltersWidget as salla_filters_widget};
|
|
5
5
|
//# sourceMappingURL=salla-filters-widget.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sallaFiltersWidgetCss","SallaFiltersWidget","this","initHeight","salla","config","get","class_1","prototype","connectedCallback","_this","withLoadMore","option","key","Array","isArray","values","length","onReady","page","lang","onLoaded","showMoreLabel","getWithDefault","showLessLabel","componentDidLoad","widgetValues","scrollHeight","style","maxHeight","concat","widgetContent","height","setWidgetHeight","delay","removeAttribute","setTimeout","currentWidgetHeight","offsetHeight","reset","type","FilterOptionTypes","RANGE","priceRange","from","host","querySelectorAll","forEach","input","checked","showMore","isShowMore","toggleWidget","isOpen","Helper","toggleElementClassIf","renderFilterOption","VALUES","MINIMUM","VARIANTS","includes","map","filterOption","index","value","h","class","htmlFor","id","name","isSelectedOption","onChange","event","changed","emit","getOptionLabel","filtersData","Object","keys","min","max","Number","size","label","render","Host","onClick","ref","el","onChanged","detail","price"],"sources":["src/components/salla-filters-widget/salla-filters-widget.scss?tag=salla-filters-widget","src/components/salla-filters-widget/salla-filters-widget.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, h, Method, State, Prop, Event, Element } from '@stencil/core';\nimport Helper from '../../Helpers/Helper';\nimport { Filter, FilterOptionTypes } from \"../salla-filters/interfaces\";\n\n@Component({\n tag: 'salla-filters-widget',\n styleUrl: 'salla-filters-widget.scss',\n})\nexport class SallaFiltersWidget {\n @Element() host: HTMLElement;\n\n /**\n * Show more or less filter options.\n */\n @Prop({ mutable: true }) withLoadMore: boolean;\n\n /**\n * Selected filter options value.\n */\n @Prop({ reflect: true }) filtersData: object;\n\n /**\n * Filter option along with possible values.\n */\n @Prop({ reflect: true }) option: Filter;\n\n\n priceRange: HTMLSallaPriceRangeElement\n\n\n private widgetValues: HTMLElement;\n private widgetContent: HTMLDivElement;\n private initHeight: number = 195;\n\n @State() isOpen: boolean = true;\n @State() isShowMore: boolean = false;\n @State() showMoreLabel: string = \"عرض المزيد\";\n @State() showLessLabel: string = \"عرض أقل\";\n @State() page: any = salla.config.get('page');\n\n /**\n * Custom event emitted up on filter option selection changes.\n */\n @Event() changed: any;\n\n connectedCallback() {\n //lets be smart and don't show 5 and more link for 8 options\n this.withLoadMore = this.option.key != 'price' && Array.isArray(this.option.values) && this.option.values.length > 8;\n salla.onReady(() => {\n this.page = salla.config.get('page');\n })\n salla.lang.onLoaded(() => {\n this.showMoreLabel = salla.lang.getWithDefault('common.titles.more', this.showMoreLabel)\n this.showLessLabel = salla.lang.getWithDefault('common.elements.show_less', this.showLessLabel)\n })\n }\n\n componentDidLoad() {\n this.widgetValues.scrollHeight < this.initHeight && (this.withLoadMore = false);\n (this.withLoadMore && this.widgetValues) && (this.widgetValues.style.maxHeight = `${this.initHeight}px`);\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }\n\n /**\n * Asynchronously sets the height of a widget element to its current height, allowing for smooth transitions.\n * This function is often used in scenarios where the widget's content changes dynamically, and animating\n * the height adjustment is desired for a smoother user experience.\n *\n * @param {number} [delay=250] - Optional. The delay (in milliseconds) before updating the widget height.\n * Defaults to 250 milliseconds.\n *\n * @returns {Promise<void>} - A Promise that resolves once the widget height is set after the specified delay.\n *\n * @example\n * // Set widget height with the default delay (250 milliseconds)\n * await setWidgetHeight();\n *\n * // Set widget height with a custom delay (e.g., 500 milliseconds)\n * await setWidgetHeight(500);\n */\n @Method()\n async setWidgetHeight(delay = 250) {\n this.widgetContent.removeAttribute('style');\n setTimeout(() => {\n let currentWidgetHeight: number = this.widgetContent.offsetHeight;\n this.widgetContent.style.height = currentWidgetHeight + 'px';\n }, delay)\n }\n\n /**\n * Reset selected filter options.\n */\n @Method()\n async reset() {\n if (this.option.type === FilterOptionTypes.RANGE) {\n this.priceRange.reset()\n }\n Array.from(this.host.querySelectorAll('input')).forEach(input => input.checked = false);\n }\n\n\n /**\n * Action to show more or less filter options.\n */\n @Method()\n async showMore() {\n this.isShowMore = !this.isShowMore\n this.widgetContent.style.height = 'auto';\n this.widgetValues.style.maxHeight = this.isShowMore ? `${this.widgetValues.scrollHeight}px` : `${this.initHeight}px`;\n setTimeout(() => {\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }, 400); // get height after time of collapse animtion (duration-300)\n }\n\n /**\n * Action to toggle widget open or closed (expand/ collapse).\n */\n @Method()\n async toggleWidget() {\n this.isOpen = !this.isOpen;\n Helper.toggleElementClassIf(this.widgetContent, 's-filters-widget-opened', 's-filters-widget-closed', () => this.isOpen);\n }\n\n renderFilterOption(option: Filter) {\n if (![FilterOptionTypes.VALUES, FilterOptionTypes.MINIMUM, FilterOptionTypes.VARIANTS].includes(option.type)) {\n return '';\n }\n //@ts-ignore\n return option.values.map((filterOption, index) => {\n let value = typeof filterOption == 'number' ? filterOption : (filterOption.key || filterOption.value);\n\n return <label class=\"s-filters-label\" htmlFor={`${option.key}-option-${index}`}>\n <input\n id={`${option.key}-option-${index}`}\n name={option.key}\n type=\"radio\"\n checked={this.isSelectedOption(option, value)}\n class={`s-filters-radio`}\n onChange={event => this.changed.emit({ event, option, value })}\n />\n {this.getOptionLabel(option, filterOption)}\n </label>\n }\n )\n\n }\n private isSelectedOption(option: Filter, value: any): boolean {\n if (option.type === FilterOptionTypes.MINIMUM) {\n return this.filtersData[option.key] == value;\n }\n if (option.type === FilterOptionTypes.VARIANTS) {\n return this.filtersData[option.type] && this.filtersData[option.type][Object.keys(this.filtersData[option.type])[0]] == value;\n }\n if (option.type === FilterOptionTypes.RANGE) {\n\n return this.filtersData[option.key] && this.filtersData[option.key].min == value.min && this.filtersData[option.key].max == value.max;\n }\n\n if (option.type === FilterOptionTypes.VALUES) {\n return this.filtersData[option.key] && Number(this.filtersData[option.key]) == Number(value);\n }\n return false;\n }\n\n\n\n private getOptionLabel(option: Filter, filterOption) {\n if (option.key == 'rating') {\n //in amazon has stars & up, should we add it, to avoid those people who will come to say I selected 4 why I see 5 sars products\n return <salla-rating-stars size=\"small\" value={filterOption} />;\n }\n let label = filterOption.value || 'null';\n //label+=filterOption.count ? ` (${salla.helpers.number(filterOption.count)})` : '';\n return <span class=\"s-filters-option-name\">{label}</span>;\n }\n\n render() {\n return (\n <Host class=\"s-filters-widget-container\">\n <h3 class=\"s-filters-widget-title\" onClick={() => this.toggleWidget()}>\n <span>{this.option.label}</span>\n <span class={`s-filters-widget-plusminus ${this.isOpen ? 's-filters-widget-plusminus-active' : ''}`} />\n </h3>\n <div class=\"s-filters-widget-content\" ref={(el) => this.widgetContent = el}>\n <div class=\"s-filters-widget-values\" ref={(el) => this.widgetValues = el}>\n <slot />\n {\n this.option.type !== FilterOptionTypes.RANGE\n ? this.renderFilterOption(this.option)\n : <salla-price-range onChanged={(event) => {\n this.changed.emit(event.detail)\n }}\n ref={price => this.priceRange = price}\n filtersData={this.filtersData}\n option={this.option} />\n }\n </div>\n {this.withLoadMore &&\n <a class=\"s-filters-widget-more\"\n onClick={() => this.showMore()}>{!this.isShowMore ? this.showMoreLabel : this.showLessLabel}</a>\n }\n </div>\n </Host>\n );\n }\n\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["sallaFiltersWidgetCss","SallaFiltersWidget","this","initHeight","salla","config","get","class_1","prototype","connectedCallback","_this","withLoadMore","option","key","Array","isArray","values","length","onReady","page","lang","onLoaded","showMoreLabel","getWithDefault","showLessLabel","componentDidLoad","widgetValues","scrollHeight","style","maxHeight","concat","widgetContent","height","setWidgetHeight","delay","removeAttribute","setTimeout","currentWidgetHeight","offsetHeight","reset","type","FilterOptionTypes","RANGE","priceRange","from","host","querySelectorAll","forEach","input","checked","showMore","isShowMore","toggleWidget","isOpen","Helper","toggleElementClassIf","renderFilterOption","VALUES","MINIMUM","VARIANTS","includes","map","filterOption","index","value","h","class","htmlFor","id","name","isSelectedOption","onChange","event","changed","emit","getOptionLabel","filtersData","Object","keys","min","max","Number","size","label","render","Host","onClick","ref","el","onChanged","detail","price"],"sources":["src/components/salla-filters-widget/salla-filters-widget.scss?tag=salla-filters-widget","src/components/salla-filters-widget/salla-filters-widget.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Host, h, Method, State, Prop, Event, Element } from '@stencil/core';\nimport Helper from '../../Helpers/Helper';\nimport { Filter, FilterOptionTypes } from \"../salla-filters/interfaces\";\n\n@Component({\n tag: 'salla-filters-widget',\n styleUrl: 'salla-filters-widget.scss',\n})\nexport class SallaFiltersWidget {\n @Element() host: HTMLElement;\n\n /**\n * Show more or less filter options.\n */\n @Prop({ mutable: true }) withLoadMore: boolean;\n\n /**\n * Selected filter options value.\n */\n @Prop({ reflect: true }) filtersData: object;\n\n /**\n * Filter option along with possible values.\n */\n @Prop({ reflect: true }) option: Filter;\n\n\n priceRange: HTMLSallaPriceRangeElement\n\n\n private widgetValues: HTMLElement;\n private widgetContent: HTMLDivElement;\n private initHeight: number = 195;\n\n @State() isOpen: boolean = true;\n @State() isShowMore: boolean = false;\n @State() showMoreLabel: string = \"عرض المزيد\";\n @State() showLessLabel: string = \"عرض أقل\";\n @State() page: any = salla.config.get('page');\n\n /**\n * Custom event emitted up on filter option selection changes.\n */\n @Event() changed: any;\n\n connectedCallback() {\n //lets be smart and don't show 5 and more link for 8 options\n this.withLoadMore = this.option.key != 'price' && Array.isArray(this.option.values) && this.option.values.length > 8;\n salla.onReady(() => {\n this.page = salla.config.get('page');\n })\n salla.lang.onLoaded(() => {\n this.showMoreLabel = salla.lang.getWithDefault('common.titles.more', this.showMoreLabel)\n this.showLessLabel = salla.lang.getWithDefault('common.elements.show_less', this.showLessLabel)\n })\n }\n\n componentDidLoad() {\n this.widgetValues.scrollHeight < this.initHeight && (this.withLoadMore = false);\n (this.withLoadMore && this.widgetValues) && (this.widgetValues.style.maxHeight = `${this.initHeight}px`);\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }\n\n /**\n * Asynchronously sets the height of a widget element to its current height, allowing for smooth transitions.\n * This function is often used in scenarios where the widget's content changes dynamically, and animating\n * the height adjustment is desired for a smoother user experience.\n *\n * @param {number} [delay=250] - Optional. The delay (in milliseconds) before updating the widget height.\n * Defaults to 250 milliseconds.\n *\n * @returns {Promise<void>} - A Promise that resolves once the widget height is set after the specified delay.\n *\n * @example\n * // Set widget height with the default delay (250 milliseconds)\n * await setWidgetHeight();\n *\n * // Set widget height with a custom delay (e.g., 500 milliseconds)\n * await setWidgetHeight(500);\n */\n @Method()\n async setWidgetHeight(delay = 250) {\n this.widgetContent.removeAttribute('style');\n setTimeout(() => {\n let currentWidgetHeight: number = this.widgetContent.offsetHeight;\n this.widgetContent.style.height = currentWidgetHeight + 'px';\n }, delay)\n }\n\n /**\n * Reset selected filter options.\n */\n @Method()\n async reset() {\n if (this.option.type === FilterOptionTypes.RANGE) {\n this.priceRange.reset()\n }\n Array.from(this.host.querySelectorAll('input')).forEach(input => input.checked = false);\n }\n\n\n /**\n * Action to show more or less filter options.\n */\n @Method()\n async showMore() {\n this.isShowMore = !this.isShowMore\n this.widgetContent.style.height = 'auto';\n this.widgetValues.style.maxHeight = this.isShowMore ? `${this.widgetValues.scrollHeight}px` : `${this.initHeight}px`;\n setTimeout(() => {\n this.widgetContent.style.height = `${this.widgetContent.scrollHeight}px`;\n }, 400); // get height after time of collapse animtion (duration-300)\n }\n\n /**\n * Action to toggle widget open or closed (expand/ collapse).\n */\n @Method()\n async toggleWidget() {\n this.isOpen = !this.isOpen;\n Helper.toggleElementClassIf(this.widgetContent, 's-filters-widget-opened', 's-filters-widget-closed', () => this.isOpen);\n }\n\n renderFilterOption(option: Filter) {\n if (![FilterOptionTypes.VALUES, FilterOptionTypes.MINIMUM, FilterOptionTypes.VARIANTS].includes(option.type)) {\n return '';\n }\n //@ts-ignore\n return option.values.map((filterOption, index) => {\n let value = typeof filterOption == 'number' ? filterOption : (filterOption.key || filterOption.value);\n\n return <label class=\"s-filters-label\" htmlFor={`${option.key}-option-${value}`} key={`${option.key}-option-${value}`}>\n <input\n id={`${option.key}-option-${value}`}\n name={option.key}\n type=\"radio\"\n checked={this.isSelectedOption(option, value)}\n class={`s-filters-radio`}\n onChange={event => this.changed.emit({ event, option, value })}\n />\n {this.getOptionLabel(option, filterOption)}\n </label>\n }\n )\n\n }\n private isSelectedOption(option: Filter, value: any): boolean {\n if (option.type === FilterOptionTypes.MINIMUM) {\n return this.filtersData[option.key] == value;\n }\n if (option.type === FilterOptionTypes.VARIANTS) {\n return this.filtersData[option.type] && this.filtersData[option.type][Object.keys(this.filtersData[option.type])[0]] == value;\n }\n if (option.type === FilterOptionTypes.RANGE) {\n\n return this.filtersData[option.key] && this.filtersData[option.key].min == value.min && this.filtersData[option.key].max == value.max;\n }\n\n if (option.type === FilterOptionTypes.VALUES) {\n return this.filtersData[option.key] && Number(this.filtersData[option.key]) == Number(value);\n }\n return false;\n }\n\n\n\n private getOptionLabel(option: Filter, filterOption) {\n if (option.key == 'rating') {\n //in amazon has stars & up, should we add it, to avoid those people who will come to say I selected 4 why I see 5 sars products\n return <salla-rating-stars size=\"small\" value={filterOption} />;\n }\n let label = filterOption.value || 'null';\n //label+=filterOption.count ? ` (${salla.helpers.number(filterOption.count)})` : '';\n return <span class=\"s-filters-option-name\">{label}</span>;\n }\n\n render() {\n return (\n <Host class=\"s-filters-widget-container\">\n <h3 class=\"s-filters-widget-title\" onClick={() => this.toggleWidget()}>\n <span>{this.option.label}</span>\n <span class={`s-filters-widget-plusminus ${this.isOpen ? 's-filters-widget-plusminus-active' : ''}`} />\n </h3>\n <div class=\"s-filters-widget-content\" ref={(el) => this.widgetContent = el}>\n <div class=\"s-filters-widget-values\" ref={(el) => this.widgetValues = el}>\n <slot />\n {\n this.option.type !== FilterOptionTypes.RANGE\n ? this.renderFilterOption(this.option)\n : <salla-price-range onChanged={(event) => {\n this.changed.emit(event.detail)\n }}\n ref={price => this.priceRange = price}\n filtersData={this.filtersData}\n option={this.option} />\n }\n </div>\n {this.withLoadMore &&\n <a class=\"s-filters-widget-more\"\n onClick={() => this.showMore()}>{!this.isShowMore ? this.showMoreLabel : this.showLessLabel}</a>\n }\n </div>\n </Host>\n );\n }\n\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var __awaiter=this&&this.__awaiter||function(t,n,i,e){function o(t){return t instanceof i?t:new i((function(n){n(t)}))}return new(i||(i=Promise))((function(i,a){function r(t){try{s(e.next(t))}catch(t){a(t)}}function l(t){try{s(e["throw"](t))}catch(t){a(t)}}function s(t){t.done?i(t.value):o(t.value).then(r,l)}s((e=e.apply(t,n||[])).next())}))};var __generator=this&&this.__generator||function(t,n){var i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},e,o,a,r;return r={next:l(0),throw:l(1),return:l(2)},typeof Symbol==="function"&&(r[Symbol.iterator]=function(){return this}),r;function l(t){return function(n){return s([t,n])}}function s(l){if(e)throw new TypeError("Generator is already executing.");while(r&&(r=0,l[0]&&(i=0)),i)try{if(e=1,o&&(a=l[0]&2?o["return"]:l[0]?o["throw"]||((a=o["return"])&&a.call(o),0):o.next)&&!(a=a.call(o,l[1])).done)return a;if(o=0,a)l=[l[0]&2,a.value];switch(l[0]){case 0:case 1:a=l;break;case 4:i.label++;return{value:l[1],done:false};case 5:i.label++;o=l[1];l=[0];continue;case 7:l=i.ops.pop();i.trys.pop();continue;default:if(!(a=i.trys,a=a.length>0&&a[a.length-1])&&(l[0]===6||l[0]===2)){i=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]<a[3])){i.label=l[1];break}if(l[0]===6&&i.label<a[1]){i.label=a[1];a=l;break}if(a&&i.label<a[2]){i.label=a[2];i.ops.push(l);break}if(a[2])i.ops.pop();i.trys.pop();continue}l=n.call(t,i)}catch(t){l=[6,t];o=0}finally{e=a=0}if(l[0]&5)throw l[1];return{value:l[0]?l[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";import{C as CheckCircleIcon}from"./check-838f37a7.js";import{C as CameraIcon}from"./camera-d0a93c12.js";var DisplayType;(function(t){t["COLOR"]="color";t["DATE"]="date";t["DATETIME"]="datetime";t["DONATION"]="donation";t["IMAGE"]="image";t["MULTIPLE_OPTIONS"]="multiple-options";t["NUMBER"]="number";t["SINGLE_OPTION"]="single-option";t["SPLITTER"]="splitter";t["TEXT"]="text";t["TEXTAREA"]="textarea";t["THUMBNAIL"]="thumbnail";t["TIME"]="time";t["RADIO"]="radio";t["CHECKBOX"]="checkbox";t["MAP"]="map";t["FILE"]="file";t["COLOR_PICKER"]="color_picker";t["BOOKING"]="booking"})(DisplayType||(DisplayType={}));var Currency;(function(t){t["Sar"]="SAR"})(Currency||(Currency={}));var FileIcon='\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>file-upload</title>\n<path d="M21.333 24c0.341 0 0.683-0.131 0.943-0.391 0.521-0.521 0.521-1.364 0-1.885l-5.333-5.333c-0.123-0.123-0.271-0.22-0.433-0.288-0.327-0.135-0.693-0.135-1.019 0-0.163 0.068-0.311 0.165-0.433 0.288l-5.333 5.333c-0.521 0.521-0.521 1.364 0 1.885s1.364 0.521 1.885 0l3.057-3.057v10.115c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-10.115l3.057 3.057c0.26 0.26 0.601 0.391 0.943 0.391zM28.943 9.724l-9.333-9.333c-0.249-0.251-0.589-0.391-0.943-0.391h-12c-2.205 0-4 1.795-4 4v24c0 2.205 1.795 4 4 4h4c0.736 0 1.333-0.597 1.333-1.333s-0.597-1.333-1.333-1.333h-4c-0.735 0-1.333-0.599-1.333-1.333v-24c0-0.735 0.599-1.333 1.333-1.333h11.448l8.552 8.552v16.781c0 0.735-0.599 1.333-1.333 1.333h-4c-0.736 0-1.333 0.597-1.333 1.333s0.597 1.333 1.333 1.333h4c2.205 0 4-1.795 4-4v-17.333c0-0.353-0.14-0.693-0.391-0.943z"></path>\n</svg>\n';var sallaProductOptionsCss="";var SallaProductOptions=function(){function t(t){var n=this;registerInstance(this,t);this.changed=createEvent(this,"changed",7);this.fileTypes={pdf:"application/pdf",png:"image/png",jpg:"image/jpeg",word:"application/doc,application/ms-doc,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document",exl:"application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",txt:"text/plain"};this.outSkus=[];this.handleDonationOptions=function(t,i,e){if(i=="custom"&&e=="input"){salla.helpers.inputDigitsOnly(t.target);salla.event.emit("product-options::donation-changed",{id:n.productId,price:t.target.value});return}t.preventDefault();t.stopPropagation();n.isCustomDonation=t.target.value==="custom";if(n.donationInput){if(t.target.value==="custom"){n.donationInput.value="";n.donationInput.focus()}else{n.donationInput.value=t.target.value}if(i=="custom"){return}salla.event.emit("product-options::donation-changed",{id:n.productId,price:t.target.value})}};this.hideLabel=function(t){if(t.type===DisplayType.DONATION&&(t.donation&&!t.donation.can_donate)){return true}return false};this.getExpireDonationMessage=function(t){if(!t.donation){return}var n=t.donation.target_amount<=t.donation.collected_amount;return h("div",{class:{"s-product-options-donation-message":true,"s-product-options-donation-completed":n,"s-product-options-donation-expired":!n}},h("p",null,t.donation.target_message),h("span",null,n?salla.money(t.donation.target_amount):""))};this.optionsData=undefined;this.outOfStockText="";this.donationAmount=salla.lang.get("pages.products.donation_amount");this.selectDonationAmount=salla.lang.getWithDefault("pages.products.select_donation_amount","تحديد مبلغ التبرع");this.selectAmount=salla.lang.getWithDefault("pages.products.select_amount","اختر المبلغ");this.isCustomDonation=false;this.selectedOptions=[];this.canDisabled=undefined;this.selectedSkus=undefined;this.selectedOutSkus=undefined;this.productId=salla.config.get("page.id");this.options=undefined;this.canDisabled=!salla.config.get("store.settings.product.notify_options_availability");salla.lang.onLoaded((function(){n.outOfStockText=salla.lang.get("pages.products.out_of_stock");n.donationAmount=salla.lang.get("pages.products.donation_amount");n.selectDonationAmount=salla.lang.getWithDefault("pages.products.select_donation_amount","تحديد مبلغ التبرع");n.selectAmount=salla.lang.getWithDefault("pages.products.select_amount","اختر المبلغ")}));if(this.options){try{this.setOptionsData(Array.isArray(this.options)?this.options:JSON.parse(this.options));return}catch(t){salla.log("Bad json passed via options prop")}}if(!Array.isArray(this.optionsData)){salla.log("Options is not an array[] ---\x3e ",this.optionsData);this.setOptionsData([])}if(this.productId&&!salla.url.is_page("cart")){salla.api.product.getDetails(this.productId,["options"]).then((function(t){return n.setOptionsData(t.data.options)}))}}t.prototype.setOptionsData=function(t){var n,i;this.optionsData=t;var e=this;(i=(n=this.optionsData[0])===null||n===void 0?void 0:n.details)===null||i===void 0?void 0:i.forEach((function(t){Object.entries(t.skus_availability||{}).filter((function(t){return!t[1]})).map((function(t){return e.outSkus.push(Number(t[0]))}))}))};t.prototype.getSelectedOptionsData=function(){return __awaiter(this,void 0,void 0,(function(){var t,n;return __generator(this,(function(i){t={};n=this.host.getElementSallaData();n.forEach((function(n,i){i.startsWith("options[")&&(t[i.replace("options[","").replace("]","")]=n)}));return[2,t]}))}))};t.prototype.reportValidity=function(){return __awaiter(this,void 0,void 0,(function(){var t,n,i;return __generator(this,(function(e){t=this.host.querySelectorAll("[required]");n=true;for(i=0;i<t.length;i++){if("reportValidity"in t[i]&&!t[i].reportValidity()){n=false}}return[2,n]}))}))};t.prototype.hasOutOfStockOption=function(){return __awaiter(this,void 0,void 0,(function(){var t,n;var i=this;return __generator(this,(function(e){return[2,this.selectedOptions.some((function(t){return t.is_out}))||((t=this.selectedSkus)===null||t===void 0?void 0:t.length)&&((n=this.selectedSkus)===null||n===void 0?void 0:n.every((function(t){return i.outSkus.includes(t)})))]}))}))};t.prototype.getSelectedOptions=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){return[2,this.selectedOptions]}))}))};t.prototype.getOption=function(t){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){return[2,this.optionsData.find((function(n){return n.id===t}))]}))}))};t.prototype.invalidHandler=function(t,n){var i=t.target.closest(".s-product-options-option");if(!salla.url.is_page("cart")){i.scrollIntoView({behavior:"smooth",block:"center"})}i.classList.add("s-product-options-option-error")};t.prototype.changedHandler=function(t,n){var i={event:t,option:n,detail:null};if(n.details){var e=n.details.find((function(n){return Number(n.id)===Number(t.target.value)}));i.detail=e}var o=t.target.closest(".s-product-options-option");if(t.target.value||(n.type==DisplayType.FILE||n.type==DisplayType.IMAGE)&&t.type==="added"||n.type==DisplayType.MAP&&t.type==="selected"&&(t.target.lat&&t.target.lng)){setTimeout((function(){o.classList.remove("s-product-options-option-error")}),200)}var a=this.selectedOptions.findIndex((function(t){return t.option_id===i.option.id}));a>-1?this.selectedOptions[a]=Object.assign(Object.assign({},i.detail),{option_id:i.option.id}):this.selectedOptions.push(Object.assign(Object.assign({},i.detail),{option_id:i.option.id}));if(n.type==DisplayType.DONATION){salla.event.emit("product-options::donation-changed",{id:this.productId,price:t.target.value})}this.setSelectedSkus();this.handleRequiredMultipleOptions(n);this.changed.emit(i);salla.event.emit("product-options::change",i)};t.prototype.setSelectedSkus=function(){this.selectedSkus=this.selectedOptions.map((function(t){return Object.keys(t.skus_availability||{})})).reduce((function(t,n){return t.filter((function(t){return n.includes(t)}))})).map((function(t){return Number(t)}))};t.prototype.handleRequiredMultipleOptions=function(t){if(t.type!==DisplayType.MULTIPLE_OPTIONS||!t.required){return}var n=this.host.querySelector('[data-option-id="'.concat(t.id,'"]'));var i=n.querySelectorAll("input:checked").length;n.querySelectorAll("input").forEach((function(t){return t.toggleAttribute("required",!i)}))};t.prototype.getLatLng=function(t,n){return t?t.split(",")[n=="lat"?0:1]:""};t.prototype.getDisplayForType=function(t){var n=this;if(this["".concat(t.type,"Option")]){return this["".concat(t.type,"Option")](t)}if(t.type===DisplayType.COLOR_PICKER){return this.colorPickerOption(t)}if(t.type===DisplayType.MULTIPLE_OPTIONS){return this.multipleOptions(t)}if(t.type===DisplayType.SINGLE_OPTION){return this.singleOption(t)}if(t.type===DisplayType.BOOKING&&salla.config.get("page.slug")=="cart"){return h("salla-booking-field",{onInvalidInput:function(i){return n.invalidHandler(i,t)},option:t,productId:t.value})}salla.log("Couldn't find options type(".concat(t.type,")😢"));return""};t.prototype.getOptionShownWhen=function(t){return t.visibility_condition?{"data-show-when":"options[".concat(t.visibility_condition.option,"] ").concat(t.visibility_condition.operator," ").concat(t.visibility_condition.value)}:{}};t.prototype.componentWillLoad=function(){var t=this;this.outOfStockText=salla.lang.get("pages.products.out_of_stock");return salla.onReady((function(){var n=!salla.storage.get("cart.id")&&t.optionsData.some((function(t){return["file","image"].includes(t.type)}));return n?salla.api.cart.getCurrentCartId(false,"salla-product-options"):null}))};t.prototype.render=function(){var t=this;var n;if(((n=this.optionsData)===null||n===void 0?void 0:n.length)==0){return}return h(Host,{class:"s-product-options-wrapper"},h("salla-conditional-fields",null,this.optionsData.map((function(n){return h("div",Object.assign({class:"s-product-options-option-container".concat(n.visibility_condition?" hidden":""),"data-option-id":n.id},t.getOptionShownWhen(n)),n.name=="splitter"?t.splitterOption():h("div",{class:"s-product-options-option","data-option-type":n.type,"data-option-required":"".concat(n.required)},h("label",{htmlFor:"options["+n.id+"]",class:"s-product-options-option-label ".concat(t.hideLabel(n)?"s-product-options-option-label-hidden":"")},h("b",null,n.name,n.required&&h("span",null," * ")," "),h("small",null,n.placeholder)),h("div",{class:"s-product-options-option-content ".concat(t.hideLabel(n)?"s-product-options-option-content-full-width":"")},t.getDisplayForType(n))))}))))};t.prototype.componentDidLoad=function(){var t=this;var n,i;if(((n=this.optionsData)===null||n===void 0?void 0:n.length)==0&&!this.optionsData.some((function(t){return t.type==DisplayType.DONATION}))){return}var e=(i=this.optionsData.find((function(t){return t.type==DisplayType.DONATION})))===null||i===void 0?void 0:i.details.find((function(t){return t.is_selected}));if(!e){return}setTimeout((function(){salla.event.emit("product-options::donation-changed",{id:t.productId,price:e.additional_price})}),1e3)};t.prototype.donationOption=function(t,n){var i=this;var e,o;return h("div",{class:"s-product-options-donation-wrapper"},((e=t.donation)===null||e===void 0?void 0:e.can_donate)?[t.donation?h("div",{class:"s-product-options-donation-progress"},h("salla-progress-bar",{donation:t.donation})):"",t.details.length?[h("h4",null,this.selectAmount),h("div",{class:"s-product-options-donation-options"},t.details.map((function(t,n){return h("div",{class:"s-product-options-donation-options-item"},h("input",{id:"donation-option-".concat(n),type:"radio",name:"donating_option",checked:t.is_selected,value:t.additional_price,onChange:function(n){return i.handleDonationOptions(n,t,"option")}}),h("label",{htmlFor:"donation-option-".concat(n)},h("span",null,salla.money(t.name))))})),((o=t.donation)===null||o===void 0?void 0:o.custom_amount_enabled)?h("div",{class:"s-product-options-donation-options-item"},h("input",{id:"donation-option-custom",type:"radio",name:"donating_option",value:"custom",onChange:function(t){return i.handleDonationOptions(t,"custom","option")}}),h("label",{htmlFor:"donation-option-custom"},h("span",null," ",this.selectDonationAmount," "))):"")]:"",h("div",{class:{"s-product-options-donation-input-group":true,shown:!t.details.length||t.details.length&&this.isCustomDonation}},h("input",{type:"text",id:"donating-amount",name:"donation_amount",class:"s-form-control",ref:function(t){return i.donationInput=t},value:t.details.length&&t.details.some((function(t){return t.is_selected}))?t.details.find((function(t){return t.is_selected})).additional_price:t.value,placeholder:t.placeholder,onInput:function(t){return i.handleDonationOptions(t,"custom","input")},onBlur:function(n){return i.changedHandler(n,t)},onInvalid:function(n){return i.invalidHandler(n,t)}}),h("span",{class:"s-product-options-donation-amount-currency"},salla.config.currency(salla.config.get("user.currency_code")).symbol))]:this.getExpireDonationMessage(t))};t.prototype.fileUploader=function(t,n){var i=this;if(n===void 0){n=null}return h("salla-file-upload",Object.assign({},n||{},{"payload-name":"file",value:t.value,"instant-upload":true,name:"options[".concat(t.id,"]"),required:!t.visibility_condition&&t.required,height:"120px",onAdded:function(n){return i.changedHandler(n,t)},url:salla.cart.api.getUploadImageEndpoint(),"form-data":{cart_item_id:this.productId,product_id:this.productId},onInvalidInput:function(n){return i.invalidHandler(n,t)},class:{"s-product-options-image-input":true,required:t.required}}),h("div",{class:"s-product-options-filepond-placeholder"},h("span",{class:"s-product-options-filepond-placeholder-icon",innerHTML:n.accept&&n.accept.split(",").every((function(t){return t.includes("image")}))?CameraIcon:FileIcon}),h("p",{class:"s-product-options-filepond-placeholder-text"},salla.lang.get("common.uploader.drag_and_drop")),h("span",{class:"filepond--label-action"},salla.lang.get("common.uploader.browse"))))};t.prototype.imageOption=function(t){return this.fileUploader(t,{accept:"image/png,image/jpeg,image/jpg,image/gif"})};t.prototype.fileOption=function(t){var n=this;var i=t.details.map((function(t){return n.fileTypes[t.name]})).filter(Boolean);return(i===null||i===void 0?void 0:i.length)?this.fileUploader(t,{accept:i.join(",")}):"File types not selected."};t.prototype.numberOption=function(t){var n=this;return h("input",{type:"text",value:t.value,class:"s-form-control",required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),placeholder:t.placeholder,onBlur:function(i){return n.changedHandler(i,t)},onInvalid:function(i){return n.invalidHandler(i,t)},onInput:function(t){return salla.helpers.inputDigitsOnly(t.target)}})};t.prototype.splitterOption=function(){return h("div",{class:"s-product-options-splitter"})};t.prototype.textOption=function(t){var n=this;return h("div",{class:"s-product-options-text"},h("input",{type:"text",value:t.value,maxLength:t===null||t===void 0?void 0:t.length,class:"s-form-control",required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),placeholder:t.placeholder,onInvalid:function(i){return n.invalidHandler(i,t)},onInput:function(i){return n.changedHandler(i,t)}}))};t.prototype.textareaOption=function(t){var n=this;return h("div",{class:"s-product-options-textarea"},h("div",{class:"mt-1"},h("textarea",{rows:4,value:t.value,maxLength:t===null||t===void 0?void 0:t.length,class:"s-form-control",required:!t.visibility_condition&&t.required,id:"options[".concat(t.id,"]"),name:"options[".concat(t.id,"]"),placeholder:t.placeholder,onInvalid:function(i){return n.invalidHandler(i,t)},onInput:function(i){return n.changedHandler(i,t)}})))};t.prototype.mapOption=function(t){var n=this;return h("salla-map",{zoom:15,lat:this.getLatLng(t.value,"lat"),lng:this.getLatLng(t.value,"lng"),name:"options[".concat(t.id,"]"),searchable:true,required:t.required,onInvalidInput:function(i){return n.invalidHandler(i,t)},onSelected:function(i){return n.changedHandler(i,t)}})};t.prototype.colorPickerOption=function(t){var n=this;return h("salla-color-picker",{onSubmitted:function(i){return n.changedHandler(i,t)},name:"options[".concat(t.id,"]"),required:!t.visibility_condition&&t.required,onInvalidInput:function(i){return n.invalidHandler(i,t)},color:t.value})};t.prototype.timeOption=function(t){var n=this;return h("salla-datetime-picker",{noCalendar:true,enableTime:true,dateFormat:"h:i K",value:t.value,placeholder:t.name,required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),class:"s-product-options-time-element",onInvalidInput:function(i){return n.invalidHandler(i,t)},onPicked:function(i){return n.changedHandler(i,t)}})};t.prototype.dateOption=function(t){var n=this;return h("div",{class:"s-product-options-date-element"},h("salla-datetime-picker",{value:t.value,placeholder:t.name,required:!t.visibility_condition&&t.required,minDate:new Date,name:"options[".concat(t.id,"]"),onInvalidInput:function(i){return n.invalidHandler(i,t)},onPicked:function(i){return n.changedHandler(i,t)}}))};t.prototype.datetimeOption=function(t){var n=this;return h("div",{class:"s-product-options-datetime-element"},h("salla-datetime-picker",{enableTime:true,value:t.value,dateFormat:"Y-m-d G:i:K",placeholder:t.name,required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),maxDate:t.to_date_time,minDate:t.from_date_time,onInvalidInput:function(i){return n.invalidHandler(i,t)},onPicked:function(i){return n.changedHandler(i,t)}}))};t.prototype.getOptionDetailName=function(t,n,i){if(n===void 0){n=true}if(i&&i==DisplayType.COLOR){return t.name+(n&&this.isOptionDetailOut(t)?" <br/> <p> ".concat(this.outOfStockText," </p>"):"")+(t.additional_price?" <p> (".concat(salla.money(t.additional_price),") </p>"):"")}return t.name+(n&&this.isOptionDetailOut(t)?" - ".concat(this.outOfStockText):"")+(t.additional_price?" (".concat(salla.money(t.additional_price),")"):"")};t.prototype.isOptionDetailOut=function(t){var n=this;var i;if(t.is_out||!t.skus_availability||!((i=this.selectedSkus)===null||i===void 0?void 0:i.length)){return t.is_out}var e=this.selectedOptions.filter((function(n){return n.id==t.id})).length;if(e&&this.selectedOptions.length==1){return false}if(e){var o=this.selectedSkus.filter((function(t){return n.outSkus.includes(t)}));return Object.keys(t.skus_availability).some((function(t){return o.includes(Number(t))}))}return this.selectedOptions.some((function(n){return n.is_out&&n.option_id!==t.option_id}))};t.prototype.singleOption=function(t){var n=this;return h("div",null,h("select",{name:"options[".concat(t.id,"]"),required:!t.visibility_condition&&t.required,class:"s-form-control",onInvalid:function(i){return n.invalidHandler(i,t)},onChange:function(i){return n.changedHandler(i,t)}},h("option",{value:""},t.placeholder),t===null||t===void 0?void 0:t.details.map((function(t){return h("option",{value:t.id,disabled:n.canDisabled&&n.isOptionDetailOut(t),selected:t.is_selected},n.getOptionDetailName(t))}))))};t.prototype.multipleOptions=function(t){var n=this;var i=t.required&&!t.details.some((function(t){return t.is_selected}))&&!t.visibility_condition;return h("div",{class:{"s-product-options-multiple-options-wrapper":true,required:t.required}},t===null||t===void 0?void 0:t.details.map((function(e){return h("div",null,h("input",{type:"checkbox",value:e.id,disabled:n.isOptionDetailOut(e),checked:e.is_selected,required:i,name:"options[".concat(t.id,"][]"),id:"field-".concat(t.id,"-").concat(e.id),onChange:function(i){return n.changedHandler(i,t)},onInvalid:function(i){return n.invalidHandler(i,t)},"aria-describedby":"options[".concat(t.id,"]-description")}),h("label",{htmlFor:"field-".concat(t.id,"-").concat(e.id)},n.getOptionDetailName(e)))})))};t.prototype.colorOption=function(t){var n=this;return h("fieldset",{class:"s-product-options-colors-wrapper"},t===null||t===void 0?void 0:t.details.map((function(i){return h("div",{class:"s-product-options-colors-item"},h("input",{type:"radio",value:i.id,required:!t.visibility_condition&&t.required,checked:i.is_selected,name:"options[".concat(t.id,"]"),disabled:n.canDisabled&&n.isOptionDetailOut(i),id:"color-".concat(n.productId,"-").concat(t.id,"-").concat(i.id),onInvalid:function(i){return n.invalidHandler(i,t)},onChange:function(i){return n.changedHandler(i,t)}}),h("label",{htmlFor:"color-".concat(n.productId,"-").concat(t.id,"-").concat(i.id)},h("span",{style:{"background-color":i.color}}),h("div",{innerHTML:n.getOptionDetailName(i,true,t.type)})))})))};t.prototype.thumbnailOption=function(t){var n=this;return h("div",{class:"s-product-options-thumbnails-wrapper"},t.details.map((function(i){return h("div",null,h("input",{type:"radio",value:i.id,"data-itemid":i.id,required:!t.visibility_condition&&t.required,checked:i.is_selected,name:"options[".concat(t.id,"]"),"data-img-id":i.option_value,disabled:n.canDisabled&&n.isOptionDetailOut(i),id:"option_".concat(n.productId,"-").concat(t.id,"_").concat(i.id),onInvalid:function(i){return n.invalidHandler(i,t)},onChange:function(i){return n.changedHandler(i,t)}}),h("label",{htmlFor:"option_".concat(n.productId,"-").concat(t.id,"_").concat(i.id),"data-img-id":i.option_value,class:"go-to-slide"},h("img",{"data-src":i.image,src:i.image,title:i.name,alt:i.name}),h("span",{innerHTML:CheckCircleIcon,class:"s-product-options-thumbnails-icon"}),n.isOptionDetailOut(i)?[h("small",{class:"s-product-options-thumbnails-stock-badge"},n.outOfStockText),n.canDisabled?h("div",{class:"s-product-options-thumbnails-badge-overlay"}):""]:""),h("p",null,n.getOptionDetailName(i,false)," "))})))};Object.defineProperty(t.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return t}();SallaProductOptions.style=sallaProductOptionsCss;export{SallaProductOptions as salla_product_options};
|
|
4
|
+
*/import{r as registerInstance,c as createEvent,h,H as Host,g as getElement}from"./index-114c614f.js";import{C as CheckCircleIcon}from"./check-838f37a7.js";import{C as CameraIcon}from"./camera-d0a93c12.js";var DisplayType;(function(t){t["COLOR"]="color";t["DATE"]="date";t["DATETIME"]="datetime";t["DONATION"]="donation";t["IMAGE"]="image";t["MULTIPLE_OPTIONS"]="multiple-options";t["NUMBER"]="number";t["SINGLE_OPTION"]="single-option";t["SPLITTER"]="splitter";t["TEXT"]="text";t["TEXTAREA"]="textarea";t["THUMBNAIL"]="thumbnail";t["TIME"]="time";t["RADIO"]="radio";t["CHECKBOX"]="checkbox";t["MAP"]="map";t["FILE"]="file";t["COLOR_PICKER"]="color_picker";t["BOOKING"]="booking"})(DisplayType||(DisplayType={}));var Currency;(function(t){t["Sar"]="SAR"})(Currency||(Currency={}));var FileIcon='\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>file-upload</title>\n<path d="M21.333 24c0.341 0 0.683-0.131 0.943-0.391 0.521-0.521 0.521-1.364 0-1.885l-5.333-5.333c-0.123-0.123-0.271-0.22-0.433-0.288-0.327-0.135-0.693-0.135-1.019 0-0.163 0.068-0.311 0.165-0.433 0.288l-5.333 5.333c-0.521 0.521-0.521 1.364 0 1.885s1.364 0.521 1.885 0l3.057-3.057v10.115c0 0.736 0.597 1.333 1.333 1.333s1.333-0.597 1.333-1.333v-10.115l3.057 3.057c0.26 0.26 0.601 0.391 0.943 0.391zM28.943 9.724l-9.333-9.333c-0.249-0.251-0.589-0.391-0.943-0.391h-12c-2.205 0-4 1.795-4 4v24c0 2.205 1.795 4 4 4h4c0.736 0 1.333-0.597 1.333-1.333s-0.597-1.333-1.333-1.333h-4c-0.735 0-1.333-0.599-1.333-1.333v-24c0-0.735 0.599-1.333 1.333-1.333h11.448l8.552 8.552v16.781c0 0.735-0.599 1.333-1.333 1.333h-4c-0.736 0-1.333 0.597-1.333 1.333s0.597 1.333 1.333 1.333h4c2.205 0 4-1.795 4-4v-17.333c0-0.353-0.14-0.693-0.391-0.943z"></path>\n</svg>\n';var sallaProductOptionsCss="";var SallaProductOptions=function(){function t(t){var n=this;registerInstance(this,t);this.changed=createEvent(this,"changed",7);this.fileTypes={pdf:"application/pdf",png:"image/png",jpg:"image/jpeg",word:"application/doc,application/ms-doc,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document",exl:"application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",txt:"text/plain"};this.outSkus=[];this.handleDonationOptions=function(t,i,e){if(i=="custom"&&e=="input"){salla.helpers.inputDigitsOnly(t.target);salla.event.emit("product-options::donation-changed",{id:n.productId,price:t.target.value});return}t.preventDefault();t.stopPropagation();n.isCustomDonation=t.target.value==="custom";if(n.donationInput){if(t.target.value==="custom"){n.donationInput.value="";n.donationInput.focus()}else{n.donationInput.value=t.target.value}if(i=="custom"){return}salla.event.emit("product-options::donation-changed",{id:n.productId,price:t.target.value})}};this.hideLabel=function(t){if(t.type===DisplayType.DONATION&&(t.donation&&!t.donation.can_donate)){return true}return false};this.getExpireDonationMessage=function(t){if(!t.donation){return}var n=t.donation.target_amount<=t.donation.collected_amount;return h("div",{class:{"s-product-options-donation-message":true,"s-product-options-donation-completed":n,"s-product-options-donation-expired":!n}},h("p",null,t.donation.target_message),h("span",null,n?salla.money(t.donation.target_amount):""))};this.optionsData=undefined;this.outOfStockText="";this.donationAmount=salla.lang.get("pages.products.donation_amount");this.selectDonationAmount=salla.lang.getWithDefault("pages.products.select_donation_amount","تحديد مبلغ التبرع");this.selectAmount=salla.lang.getWithDefault("pages.products.select_amount","اختر المبلغ");this.isCustomDonation=false;this.selectedOptions=[];this.canDisabled=undefined;this.selectedSkus=undefined;this.selectedOutSkus=undefined;this.productId=salla.config.get("page.id");this.options=undefined;this.canDisabled=!salla.config.get("store.settings.product.notify_options_availability");salla.lang.onLoaded((function(){n.outOfStockText=salla.lang.get("pages.products.out_of_stock");n.donationAmount=salla.lang.get("pages.products.donation_amount");n.selectDonationAmount=salla.lang.getWithDefault("pages.products.select_donation_amount","تحديد مبلغ التبرع");n.selectAmount=salla.lang.getWithDefault("pages.products.select_amount","اختر المبلغ")}));if(this.options){try{this.setOptionsData(Array.isArray(this.options)?this.options:JSON.parse(this.options));return}catch(t){salla.log("Bad json passed via options prop")}}if(!Array.isArray(this.optionsData)){salla.log("Options is not an array[] ---\x3e ",this.optionsData);this.setOptionsData([])}if(this.productId&&!salla.url.is_page("cart")){salla.api.product.getDetails(this.productId,["options"]).then((function(t){return n.setOptionsData(t.data.options)}))}}t.prototype.setOptionsData=function(t){var n,i;this.optionsData=t;var e=this;(i=(n=this.optionsData[0])===null||n===void 0?void 0:n.details)===null||i===void 0?void 0:i.forEach((function(t){Object.entries(t.skus_availability||{}).filter((function(t){return!t[1]})).map((function(t){return e.outSkus.push(Number(t[0]))}))}))};t.prototype.getSelectedOptionsData=function(){return __awaiter(this,void 0,void 0,(function(){var t,n;return __generator(this,(function(i){t={};n=this.host.getElementSallaData();n.forEach((function(n,i){i.startsWith("options[")&&(t[i.replace("options[","").replace("]","")]=n)}));return[2,t]}))}))};t.prototype.reportValidity=function(){return __awaiter(this,void 0,void 0,(function(){var t,n,i;return __generator(this,(function(e){t=this.host.querySelectorAll("[required]");n=true;for(i=0;i<t.length;i++){if("reportValidity"in t[i]&&!t[i].reportValidity()){n=false}}return[2,n]}))}))};t.prototype.hasOutOfStockOption=function(){return __awaiter(this,void 0,void 0,(function(){var t,n;var i=this;return __generator(this,(function(e){return[2,this.selectedOptions.some((function(t){return t.is_out}))||((t=this.selectedSkus)===null||t===void 0?void 0:t.length)&&((n=this.selectedSkus)===null||n===void 0?void 0:n.every((function(t){return i.outSkus.includes(t)})))]}))}))};t.prototype.getSelectedOptions=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){return[2,this.selectedOptions]}))}))};t.prototype.getOption=function(t){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){return[2,this.optionsData.find((function(n){return n.id===t}))]}))}))};t.prototype.invalidHandler=function(t,n){var i=t.target.closest(".s-product-options-option");if(!salla.url.is_page("cart")){i.scrollIntoView({behavior:"smooth",block:"center"})}i.classList.add("s-product-options-option-error")};t.prototype.changedHandler=function(t,n){var i={event:t,option:n,detail:null};if(n.details){var e=n.details.find((function(n){return Number(n.id)===Number(t.target.value)}));i.detail=e}var o=t.target.closest(".s-product-options-option");if(t.target.value||(n.type==DisplayType.FILE||n.type==DisplayType.IMAGE)&&t.type==="added"||n.type==DisplayType.MAP&&t.type==="selected"&&(t.target.lat&&t.target.lng)){setTimeout((function(){o.classList.remove("s-product-options-option-error")}),200)}var a=this.selectedOptions.findIndex((function(t){return t.option_id===i.option.id}));a>-1?this.selectedOptions[a]=Object.assign(Object.assign({},i.detail),{option_id:i.option.id}):this.selectedOptions.push(Object.assign(Object.assign({},i.detail),{option_id:i.option.id}));if(n.type==DisplayType.DONATION){salla.event.emit("product-options::donation-changed",{id:this.productId,price:t.target.value})}this.setSelectedSkus();this.handleRequiredMultipleOptions(n);this.changed.emit(i);salla.event.emit("product-options::change",i)};t.prototype.setSelectedSkus=function(){this.selectedSkus=this.selectedOptions.map((function(t){return Object.keys(t.skus_availability||{})})).reduce((function(t,n){return t.filter((function(t){return n.includes(t)}))})).map((function(t){return Number(t)}))};t.prototype.handleRequiredMultipleOptions=function(t){if(t.type!==DisplayType.MULTIPLE_OPTIONS||!t.required){return}var n=this.host.querySelector('[data-option-id="'.concat(t.id,'"]'));var i=n.querySelectorAll("input:checked").length;n.querySelectorAll("input").forEach((function(t){return t.toggleAttribute("required",!i)}))};t.prototype.getLatLng=function(t,n){return t?t.split(",")[n=="lat"?0:1]:""};t.prototype.getDisplayForType=function(t){var n=this;if(this["".concat(t.type,"Option")]){return this["".concat(t.type,"Option")](t)}if(t.type===DisplayType.COLOR_PICKER){return this.colorPickerOption(t)}if(t.type===DisplayType.MULTIPLE_OPTIONS){return this.multipleOptions(t)}if(t.type===DisplayType.SINGLE_OPTION){return this.singleOption(t)}if(t.type===DisplayType.BOOKING&&salla.config.get("page.slug")=="cart"){return h("salla-booking-field",{onInvalidInput:function(i){return n.invalidHandler(i,t)},option:t,productId:t.value})}salla.log("Couldn't find options type(".concat(t.type,")😢"));return""};t.prototype.getOptionShownWhen=function(t){return t.visibility_condition?{"data-show-when":"options[".concat(t.visibility_condition.option,"] ").concat(t.visibility_condition.operator," ").concat(t.visibility_condition.value)}:{}};t.prototype.componentWillLoad=function(){var t=this;this.outOfStockText=salla.lang.get("pages.products.out_of_stock");return salla.onReady((function(){var n=!salla.storage.get("cart.id")&&t.optionsData.some((function(t){return["file","image"].includes(t.type)}));return n?salla.api.cart.getCurrentCartId(false,"salla-product-options"):null}))};t.prototype.render=function(){var t=this;var n;if(((n=this.optionsData)===null||n===void 0?void 0:n.length)==0){return}return h(Host,{class:"s-product-options-wrapper"},h("salla-conditional-fields",null,this.optionsData.map((function(n){return h("div",Object.assign({class:"s-product-options-option-container".concat(n.visibility_condition?" hidden":""),"data-option-id":n.id},t.getOptionShownWhen(n)),n.name=="splitter"?t.splitterOption():h("div",{class:{"s-product-options-option":true,"s-product-options-option-booking":n.type===DisplayType.BOOKING&&salla.config.get("page.slug")=="cart"},"data-option-type":n.type,"data-option-required":"".concat(n.required)},h("label",{htmlFor:"options["+n.id+"]",class:"s-product-options-option-label ".concat(t.hideLabel(n)?"s-product-options-option-label-hidden":"")},h("b",null,n.name,n.required&&h("span",null," * ")," "),h("small",null,n.placeholder)),h("div",{class:"s-product-options-option-content ".concat(t.hideLabel(n)?"s-product-options-option-content-full-width":"")},t.getDisplayForType(n))))}))))};t.prototype.componentDidLoad=function(){var t=this;var n,i;if(((n=this.optionsData)===null||n===void 0?void 0:n.length)==0&&!this.optionsData.some((function(t){return t.type==DisplayType.DONATION}))){return}var e=(i=this.optionsData.find((function(t){return t.type==DisplayType.DONATION})))===null||i===void 0?void 0:i.details.find((function(t){return t.is_selected}));if(!e){return}setTimeout((function(){salla.event.emit("product-options::donation-changed",{id:t.productId,price:e.additional_price})}),1e3)};t.prototype.donationOption=function(t,n){var i=this;var e,o;return h("div",{class:"s-product-options-donation-wrapper"},((e=t.donation)===null||e===void 0?void 0:e.can_donate)?[t.donation?h("div",{class:"s-product-options-donation-progress"},h("salla-progress-bar",{donation:t.donation})):"",t.details.length?[h("h4",null,this.selectAmount),h("div",{class:"s-product-options-donation-options"},t.details.map((function(t,n){return h("div",{class:"s-product-options-donation-options-item"},h("input",{id:"donation-option-".concat(n),type:"radio",name:"donating_option",checked:t.is_selected,value:t.additional_price,onChange:function(n){return i.handleDonationOptions(n,t,"option")}}),h("label",{htmlFor:"donation-option-".concat(n)},h("span",null,salla.money(t.name))))})),((o=t.donation)===null||o===void 0?void 0:o.custom_amount_enabled)?h("div",{class:"s-product-options-donation-options-item"},h("input",{id:"donation-option-custom",type:"radio",name:"donating_option",value:"custom",onChange:function(t){return i.handleDonationOptions(t,"custom","option")}}),h("label",{htmlFor:"donation-option-custom"},h("span",null," ",this.selectDonationAmount," "))):"")]:"",h("div",{class:{"s-product-options-donation-input-group":true,shown:!t.details.length||t.details.length&&this.isCustomDonation}},h("input",{type:"text",id:"donating-amount",name:"donation_amount",class:"s-form-control",ref:function(t){return i.donationInput=t},value:t.details.length&&t.details.some((function(t){return t.is_selected}))?t.details.find((function(t){return t.is_selected})).additional_price:t.value,placeholder:t.placeholder,onInput:function(t){return i.handleDonationOptions(t,"custom","input")},onBlur:function(n){return i.changedHandler(n,t)},onInvalid:function(n){return i.invalidHandler(n,t)}}),h("span",{class:"s-product-options-donation-amount-currency"},salla.config.currency(salla.config.get("user.currency_code")).symbol))]:this.getExpireDonationMessage(t))};t.prototype.fileUploader=function(t,n){var i=this;if(n===void 0){n=null}return h("salla-file-upload",Object.assign({},n||{},{"payload-name":"file",value:t.value,"instant-upload":true,name:"options[".concat(t.id,"]"),required:!t.visibility_condition&&t.required,height:"120px",onAdded:function(n){return i.changedHandler(n,t)},url:salla.cart.api.getUploadImageEndpoint(),"form-data":{cart_item_id:this.productId,product_id:this.productId},onInvalidInput:function(n){return i.invalidHandler(n,t)},class:{"s-product-options-image-input":true,required:t.required}}),h("div",{class:"s-product-options-filepond-placeholder"},h("span",{class:"s-product-options-filepond-placeholder-icon",innerHTML:n.accept&&n.accept.split(",").every((function(t){return t.includes("image")}))?CameraIcon:FileIcon}),h("p",{class:"s-product-options-filepond-placeholder-text"},salla.lang.get("common.uploader.drag_and_drop")),h("span",{class:"filepond--label-action"},salla.lang.get("common.uploader.browse"))))};t.prototype.imageOption=function(t){return this.fileUploader(t,{accept:"image/png,image/jpeg,image/jpg,image/gif"})};t.prototype.fileOption=function(t){var n=this;var i=t.details.map((function(t){return n.fileTypes[t.name]})).filter(Boolean);return(i===null||i===void 0?void 0:i.length)?this.fileUploader(t,{accept:i.join(",")}):"File types not selected."};t.prototype.numberOption=function(t){var n=this;return h("input",{type:"text",value:t.value,class:"s-form-control",required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),placeholder:t.placeholder,onBlur:function(i){return n.changedHandler(i,t)},onInvalid:function(i){return n.invalidHandler(i,t)},onInput:function(t){return salla.helpers.inputDigitsOnly(t.target)}})};t.prototype.splitterOption=function(){return h("div",{class:"s-product-options-splitter"})};t.prototype.textOption=function(t){var n=this;return h("div",{class:"s-product-options-text"},h("input",{type:"text",value:t.value,maxLength:t===null||t===void 0?void 0:t.length,class:"s-form-control",required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),placeholder:t.placeholder,onInvalid:function(i){return n.invalidHandler(i,t)},onInput:function(i){return n.changedHandler(i,t)}}))};t.prototype.textareaOption=function(t){var n=this;return h("div",{class:"s-product-options-textarea"},h("div",{class:"mt-1"},h("textarea",{rows:4,value:t.value,maxLength:t===null||t===void 0?void 0:t.length,class:"s-form-control",required:!t.visibility_condition&&t.required,id:"options[".concat(t.id,"]"),name:"options[".concat(t.id,"]"),placeholder:t.placeholder,onInvalid:function(i){return n.invalidHandler(i,t)},onInput:function(i){return n.changedHandler(i,t)}})))};t.prototype.mapOption=function(t){var n=this;return h("salla-map",{zoom:15,lat:this.getLatLng(t.value,"lat"),lng:this.getLatLng(t.value,"lng"),name:"options[".concat(t.id,"]"),searchable:true,required:t.required,onInvalidInput:function(i){return n.invalidHandler(i,t)},onSelected:function(i){return n.changedHandler(i,t)}})};t.prototype.colorPickerOption=function(t){var n=this;return h("salla-color-picker",{onSubmitted:function(i){return n.changedHandler(i,t)},name:"options[".concat(t.id,"]"),required:!t.visibility_condition&&t.required,onInvalidInput:function(i){return n.invalidHandler(i,t)},color:t.value})};t.prototype.timeOption=function(t){var n=this;return h("salla-datetime-picker",{noCalendar:true,enableTime:true,dateFormat:"h:i K",value:t.value,placeholder:t.name,required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),class:"s-product-options-time-element",onInvalidInput:function(i){return n.invalidHandler(i,t)},onPicked:function(i){return n.changedHandler(i,t)}})};t.prototype.dateOption=function(t){var n=this;return h("div",{class:"s-product-options-date-element"},h("salla-datetime-picker",{value:t.value,placeholder:t.name,required:!t.visibility_condition&&t.required,minDate:new Date,name:"options[".concat(t.id,"]"),onInvalidInput:function(i){return n.invalidHandler(i,t)},onPicked:function(i){return n.changedHandler(i,t)}}))};t.prototype.datetimeOption=function(t){var n=this;return h("div",{class:"s-product-options-datetime-element"},h("salla-datetime-picker",{enableTime:true,value:t.value,dateFormat:"Y-m-d G:i:K",placeholder:t.name,required:!t.visibility_condition&&t.required,name:"options[".concat(t.id,"]"),maxDate:t.to_date_time,minDate:t.from_date_time,onInvalidInput:function(i){return n.invalidHandler(i,t)},onPicked:function(i){return n.changedHandler(i,t)}}))};t.prototype.getOptionDetailName=function(t,n,i){if(n===void 0){n=true}if(i&&i==DisplayType.COLOR){return t.name+(n&&this.isOptionDetailOut(t)?" <br/> <p> ".concat(this.outOfStockText," </p>"):"")+(t.additional_price?" <p> (".concat(salla.money(t.additional_price),") </p>"):"")}return t.name+(n&&this.isOptionDetailOut(t)?" - ".concat(this.outOfStockText):"")+(t.additional_price?" (".concat(salla.money(t.additional_price),")"):"")};t.prototype.isOptionDetailOut=function(t){var n=this;var i;if(t.is_out||!t.skus_availability||!((i=this.selectedSkus)===null||i===void 0?void 0:i.length)){return t.is_out}var e=this.selectedOptions.filter((function(n){return n.id==t.id})).length;if(e&&this.selectedOptions.length==1){return false}if(e){var o=this.selectedSkus.filter((function(t){return n.outSkus.includes(t)}));return Object.keys(t.skus_availability).some((function(t){return o.includes(Number(t))}))}return this.selectedOptions.some((function(n){return n.is_out&&n.option_id!==t.option_id}))};t.prototype.singleOption=function(t){var n=this;return h("div",null,h("select",{name:"options[".concat(t.id,"]"),required:!t.visibility_condition&&t.required,class:"s-form-control",onInvalid:function(i){return n.invalidHandler(i,t)},onChange:function(i){return n.changedHandler(i,t)}},h("option",{value:""},t.placeholder),t===null||t===void 0?void 0:t.details.map((function(t){return h("option",{value:t.id,disabled:n.canDisabled&&n.isOptionDetailOut(t),selected:t.is_selected},n.getOptionDetailName(t))}))))};t.prototype.multipleOptions=function(t){var n=this;var i=t.required&&!t.details.some((function(t){return t.is_selected}))&&!t.visibility_condition;return h("div",{class:{"s-product-options-multiple-options-wrapper":true,required:t.required}},t===null||t===void 0?void 0:t.details.map((function(e){return h("div",null,h("input",{type:"checkbox",value:e.id,disabled:n.isOptionDetailOut(e),checked:e.is_selected,required:i,name:"options[".concat(t.id,"][]"),id:"field-".concat(t.id,"-").concat(e.id),onChange:function(i){return n.changedHandler(i,t)},onInvalid:function(i){return n.invalidHandler(i,t)},"aria-describedby":"options[".concat(t.id,"]-description")}),h("label",{htmlFor:"field-".concat(t.id,"-").concat(e.id)},n.getOptionDetailName(e)))})))};t.prototype.colorOption=function(t){var n=this;return h("fieldset",{class:"s-product-options-colors-wrapper"},t===null||t===void 0?void 0:t.details.map((function(i){return h("div",{class:"s-product-options-colors-item"},h("input",{type:"radio",value:i.id,required:!t.visibility_condition&&t.required,checked:i.is_selected,name:"options[".concat(t.id,"]"),disabled:n.canDisabled&&n.isOptionDetailOut(i),id:"color-".concat(n.productId,"-").concat(t.id,"-").concat(i.id),onInvalid:function(i){return n.invalidHandler(i,t)},onChange:function(i){return n.changedHandler(i,t)}}),h("label",{htmlFor:"color-".concat(n.productId,"-").concat(t.id,"-").concat(i.id)},h("span",{style:{"background-color":i.color}}),h("div",{innerHTML:n.getOptionDetailName(i,true,t.type)})))})))};t.prototype.thumbnailOption=function(t){var n=this;return h("div",{class:"s-product-options-thumbnails-wrapper"},t.details.map((function(i){return h("div",null,h("input",{type:"radio",value:i.id,"data-itemid":i.id,required:!t.visibility_condition&&t.required,checked:i.is_selected,name:"options[".concat(t.id,"]"),"data-img-id":i.option_value,disabled:n.canDisabled&&n.isOptionDetailOut(i),id:"option_".concat(n.productId,"-").concat(t.id,"_").concat(i.id),onInvalid:function(i){return n.invalidHandler(i,t)},onChange:function(i){return n.changedHandler(i,t)}}),h("label",{htmlFor:"option_".concat(n.productId,"-").concat(t.id,"_").concat(i.id),"data-img-id":i.option_value,class:"go-to-slide"},h("img",{"data-src":i.image,src:i.image,title:i.name,alt:i.name}),h("span",{innerHTML:CheckCircleIcon,class:"s-product-options-thumbnails-icon"}),n.isOptionDetailOut(i)?[h("small",{class:"s-product-options-thumbnails-stock-badge"},n.outOfStockText),n.canDisabled?h("div",{class:"s-product-options-thumbnails-badge-overlay"}):""]:""),h("p",null,n.getOptionDetailName(i,false)," "))})))};Object.defineProperty(t.prototype,"host",{get:function(){return getElement(this)},enumerable:false,configurable:true});return t}();SallaProductOptions.style=sallaProductOptionsCss;export{SallaProductOptions as salla_product_options};
|
|
5
5
|
//# sourceMappingURL=salla-product-options.entry.js.map
|