@salla.sa/twilight-components 2.14.137 → 2.14.139

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.
Files changed (33) hide show
  1. package/dist/cjs/salla-add-product-button_48.cjs.entry.js +5 -0
  2. package/dist/cjs/salla-add-product-button_48.cjs.entry.js.map +1 -1
  3. package/dist/cjs/salla-booking-field_2.cjs.entry.js +1 -1
  4. package/dist/cjs/salla-booking-field_2.cjs.entry.js.map +1 -1
  5. package/dist/collection/components/salla-booking-field/salla-booking-field.js +1 -1
  6. package/dist/collection/components/salla-booking-field/salla-booking-field.js.map +1 -1
  7. package/dist/collection/components/salla-login-modal/salla-login-modal.js +5 -0
  8. package/dist/collection/components/salla-login-modal/salla-login-modal.js.map +1 -1
  9. package/dist/components/salla-booking-field2.js +1 -1
  10. package/dist/components/salla-booking-field2.js.map +1 -1
  11. package/dist/components/salla-login-modal.js +5 -0
  12. package/dist/components/salla-login-modal.js.map +1 -1
  13. package/dist/esm/salla-add-product-button_48.entry.js +5 -0
  14. package/dist/esm/salla-add-product-button_48.entry.js.map +1 -1
  15. package/dist/esm/salla-booking-field_2.entry.js +1 -1
  16. package/dist/esm/salla-booking-field_2.entry.js.map +1 -1
  17. package/dist/esm-es5/salla-add-product-button_48.entry.js +1 -1
  18. package/dist/esm-es5/salla-add-product-button_48.entry.js.map +1 -1
  19. package/dist/esm-es5/salla-booking-field_2.entry.js +1 -1
  20. package/dist/esm-es5/salla-booking-field_2.entry.js.map +1 -1
  21. package/dist/twilight/p-40f204a6.system.js +1 -1
  22. package/dist/twilight/{p-7bdbb856.system.entry.js → p-7bd8bfbe.system.entry.js} +2 -2
  23. package/dist/twilight/{p-7bdbb856.system.entry.js.map → p-7bd8bfbe.system.entry.js.map} +1 -1
  24. package/dist/twilight/{p-c7694ae8.entry.js → p-a3c95fbd.entry.js} +2 -2
  25. package/dist/twilight/{p-c7694ae8.entry.js.map → p-a3c95fbd.entry.js.map} +1 -1
  26. package/dist/twilight/{p-4f5aa38b.entry.js → p-c25a3647.entry.js} +2 -2
  27. package/dist/twilight/p-c25a3647.entry.js.map +1 -0
  28. package/dist/twilight/{p-1738a61e.system.entry.js → p-d38da3fc.system.entry.js} +3 -3
  29. package/dist/twilight/p-d38da3fc.system.entry.js.map +1 -0
  30. package/dist/twilight/twilight.esm.js +1 -1
  31. package/package.json +5 -5
  32. package/dist/twilight/p-1738a61e.system.entry.js.map +0 -1
  33. package/dist/twilight/p-4f5aa38b.entry.js.map +0 -1
@@ -141,7 +141,7 @@ const SallaBookingField = class {
141
141
  salla.notify.error(value.fields.reservation[0]);
142
142
  return;
143
143
  }
144
- const errorList = Object.values(value.fields).flat().map(error => `<li>${error}</li>`).join('');
144
+ const errorList = Object.values(value.fields || [value.message]).flat().map(error => `<li>${error}</li>`).join('');
145
145
  salla.notify.error(`<ul>${errorList}</ul>`);
146
146
  }
147
147
  if (action === 'success') {
@@ -1 +1 @@
1
- {"file":"salla-booking-field.salla-conditional-fields.entry.cjs.js","mappings":"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","names":["h","Host","index"],"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\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss',\n})\nexport class SallaBookingField {\n /**\n * The booking option configuration\n */\n @Prop() option: Option;\n /**\n * The ID of the product for which the booking is being made\n */\n @Prop() productId: number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n @State() reservationsInput: HTMLInputElement;\n\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n\n constructor() {\n // Load translations\n salla.lang.onLoaded(() => this.setTranslations());\n // Register event listeners\n Salla.event.on('booking::open', (data) => this.handleBookingOpen(data));\n }\n\n private async setTranslations() {\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 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.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 private openBookingModal(event: any, afterReload = false) {\n if (afterReload && (!event.detail || typeof event.detail !== 'number' || event.detail !== this.productId)) {\n return;\n }\n if (salla.config.isGuest()) {\n this.setAfterReloadEvent('booking::open-after-reload', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response || error);\n });\n }\n\n private handleBookingOpen(data) {\n if (data.id !== this.productId) return;\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate);\n this.modal.open();\n }, 100);\n }\n\n private setAfterReloadEvent(event, payload) {\n salla.storage.set('afterReloadEvent', { event, payload });\n }\n\n private emitAfterReloadEvent() {\n const eventDetails = salla.storage.get('afterReloadEvent');\n if (eventDetails && eventDetails.event) {\n const customEvent = new CustomEvent(eventDetails.event, {\n detail: eventDetails.payload\n });\n window.dispatchEvent(customEvent)\n salla.storage.remove('afterReloadEvent');\n }\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details;\n }\n }\n\n componentDidLoad() {\n window.addEventListener('booking::open-after-reload', (event) => this.openBookingModal(event, true));\n this.emitAfterReloadEvent();\n window.addEventListener('message', this.handleMessageEvent.bind(this));\n this.reservationsInput.addEventListener('invalid', e => this.invalidInput.emit(e));\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n\n private handleMessageEvent(event) {\n if (event.data.source !== 'booking') return;\n const action = event.data.type;\n const value = event.data.message;\n if (localStorage.getItem('debug')) console.log(`Received an action:${action}`, event.data);\n\n if (action === 'error') {\n if (value.fields?.reservation) {\n salla.notify.error(value.fields.reservation[0]);\n return;\n }\n const errorList = Object.values(value.fields).flat().map(error => `<li>${error}</li>`).join('');\n salla.notify.error(`<ul>${errorList}</ul>`);\n }\n\n if (action === 'success') {\n if (Number(value.productId) !== Number(this.productId)) return;\n this.reservations = value.data.reservations.map(schedule => {\n if (schedule.time && schedule.time.length > 0) {\n const timeSlot = schedule.time[0];\n return {\n date: schedule.date,\n day: schedule.day,\n from_timestamp: timeSlot.from,\n to_timestamp: timeSlot.to,\n };\n }\n return null;\n }).filter(item => item !== null);\n\n salla.notify.success(this.bookedLabel);\n this.modal?.close();\n setTimeout(() => window.location.reload());\n }\n\n if (action === 'height') {\n this.iframe.height = value?.height + 'px';\n }\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>\n <iframe ref={iframe => (this.iframe = iframe)} src={this.bookingUrl} frameborder=\"0\"></iframe>\n </salla-modal>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return (\n <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\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) return '';\n return (\n <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span>\n {reservation.from_timestamp} - {reservation.to_timestamp}\n </span>\n </span>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n {this.option.required || this.reservations.length > 0 ? <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div> : ''}\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition=\"center\" fill=\"outline\" onClick={event => this.openBookingModal(event, false)}>\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 > 0 && (\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 </div>\n ))}\n </div>\n )}\n <input \n class=\"s-hidden\" \n name={this.option.name} \n required={this.option.required} \n value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} \n />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\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', 'radio'].includes(event.target.getAttribute('type'))) {\n salla.log('Ignore the change because is not a supported input: ' + (event?.target?.tagName || 'N/A'));\n return;\n }\n\n let optionId = event.target.name.replace('[]', '');\n let isMultiple = event.target.getAttribute('type') === 'checkbox';\n let isRadio = event.target.getAttribute('type') === 'radio';\n\n salla.log('Trying to find all elements 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;\n if (isMultiple) {\n let selectedValues = Array.from(this.host.querySelectorAll(`input[name=\"${event.target.name}\"]:checked`), e => (e as HTMLInputElement)?.value);\n isSelected = selectedValues.includes(value.toString());\n } else if (isRadio) {\n // Handle radio inputs.\n isSelected = event.target.checked && event.target.value === value;\n } else {\n isSelected = value === event.target.value;\n }\n\n salla.log('The input is ', isMultiple ? 'Multiple' : isRadio ? 'Radio' : '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 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 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 });\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"],"version":3}
1
+ {"file":"salla-booking-field.salla-conditional-fields.entry.cjs.js","mappings":"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","names":["h","Host","index"],"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\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss',\n})\nexport class SallaBookingField {\n /**\n * The booking option configuration\n */\n @Prop() option: Option;\n /**\n * The ID of the product for which the booking is being made\n */\n @Prop() productId: number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n @State() reservationsInput: HTMLInputElement;\n\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n\n constructor() {\n // Load translations\n salla.lang.onLoaded(() => this.setTranslations());\n // Register event listeners\n Salla.event.on('booking::open', (data) => this.handleBookingOpen(data));\n }\n\n private async setTranslations() {\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 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.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 private openBookingModal(event: any, afterReload = false) {\n if (afterReload && (!event.detail || typeof event.detail !== 'number' || event.detail !== this.productId)) {\n return;\n }\n if (salla.config.isGuest()) {\n this.setAfterReloadEvent('booking::open-after-reload', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response || error);\n });\n }\n\n private handleBookingOpen(data) {\n if (data.id !== this.productId) return;\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate);\n this.modal.open();\n }, 100);\n }\n\n private setAfterReloadEvent(event, payload) {\n salla.storage.set('afterReloadEvent', { event, payload });\n }\n\n private emitAfterReloadEvent() {\n const eventDetails = salla.storage.get('afterReloadEvent');\n if (eventDetails && eventDetails.event) {\n const customEvent = new CustomEvent(eventDetails.event, {\n detail: eventDetails.payload\n });\n window.dispatchEvent(customEvent)\n salla.storage.remove('afterReloadEvent');\n }\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details;\n }\n }\n\n componentDidLoad() {\n window.addEventListener('booking::open-after-reload', (event) => this.openBookingModal(event, true));\n this.emitAfterReloadEvent();\n window.addEventListener('message', this.handleMessageEvent.bind(this));\n this.reservationsInput.addEventListener('invalid', e => this.invalidInput.emit(e));\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n\n private handleMessageEvent(event) {\n if (event.data.source !== 'booking') return;\n const action = event.data.type;\n const value = event.data.message;\n if (localStorage.getItem('debug')) console.log(`Received an action:${action}`, event.data);\n\n if (action === 'error') {\n if (value.fields?.reservation) {\n salla.notify.error(value.fields.reservation[0]);\n return;\n }\n const errorList = Object.values(value.fields || [value.message]).flat().map(error => `<li>${error}</li>`).join('');\n salla.notify.error(`<ul>${errorList}</ul>`);\n }\n\n if (action === 'success') {\n if (Number(value.productId) !== Number(this.productId)) return;\n this.reservations = value.data.reservations.map(schedule => {\n if (schedule.time && schedule.time.length > 0) {\n const timeSlot = schedule.time[0];\n return {\n date: schedule.date,\n day: schedule.day,\n from_timestamp: timeSlot.from,\n to_timestamp: timeSlot.to,\n };\n }\n return null;\n }).filter(item => item !== null);\n\n salla.notify.success(this.bookedLabel);\n this.modal?.close();\n setTimeout(() => window.location.reload());\n }\n\n if (action === 'height') {\n this.iframe.height = value?.height + 'px';\n }\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>\n <iframe ref={iframe => (this.iframe = iframe)} src={this.bookingUrl} frameborder=\"0\"></iframe>\n </salla-modal>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return (\n <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\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) return '';\n return (\n <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span>\n {reservation.from_timestamp} - {reservation.to_timestamp}\n </span>\n </span>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n {this.option.required || this.reservations.length > 0 ? <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div> : ''}\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition=\"center\" fill=\"outline\" onClick={event => this.openBookingModal(event, false)}>\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 > 0 && (\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 </div>\n ))}\n </div>\n )}\n <input\n class=\"s-hidden\"\n name={this.option.name}\n required={this.option.required}\n value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations}\n />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\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', 'radio'].includes(event.target.getAttribute('type'))) {\n salla.log('Ignore the change because is not a supported input: ' + (event?.target?.tagName || 'N/A'));\n return;\n }\n\n let optionId = event.target.name.replace('[]', '');\n let isMultiple = event.target.getAttribute('type') === 'checkbox';\n let isRadio = event.target.getAttribute('type') === 'radio';\n\n salla.log('Trying to find all elements 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;\n if (isMultiple) {\n let selectedValues = Array.from(this.host.querySelectorAll(`input[name=\"${event.target.name}\"]:checked`), e => (e as HTMLInputElement)?.value);\n isSelected = selectedValues.includes(value.toString());\n } else if (isRadio) {\n // Handle radio inputs.\n isSelected = event.target.checked && event.target.value === value;\n } else {\n isSelected = value === event.target.value;\n }\n\n salla.log('The input is ', isMultiple ? 'Multiple' : isRadio ? 'Radio' : '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 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 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 });\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"],"version":3}
@@ -114,7 +114,7 @@ export class SallaBookingField {
114
114
  salla.notify.error(value.fields.reservation[0]);
115
115
  return;
116
116
  }
