{"version":3,"file":"js/page__shared_book_virtual_visit-3fb4a756619002ddc8b7.chunk.js","mappings":"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","sources":["webpack://nodalview/./app/javascript/src/shared/form/index.js","webpack://nodalview/./app/javascript/src/shared/book_virtual_visit/index.js","webpack://nodalview/./app/javascript/src/shared/api/client.js","webpack://nodalview/./app/javascript/src/shared/element_ready/index.js"],"sourcesContent":["import camelCase from 'lodash/camelCase';\n\nclass Form {\n _prepareElements(elementAttributeLists) {\n elementAttributeLists.map(element => {\n this[camelCase(element)] = document.querySelector(`[data-${element}]`);\n })\n }\n}\n\nexport default Form;","import webRestClientApi from '../api/client';\nimport { elementReady } from '../element_ready';\nimport Form from '../form';\n\nclass BookVirtualTour extends Form {\n constructor(params) {\n super();\n Object.assign(this, params);\n }\n\n boot() {\n this.prepare();\n this.hookEvents();\n this.handleBookTourButton();\n this.resetAndClose = this.resetAndClose.bind(this);\n }\n\n prepare() {\n const elements = [\n 'booking-disclaimer',\n 'booking-form',\n 'smartlink-uuid',\n 'booking-name',\n 'booking-email',\n 'booking-phone-number',\n 'booking-toc',\n 'booking-preferred-hour',\n 'booking-submit',\n ];\n this._prepareElements(elements);\n var element = document.querySelector('[data-close-on-escape]');\n element.dataset.closeOnEscape = true;\n }\n\n hookEvents() {\n this.bookingForm.addEventListener('submit', (e) => {\n e.preventDefault();\n this.toggleDisable();\n this.sendRequest();\n });\n }\n\n toggleDisable() {\n this.bookingSubmit.toggleAttribute('disabled');\n }\n\n async sendRequest() {\n try {\n const { smartlinkUuid, bookingName, bookingEmail, bookingPhoneNumber, bookingPreferredHour } =\n this;\n const preferredDate = document.querySelector('[data-booking-preferred-date]:checked').value;\n const appointmentType = document.querySelector(\n '[data-booking-appointment-type]:checked',\n ).value;\n\n const sessionUuid = document\n .querySelector('meta[name=\"smartlink-view-uuid\"]')\n ?.getAttribute('content');\n\n const body = {\n booking_request: {\n smartlink_uuid: smartlinkUuid.value,\n name: bookingName.value,\n email: bookingEmail.value,\n phone_number: bookingPhoneNumber.value,\n appointment_type: appointmentType,\n preferred_date: preferredDate,\n preferred_hour: bookingPreferredHour.value,\n session_uuid: sessionUuid,\n },\n };\n this.bookingForm.classList.add('hidden');\n this.bookingDisclaimer.classList.add('hidden');\n this.addSuccessMessage();\n setTimeout(this.resetAndClose, 5000);\n\n const response = await webRestClientApi('smartlinks/booking_request', {\n method: 'post',\n body: JSON.stringify(body),\n });\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n window.eventsManager.logEvent('Virtual visit - Book a tour - submit');\n } catch (e) {\n this.addErrorMessage();\n }\n }\n\n async handleBookTourButton() {\n const bookTour = await elementReady('[data-book-virtual-tour]');\n this.reveal = document.querySelector('[data-reveal-id=\"virtual-visit-form\"]');\n bookTour.addEventListener('click', (e) => {\n this.reveal.dispatchEvent(new CustomEvent('reveal:trigger:open'));\n this.bookingDisclaimer.innerText = I18n.t('book_virtual_visit.disclaimer');\n this.reveal.querySelector('.reveal-title').innerText = I18n.t('book_virtual_visit.title', {\n name: this.organisation_name,\n });\n });\n }\n\n closeReveal() {\n this.reveal.dispatchEvent(new CustomEvent('reveal:trigger:close'));\n }\n\n resetAndClose() {\n var element = document.querySelector('[data-close-on-escape]');\n element.dataset.closeOnEscape = true;\n }\n\n addSuccessMessage() {\n this.successMessage = document.createElement('p');\n this.successMessage.innerHTML = `${I18n.t(\n 'book_virtual_visit.send_with_success_line_1',\n )} <br/> ${I18n.t('book_virtual_visit.send_with_success_line_2')}`;\n this.successMessage.classList.add('success', 'text-center');\n this.bookingForm.parentElement.appendChild(this.successMessage);\n }\n\n addErrorMessage() {\n if (this.successMessage) {\n this.successMessage.remove();\n }\n this.bookingForm.classList.remove('hidden');\n this.bookingDisclaimer.classList.remove('hidden');\n new Toast({\n type: 'error',\n title: I18n.t('book_virtual_visit.error_title'),\n message: I18n.t('book_virtual_visit.error_message'),\n }).show();\n }\n}\n\nexport default BookVirtualTour;\n","export const clientApi = (url, options) => {\n const csrfTokenTag = document.querySelector(\"meta[name='csrf-token']\");\n\n const headers = {\n ...(!!csrfTokenTag && { 'X-CSRF-TOKEN': csrfTokenTag.getAttribute('content') }),\n ...(options?.headers ?? {}),\n };\n\n return fetch(url, { ...options, headers });\n};\n\nexport const webRestClientApi = (url, options) => {\n const jwtMetaTag = document.querySelector(\"meta[name='jwt']\");\n\n const headers = {\n 'Content-Type': 'application/json',\n ...(!!jwtMetaTag && { Authorization: `Bearer ${jwtMetaTag.getAttribute('content')}` }),\n ...(options?.headers ?? {}),\n };\n\n return clientApi(`/api/web_rest/${url}`, { ...options, headers });\n};\n\nexport const responseToJson = async (response) => {\n try {\n return await response.json();\n } catch (err) {\n return null;\n }\n};\n\nexport const responseToJsonOrCatchError = async (response) => {\n const data = await responseToJson(response);\n if (!response.ok) throw new Error(data);\n return data;\n};\n\nexport default webRestClientApi;\n","const elementReady = (selector, obseverDom) => new Promise((resolve, reject) => {\n const el = document.querySelector(selector);\n if (el) {resolve(el);}\n new MutationObserver((mutationRecords, observer) => {\n Array.from(document.querySelectorAll(selector)).forEach((element) => {\n resolve(element);\n observer.disconnect();\n });\n })\n .observe(document.documentElement, {\n childList: true,\n subtree: true\n });\n });\n\nexport { elementReady }; "],"names":["_prepareElements","elementAttributeLists","map","element","this","document","querySelector","constructor","params","super","Object","assign","boot","prepare","hookEvents","handleBookTourButton","resetAndClose","bind","dataset","closeOnEscape","bookingForm","addEventListener","e","preventDefault","toggleDisable","sendRequest","bookingSubmit","toggleAttribute","smartlinkUuid","bookingName","bookingEmail","bookingPhoneNumber","bookingPreferredHour","preferredDate","value","appointmentType","sessionUuid","getAttribute","body","booking_request","smartlink_uuid","name","email","phone_number","appointment_type","preferred_date","preferred_hour","session_uuid","classList","add","bookingDisclaimer","addSuccessMessage","setTimeout","response","method","JSON","stringify","ok","Error","statusText","window","eventsManager","logEvent","addErrorMessage","bookTour","reveal","dispatchEvent","CustomEvent","innerText","I18n","t","organisation_name","closeReveal","successMessage","createElement","innerHTML","parentElement","appendChild","remove","Toast","type","title","message","show","clientApi","url","options","csrfTokenTag","headers","fetch","webRestClientApi","jwtMetaTag","Authorization","responseToJson","json","err","responseToJsonOrCatchError","data","elementReady","selector","obseverDom","Promise","resolve","reject","el","MutationObserver","mutationRecords","observer","Array","from","querySelectorAll","forEach","disconnect","observe","documentElement","childList","subtree"],"sourceRoot":""}