{"version":3,"file":"js/page__shared_book_virtual_visit-3fb4a756619002ddc8b7.chunk.js","mappings":"+gBAUA,MARA,MACE,gBAAAA,CAAiBC,GACfA,EAAsBC,KAAIC,IACxBC,KAAK,IAAUD,IAAYE,SAASC,cAAc,SAASH,KAAW,GAE1E,G,2MC8HF,MAjIA,cAA8B,EAC5B,WAAAI,CAAYC,GACVC,QACAC,OAAOC,OAAOP,KAAMI,EACtB,CAEA,IAAAI,GACER,KAAKS,UACLT,KAAKU,aACLV,KAAKW,uBACLX,KAAKY,cAAgBZ,KAAKY,cAAcC,KAAKb,KAC/C,CAEA,OAAAS,GAYET,KAAKJ,iBAXY,CACf,qBACA,eACA,iBACA,eACA,gBACA,uBACA,cACA,yBACA,mBAGYK,SAASC,cAAc,0BAC7BY,QAAQC,eAAgB,CAClC,CAEA,UAAAL,GACEV,KAAKgB,YAAYC,iBAAiB,UAAWC,IAC3CA,EAAEC,iBACFnB,KAAKoB,gBACLpB,KAAKqB,aAAa,GAEtB,CAEA,aAAAD,GACEpB,KAAKsB,cAAcC,gBAAgB,WACrC,CAEM,WAAAF,GAAc,gCA9CtB,MA+CI,IACE,MAAM,cAAEG,EAAa,YAAEC,EAAW,aAAEC,EAAY,mBAAEC,EAAkB,qBAAEC,GACpE5B,KACI6B,EAAgB5B,SAASC,cAAc,yCAAyC4B,MAChFC,EAAkB9B,SAASC,cAC/B,2CACA4B,MAEIE,EAAc,SAAA/B,SACjBC,cAAc,0CADG,IAEhB+B,aAAa,WAEXC,EAAO,CACXC,gBAAiB,CACfC,eAAgBZ,EAAcM,MAC9BO,KAAMZ,EAAYK,MAClBQ,MAAOZ,EAAaI,MACpBS,aAAcZ,EAAmBG,MACjCU,iBAAkBT,EAClBU,eAAgBZ,EAChBa,eAAgBd,EAAqBE,MACrCa,aAAcX,IAGlBhC,KAAKgB,YAAY4B,UAAUC,IAAI,UAC/B7C,KAAK8C,kBAAkBF,UAAUC,IAAI,UACrC7C,KAAK+C,oBACLC,WAAWhD,KAAKY,cAAe,KAE/B,MAAMqC,QAAiB,QAAiB,6BAA8B,CACpEC,OAAQ,OACRhB,KAAMiB,KAAKC,UAAUlB,KAEvB,IAAKe,EAASI,GACZ,MAAM,IAAIC,MAAML,EAASM,YAE3BC,OAAOC,cAAcC,SAAS,uCAChC,CAAE,MAAOxC,GACPlB,KAAK2D,iBACP,CACF,IAEM,oBAAAhD,GAAuB,gCAC3B,MAAMiD,QAAiB,OAAa,4BACpC5D,KAAK6D,OAAS5D,SAASC,cAAc,yCACrC0D,EAAS3C,iBAAiB,SAAUC,IAClClB,KAAK6D,OAAOC,cAAc,IAAIC,YAAY,wBAC1C/D,KAAK8C,kBAAkBkB,UAAYC,KAAKC,EAAE,iCAC1ClE,KAAK6D,OAAO3D,cAAc,iBAAiB8D,UAAYC,KAAKC,EAAE,2BAA4B,CACxF7B,KAAMrC,KAAKmE,mBACX,GAEN,IAEA,WAAAC,GACEpE,KAAK6D,OAAOC,cAAc,IAAIC,YAAY,wBAC5C,CAEA,aAAAnD,GACgBX,SAASC,cAAc,0BAC7BY,QAAQC,eAAgB,CAClC,CAEA,iBAAAgC,GACE/C,KAAKqE,eAAiBpE,SAASqE,cAAc,KAC7CtE,KAAKqE,eAAeE,UAAY,GAAGN,KAAKC,EACtC,wDACSD,KAAKC,EAAE,iDAClBlE,KAAKqE,eAAezB,UAAUC,IAAI,UAAW,eAC7C7C,KAAKgB,YAAYwD,cAAcC,YAAYzE,KAAKqE,eAClD,CAEA,eAAAV,GACM3D,KAAKqE,gBACPrE,KAAKqE,eAAeK,SAEtB1E,KAAKgB,YAAY4B,UAAU8B,OAAO,UAClC1E,KAAK8C,kBAAkBF,UAAU8B,OAAO,UACxC,IAAIC,MAAM,CACRC,KAAM,QACNC,MAAOZ,KAAKC,EAAE,kCACdY,QAASb,KAAKC,EAAE,sCACfa,MACL,E,yuBClIK,MAAMC,EAAY,CAACC,EAAKC,KAA/B,MACE,MAAMC,EAAelF,SAASC,cAAc,2BAEtCkF,EAAU,SACRD,GAAgB,CAAE,eAAgBA,EAAalD,aAAa,aAC9D,eAAAiD,OAAA,EAAAA,EAASE,SAAT,EAAoB,CAAC,GAG3B,OAAOC,MAAMJ,EAAK,OAAKC,GAAL,CAAcE,YAAU,EAG/BE,EAAmB,CAACL,EAAKC,KAXtC,MAYE,MAAMK,EAAatF,SAASC,cAAc,oBAEpCkF,EAAU,KACd,eAAgB,sBACVG,GAAc,CAAEC,cAAe,UAAUD,EAAWtD,aAAa,eACnE,eAAAiD,OAAA,EAAAA,EAASE,SAAT,EAAoB,CAAC,GAG3B,OAAOJ,EAAU,iBAAiBC,IAAO,OAAKC,GAAL,CAAcE,YAAU,EAGtDK,EAAwBxC,GAAa,2BAChD,IACE,aAAaA,EAASyC,MACxB,CAAE,MAAOC,GACP,OAAO,IACT,CACF,IAEaC,EAAoC3C,GAAa,2BAC5D,MAAM4C,QAAaJ,EAAexC,GAClC,IAAKA,EAASI,GAAI,MAAM,IAAIC,MAAMuC,GAClC,OAAOA,CACT,IAEA,M,wDCrCA,MAAMC,EAAe,CAACC,EAAUC,IAAe,IAAIC,SAAQ,CAACC,EAASC,KACjE,MAAMC,EAAKnG,SAASC,cAAc6F,GAC9BK,GAAKF,EAAQE,GACjB,IAAIC,kBAAiB,CAACC,EAAiBC,KACrCC,MAAMC,KAAKxG,SAASyG,iBAAiBX,IAAWY,SAAS5G,IACvDmG,EAAQnG,GACRwG,EAASK,YAAY,GACrB,IAEDC,QAAQ5G,SAAS6G,gBAAiB,CACjCC,WAAW,EACXC,SAAS,GACT,G","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":""}