117
- const errorList = Object.values(value.fields).flat().map(error => `<li>${error}</li>`).join('');
117
+ const errorList = Object.values(value.fields || [value.message]).flat().map(error => `<li>${error}</li>`).join('');
118
118
  salla.notify.error(`<ul>${errorList}</ul>`);
119
119
  }
120
120
  if (action === 'success') {
@@ -1 +1 @@
1
- {"version":3,"file":"salla-booking-field.js","sourceRoot":"","sources":["../../../src/components/salla-booking-field/salla-booking-field.tsx"],"names":[],"mappings":"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","sourcesContent":["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\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss',\n})\nexport class SallaBookingField {\n /**\n * The booking option configuration\n */\n @Prop() option: Option;\n /**\n * The ID of the product for which the booking is being made\n */\n @Prop() productId: number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n @State() reservationsInput: HTMLInputElement;\n\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n\n constructor() {\n // Load translations\n salla.lang.onLoaded(() => this.setTranslations());\n // Register event listeners\n Salla.event.on('booking::open', (data) => this.handleBookingOpen(data));\n }\n\n private async setTranslations() {\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 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.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 private openBookingModal(event: any, afterReload = false) {\n if (afterReload && (!event.detail || typeof event.detail !== 'number' || event.detail !== this.productId)) {\n return;\n }\n if (salla.config.isGuest()) {\n this.setAfterReloadEvent('booking::open-after-reload', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response || error);\n });\n }\n\n private handleBookingOpen(data) {\n if (data.id !== this.productId) return;\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate);\n this.modal.open();\n }, 100);\n }\n\n private setAfterReloadEvent(event, payload) {\n salla.storage.set('afterReloadEvent', { event, payload });\n }\n\n private emitAfterReloadEvent() {\n const eventDetails = salla.storage.get('afterReloadEvent');\n if (eventDetails && eventDetails.event) {\n const customEvent = new CustomEvent(eventDetails.event, {\n detail: eventDetails.payload\n });\n window.dispatchEvent(customEvent)\n salla.storage.remove('afterReloadEvent');\n }\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details;\n }\n }\n\n componentDidLoad() {\n window.addEventListener('booking::open-after-reload', (event) => this.openBookingModal(event, true));\n this.emitAfterReloadEvent();\n window.addEventListener('message', this.handleMessageEvent.bind(this));\n this.reservationsInput.addEventListener('invalid', e => this.invalidInput.emit(e));\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n\n private handleMessageEvent(event) {\n if (event.data.source !== 'booking') return;\n const action = event.data.type;\n const value = event.data.message;\n if (localStorage.getItem('debug')) console.log(`Received an action:${action}`, event.data);\n\n if (action === 'error') {\n if (value.fields?.reservation) {\n salla.notify.error(value.fields.reservation[0]);\n return;\n }\n const errorList = Object.values(value.fields).flat().map(error => `<li>${error}</li>`).join('');\n salla.notify.error(`<ul>${errorList}</ul>`);\n }\n\n if (action === 'success') {\n if (Number(value.productId) !== Number(this.productId)) return;\n this.reservations = value.data.reservations.map(schedule => {\n if (schedule.time && schedule.time.length > 0) {\n const timeSlot = schedule.time[0];\n return {\n date: schedule.date,\n day: schedule.day,\n from_timestamp: timeSlot.from,\n to_timestamp: timeSlot.to,\n };\n }\n return null;\n }).filter(item => item !== null);\n\n salla.notify.success(this.bookedLabel);\n this.modal?.close();\n setTimeout(() => window.location.reload());\n }\n\n if (action === 'height') {\n this.iframe.height = value?.height + 'px';\n }\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>\n <iframe ref={iframe => (this.iframe = iframe)} src={this.bookingUrl} frameborder=\"0\"></iframe>\n </salla-modal>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return (\n <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\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) return '';\n return (\n <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span>\n {reservation.from_timestamp} - {reservation.to_timestamp}\n </span>\n </span>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n {this.option.required || this.reservations.length > 0 ? <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div> : ''}\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition=\"center\" fill=\"outline\" onClick={event => this.openBookingModal(event, false)}>\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 > 0 && (\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 </div>\n ))}\n </div>\n )}\n <input \n class=\"s-hidden\" \n name={this.option.name} \n required={this.option.required} \n value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} \n />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"salla-booking-field.js","sourceRoot":"","sources":["../../../src/components/salla-booking-field/salla-booking-field.tsx"],"names":[],"mappings":"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","sourcesContent":["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\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss',\n})\nexport class SallaBookingField {\n /**\n * The booking option configuration\n */\n @Prop() option: Option;\n /**\n * The ID of the product for which the booking is being made\n */\n @Prop() productId: number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n @State() reservationsInput: HTMLInputElement;\n\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n\n constructor() {\n // Load translations\n salla.lang.onLoaded(() => this.setTranslations());\n // Register event listeners\n Salla.event.on('booking::open', (data) => this.handleBookingOpen(data));\n }\n\n private async setTranslations() {\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 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.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 private openBookingModal(event: any, afterReload = false) {\n if (afterReload && (!event.detail || typeof event.detail !== 'number' || event.detail !== this.productId)) {\n return;\n }\n if (salla.config.isGuest()) {\n this.setAfterReloadEvent('booking::open-after-reload', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response || error);\n });\n }\n\n private handleBookingOpen(data) {\n if (data.id !== this.productId) return;\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate);\n this.modal.open();\n }, 100);\n }\n\n private setAfterReloadEvent(event, payload) {\n salla.storage.set('afterReloadEvent', { event, payload });\n }\n\n private emitAfterReloadEvent() {\n const eventDetails = salla.storage.get('afterReloadEvent');\n if (eventDetails && eventDetails.event) {\n const customEvent = new CustomEvent(eventDetails.event, {\n detail: eventDetails.payload\n });\n window.dispatchEvent(customEvent)\n salla.storage.remove('afterReloadEvent');\n }\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details;\n }\n }\n\n componentDidLoad() {\n window.addEventListener('booking::open-after-reload', (event) => this.openBookingModal(event, true));\n this.emitAfterReloadEvent();\n window.addEventListener('message', this.handleMessageEvent.bind(this));\n this.reservationsInput.addEventListener('invalid', e => this.invalidInput.emit(e));\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n\n private handleMessageEvent(event) {\n if (event.data.source !== 'booking') return;\n const action = event.data.type;\n const value = event.data.message;\n if (localStorage.getItem('debug')) console.log(`Received an action:${action}`, event.data);\n\n if (action === 'error') {\n if (value.fields?.reservation) {\n salla.notify.error(value.fields.reservation[0]);\n return;\n }\n const errorList = Object.values(value.fields || [value.message]).flat().map(error => `<li>${error}</li>`).join('');\n salla.notify.error(`<ul>${errorList}</ul>`);\n }\n\n if (action === 'success') {\n if (Number(value.productId) !== Number(this.productId)) return;\n this.reservations = value.data.reservations.map(schedule => {\n if (schedule.time && schedule.time.length > 0) {\n const timeSlot = schedule.time[0];\n return {\n date: schedule.date,\n day: schedule.day,\n from_timestamp: timeSlot.from,\n to_timestamp: timeSlot.to,\n };\n }\n return null;\n }).filter(item => item !== null);\n\n salla.notify.success(this.bookedLabel);\n this.modal?.close();\n setTimeout(() => window.location.reload());\n }\n\n if (action === 'height') {\n this.iframe.height = value?.height + 'px';\n }\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>\n <iframe ref={iframe => (this.iframe = iframe)} src={this.bookingUrl} frameborder=\"0\"></iframe>\n </salla-modal>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return (\n <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\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) return '';\n return (\n <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span>\n {reservation.from_timestamp} - {reservation.to_timestamp}\n </span>\n </span>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n {this.option.required || this.reservations.length > 0 ? <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div> : ''}\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition=\"center\" fill=\"outline\" onClick={event => this.openBookingModal(event, false)}>\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 > 0 && (\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 </div>\n ))}\n </div>\n )}\n <input\n class=\"s-hidden\"\n name={this.option.name}\n required={this.option.required}\n value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations}\n />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n}\n"]}
@@ -103,6 +103,11 @@ export class SallaLoginModal {
103
103
  return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)
104
104
  .then(() => !((value === null || value === void 0 ? void 0 : value.withoutReload) || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));
105
105
  }
106
+ if (action == 'dispatchEvent' && value.event == 'auth::verified') {
107
+ salla.log('Ignored dispatchEvent `auth::verified` from iframe');
108
+ //we don't need to fire this event because it have listeners for it, and already it's fired/firing from `salla.auth.api.handlAfterAuthenticatedResponse` already we are handling it
109
+ return;
110
+ }
106
111
  if (action == 'dispatchEvent') {
107
112
  return salla.event.emit(value.event, ...value.payload);
108
113
  }
@@ -1 +1 @@
1
- {"version":3,"file":"salla-login-modal.js","sourceRoot":"","sources":["../../../src/components/salla-login-modal/salla-login-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, h, Method, Prop, State } from '@stencil/core';\n\n@Component({\n tag: 'salla-login-modal',\n styleUrl: 'salla-login-modal.scss'\n})\n\n\nexport class SallaLoginModal {\n constructor() {\n\n salla.event.on('login::open', (data) => {\n if (!this.isEmailAllowed && !this.isMobileAllowed) {\n salla.logger.warn('Please enable atleast one login type to use this component.');\n return;\n }\n this.withoutReload = data?.withoutReload ?? this.withoutReload;\n this.open(data);\n\n this.openModal();\n });\n\n salla.event.on('modal::close', (data) => {\n if (this.iframe) this.sendMessageToIframe({\n source: 'login',\n type: 'modal_closed',\n data,\n })\n })\n\n salla.onReady(() => {\n this.api = salla.config.get('store.api');\n this.storeId = salla.config.get('store.id');\n });\n }\n\n @Element() host: HTMLElement;\n /**\n * Does the merchant allow to login using email\n */\n @Prop({ mutable: true }) isEmailAllowed: boolean;\n /**\n * Does the merchant/current location for visitor allow to login using mobile, By default outside KSA is `false`\n */\n @Prop({ mutable: true }) isMobileAllowed: boolean = true;\n /**\n * Does the merchant require registration with email & mobile\n */\n @Prop({ mutable: true }) isEmailRequired: boolean = false;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop({ reflect: true }) supportWebAuth: boolean = true;\n\n /**\n * Display the login inline\n */\n @Prop({ reflect: true }) inline: boolean;\n /**\n * The store ID for authentication\n */\n @Prop({ mutable: true }) storeId: string | number;\n /**\n * The API endpoint for authentication\n */\n @Prop() api: string;\n /**\n * Custom headers to be sent with API requests\n */\n @Prop({ mutable: true }) headers: { [key: string]: string } | string;\n /**\n * Reload after a successful login\n */\n @Prop({ mutable: true }) withoutReload: boolean = false;\n\n private modal: HTMLSallaModalElement;\n\n private iframe: HTMLIFrameElement;\n private createPassKey: Window\n\n private htmlElement: HTMLElement = document.documentElement;\n\n @State() messages: object[] = [];\n @State() isClosable: boolean = true;\n @State() iframeLoaded: boolean = false;\n @State() scrolling: string = 'no';\n @State() direction: string = document.dir;\n @State() canRenderIframe: boolean = false;\n\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"login\") {\n return;\n }\n\n salla.log(`salla-account:: recived an event`, event.data);\n let action = event.data.type.replace('iframe::', '');\n let value = event.data.message;\n\n //if we need skip some events\n // if (action === 'dispatchEvent' && [].includes(value.event)) {\n // return;\n // }\n\n // if (action == \"dispatchEvent\") {\n // return this.host.dispatchEvent(new CustomEvent(value.name, {\n // cancelable: true,\n // bubbles: true,\n // detail: value.payload\n // }));\n // }\n\n if (action == 'ready') {\n if (value.isPasskeyPage) {\n this.createPassKey.postMessage({ source: \"login\", type: \"init_passkey_page\", data: {\n token: salla.storage.get('token'),\n store_id: salla.config.get('store.id'),\n locale: salla.config.get('user.language_code'),\n redirect: salla.config.get('store.url')\n }}, salla.config.get('login.url'));\n\n return;\n }\n this.handleIframeReadyAction();\n return;\n }\n\n if (action == 'height') {\n return (this.iframe.height = value?.height + 'px');\n }\n\n //share the iframe storage, so login too\n if (action == \"storage\") {\n return this.handleIframeStorageAction(value);\n }\n // if (action == \"success\") {\n // this.isClosable = true;\n // confetti.startConfetti(1200, 50, 150);\n // }\n if (action == \"scrolling\") {\n this.scrolling = value;\n this.isClosable = false;\n return;\n }\n\n if (action == \"direction\") {\n return document.dir = this.direction = value ? \"rtl\" : \"ltr\";\n }\n\n if (action == 'notify') {\n return salla.notify[value.type](value.message);\n }\n\n // temporary condition until we handle both cases separately\n if (action == 'authenticated' || action == 'authenticated_web_auth') {\n !value?.withoutClose && this.close();\n return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)\n .then(() => !(value?.withoutReload || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));\n }\n\n if (action == 'dispatchEvent') {\n return salla.event.emit(value.event, ...value.payload);\n }\n\n if (action == 'reload') {\n if (value?.withClose) this.modal.close();\n return window.location.reload();\n }\n\n if (action === 'open_page') {\n return window.location.href = value.url;\n }\n\n if (action === 'open_passkey_page') {\n this.createPassKey = window.open(`${salla.config.get('login.url')}/create-passkey`);\n return;\n }\n\n\n if (action == \"close\") {\n this.close();\n }\n });\n\n this.observeDarkModeChanges();\n\n setTimeout(() => Salla.event.emit('salla-login::ready'), 1);\n }\n /**\n * Open login component\n */\n @Method()\n async open(_event = null) {\n /**\n * This is a workaround until we remove all the user objet from twig files\n * When the user is already login, let's reload the page\n */\n if (!salla.config.isGuest()) {\n if (!this.withoutReload) {\n return location.reload();\n }\n // Fire an event if withoutReload is true\n return;\n }\n\n return this.modal.open();\n }\n\n private close(){\n Salla.event.emit('salla-login::closing');\n this.modal.close();\n this.iframeLoaded = false;\n this.canRenderIframe = false;\n this.host.dispatchEvent(new CustomEvent('salla-login:closed', {\n cancelable: true,\n bubbles: true,\n detail: null\n }));\n Salla.event.emit('salla-login::closed');\n }\n\n private handleIframeReadyAction() {\n this.sendInitMessage();\n\n this.sendMessageToIframe({\n source: 'login',\n type: 'width',\n data: document.body.clientWidth,\n });\n }\n\n private observeDarkModeChanges() {\n const observer: MutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation: MutationRecord) => {\n if (mutation.attributeName === 'class') {\n this.sendMessageToIframe({\n source: 'login',\n type: 'darkMode',\n data: { isDark: this.htmlElement.classList.contains('dark') ? true : false },\n });\n }\n });\n });\n\n // observing the HTML element for attribute changes\n observer.observe(this.htmlElement, { attributes: true });\n }\n private async handleIframeStorageAction(value:{user?:{id:string}, token?:string}) {\n let token, cartUserId = salla.storage.get('cart.user_id');\n Object.entries(value).filter(item => !salla.storage.get(item[0]))\n .forEach(([key, value]) => {\n salla.log('Shared storage from accounts domain', key, value);\n\n let cleanedValue:any = (typeof value === 'string') ? value.replace(/^\"|\"$/g, '') : value;\n\n salla.storage.set(key, cleanedValue);\n\n if (key === 'token') {\n token = cleanedValue;\n }\n\n if (key === 'user' && cartUserId && cleanedValue.id !== cartUserId) {\n salla.cart.reset();\n }\n });\n if (token) {\n this.modal.close();\n salla.auth.event.tokenFetched(token);\n !salla.auth.api.isSessionless() && await salla.auth.api.request('auth/jwt');\n setTimeout(() => window.location.reload(), 100);\n return;\n }\n }\n\n private sendMessageToIframe(message) {\n if (!this.iframe) return;\n return this.iframe.contentWindow.postMessage(message, '*');\n }\n\n private sendInitMessage() {\n let headers = this.headers;\n try {\n headers = typeof headers === 'string' ? JSON.parse(headers) : headers;\n } catch (error) {\n console.error('Failed to parse headers!', this.headers, error);\n headers = undefined;\n }\n\n const storageObject = {\n user:salla.storage.get('user'),\n s_translations:salla.storage.get('s_translations'),\n token:salla.storage.get('token'),\n };\n\n storageObject.user || (delete storageObject.user);\n storageObject.s_translations || (delete storageObject.s_translations);\n storageObject.token || (delete storageObject.token);\n\n this.sendMessageToIframe({\n source: \"login\",\n type: \"init\",\n data: {\n id: this.storeId,\n lang: salla.lang.locale,\n isDark: this.htmlElement.classList.contains('dark') ? true : false,\n apiUrl: this.api.replace(/\\/+$/, ''),\n supportWebAuth: this.supportWebAuth,\n withoutReload: this.withoutReload,\n inline: this.inline,\n settings: salla.config.all(),\n headers: headers,\n storage: storageObject,\n }\n });\n }\n private openModal() {\n if (!this.canRenderIframe) {\n this.canRenderIframe = true;\n }\n\n this.modal.open();\n }\n\n render() {\n if (this.inline) {\n return this.getLoginDom();\n }\n return (\n <salla-modal class=\"s-login-modal\" ref={modal => this.modal = modal} width=\"xs\">\n {this.getLoginDom()}\n </salla-modal>\n );\n }\n\n\n\n private getLoginDom() {\n if (!this.canRenderIframe) return '';\n\n return <iframe src={salla.config.get('login.url', 'https://accounts.salla.com')}\n title=\"Salla Login\"\n class=\"hide-scroll\"\n loading='lazy'\n ref={iframe => { this.iframe = iframe }}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n scrolling={this.scrolling}\n frameborder=\"0\"\n width=\"100%\"\n />\n }\n}\n\n"]}
1
+ {"version":3,"file":"salla-login-modal.js","sourceRoot":"","sources":["../../../src/components/salla-login-modal/salla-login-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, h, Method, Prop, State } from '@stencil/core';\n\n@Component({\n tag: 'salla-login-modal',\n styleUrl: 'salla-login-modal.scss'\n})\n\n\nexport class SallaLoginModal {\n constructor() {\n\n salla.event.on('login::open', (data) => {\n if (!this.isEmailAllowed && !this.isMobileAllowed) {\n salla.logger.warn('Please enable atleast one login type to use this component.');\n return;\n }\n this.withoutReload = data?.withoutReload ?? this.withoutReload;\n this.open(data);\n\n this.openModal();\n });\n\n salla.event.on('modal::close', (data) => {\n if (this.iframe) this.sendMessageToIframe({\n source: 'login',\n type: 'modal_closed',\n data,\n })\n })\n\n salla.onReady(() => {\n this.api = salla.config.get('store.api');\n this.storeId = salla.config.get('store.id');\n });\n }\n\n @Element() host: HTMLElement;\n /**\n * Does the merchant allow to login using email\n */\n @Prop({ mutable: true }) isEmailAllowed: boolean;\n /**\n * Does the merchant/current location for visitor allow to login using mobile, By default outside KSA is `false`\n */\n @Prop({ mutable: true }) isMobileAllowed: boolean = true;\n /**\n * Does the merchant require registration with email & mobile\n */\n @Prop({ mutable: true }) isEmailRequired: boolean = false;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop({ reflect: true }) supportWebAuth: boolean = true;\n\n /**\n * Display the login inline\n */\n @Prop({ reflect: true }) inline: boolean;\n /**\n * The store ID for authentication\n */\n @Prop({ mutable: true }) storeId: string | number;\n /**\n * The API endpoint for authentication\n */\n @Prop() api: string;\n /**\n * Custom headers to be sent with API requests\n */\n @Prop({ mutable: true }) headers: { [key: string]: string } | string;\n /**\n * Reload after a successful login\n */\n @Prop({ mutable: true }) withoutReload: boolean = false;\n\n private modal: HTMLSallaModalElement;\n\n private iframe: HTMLIFrameElement;\n private createPassKey: Window\n\n private htmlElement: HTMLElement = document.documentElement;\n\n @State() messages: object[] = [];\n @State() isClosable: boolean = true;\n @State() iframeLoaded: boolean = false;\n @State() scrolling: string = 'no';\n @State() direction: string = document.dir;\n @State() canRenderIframe: boolean = false;\n\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"login\") {\n return;\n }\n\n salla.log(`salla-account:: recived an event`, event.data);\n let action = event.data.type.replace('iframe::', '');\n let value = event.data.message;\n\n //if we need skip some events\n // if (action === 'dispatchEvent' && [].includes(value.event)) {\n // return;\n // }\n\n // if (action == \"dispatchEvent\") {\n // return this.host.dispatchEvent(new CustomEvent(value.name, {\n // cancelable: true,\n // bubbles: true,\n // detail: value.payload\n // }));\n // }\n\n if (action == 'ready') {\n if (value.isPasskeyPage) {\n this.createPassKey.postMessage({ source: \"login\", type: \"init_passkey_page\", data: {\n token: salla.storage.get('token'),\n store_id: salla.config.get('store.id'),\n locale: salla.config.get('user.language_code'),\n redirect: salla.config.get('store.url')\n }}, salla.config.get('login.url'));\n\n return;\n }\n this.handleIframeReadyAction();\n return;\n }\n\n if (action == 'height') {\n return (this.iframe.height = value?.height + 'px');\n }\n\n //share the iframe storage, so login too\n if (action == \"storage\") {\n return this.handleIframeStorageAction(value);\n }\n // if (action == \"success\") {\n // this.isClosable = true;\n // confetti.startConfetti(1200, 50, 150);\n // }\n if (action == \"scrolling\") {\n this.scrolling = value;\n this.isClosable = false;\n return;\n }\n\n if (action == \"direction\") {\n return document.dir = this.direction = value ? \"rtl\" : \"ltr\";\n }\n\n if (action == 'notify') {\n return salla.notify[value.type](value.message);\n }\n\n // temporary condition until we handle both cases separately\n if (action == 'authenticated' || action == 'authenticated_web_auth') {\n !value?.withoutClose && this.close();\n return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)\n .then(() => !(value?.withoutReload || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));\n }\n\n if(action == 'dispatchEvent' && value.event == 'auth::verified'){\n salla.log('Ignored dispatchEvent `auth::verified` from iframe');\n //we don't need to fire this event because it have listeners for it, and already it's fired/firing from `salla.auth.api.handlAfterAuthenticatedResponse` already we are handling it\n return ;\n }\n\n if (action == 'dispatchEvent') {\n return salla.event.emit(value.event, ...value.payload);\n }\n\n if (action == 'reload') {\n if (value?.withClose) this.modal.close();\n return window.location.reload();\n }\n\n if (action === 'open_page') {\n return window.location.href = value.url;\n }\n\n if (action === 'open_passkey_page') {\n this.createPassKey = window.open(`${salla.config.get('login.url')}/create-passkey`);\n return;\n }\n\n\n if (action == \"close\") {\n this.close();\n }\n });\n\n this.observeDarkModeChanges();\n\n setTimeout(() => Salla.event.emit('salla-login::ready'), 1);\n }\n /**\n * Open login component\n */\n @Method()\n async open(_event = null) {\n /**\n * This is a workaround until we remove all the user objet from twig files\n * When the user is already login, let's reload the page\n */\n if (!salla.config.isGuest()) {\n if (!this.withoutReload) {\n return location.reload();\n }\n // Fire an event if withoutReload is true\n return;\n }\n\n return this.modal.open();\n }\n\n private close(){\n Salla.event.emit('salla-login::closing');\n this.modal.close();\n this.iframeLoaded = false;\n this.canRenderIframe = false;\n this.host.dispatchEvent(new CustomEvent('salla-login:closed', {\n cancelable: true,\n bubbles: true,\n detail: null\n }));\n Salla.event.emit('salla-login::closed');\n }\n\n private handleIframeReadyAction() {\n this.sendInitMessage();\n\n this.sendMessageToIframe({\n source: 'login',\n type: 'width',\n data: document.body.clientWidth,\n });\n }\n\n private observeDarkModeChanges() {\n const observer: MutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation: MutationRecord) => {\n if (mutation.attributeName === 'class') {\n this.sendMessageToIframe({\n source: 'login',\n type: 'darkMode',\n data: { isDark: this.htmlElement.classList.contains('dark') ? true : false },\n });\n }\n });\n });\n\n // observing the HTML element for attribute changes\n observer.observe(this.htmlElement, { attributes: true });\n }\n private async handleIframeStorageAction(value:{user?:{id:string}, token?:string}) {\n let token, cartUserId = salla.storage.get('cart.user_id');\n Object.entries(value).filter(item => !salla.storage.get(item[0]))\n .forEach(([key, value]) => {\n salla.log('Shared storage from accounts domain', key, value);\n\n let cleanedValue:any = (typeof value === 'string') ? value.replace(/^\"|\"$/g, '') : value;\n\n salla.storage.set(key, cleanedValue);\n\n if (key === 'token') {\n token = cleanedValue;\n }\n\n if (key === 'user' && cartUserId && cleanedValue.id !== cartUserId) {\n salla.cart.reset();\n }\n });\n if (token) {\n this.modal.close();\n salla.auth.event.tokenFetched(token);\n !salla.auth.api.isSessionless() && await salla.auth.api.request('auth/jwt');\n setTimeout(() => window.location.reload(), 100);\n return;\n }\n }\n\n private sendMessageToIframe(message) {\n if (!this.iframe) return;\n return this.iframe.contentWindow.postMessage(message, '*');\n }\n\n private sendInitMessage() {\n let headers = this.headers;\n try {\n headers = typeof headers === 'string' ? JSON.parse(headers) : headers;\n } catch (error) {\n console.error('Failed to parse headers!', this.headers, error);\n headers = undefined;\n }\n\n const storageObject = {\n user:salla.storage.get('user'),\n s_translations:salla.storage.get('s_translations'),\n token:salla.storage.get('token'),\n };\n\n storageObject.user || (delete storageObject.user);\n storageObject.s_translations || (delete storageObject.s_translations);\n storageObject.token || (delete storageObject.token);\n\n this.sendMessageToIframe({\n source: \"login\",\n type: \"init\",\n data: {\n id: this.storeId,\n lang: salla.lang.locale,\n isDark: this.htmlElement.classList.contains('dark') ? true : false,\n apiUrl: this.api.replace(/\\/+$/, ''),\n supportWebAuth: this.supportWebAuth,\n withoutReload: this.withoutReload,\n inline: this.inline,\n settings: salla.config.all(),\n headers: headers,\n storage: storageObject,\n }\n });\n }\n private openModal() {\n if (!this.canRenderIframe) {\n this.canRenderIframe = true;\n }\n\n this.modal.open();\n }\n\n render() {\n if (this.inline) {\n return this.getLoginDom();\n }\n return (\n <salla-modal class=\"s-login-modal\" ref={modal => this.modal = modal} width=\"xs\">\n {this.getLoginDom()}\n </salla-modal>\n );\n }\n\n\n\n private getLoginDom() {\n if (!this.canRenderIframe) return '';\n\n return <iframe src={salla.config.get('login.url', 'https://accounts.salla.com')}\n title=\"Salla Login\"\n class=\"hide-scroll\"\n loading='lazy'\n ref={iframe => { this.iframe = iframe }}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n scrolling={this.scrolling}\n frameborder=\"0\"\n width=\"100%\"\n />\n }\n}\n\n"]}
@@ -141,7 +141,7 @@ const SallaBookingField = /*@__PURE__*/ proxyCustomElement(class SallaBookingFie
141
141
  salla.notify.error(value.fields.reservation[0]);
142
142
  return;
143
143
  }
144
- const errorList = Object.values(value.fields).flat().map(error => `<li>${error}</li>`).join('');
144
+ const errorList = Object.values(value.fields || [value.message]).flat().map(error => `<li>${error}</li>`).join('');
145
145
  salla.notify.error(`<ul>${errorList}</ul>`);
146
146
  }
147
147
  if (action === 'success') {
@@ -1 +1 @@
1
- {"file":"salla-booking-field2.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,oBAAoB,GAAG,sBAAsB;;MCUtC,iBAAiB;EA2B5B;;;;;;wBAjBgC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,UAAU,CAAC;qBAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,cAAc,CAAC;uBAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,wBAAwB,CAAC;sBAC3E,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,oCAAoC,EAAE,kBAAkB,CAAC;sBACxE,EAAE;uBACA,KAAK;wBACE,EAAE;;;IAavC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;;IAElD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;GACzE;EAEO,MAAM,eAAe;IAC3B,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK;MACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO;QACzB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC;OACf,CAAC,CAAC;KACJ,CAAC;IAEF,MAAM,cAAc,CAAC,UAAU,EAAE,gCAAgC,EAAE,UAAU,CAAC,CAAC;IAC/E,MAAM,cAAc,CAAC,UAAU,EAAE,gCAAgC,EAAE,qBAAqB,CAAC,CAAC;IAC1F,MAAM,cAAc,CAAC,UAAU,EAAE,gCAAgC,EAAE,cAAc,CAAC,CAAC;IACnF,MAAM,cAAc,CAAC,UAAU,EAAE,gCAAgC,EAAE,qBAAqB,CAAC,CAAC;IAC1F,MAAM,cAAc,CAAC,UAAU,EAAE,gCAAgC,EAAE,wBAAwB,CAAC,CAAC;IAC7F,MAAM,cAAc,CAAC,UAAU,EAAE,gCAAgC,EAAE,qBAAqB,CAAC,CAAC;IAC1F,MAAM,cAAc,CAAC,UAAU,EAAE,oCAAoC,EAAE,kBAAkB,CAAC,CAAC;IAC3F,MAAM,cAAc,CAAC,UAAU,EAAE,oCAAoC,EAAE,yBAAyB,CAAC,CAAC;IAElG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACrE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAClE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;GACxE;EAEO,gBAAgB,CAAC,KAAU,EAAE,WAAW,GAAG,KAAK;IACtD,IAAI,WAAW,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;MACzG,OAAO;KACR;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;MAC1B,IAAI,CAAC,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;MACvE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;MACpC,OAAO;KACR;IACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;OACrC,IAAI,CAAC,CAAC,IAAI;MACT,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;OACzC;MACD,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KAC5F,CAAC;OACD,KAAK,CAAC,CAAC,KAAK;MACX,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;MAC5D,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;KAC7C,CAAC,CAAC;GACN;EAEO,iBAAiB,CAAC,IAAI;IAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS;MAAE,OAAO;IACvC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC;MACT,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;MACrC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACnB,EAAE,GAAG,CAAC,CAAC;GACT;EAEO,mBAAmB,CAAC,KAAK,EAAE,OAAO;IACxC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;GAC3D;EAEO,oBAAoB;IAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC3D,IAAI,YAAY,IAAI,YAAY,CAAC,KAAK,EAAE;MACtC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE;QACtD,MAAM,EAAE,YAAY,CAAC,OAAO;OAC7B,CAAC,CAAC;MACH,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;MACjC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;KAC1C;GACF;EAED,iBAAiB;IACf,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;MAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KACzC;GACF;EAED,gBAAgB;IACd,MAAM,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACrG,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC5B,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE;MAC/C,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;MAC7C,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;KACzC,CAAC,CAAC;GACJ;EAEO,kBAAkB,CAAC,KAAK;;IAC9B,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;MAAE,OAAO;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IACjC,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;MAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3F,IAAI,MAAM,KAAK,OAAO,EAAE;MACtB,IAAI,MAAA,KAAK,CAAC,MAAM,0CAAE,WAAW,EAAE;QAC7B,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO;OACR;MACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;MAChG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,OAAO,CAAC,CAAC;KAC7C;IAED,IAAI,MAAM,KAAK,SAAS,EAAE;MACxB,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO;MAC/D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ;QACtD,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;UAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;UAClC,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,cAAc,EAAE,QAAQ,CAAC,IAAI;YAC7B,YAAY,EAAE,QAAQ,CAAC,EAAE;WAC1B,CAAC;SACH;QACD,OAAO,IAAI,CAAC;OACb,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;MAEjC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;MACvC,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,EAAE,CAAC;MACpB,UAAU,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;KAC5C;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE;MACvB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,IAAG,IAAI,CAAC;KAC3C;GACF;EAEO,YAAY;IAClB,QACE,mBAAa,KAAK,EAAC,uBAAuB,EAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,KAAK,EAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,UACnH,cAAQ,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAC,GAAG,GAAU,CAClF,EACd;GACH;EAED,qBAAqB,CAAC,WAAwB;IAC5C,QACE,YAAM,KAAK,EAAE,WAAW,CAAC,cAAc,GAAG,uCAAuC,GAAG,EAAE,IACpF,SAAG,KAAK,EAAC,mCAAmC,EAAC,SAAS,EAAE,QAAQ,GAAM,EACrE,WAAW,CAAC,IAAI,CACZ,EACP;GACH;EAED,qBAAqB,CAAC,WAAwB;IAC5C,IAAI,CAAC,WAAW,CAAC,cAAc;MAAE,OAAO,EAAE,CAAC;IAC3C,QACE,YAAM,KAAK,EAAC,mCAAmC,IAC7C,SAAG,KAAK,EAAC,mCAAmC,EAAC,SAAS,EAAE,QAAQ,GAAM,EACtE,gBACG,WAAW,CAAC,cAAc,SAAK,WAAW,CAAC,YAAY,CACnD,CACF,EACP;GACH;EAED,MAAM;IACJ,QACE,EAAC,IAAI,QACH,WAAK,KAAK,EAAC,sBAAsB,IAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAI,WAAK,KAAK,EAAC,uBAAuB,IACzF,gBAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAQ,CACzC,GAAG,EAAE,EACX,oBAAc,KAAK,EAAC,0BAA0B,EAAC,IAAI,EAAC,OAAO,EAAC,cAAc,EAAC,QAAQ,EAAC,IAAI,EAAC,SAAS,EAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,IACtJ,YAAM,KAAK,EAAC,kCAAkC,IAC5C,YAAM,SAAS,EAAE,WAAW,GAAS,EACpC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CACzD,CACM,CACX,EACL,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,KAC3B,WAAK,KAAK,EAAC,8BAA8B,IACtC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,MACxC,WAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAC,mCAAmC,IACvD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,EACvC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CACpC,CACP,CAAC,CACE,CACP,EACD,aACE,KAAK,EAAC,UAAU,EAChB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAC9B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC1F,GAAG,EAAE,YAAY,IAAI,IAAI,CAAC,iBAAiB,GAAG,YAAY,GAC1D,EACD,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CACnC,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/salla-booking-field/salla-booking-field.scss?tag=salla-booking-field","src/components/salla-booking-field/salla-booking-field.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\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss',\n})\nexport class SallaBookingField {\n /**\n * The booking option configuration\n */\n @Prop() option: Option;\n /**\n * The ID of the product for which the booking is being made\n */\n @Prop() productId: number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n @State() reservationsInput: HTMLInputElement;\n\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n\n constructor() {\n // Load translations\n salla.lang.onLoaded(() => this.setTranslations());\n // Register event listeners\n Salla.event.on('booking::open', (data) => this.handleBookingOpen(data));\n }\n\n private async setTranslations() {\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 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.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 private openBookingModal(event: any, afterReload = false) {\n if (afterReload && (!event.detail || typeof event.detail !== 'number' || event.detail !== this.productId)) {\n return;\n }\n if (salla.config.isGuest()) {\n this.setAfterReloadEvent('booking::open-after-reload', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response || error);\n });\n }\n\n private handleBookingOpen(data) {\n if (data.id !== this.productId) return;\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate);\n this.modal.open();\n }, 100);\n }\n\n private setAfterReloadEvent(event, payload) {\n salla.storage.set('afterReloadEvent', { event, payload });\n }\n\n private emitAfterReloadEvent() {\n const eventDetails = salla.storage.get('afterReloadEvent');\n if (eventDetails && eventDetails.event) {\n const customEvent = new CustomEvent(eventDetails.event, {\n detail: eventDetails.payload\n });\n window.dispatchEvent(customEvent)\n salla.storage.remove('afterReloadEvent');\n }\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details;\n }\n }\n\n componentDidLoad() {\n window.addEventListener('booking::open-after-reload', (event) => this.openBookingModal(event, true));\n this.emitAfterReloadEvent();\n window.addEventListener('message', this.handleMessageEvent.bind(this));\n this.reservationsInput.addEventListener('invalid', e => this.invalidInput.emit(e));\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n\n private handleMessageEvent(event) {\n if (event.data.source !== 'booking') return;\n const action = event.data.type;\n const value = event.data.message;\n if (localStorage.getItem('debug')) console.log(`Received an action:${action}`, event.data);\n\n if (action === 'error') {\n if (value.fields?.reservation) {\n salla.notify.error(value.fields.reservation[0]);\n return;\n }\n const errorList = Object.values(value.fields).flat().map(error => `<li>${error}</li>`).join('');\n salla.notify.error(`<ul>${errorList}</ul>`);\n }\n\n if (action === 'success') {\n if (Number(value.productId) !== Number(this.productId)) return;\n this.reservations = value.data.reservations.map(schedule => {\n if (schedule.time && schedule.time.length > 0) {\n const timeSlot = schedule.time[0];\n return {\n date: schedule.date,\n day: schedule.day,\n from_timestamp: timeSlot.from,\n to_timestamp: timeSlot.to,\n };\n }\n return null;\n }).filter(item => item !== null);\n\n salla.notify.success(this.bookedLabel);\n this.modal?.close();\n setTimeout(() => window.location.reload());\n }\n\n if (action === 'height') {\n this.iframe.height = value?.height + 'px';\n }\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>\n <iframe ref={iframe => (this.iframe = iframe)} src={this.bookingUrl} frameborder=\"0\"></iframe>\n </salla-modal>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return (\n <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\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) return '';\n return (\n <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span>\n {reservation.from_timestamp} - {reservation.to_timestamp}\n </span>\n </span>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n {this.option.required || this.reservations.length > 0 ? <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div> : ''}\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition=\"center\" fill=\"outline\" onClick={event => this.openBookingModal(event, false)}>\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 > 0 && (\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 </div>\n ))}\n </div>\n )}\n <input \n class=\"s-hidden\" \n name={this.option.name} \n required={this.option.required} \n value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations} \n />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"salla-booking-field2.js","mappings":"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","names":[],"sources":["src/components/salla-booking-field/salla-booking-field.scss?tag=salla-booking-field","src/components/salla-booking-field/salla-booking-field.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\n@Component({\n tag: 'salla-booking-field',\n styleUrl: 'salla-booking-field.scss',\n})\nexport class SallaBookingField {\n /**\n * The booking option configuration\n */\n @Prop() option: Option;\n /**\n * The ID of the product for which the booking is being made\n */\n @Prop() productId: number;\n @Element() host: HTMLElement;\n @State() bookNowLabel: string = salla.lang.get('pages.cart.book_an_appointment', 'حجز موعد');\n @State() editLabel: string = salla.lang.get('pages.cart.edit_an_appointment', 'تعديل الموعد');\n @State() bookedLabel: string = salla.lang.get('pages.cart.booked_successfully', 'تمت اضافة الموعد بنجاح');\n @State() selectDate: string = salla.lang.get('pages.cart.select_appointment_date', 'حدد تاريخ الموعد');\n @State() bookingUrl: string = '';\n @State() iframeReady: boolean = false;\n @State() reservations: Reservation[] = [];\n @State() reservationsInput: HTMLInputElement;\n\n /**\n * Event emitted when the input is invalid.\n */\n @Event() invalidInput: EventEmitter<any>;\n\n private modal: HTMLSallaModalElement;\n private iframe: HTMLIFrameElement;\n\n constructor() {\n // Load translations\n salla.lang.onLoaded(() => this.setTranslations());\n // Register event listeners\n Salla.event.on('booking::open', (data) => this.handleBookingOpen(data));\n }\n\n private async setTranslations() {\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 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.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 private openBookingModal(event: any, afterReload = false) {\n if (afterReload && (!event.detail || typeof event.detail !== 'number' || event.detail !== this.productId)) {\n return;\n }\n if (salla.config.isGuest()) {\n this.setAfterReloadEvent('booking::open-after-reload', this.productId);\n salla.event.dispatch('login::open');\n return;\n }\n salla.booking.add(this.productId, false)\n .then((resp) => {\n if (resp.data.redirect.to !== 'booking') {\n throw new Error('Unexpected redirect!');\n }\n salla.event.dispatch('booking::open', { url: resp.data.redirect.url, id: this.productId });\n })\n .catch((error) => {\n salla.error(salla.lang.get('common.errors.error_occurred'));\n salla.logger.error(error.response || error);\n });\n }\n\n private handleBookingOpen(data) {\n if (data.id !== this.productId) return;\n this.bookingUrl = salla.url.addParamToUrl('product_id', data.id, data.url);\n this.iframeReady = true;\n setTimeout(() => {\n this.modal.setTitle(this.selectDate);\n this.modal.open();\n }, 100);\n }\n\n private setAfterReloadEvent(event, payload) {\n salla.storage.set('afterReloadEvent', { event, payload });\n }\n\n private emitAfterReloadEvent() {\n const eventDetails = salla.storage.get('afterReloadEvent');\n if (eventDetails && eventDetails.event) {\n const customEvent = new CustomEvent(eventDetails.event, {\n detail: eventDetails.payload\n });\n window.dispatchEvent(customEvent)\n salla.storage.remove('afterReloadEvent');\n }\n }\n\n componentWillLoad() {\n if (this.option && this.option.details.length) {\n this.reservations = this.option.details;\n }\n }\n\n componentDidLoad() {\n window.addEventListener('booking::open-after-reload', (event) => this.openBookingModal(event, true));\n this.emitAfterReloadEvent();\n window.addEventListener('message', this.handleMessageEvent.bind(this));\n this.reservationsInput.addEventListener('invalid', e => this.invalidInput.emit(e));\n this.reservationsInput.addEventListener('input', () => {\n this.reservationsInput.setCustomValidity('');\n this.reservationsInput.reportValidity();\n });\n }\n\n private handleMessageEvent(event) {\n if (event.data.source !== 'booking') return;\n const action = event.data.type;\n const value = event.data.message;\n if (localStorage.getItem('debug')) console.log(`Received an action:${action}`, event.data);\n\n if (action === 'error') {\n if (value.fields?.reservation) {\n salla.notify.error(value.fields.reservation[0]);\n return;\n }\n const errorList = Object.values(value.fields || [value.message]).flat().map(error => `<li>${error}</li>`).join('');\n salla.notify.error(`<ul>${errorList}</ul>`);\n }\n\n if (action === 'success') {\n if (Number(value.productId) !== Number(this.productId)) return;\n this.reservations = value.data.reservations.map(schedule => {\n if (schedule.time && schedule.time.length > 0) {\n const timeSlot = schedule.time[0];\n return {\n date: schedule.date,\n day: schedule.day,\n from_timestamp: timeSlot.from,\n to_timestamp: timeSlot.to,\n };\n }\n return null;\n }).filter(item => item !== null);\n\n salla.notify.success(this.bookedLabel);\n this.modal?.close();\n setTimeout(() => window.location.reload());\n }\n\n if (action === 'height') {\n this.iframe.height = value?.height + 'px';\n }\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>\n <iframe ref={iframe => (this.iframe = iframe)} src={this.bookingUrl} frameborder=\"0\"></iframe>\n </salla-modal>\n );\n }\n\n renderReservationDate(reservation: Reservation) {\n return (\n <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\n renderReservationTime(reservation: Reservation) {\n if (!reservation.from_timestamp) return '';\n return (\n <span class=\"s-booking-field-reservations-time\">\n <i class=\"s-booking-field-reservations-icon\" innerHTML={TimeIcon}></i>\n <span>\n {reservation.from_timestamp} - {reservation.to_timestamp}\n </span>\n </span>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"s-booking-field-main\">\n {this.option.required || this.reservations.length > 0 ? <div class=\"s-booking-field-price\">\n <span>{salla.money(this.option.price)}</span>\n </div> : ''}\n <salla-button class=\"s-booking-field-book-now\" size=\"small\" loaderPosition=\"center\" fill=\"outline\" onClick={event => this.openBookingModal(event, false)}>\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 > 0 && (\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 </div>\n ))}\n </div>\n )}\n <input\n class=\"s-hidden\"\n name={this.option.name}\n required={this.option.required}\n value={JSON.stringify(this.reservations) === '[]' ? '' : JSON.stringify(this.reservations)}\n ref={reservations => this.reservationsInput = reservations}\n />\n {this.iframeReady && this.bookingModal()}\n </Host>\n );\n }\n}\n"],"version":3}
@@ -110,6 +110,11 @@ const SallaLoginModal$1 = /*@__PURE__*/ proxyCustomElement(class SallaLoginModal
110
110
  return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)
111
111
  .then(() => !((value === null || value === void 0 ? void 0 : value.withoutReload) || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));
112
112
  }
113
+ if (action == 'dispatchEvent' && value.event == 'auth::verified') {
114
+ salla.log('Ignored dispatchEvent `auth::verified` from iframe');
115
+ //we don't need to fire this event because it have listeners for it, and already it's fired/firing from `salla.auth.api.handlAfterAuthenticatedResponse` already we are handling it
116
+ return;
117
+ }
113
118
  if (action == 'dispatchEvent') {
114
119
  return salla.event.emit(value.event, ...value.payload);
115
120
  }
@@ -1 +1 @@
1
- {"file":"salla-login-modal.js","mappings":"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","names":["SallaLoginModal"],"sources":["src/components/salla-login-modal/salla-login-modal.scss?tag=salla-login-modal","src/components/salla-login-modal/salla-login-modal.tsx"],"sourcesContent":["/*\n* Salla Login Component: login popup modal\n* You can use these classes to target the elements in the component.\n*/\niframe {\n -moz-transition: height .3s;\n -ms-transition: height .3s;\n -o-transition: height .3s;\n -webkit-transition: height .3s;\n transition: height .3s;\n width: 100%;\n}\n.s-login-modal {\n &-sub-title {\n\n }\n &-main-btn {\n \n }\n &-main-btn-icon {\n\n }\n &-main-btn-text {\n\n }\n &-main-btn-arrow {\n\n }\n &-label {\n\n }\n &-input {\n\n }\n &-otp-input {\n\n }\n &-link {\n\n }\n &-error-message {\n\n }\n &-wrapper {\n\n }\n &-tab {\n\n }\n &-active {\n\n }\n &-unactive {\n\n }\n}\n","import { Component, Element, h, Method, Prop, State } from '@stencil/core';\n\n@Component({\n tag: 'salla-login-modal',\n styleUrl: 'salla-login-modal.scss'\n})\n\n\nexport class SallaLoginModal {\n constructor() {\n\n salla.event.on('login::open', (data) => {\n if (!this.isEmailAllowed && !this.isMobileAllowed) {\n salla.logger.warn('Please enable atleast one login type to use this component.');\n return;\n }\n this.withoutReload = data?.withoutReload ?? this.withoutReload;\n this.open(data);\n\n this.openModal();\n });\n\n salla.event.on('modal::close', (data) => {\n if (this.iframe) this.sendMessageToIframe({\n source: 'login',\n type: 'modal_closed',\n data,\n })\n })\n\n salla.onReady(() => {\n this.api = salla.config.get('store.api');\n this.storeId = salla.config.get('store.id');\n });\n }\n\n @Element() host: HTMLElement;\n /**\n * Does the merchant allow to login using email\n */\n @Prop({ mutable: true }) isEmailAllowed: boolean;\n /**\n * Does the merchant/current location for visitor allow to login using mobile, By default outside KSA is `false`\n */\n @Prop({ mutable: true }) isMobileAllowed: boolean = true;\n /**\n * Does the merchant require registration with email & mobile\n */\n @Prop({ mutable: true }) isEmailRequired: boolean = false;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop({ reflect: true }) supportWebAuth: boolean = true;\n\n /**\n * Display the login inline\n */\n @Prop({ reflect: true }) inline: boolean;\n /**\n * The store ID for authentication\n */\n @Prop({ mutable: true }) storeId: string | number;\n /**\n * The API endpoint for authentication\n */\n @Prop() api: string;\n /**\n * Custom headers to be sent with API requests\n */\n @Prop({ mutable: true }) headers: { [key: string]: string } | string;\n /**\n * Reload after a successful login\n */\n @Prop({ mutable: true }) withoutReload: boolean = false;\n\n private modal: HTMLSallaModalElement;\n\n private iframe: HTMLIFrameElement;\n private createPassKey: Window\n\n private htmlElement: HTMLElement = document.documentElement;\n\n @State() messages: object[] = [];\n @State() isClosable: boolean = true;\n @State() iframeLoaded: boolean = false;\n @State() scrolling: string = 'no';\n @State() direction: string = document.dir;\n @State() canRenderIframe: boolean = false;\n\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"login\") {\n return;\n }\n\n salla.log(`salla-account:: recived an event`, event.data);\n let action = event.data.type.replace('iframe::', '');\n let value = event.data.message;\n\n //if we need skip some events\n // if (action === 'dispatchEvent' && [].includes(value.event)) {\n // return;\n // }\n\n // if (action == \"dispatchEvent\") {\n // return this.host.dispatchEvent(new CustomEvent(value.name, {\n // cancelable: true,\n // bubbles: true,\n // detail: value.payload\n // }));\n // }\n\n if (action == 'ready') {\n if (value.isPasskeyPage) {\n this.createPassKey.postMessage({ source: \"login\", type: \"init_passkey_page\", data: {\n token: salla.storage.get('token'),\n store_id: salla.config.get('store.id'),\n locale: salla.config.get('user.language_code'),\n redirect: salla.config.get('store.url')\n }}, salla.config.get('login.url'));\n\n return;\n }\n this.handleIframeReadyAction();\n return;\n }\n\n if (action == 'height') {\n return (this.iframe.height = value?.height + 'px');\n }\n\n //share the iframe storage, so login too\n if (action == \"storage\") {\n return this.handleIframeStorageAction(value);\n }\n // if (action == \"success\") {\n // this.isClosable = true;\n // confetti.startConfetti(1200, 50, 150);\n // }\n if (action == \"scrolling\") {\n this.scrolling = value;\n this.isClosable = false;\n return;\n }\n\n if (action == \"direction\") {\n return document.dir = this.direction = value ? \"rtl\" : \"ltr\";\n }\n\n if (action == 'notify') {\n return salla.notify[value.type](value.message);\n }\n\n // temporary condition until we handle both cases separately\n if (action == 'authenticated' || action == 'authenticated_web_auth') {\n !value?.withoutClose && this.close();\n return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)\n .then(() => !(value?.withoutReload || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));\n }\n\n if (action == 'dispatchEvent') {\n return salla.event.emit(value.event, ...value.payload);\n }\n\n if (action == 'reload') {\n if (value?.withClose) this.modal.close();\n return window.location.reload();\n }\n\n if (action === 'open_page') {\n return window.location.href = value.url;\n }\n\n if (action === 'open_passkey_page') {\n this.createPassKey = window.open(`${salla.config.get('login.url')}/create-passkey`);\n return;\n }\n\n\n if (action == \"close\") {\n this.close();\n }\n });\n\n this.observeDarkModeChanges();\n\n setTimeout(() => Salla.event.emit('salla-login::ready'), 1);\n }\n /**\n * Open login component\n */\n @Method()\n async open(_event = null) {\n /**\n * This is a workaround until we remove all the user objet from twig files\n * When the user is already login, let's reload the page\n */\n if (!salla.config.isGuest()) {\n if (!this.withoutReload) {\n return location.reload();\n }\n // Fire an event if withoutReload is true\n return;\n }\n\n return this.modal.open();\n }\n\n private close(){\n Salla.event.emit('salla-login::closing');\n this.modal.close();\n this.iframeLoaded = false;\n this.canRenderIframe = false;\n this.host.dispatchEvent(new CustomEvent('salla-login:closed', {\n cancelable: true,\n bubbles: true,\n detail: null\n }));\n Salla.event.emit('salla-login::closed');\n }\n\n private handleIframeReadyAction() {\n this.sendInitMessage();\n\n this.sendMessageToIframe({\n source: 'login',\n type: 'width',\n data: document.body.clientWidth,\n });\n }\n\n private observeDarkModeChanges() {\n const observer: MutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation: MutationRecord) => {\n if (mutation.attributeName === 'class') {\n this.sendMessageToIframe({\n source: 'login',\n type: 'darkMode',\n data: { isDark: this.htmlElement.classList.contains('dark') ? true : false },\n });\n }\n });\n });\n\n // observing the HTML element for attribute changes\n observer.observe(this.htmlElement, { attributes: true });\n }\n private async handleIframeStorageAction(value:{user?:{id:string}, token?:string}) {\n let token, cartUserId = salla.storage.get('cart.user_id');\n Object.entries(value).filter(item => !salla.storage.get(item[0]))\n .forEach(([key, value]) => {\n salla.log('Shared storage from accounts domain', key, value);\n\n let cleanedValue:any = (typeof value === 'string') ? value.replace(/^\"|\"$/g, '') : value;\n\n salla.storage.set(key, cleanedValue);\n\n if (key === 'token') {\n token = cleanedValue;\n }\n\n if (key === 'user' && cartUserId && cleanedValue.id !== cartUserId) {\n salla.cart.reset();\n }\n });\n if (token) {\n this.modal.close();\n salla.auth.event.tokenFetched(token);\n !salla.auth.api.isSessionless() && await salla.auth.api.request('auth/jwt');\n setTimeout(() => window.location.reload(), 100);\n return;\n }\n }\n\n private sendMessageToIframe(message) {\n if (!this.iframe) return;\n return this.iframe.contentWindow.postMessage(message, '*');\n }\n\n private sendInitMessage() {\n let headers = this.headers;\n try {\n headers = typeof headers === 'string' ? JSON.parse(headers) : headers;\n } catch (error) {\n console.error('Failed to parse headers!', this.headers, error);\n headers = undefined;\n }\n\n const storageObject = {\n user:salla.storage.get('user'),\n s_translations:salla.storage.get('s_translations'),\n token:salla.storage.get('token'),\n };\n\n storageObject.user || (delete storageObject.user);\n storageObject.s_translations || (delete storageObject.s_translations);\n storageObject.token || (delete storageObject.token);\n\n this.sendMessageToIframe({\n source: \"login\",\n type: \"init\",\n data: {\n id: this.storeId,\n lang: salla.lang.locale,\n isDark: this.htmlElement.classList.contains('dark') ? true : false,\n apiUrl: this.api.replace(/\\/+$/, ''),\n supportWebAuth: this.supportWebAuth,\n withoutReload: this.withoutReload,\n inline: this.inline,\n settings: salla.config.all(),\n headers: headers,\n storage: storageObject,\n }\n });\n }\n private openModal() {\n if (!this.canRenderIframe) {\n this.canRenderIframe = true;\n }\n\n this.modal.open();\n }\n\n render() {\n if (this.inline) {\n return this.getLoginDom();\n }\n return (\n <salla-modal class=\"s-login-modal\" ref={modal => this.modal = modal} width=\"xs\">\n {this.getLoginDom()}\n </salla-modal>\n );\n }\n\n\n\n private getLoginDom() {\n if (!this.canRenderIframe) return '';\n\n return <iframe src={salla.config.get('login.url', 'https://accounts.salla.com')}\n title=\"Salla Login\"\n class=\"hide-scroll\"\n loading='lazy'\n ref={iframe => { this.iframe = iframe }}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n scrolling={this.scrolling}\n frameborder=\"0\"\n width=\"100%\"\n />\n }\n}\n\n"],"version":3}
1
+ {"file":"salla-login-modal.js","mappings":"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","names":["SallaLoginModal"],"sources":["src/components/salla-login-modal/salla-login-modal.scss?tag=salla-login-modal","src/components/salla-login-modal/salla-login-modal.tsx"],"sourcesContent":["/*\n* Salla Login Component: login popup modal\n* You can use these classes to target the elements in the component.\n*/\niframe {\n -moz-transition: height .3s;\n -ms-transition: height .3s;\n -o-transition: height .3s;\n -webkit-transition: height .3s;\n transition: height .3s;\n width: 100%;\n}\n.s-login-modal {\n &-sub-title {\n\n }\n &-main-btn {\n \n }\n &-main-btn-icon {\n\n }\n &-main-btn-text {\n\n }\n &-main-btn-arrow {\n\n }\n &-label {\n\n }\n &-input {\n\n }\n &-otp-input {\n\n }\n &-link {\n\n }\n &-error-message {\n\n }\n &-wrapper {\n\n }\n &-tab {\n\n }\n &-active {\n\n }\n &-unactive {\n\n }\n}\n","import { Component, Element, h, Method, Prop, State } from '@stencil/core';\n\n@Component({\n tag: 'salla-login-modal',\n styleUrl: 'salla-login-modal.scss'\n})\n\n\nexport class SallaLoginModal {\n constructor() {\n\n salla.event.on('login::open', (data) => {\n if (!this.isEmailAllowed && !this.isMobileAllowed) {\n salla.logger.warn('Please enable atleast one login type to use this component.');\n return;\n }\n this.withoutReload = data?.withoutReload ?? this.withoutReload;\n this.open(data);\n\n this.openModal();\n });\n\n salla.event.on('modal::close', (data) => {\n if (this.iframe) this.sendMessageToIframe({\n source: 'login',\n type: 'modal_closed',\n data,\n })\n })\n\n salla.onReady(() => {\n this.api = salla.config.get('store.api');\n this.storeId = salla.config.get('store.id');\n });\n }\n\n @Element() host: HTMLElement;\n /**\n * Does the merchant allow to login using email\n */\n @Prop({ mutable: true }) isEmailAllowed: boolean;\n /**\n * Does the merchant/current location for visitor allow to login using mobile, By default outside KSA is `false`\n */\n @Prop({ mutable: true }) isMobileAllowed: boolean = true;\n /**\n * Does the merchant require registration with email & mobile\n */\n @Prop({ mutable: true }) isEmailRequired: boolean = false;\n\n /**\n * Once the api verify success, it will be login the customer in web pages\n */\n @Prop({ reflect: true }) supportWebAuth: boolean = true;\n\n /**\n * Display the login inline\n */\n @Prop({ reflect: true }) inline: boolean;\n /**\n * The store ID for authentication\n */\n @Prop({ mutable: true }) storeId: string | number;\n /**\n * The API endpoint for authentication\n */\n @Prop() api: string;\n /**\n * Custom headers to be sent with API requests\n */\n @Prop({ mutable: true }) headers: { [key: string]: string } | string;\n /**\n * Reload after a successful login\n */\n @Prop({ mutable: true }) withoutReload: boolean = false;\n\n private modal: HTMLSallaModalElement;\n\n private iframe: HTMLIFrameElement;\n private createPassKey: Window\n\n private htmlElement: HTMLElement = document.documentElement;\n\n @State() messages: object[] = [];\n @State() isClosable: boolean = true;\n @State() iframeLoaded: boolean = false;\n @State() scrolling: string = 'no';\n @State() direction: string = document.dir;\n @State() canRenderIframe: boolean = false;\n\n componentDidLoad() {\n window.addEventListener('message', (event) => {\n if (event.data.source != \"login\") {\n return;\n }\n\n salla.log(`salla-account:: recived an event`, event.data);\n let action = event.data.type.replace('iframe::', '');\n let value = event.data.message;\n\n //if we need skip some events\n // if (action === 'dispatchEvent' && [].includes(value.event)) {\n // return;\n // }\n\n // if (action == \"dispatchEvent\") {\n // return this.host.dispatchEvent(new CustomEvent(value.name, {\n // cancelable: true,\n // bubbles: true,\n // detail: value.payload\n // }));\n // }\n\n if (action == 'ready') {\n if (value.isPasskeyPage) {\n this.createPassKey.postMessage({ source: \"login\", type: \"init_passkey_page\", data: {\n token: salla.storage.get('token'),\n store_id: salla.config.get('store.id'),\n locale: salla.config.get('user.language_code'),\n redirect: salla.config.get('store.url')\n }}, salla.config.get('login.url'));\n\n return;\n }\n this.handleIframeReadyAction();\n return;\n }\n\n if (action == 'height') {\n return (this.iframe.height = value?.height + 'px');\n }\n\n //share the iframe storage, so login too\n if (action == \"storage\") {\n return this.handleIframeStorageAction(value);\n }\n // if (action == \"success\") {\n // this.isClosable = true;\n // confetti.startConfetti(1200, 50, 150);\n // }\n if (action == \"scrolling\") {\n this.scrolling = value;\n this.isClosable = false;\n return;\n }\n\n if (action == \"direction\") {\n return document.dir = this.direction = value ? \"rtl\" : \"ltr\";\n }\n\n if (action == 'notify') {\n return salla.notify[value.type](value.message);\n }\n\n // temporary condition until we handle both cases separately\n if (action == 'authenticated' || action == 'authenticated_web_auth') {\n !value?.withoutClose && this.close();\n return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)\n .then(() => !(value?.withoutReload || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));\n }\n\n if(action == 'dispatchEvent' && value.event == 'auth::verified'){\n salla.log('Ignored dispatchEvent `auth::verified` from iframe');\n //we don't need to fire this event because it have listeners for it, and already it's fired/firing from `salla.auth.api.handlAfterAuthenticatedResponse` already we are handling it\n return ;\n }\n\n if (action == 'dispatchEvent') {\n return salla.event.emit(value.event, ...value.payload);\n }\n\n if (action == 'reload') {\n if (value?.withClose) this.modal.close();\n return window.location.reload();\n }\n\n if (action === 'open_page') {\n return window.location.href = value.url;\n }\n\n if (action === 'open_passkey_page') {\n this.createPassKey = window.open(`${salla.config.get('login.url')}/create-passkey`);\n return;\n }\n\n\n if (action == \"close\") {\n this.close();\n }\n });\n\n this.observeDarkModeChanges();\n\n setTimeout(() => Salla.event.emit('salla-login::ready'), 1);\n }\n /**\n * Open login component\n */\n @Method()\n async open(_event = null) {\n /**\n * This is a workaround until we remove all the user objet from twig files\n * When the user is already login, let's reload the page\n */\n if (!salla.config.isGuest()) {\n if (!this.withoutReload) {\n return location.reload();\n }\n // Fire an event if withoutReload is true\n return;\n }\n\n return this.modal.open();\n }\n\n private close(){\n Salla.event.emit('salla-login::closing');\n this.modal.close();\n this.iframeLoaded = false;\n this.canRenderIframe = false;\n this.host.dispatchEvent(new CustomEvent('salla-login:closed', {\n cancelable: true,\n bubbles: true,\n detail: null\n }));\n Salla.event.emit('salla-login::closed');\n }\n\n private handleIframeReadyAction() {\n this.sendInitMessage();\n\n this.sendMessageToIframe({\n source: 'login',\n type: 'width',\n data: document.body.clientWidth,\n });\n }\n\n private observeDarkModeChanges() {\n const observer: MutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation: MutationRecord) => {\n if (mutation.attributeName === 'class') {\n this.sendMessageToIframe({\n source: 'login',\n type: 'darkMode',\n data: { isDark: this.htmlElement.classList.contains('dark') ? true : false },\n });\n }\n });\n });\n\n // observing the HTML element for attribute changes\n observer.observe(this.htmlElement, { attributes: true });\n }\n private async handleIframeStorageAction(value:{user?:{id:string}, token?:string}) {\n let token, cartUserId = salla.storage.get('cart.user_id');\n Object.entries(value).filter(item => !salla.storage.get(item[0]))\n .forEach(([key, value]) => {\n salla.log('Shared storage from accounts domain', key, value);\n\n let cleanedValue:any = (typeof value === 'string') ? value.replace(/^\"|\"$/g, '') : value;\n\n salla.storage.set(key, cleanedValue);\n\n if (key === 'token') {\n token = cleanedValue;\n }\n\n if (key === 'user' && cartUserId && cleanedValue.id !== cartUserId) {\n salla.cart.reset();\n }\n });\n if (token) {\n this.modal.close();\n salla.auth.event.tokenFetched(token);\n !salla.auth.api.isSessionless() && await salla.auth.api.request('auth/jwt');\n setTimeout(() => window.location.reload(), 100);\n return;\n }\n }\n\n private sendMessageToIframe(message) {\n if (!this.iframe) return;\n return this.iframe.contentWindow.postMessage(message, '*');\n }\n\n private sendInitMessage() {\n let headers = this.headers;\n try {\n headers = typeof headers === 'string' ? JSON.parse(headers) : headers;\n } catch (error) {\n console.error('Failed to parse headers!', this.headers, error);\n headers = undefined;\n }\n\n const storageObject = {\n user:salla.storage.get('user'),\n s_translations:salla.storage.get('s_translations'),\n token:salla.storage.get('token'),\n };\n\n storageObject.user || (delete storageObject.user);\n storageObject.s_translations || (delete storageObject.s_translations);\n storageObject.token || (delete storageObject.token);\n\n this.sendMessageToIframe({\n source: \"login\",\n type: \"init\",\n data: {\n id: this.storeId,\n lang: salla.lang.locale,\n isDark: this.htmlElement.classList.contains('dark') ? true : false,\n apiUrl: this.api.replace(/\\/+$/, ''),\n supportWebAuth: this.supportWebAuth,\n withoutReload: this.withoutReload,\n inline: this.inline,\n settings: salla.config.all(),\n headers: headers,\n storage: storageObject,\n }\n });\n }\n private openModal() {\n if (!this.canRenderIframe) {\n this.canRenderIframe = true;\n }\n\n this.modal.open();\n }\n\n render() {\n if (this.inline) {\n return this.getLoginDom();\n }\n return (\n <salla-modal class=\"s-login-modal\" ref={modal => this.modal = modal} width=\"xs\">\n {this.getLoginDom()}\n </salla-modal>\n );\n }\n\n\n\n private getLoginDom() {\n if (!this.canRenderIframe) return '';\n\n return <iframe src={salla.config.get('login.url', 'https://accounts.salla.com')}\n title=\"Salla Login\"\n class=\"hide-scroll\"\n loading='lazy'\n ref={iframe => { this.iframe = iframe }}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n scrolling={this.scrolling}\n frameborder=\"0\"\n width=\"100%\"\n />\n }\n}\n\n"],"version":3}
@@ -21308,6 +21308,11 @@ const SallaLoginModal = class {
21308
21308
  return salla.auth.api.handlAfterAuthenticatedResponse(value, this.supportWebAuth)
21309
21309
  .then(() => !((value === null || value === void 0 ? void 0 : value.withoutReload) || this.withoutReload) && setTimeout(() => window.location.reload(), 1000));
21310
21310
  }
21311
+ if (action == 'dispatchEvent' && value.event == 'auth::verified') {
21312
+ salla.log('Ignored dispatchEvent `auth::verified` from iframe');
21313
+ //we don't need to fire this event because it have listeners for it, and already it's fired/firing from `salla.auth.api.handlAfterAuthenticatedResponse` already we are handling it
21314
+ return;
21315
+ }
21311
21316
  if (action == 'dispatchEvent') {
21312
21317
  return salla.event.emit(value.event, ...value.payload);
21313
21318
  }