{"version":3,"file":"js/javascript/application-3596e305436aac98887f.js","mappings":"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L,GAAK,WACL,GAAK,WACL,GAAK,UACL,GAAK,SACL,GAAK,WACL,GAAK,SACL,GAAK,cACL,GAAK,OACL,GAAK,QACL,GAAK,SACL,GAAK,qBACL,GAAK,UACL,GAAK,SACL,GAAK,MACL,GAAK,QACL,GAAK,UACL,GAAK,+BACL,GAAK,mCACL,GAAK,UACL,GAAK,aACL,GAAK,eACL,GAAK,aACL,GAAK,WACL,GAAK,QACL,GAAK,YACL,GAAK,UACL,GAAK,OACL,GAAK,QACL,GAAK,UACL,GAAK,cACL,GAAK,gCACL,GAAK,YACL,GAAK,QACL,GAAK,iBACL,GAAK,mBACL,GAAK,SACL,GAAK,SACL,GAAK,gBACL,GAAK,YACL,GAAK,sBACL,GAAK,oBACL,GAAK,oBACL,GAAK,sBACL,GAAK,SACL,GAAK,QACL,GAAK,QACL,GAAK,oBACL,GAAK,OACL,GAAK,mBACL,GAAK,iBACL,GAAK,UACL,GAAK,SACL,GAAK,aACL,GAAK,UACL,GAAK,UACL,GAAK,QACL,GAAK,UACL,GAAK,SACL,GAAK,QACL,GAAK,WACL,GAAK,YACL,GAAK,UACL,GAAK,QACL,GAAK,SACL,GAAK,qBACL,GAAK,SACL,GAAK,YACL,GAAK,SACL,GAAK,kBACL,GAAK,gBACL,GAAK,qBACL,GAAK,YACL,GAAK,UACL,GAAK,QACL,GAAK,UACL,GAAK,UACL,GAAK,WACL,GAAK,QACL,GAAK,QACL,GAAK,QACL,GAAK,SACL,GAAK,OACL,GAAK,UACL,GAAK,WACL,GAAK,wBACL,GAAK,SACL,GAAK,SACL,GAAK,UACL,GAAK,UACL,GAAK,MACL,GAAK,iBACL,GAAK,YACL,GAAK,OACL,GAAK,QACL,GAAK,QACL,GAAK,aACL,GAAK,UACL,GAAK,UACL,GAAK,QACL,GAAK,kBACL,GAAK,QACL,GAAK,QACL,GAAK,UACL,GAAK,SACL,GAAK,iBACL,GAAK,QAOP,IAJ4B,SAACC,GAC3B,QAAOC,OAAOC,KAAKH,GAAWI,SAASH,K,waC3LzC,SAASI,EAAU3J,IACjB1H,EAAAA,EAAAA,GAAgB,8DAA8D0H,EAAW,CACvF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","sources":["webpack://client_new/./app/packs/javascript/application.js","webpack://client_new/./app/packs/javascript/plugins/accordion.js","webpack://client_new/./app/packs/javascript/plugins/chart.js","webpack://client_new/./app/packs/javascript/plugins/dropzone.js","webpack://client_new/./app/packs/javascript/plugins/micromodal.js","webpack://client_new/./app/packs/javascript/plugins/simplebar.js","webpack://client_new/./app/packs/javascript/plugins/tabs.js","webpack://client_new/./app/packs/javascript/plugins/tooltips.js","webpack://client_new/./app/packs/javascript/utils/ajax_popstate.js","webpack://client_new/./app/packs/javascript/utils/confirm_modal.js","webpack://client_new/./app/packs/javascript/utils/date.js","webpack://client_new/./app/packs/javascript/utils/debounce.js","webpack://client_new/./app/packs/javascript/utils/form_field_encrypt.js","webpack://client_new/./app/packs/javascript/utils/heart_beat.js","webpack://client_new/./app/packs/javascript/utils/integrations.js","webpack://client_new/./app/packs/javascript/utils/language_iso_codes.js","webpack://client_new/./app/packs/javascript/utils/loqate.js","webpack://client_new/./app/packs/javascript/utils/menu.js","webpack://client_new/./app/packs/javascript/utils/menuPanels.js","webpack://client_new/./app/packs/javascript/utils/panels_ajax_calls.js","webpack://client_new/./app/packs/javascript/utils/raf.js","webpack://client_new/./app/packs/javascript/utils/reload_attachments.js","webpack://client_new/./app/packs/javascript/utils/remote_links.js","webpack://client_new/./app/packs/javascript/utils/resend_sms.js","webpack://client_new/./app/packs/javascript/utils/scroll_append.js","webpack://client_new/./app/packs/javascript/utils/scrollspy.js","webpack://client_new/./app/packs/javascript/utils/sessions.js","webpack://client_new/./app/packs/javascript/utils/trail_date.js","webpack://client_new/./app/packs/javascript/utils/user_image_uploader.js","webpack://client_new/./app/packs/javascript/views/agreements.js","webpack://client_new/./app/packs/javascript/views/messages.js","webpack://client_new/./app/packs/javascript/views/risk_questionnaire.js","webpack://client_new/./app/packs/javascript/views/suitability_report.js"],"sourcesContent":["// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\n// require('@rails/ujs').start();\n// require('turbolinks').start();\n// require('@rails/activestorage').start();\n// require('channels');\n\n// Rails Base\nimport Rails from '@rails/ujs';\nimport Turbolinks from 'turbolinks';\n\n// Plugins\nimport 'flatpickr';\nimport { initChoices } from './plugins/choices';\nimport './plugins/micromodal';\nimport { initDropzone } from './plugins/dropzone';\n//import { initAppSignal } from './plugins/app_signal';\nimport './plugins/simplebar';\nimport { initDropdown } from './plugins/dropdown';\nimport { initTooltips } from './plugins/tooltips';\n\n// Utils\nimport './utils/ajax_popstate';\nimport './utils/menu';\nimport { initPanels } from './utils/menuPanels';\nimport './utils/object_tables';\nimport './utils/confirm_modal';\nimport './utils/confirm_callback';\nimport './utils/form_field_encrypt';\nimport './utils/masks';\nimport './utils/heart_beat';\nimport './utils/sessions';\nimport './utils/date';\nimport { initLoqate } from './utils/loqate';\nimport { submitUserPictureOnChange } from './utils/user_image_uploader';\nimport { scrollAppend } from './utils/scroll_append';\nimport { initScrollspy } from './utils/scrollspy';\nimport { initDynamicToggler } from './utils/dynamic_toggler';\nimport { initReloadAttachments } from './utils/reload_attachments';\nimport { initRemoteLinks } from './utils/remote_links';\nimport { initResendSms } from './utils/resend_sms';\n\n// Views\nimport { initMessages } from './views/messages';\nimport {\n initFactFind,\n saveFactFind,\n changeFormStatus,\n} from './views/fact_find';\nimport { initSuitabilityReport } from './views/suitability_report';\nimport './views/risk_questionnaire';\n\nimport './views/fact_find_validation';\nimport './views/agreements';\n\n\nRails.start();\nTurbolinks.start();\n// EventListeners\ndocument.addEventListener('turbolinks:load', () => {\n window.originPath = window.location.pathname;\n window.confirmCallback = confirmCallback;\n window.initChoices = initChoices;\n window.saveFactFind = saveFactFind;\n window.changeFormStatus = changeFormStatus;\n window.initTooltips = initTooltips;\n window.Rails = Rails;\n\n initRemoteLinks();\n initMessages();\n initReloadAttachments();\n scrollAppend();\n initDropzone();\n //initAppSignal();\n initPanels();\n initDropdown();\n\n initScrollspy();\n initDynamicToggler();\n\n initResendSms();\n initFactFind();\n initRiskQuestionnaire();\n\n submitUserPictureOnChange();\n initSuitabilityReport();\n initTooltips();\n initLoqate();\n});\n\n","/* eslint-disable */\nimport { raf } from \"../utils/raf\";\n\nconst isActive = (target) => target.classList.contains(\"is-active\");\n\nconst open = (button, target) => {\n let targetHeight;\n\n button.classList.add(\"is-active\");\n\n raf([\n () => {\n target.classList.add(\"is-active\", \"is-rendering\");\n },\n () => {\n targetHeight = target.getBoundingClientRect().height;\n target.style.setProperty(`--accordion-body-height`, 0);\n target.classList.remove(\"is-rendering\");\n target.classList.add(\"is-animating\");\n },\n () => {\n target.style.setProperty(`--accordion-body-height`, `${targetHeight}px`);\n\n target.addEventListener(\n \"transitionend\",\n () => {\n target.classList.remove(\"is-animating\");\n target.style.removeProperty(`--accordion-body-height`);\n },\n { once: true }\n );\n },\n ]);\n};\n\nconst close = (button, target) => {\n let targetHeight;\n\n button.classList.remove(\"is-active\");\n\n raf([\n () => {\n targetHeight = target.getBoundingClientRect().height;\n target.style.setProperty(`--accordion-body-height`, `${targetHeight}px`);\n target.classList.add(\"is-animating\");\n },\n () => {\n target.style.setProperty(`--accordion-body-height`, 0);\n },\n () => {\n target.addEventListener(\n \"transitionend\",\n () => {\n target.classList.remove(\"is-animating\", \"is-active\");\n target.style.removeProperty(`--accordion-body-height`);\n },\n { once: true }\n );\n },\n ]);\n};\n\nexport const initAccordions = () => {\n const buttons = document.querySelectorAll(\"[data-accordion-target]\");\n\n buttons.forEach((button) => {\n const id = button.getAttribute(\"data-accordion-target\");\n const target = document.querySelector(`[data-accordion-id=\"${id}\"]`);\n\n button.addEventListener(\"click\", () => {\n if (isActive(target)) {\n close(button, target);\n } else {\n open(button, target);\n }\n });\n });\n};\n","/* eslint-disable */\n\nimport Highcharts from \"highcharts\";\n\nconst pluginAttr = \"data-pie-chart\";\nconst pluginAttrId = \"data-pie-chart-id\";\nconst pluginAttrActive = \"data-pie-chart-active\";\nconst pluginAttrColorLabel = \"data-pie-chart-color-label\";\n\nexport const initCharts = () => {\n const pieCharts = Array.from(document.querySelectorAll(`[${pluginAttr}]`));\n pieCharts\n .filter((elem) => elem && !elem.hasAttribute(pluginAttrActive))\n .forEach((elem) => {\n const id = elem.getAttribute(pluginAttrId);\n const colorLabels = Array.from(\n document.querySelectorAll(`[${pluginAttrColorLabel}=\"${id}\"]`)\n );\n\n const values = elem\n .getAttribute(pluginAttr)\n .split(\";\")\n .filter((v) => v.length)\n .map((v) => ({\n y: Number(v),\n }));\n\n const colors = [\n \"#9AEDEB\",\n \"#8286E5\",\n \"#D791FF\",\n \"#79CEF2\",\n \"#B291FF\",\n \"#F28AB0\",\n ];\n\n Highcharts.setOptions({\n colors,\n });\n\n const chart = Highcharts.chart(elem, {\n title: { text: null },\n credits: { enabled: false },\n tooltip: { enabled: false },\n chart: {\n plotBackgroundColor: null,\n plotBorderWidth: null,\n plotShadow: false,\n type: \"pie\",\n width: 250,\n height: 225\n },\n plotOptions: {\n series: {\n states: {\n inactive: {\n opacity: 1,\n },\n },\n },\n pie: {\n innerSize: \"50%\",\n borderWidth: 0,\n dataLabels: {\n enabled: false,\n },\n },\n },\n series: [\n {\n states: {\n hover: {\n enabled: false,\n },\n },\n data: values,\n },\n ],\n });\n\n colorLabels.forEach((label, i) => {\n label.style.setProperty(`--chart-color`, colors[i % colors.length]);\n });\n\n elem.setAttribute(pluginAttrActive, \"\");\n });\n};\n","import Dropzone from 'dropzone';\nimport MicroModal from 'micromodal';\nimport confirmCallback from '../utils/confirm_callback';\n\n// Settings\nconst uploadDocuments = (form, buttons = null, attachments = false) => {\n\t// Lets check if the form actually exists\n\tif (form) {\n\t\tlet allowedContent = document\n\t\t\t.getElementById('allowedContent')\n\t\t\t.value.split(/[ ]+/)\n\t\t\t.join(', ') || [\n\t\t\t'image/jpeg',\n\t\t\t'image/png',\n\t\t\t'image/tiff',\n\t\t\t'image/gif',\n\t\t\t'text/plain',\n\t\t\t'application/rtf',\n\t\t\t'application/x-rtf',\n\t\t\t'text/richtext',\n\t\t\t'text/csv',\n\t\t\t'application/pdf',\n\t\t\t'application/msword',\n\t\t\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t\t'application/vnd.ms-excel',\n\t\t\t'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n\t\t\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t\t'application/vnd.ms-powerpoint',\n\t\t\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t\t'application/vnd.openxmlformats-officedocument.presentationml.template',\n\t\t\t'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n\t\t\t'application/gzip',\n\t\t\t'application/zip',\n\t\t\t'application/x-zip-compressed',\n\t\t\t'audio/mpeg',\n\t\t\t'audio/webm',\n\t\t\t'audio/mp4',\n\t\t\t'audio/m4a',\n\t\t\t'video/mpeg',\n\t\t\t'video/webm',\n\t\t\t'video/mp4',\n\t\t\t'video/quicktime',\n\t\t];\n\n\t\t// Add class to mark it as inited\n\t\tform.classList.add('dz-active');\n\n\t\t// Init necessary IDs\n\t\tconst { id } = form;\n\n\t\t// Set buttons param if null\n\t\tif (buttons === null) {\n\t\t\tbuttons = `[data-dz-button='${id}']`;\n\t\t}\n\n\t\t// Check if the buttons exist\n\t\tif (document.querySelectorAll(buttons).length == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Templating\n\t\tconst htmlPreviewTemplate = `\n \n `;\n\n\t\tconst htmlMainTemplate = `\n
\n
\n \n \n
\n
\n `;\n\n\t\t// Adding the HTML that dropzone uses for preview\n\t\tform\n\t\t\t.querySelector('[data-dz-area]')\n\t\t\t.insertAdjacentHTML('afterend', htmlPreviewTemplate);\n\n\t\t// Adds the main upload template\n\t\tform\n\t\t\t.querySelector('[data-dz-area]')\n\t\t\t.insertAdjacentHTML('afterbegin', htmlMainTemplate);\n\t\tconst dzMain = form.querySelector('[data-dz-main]');\n\n\t\t// Init Dropzone\n\t\tconst dz = new Dropzone(form, {\n\t\t\tparallelUploads: 10,\n\t\t\tmaxFilesize: 64, // MB\n\t\t\tacceptedFiles: allowedContent.toString(),\n\t\t\tclickable: buttons,\n\t\t\tparamName: 'document[file]',\n\t\t\tcreateImageThumbnails: false,\n\t\t\tpreviewTemplate: document.querySelector(`#dz-template-${id}`).innerHTML,\n\t\t\tpreviewsContainer: 'form [data-dz-preview]',\n\t\t\tautoProcessQueue: false,\n\t\t\theaders: {\n\t\t\t\tAccept: 'application/javascript',\n\t\t\t},\n\t\t});\n\n\t\tdz.on('addedfile', () => {\n\t\t\tif (!dzMain.classList.contains('dz-fade-in')) {\n\t\t\t\tform.addEventListener(\n\t\t\t\t\t'animationend',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdz.processQueue();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\n\t\t\t\tdzMain.classList.add('dz-fade-in');\n\t\t\t}\n\t\t});\n\n\t\tdz.on('sending', (_file) => {\n\t\t\tdzMain.querySelector('[data-dz-upload-text]').innerText = `${\n\t\t\t\tdz.getUploadingFiles().length\n\t\t\t} ${dz.getUploadingFiles().length > 1 ? 'documents' : 'document'}`;\n\t\t});\n\n\t\tdz.on('totaluploadprogress', (progress) => {\n\t\t\tdzMain.querySelector(\n\t\t\t\t'[data-dz-total-upload]'\n\t\t\t).style.width = `${progress}%`;\n\t\t});\n\n\t\tdz.on('error', (file, error) => {\n\t\t\tif (!file.accepted) {\n\t\t\t\tlet message = '';\n\t\t\t\tif (\n\t\t\t\t\tdz.options.maxFilesize &&\n\t\t\t\t\tfile.size > dz.options.maxFilesize * 1024 * 1024\n\t\t\t\t) {\n\t\t\t\t\tconst fileSize = Math.round(file.size / 1024 / 10.24) / 100;\n\t\t\t\t\tmessage = `${file.name} is too big (${fileSize}MB). Max filesize is ${dz.options.maxFilesize}MB.`;\n\t\t\t\t} else if (!Dropzone.isValidFile(file, dz.options.acceptedFiles)) {\n\t\t\t\t\tmessage = `The file you selected (${file.name}) doesn't have a valid extension.`;\n\t\t\t\t} else {\n\t\t\t\t\tmessage = error;\n\t\t\t\t}\n\t\t\t\t// Remove file and add error message stating why the file can't be added\n\t\t\t\tdz.removeFile(file);\n\t\t\t\tdzMain.classList.remove('dz-fade-in');\n\t\t\t\tconfirmCallback(` ${message}`, {\n\t\t\t\t\ttargetContainer: document.querySelector('#layout-notifications'),\n\t\t\t\t\tclassToAdd: 'bg-xs-red-100',\n\t\t\t\t\tdismiss: true,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tdz.on('success', (response) => {\n\t\t\tif (dz.getUploadingFiles().length === 0) {\n\t\t\t\tdzMain.classList.remove('dz-fade-in');\n\t\t\t\tdzMain.addEventListener(\n\t\t\t\t\t'animationend',\n\t\t\t\t\t() => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst json = JSON.parse(response.xhr.response);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// We need Eval to run the returned response given by create.js.erb\n\t\t\t\t\t\t\teval(response.xhr.response);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// On future releases we can use the json format\n\t\t\t\t\t\t// We need to take into account if something fails\n\t\t\t\t\t\t// document.querySelector('.js-documents-list').innerHTML = JSON.parse(response.xhr.response).content;\n\t\t\t\t\t\tdz.removeAllFiles();\n\t\t\t\t\t\tdzMain.classList.remove('dz-fade-out');\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\n\t\t\t\tdzMain.classList.add('dz-fade-out');\n\t\t\t\tif (attachments) {\n\t\t\t\t\tMicroModal.close();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nconst initDropzone = () => {\n\twindow.uploadDocuments = uploadDocuments;\n\n\t// Init dropzone in case there's a need for it\n\tconst dzForms = document.querySelectorAll('.dz');\n\n\tdzForms.forEach((dzForm) => {\n\t\t// We use this to avoid errors (double inits)\n\t\tif (!dzForm.classList.contains('dz-active')) {\n\t\t\tuploadDocuments(dzForm);\n\t\t}\n\t});\n};\n\nexport { initDropzone };\n","import MicroModal from 'micromodal';\n\nMicroModal.init({\n onClose: modal => modal.remove(),\n disableScroll: true,\n awaitOpenAnimation: true,\n awaitCloseAnimation: true\n});\n\nwindow.MicroModal = MicroModal;","import SimpleBar from 'simplebar';\n\nwindow.SimpleBar = SimpleBar;","export const initTabs = () => {\n const tabsGroup = document.querySelectorAll(\"[data-tabs]\");\n\n tabsGroup.forEach((tabs) => {\n const buttons = tabs.querySelectorAll(\"[data-tabs-target]\");\n const panels = tabs.querySelectorAll(\"[data-tabs-id]\");\n\n const setActive = (id) => {\n buttons.forEach((btn) => {\n const btonId = btn.getAttribute(\"data-tabs-target\");\n const targetTab = tabs.querySelector(`[data-tabs-id=\"${btonId}\"]`);\n\n if (btonId === id) {\n btn.classList.add(\"is-active\");\n targetTab.classList.add(\"is-active\");\n } else {\n btn.classList.remove(\"is-active\");\n targetTab.classList.remove(\"is-active\");\n }\n });\n\n panels.forEach((panel) => {\n const tabId = panel.getAttribute(\"data-tabs-id\");\n\n if (tabId === id) {\n panel.classList.add(\"is-active\");\n } else {\n panel.classList.remove(\"is-active\");\n }\n });\n };\n\n buttons.forEach((button, i) => {\n const targetTab = button.getAttribute(\"data-tabs-target\");\n\n if (i === 0) {\n setActive(targetTab);\n }\n\n button.addEventListener(\"click\", () => {\n setActive(targetTab);\n });\n });\n });\n};\n","import Tooltip from 'tooltip.js';\n\nconst initTooltips = () => {\n const elems = document.querySelectorAll('[data-tooltip]');\n\n if (elems.length !== 0) {\n elems.forEach((elem) => {\n new Tooltip(elem, {\n position: 'top, bottom',\n title: elem.dataset.tooltip,\n container: document.querySelector('#layout-page')\n });\n })\n }\n}\n\nexport { initTooltips };","// When changing a page with UJS (remote: true), turbolinks only preserves the latest state\n// This method improves that by allowing us to navigate (back/forward buttons) through history\n// Everytime we run history.pushState we need to add the following to the state bit\n// {path: 'new_path_here'}\n// example: history.pushState({path: 'messages/12345'}, '', current_url + '/messages/12345')\n\nimport Rails from '@rails/ujs';\nimport Turbolinks from 'turbolinks';\n\n// regex to get first bit of the path\nconst regex = /\\/[a-zA-Z]+/s;\n\nwindow.addEventListener('popstate', (event) => {\n const newState = event.state;\n if (newState.path) {\n // if there's NO \"path\" key, we ignore this and let turbolinks deal with it\n let { path } = newState;\n if (window.originPath.match(regex)[0] === path.match(regex)[0]) {\n // If we're under the same path (eg: '/messages') we deal with it\n path += path.match(/\\?/) ? '&' : '?';\n path += 'back=1';\n Rails.ajax({\n url: path,\n type: 'GET',\n cache: false,\n dataType: 'script',\n accept: 'script',\n });\n } else {\n // If we're coming from a different path, Turbolinks is needed\n Turbolinks.visit(path, {\n action: 'restore',\n });\n }\n }\n});\n","import Rails from '@rails/ujs';\nimport MicroModal from 'micromodal';\nimport checkCountryISOCode from './language_iso_codes';\nimport randomizer from './randomizer';\n\n/*\n # USAGE #\n\n ## Passing an element ##\n confirmModal()\n\n ## Building with parameters ##\n confirmModal('en', {\n action: '/settings/adviser/profile', // Optional\n method: 'GET', // Optional: GET (default) | POST | UPDATE | DELETE (Won’t be used if the action above is null)\n isTrue: () => { ...function here }\n })\n\n # EXPLANATION #\n data-confirm-modal:\n - By default the function will initialize itself if this attribute exists\n - We also use this attribute to pass the locale, if nothing is passed it will use 'en' as default\n\n data-confirm-modal-type:\n - Will be the 'path' of the translation\n\n data-confirm-modal-action:\n - This holds the action|url of what we want it to do if clicked\n - It's also possible to also use the current HREF attribute instead\n\n data-confirm-modal-method:\n - Method type of the action (optional)\n - \"GET\" will be the default, other options: POST | UPDATE | DELETE\n\n\n # EXAMPLES #\n\n ## Link ##\n Unlock\n\n ## Toggle ##\n
\n \n \n
\n*/\n\nconst confirmModal = (trigger = 'en', {\n action: optionsAction = null,\n method: optionsMethod = null,\n isTrue: optionsCallback = null\n} = {}) => {\n const csrfToken = document.head.querySelector('meta[name=\"csrf-token\"]').content;\n const rndID = randomizer() // We use this to generate a random ID for the modal\n\n let locale = trigger.dataset.confirmModal || 'en';\n let translationPath = trigger.dataset.confirmModalType || 'confirmations.default';\n let modalTitle = `${translationPath}.title`;\n let modalContent = `${translationPath}.content`;\n let modalCancel = `${translationPath}.cancel`;\n let modalOk = `${translationPath}.ok`;\n let modalAction;\n let modalMethod;\n\n let urlParams = '';\n const _indexArr = [modalTitle, modalContent, modalCancel, modalOk];\n _indexArr.forEach((value) => {\n urlParams += `indexes[]=${value}&`;\n });\n\n if (typeof trigger === 'object') {\n // In case we are using a toggle (checkbox/radio button) we need to change the elem to\n // target the input instead, because the input will have the data attributes\n const elem = trigger.tagName == 'LABEL' ? document.querySelector(`#${trigger.getAttribute('for')}`) : trigger;\n\n modalAction = elem.hasAttribute('href') && elem.attributes['href'].value !== '#' ? elem.attributes['href'].value : elem.dataset.confirmModalAction;\n modalMethod = elem.dataset.confirmModalMethod || 'GET';\n }\n\n // When we want to trigger the confirmatiom modals without the dependency of data attributes\n if (typeof trigger === 'string' && checkCountryISOCode(trigger)) {\n locale = trigger;\n\n modalAction = optionsAction || '#';\n modalMethod = optionsAction !== '#' ? optionsMethod : null;\n }\n\n // Get the translations using Advicefront's translation service\n fetch(`/translations?${urlParams}locale=${locale}`, {\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-TOKEN': csrfToken,\n 'accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n credentials: 'same-origin'\n })\n .then(response => response.json())\n .then((data) => {\n const translated = data.translated_strings;\n const translatedTitle = translated[modalTitle];\n const translatedContent = translated[modalContent];\n const translatedButtonCancel = translated[modalCancel];\n const translatedButtonOk = translated[modalOk];\n\n generateModal(rndID, translatedTitle, translatedContent, translatedButtonCancel, translatedButtonOk, modalAction, modalMethod, trigger, optionsCallback);\n\n })\n}\n\n\nconst generateModal = (id, modalTitle, modalContent, modalButtonCancel, modalButtonOk, modalAction = '#', modalMethod = null, triggeredElem = null, callback) => {\n const dataMethod = modalMethod !== null ? 'data-method=\"' + modalMethod.toUpperCase() + '\"' : '';\n const template =\n `
\n
\n
\n
\n
\n

${modalTitle}

\n
\n
\n \n
\n
\n
\n

${modalContent}

\n
\n \n
\n
\n
`;\n\n // Insert modal template into the DOM\n document.querySelector('body').insertAdjacentHTML('beforeend', template);\n\n // Attach needed events\n // confirmationModalEvents(`M${id}`, triggeredElem, callback);\n\n // Trigger modal\n MicroModal.show(`M${id}`, {\n onClose: modal => modal.remove(),\n onShow: modal => confirmationModalEvents(modal.id, triggeredElem, callback),\n disableScroll: true,\n awaitOpenAnimation: true,\n awaitCloseAnimation: true\n });\n}\n\n\nconst confirmationModalEvents = (modalID, triggeredElem = null, callback = null) => {\n const targetConfirmModal = document.getElementById(modalID);\n\n targetConfirmModal.addEventListener('click', (event) => {\n\n if (event.target.closest('[data-confirm-modal-ok]')) {\n event.preventDefault();\n\n if (typeof triggeredElem.tagName == 'INPUT') {\n switch (triggeredElem.attributes.type.value) {\n case 'checkbox':\n triggeredElem.checked ? triggeredElem.checked = false : triggeredElem.checked = true;\n if (triggeredElem.closest('form') != null) {\n Rails.fire(triggeredElem.closest('form'), 'submit');\n }\n break;\n case 'submit':\n Rails.fire(triggeredElem.closest('form'), 'submit');\n break;\n }\n }\n\n // Close and remove confirmation modal\n MicroModal.close(modalID);\n\n // Run the JS code passed on the callback\n if (typeof callback == 'function') {\n return callback();\n }\n }\n\n });\n}\n\n\n// Inits the generateModal\ndocument.addEventListener('click', (event) => {\n if (event.target.closest('[data-confirm-modal]')) {\n event.preventDefault();\n confirmModal(event.target.closest('[data-confirm-modal]'));\n }\n})\n\nexport default confirmModal;\nwindow.confirmModal = confirmModal; // In case we need to access this funcion outside Webpack\n","// Replaces the default validation message for invalid format\nfunction parseFinalMessage(message) {\n if (/fill/.test(message)) return 'Invalid date format';\n return message;\n}\n\nconst dateInputKeyUp = (dateElement) => {\n // Check if validation div exists\n const formGroup = dateElement.closest('.form-group') === null\n ? dateElement.parentElement.querySelector('.form-group')\n : dateElement.closest('.form-group');\n const formControl = formGroup.closest('.form-control');\n\n const target = formControl || formGroup;\n\n // Reset the div between checks\n const validationContainer = target.querySelector('.validation-message');\n if (validationContainer) validationContainer.remove();\n\n // Check if the date is valid\n const isValid = dateElement.checkValidity();\n if (isValid) return;\n\n // Add validation messages\n if (!isValid) {\n target.classList.add('validation-error', 'message-contain');\n }\n\n if (!isValid) {\n const message = dateElement.validationMessage;\n const finalMessage = parseFinalMessage(message);\n target.insertAdjacentHTML(\n 'beforeend',\n `\n ${finalMessage}\n `,\n );\n }\n};\n\nwindow.dateInputKeyUp = dateInputKeyUp;\n","let timer;\n\nexport default function debounce(func, timeout = 3000) {\n clearTimeout(timer);\n timer = setTimeout(func, timeout);\n}\n","/* eslint-disable no-param-reassign */\nimport JSEncrypt from 'jsencrypt';\n\nconst resetForm = (form) => {\n const fieldsToEncrypt = form.querySelectorAll('[data-encrypt]');\n fieldsToEncrypt.forEach((field) => {\n field.name = field.dataset.previousName;\n field.nextElementSibling.remove();\n });\n};\n\nconst encryptFields = (form) => {\n const encrypt = new JSEncrypt();\n const encryptKeyElement = document.getElementById('js-public_key');\n if (encryptKeyElement === null) return;\n\n const encryptKey = encryptKeyElement.dataset.value;\n encrypt.setKey(encryptKey);\n\n const fieldsToEncrypt = form.querySelectorAll('[data-encrypt]');\n\n fieldsToEncrypt.forEach((field) => {\n const encryptedValue = encrypt.encrypt(field.value);\n if (encryptedValue) {\n // create new hidden field with same name and encrypted value\n const newField = ``;\n // remove name from field so its not submitted\n field.dataset.previousName = field.name;\n field.name = '';\n // insert new field on DOM\n field.insertAdjacentHTML('afterend', newField);\n }\n });\n};\n\nconst encryptForm = (event) => {\n encryptFields(event.currentTarget);\n};\n\nconst encryptFormOnSubmit = (form) => {\n form.addEventListener('submit', encryptForm);\n};\n\nconst initEncryption = () => {\n const forms = document.querySelectorAll('form[data-form-encrypt]');\n forms.forEach(encryptFormOnSubmit);\n};\n\nwindow.encryptFormOnSubmit = encryptFormOnSubmit;\nwindow.resetForm = resetForm;\n\ndocument.addEventListener('turbolinks:load', initEncryption);\n\nexport { encryptFields, resetForm };\n","// Methods to check if the user is using the platform (HeatBeat)\n// Then poll session timeout to check how long until the user is logged out\n// if less than sessionTimingToTimeout (default: 2min) we show a popup to extend the session\n// if sessionTimingToTimeout === 0, we redirect the user to the login page\nlet heartBeatActivated = false;\nclass HeartBeat {\n constructor() {\n const event = (typeof Turbolinks === 'object' && Turbolinks.supported) ? 'turbolinks:load' : 'DOMContentLoaded';\n document.addEventListener(event, () => {\n this.initHeartBeat();\n });\n }\n\n initHeartBeat() {\n this.lastActive = new Date().valueOf();\n if (!heartBeatActivated) {\n // const eventsToExtendSession = ['click', 'keydown'];\n\n ['mousemove', 'scroll', 'click', 'keydown'].forEach((activity) => {\n document.addEventListener(activity, (event) => {\n this.lastActive = event.timeStamp + performance.timing.navigationStart;\n // if (eventsToExtendSession.includes(event.type)) {\n // // TODO: ExtendUserSession on this moment? \n // debounce((ExtendUserSession));\n // }\n }, false);\n });\n heartBeatActivated = true;\n }\n }\n}\n\nwindow.heartBeat = new HeartBeat();\n","const fetchAuthToken = async () => {\n\tconst response = await fetch(`//${window.location.host}/cognito-jwt`, {\n\t\tmethod: 'GET',\n\t\theaders: {\n\t\t\tAccept: 'application/json',\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t});\n\tconst content = await response.json();\n\n\treturn content.id_token;\n};\n\nexport { fetchAuthToken }","/*\n This was created from the list of language ISO 639-1 codes\n\n More info: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\n*/\n\nconst languages = {\n 'ab':'Abkhazian',\n 'aa':'Afar',\n 'af':'Afrikaans',\n 'ak':'Akan',\n 'sq':'Albanian',\n 'am':'Amharic',\n 'ar':'Arabic',\n 'an':'Aragonese',\n 'hy':'Armenian',\n 'as':'Assamese',\n 'av':'Avaric',\n 'ae':'Avestan',\n 'ay':'Aymara',\n 'az':'Azerbaijani',\n 'bm':'Bambara',\n 'ba':'Bashkir',\n 'eu':'Basque',\n 'be':'Belarusian',\n 'bn':'Bengali',\n 'bh':'Bihari languages',\n 'bi':'Bislama',\n 'bs':'Bosnian',\n 'br':'Breton',\n 'bg':'Bulgarian',\n 'my':'Burmese',\n 'ca':'Catalan, Valencian',\n 'km':'Central Khmer',\n 'ch':'Chamorro',\n 'ce':'Chechen',\n 'ny':'Chichewa, Chewa, Nyanja',\n 'zh':'Chinese',\n 'cu':'Church Slavonic, Old Bulgarian, Old Church Slavonic',\n 'cv':'Chuvash',\n 'kw':'Cornish',\n 'co':'Corsican',\n 'cr':'Cree',\n 'hr':'Croatian',\n 'cs':'Czech',\n 'da':'Danish',\n 'dv':'Divehi, Dhivehi, Maldivian',\n 'nl':'Dutch, Flemish',\n 'dz':'Dzongkha',\n 'en':'English',\n 'eo':'Esperanto',\n 'et':'Estonian',\n 'ee':'Ewe',\n 'fo':'Faroese',\n 'fj':'Fijian',\n 'fi':'Finnish',\n 'fr':'French',\n 'ff':'Fulah',\n 'gd':'Gaelic, Scottish Gaelic',\n 'gl':'Galician',\n 'lg':'Ganda',\n 'ka':'Georgian',\n 'de':'German',\n 'ki':'Gikuyu, Kikuyu',\n 'el':'Greek (Modern)',\n 'kl':'Greenlandic, Kalaallisut',\n 'gn':'Guarani',\n 'gu':'Gujarati',\n 'ht':'Haitian, Haitian Creole',\n 'ha':'Hausa',\n 'he':'Hebrew',\n 'hz':'Herero',\n 'hi':'Hindi',\n 'ho':'Hiri Motu',\n 'hu':'Hungarian',\n 'is':'Icelandic',\n 'io':'Ido',\n 'ig':'Igbo',\n 'id':'Indonesian',\n 'ia':'Interlingua (International Auxiliary Language Association)',\n 'ie':'Interlingue',\n 'iu':'Inuktitut',\n 'ik':'Inupiaq',\n 'ga':'Irish',\n 'it':'Italian',\n 'ja':'Japanese',\n 'jv':'Javanese',\n 'kn':'Kannada',\n 'kr':'Kanuri',\n 'ks':'Kashmiri',\n 'kk':'Kazakh',\n 'rw':'Kinyarwanda',\n 'kv':'Komi',\n 'kg':'Kongo',\n 'ko':'Korean',\n 'kj':'Kwanyama, Kuanyama',\n 'ku':'Kurdish',\n 'ky':'Kyrgyz',\n 'lo':'Lao',\n 'la':'Latin',\n 'lv':'Latvian',\n 'lb':'Letzeburgesch, Luxembourgish',\n 'li':'Limburgish, Limburgan, Limburger',\n 'ln':'Lingala',\n 'lt':'Lithuanian',\n 'lu':'Luba-Katanga',\n 'mk':'Macedonian',\n 'mg':'Malagasy',\n 'ms':'Malay',\n 'ml':'Malayalam',\n 'mt':'Maltese',\n 'gv':'Manx',\n 'mi':'Maori',\n 'mr':'Marathi',\n 'mh':'Marshallese',\n 'ro':'Moldovan, Moldavian, Romanian',\n 'mn':'Mongolian',\n 'na':'Nauru',\n 'nv':'Navajo, Navaho',\n 'nd':'Northern Ndebele',\n 'ng':'Ndonga',\n 'ne':'Nepali',\n 'se':'Northern Sami',\n 'no':'Norwegian',\n 'nb':'Norwegian Bokmål',\n 'nn':'Norwegian Nynorsk',\n 'ii':'Nuosu, Sichuan Yi',\n 'oc':'Occitan (post 1500)',\n 'oj':'Ojibwa',\n 'or':'Oriya',\n 'om':'Oromo',\n 'os':'Ossetian, Ossetic',\n 'pi':'Pali',\n 'pa':'Panjabi, Punjabi',\n 'ps':'Pashto, Pushto',\n 'fa':'Persian',\n 'pl':'Polish',\n 'pt':'Portuguese',\n 'qu':'Quechua',\n 'rm':'Romansh',\n 'rn':'Rundi',\n 'ru':'Russian',\n 'sm':'Samoan',\n 'sg':'Sango',\n 'sa':'Sanskrit',\n 'sc':'Sardinian',\n 'sr':'Serbian',\n 'sn':'Shona',\n 'sd':'Sindhi',\n 'si':'Sinhala, Sinhalese',\n 'sk':'Slovak',\n 'sl':'Slovenian',\n 'so':'Somali',\n 'st':'Sotho, Southern',\n 'nr':'South Ndebele',\n 'es':'Spanish, Castilian',\n 'su':'Sundanese',\n 'sw':'Swahili',\n 'ss':'Swati',\n 'sv':'Swedish',\n 'tl':'Tagalog',\n 'ty':'Tahitian',\n 'tg':'Tajik',\n 'ta':'Tamil',\n 'tt':'Tatar',\n 'te':'Telugu',\n 'th':'Thai',\n 'bo':'Tibetan',\n 'ti':'Tigrinya',\n 'to':'Tonga (Tonga Islands)',\n 'ts':'Tsonga',\n 'tn':'Tswana',\n 'tr':'Turkish',\n 'tk':'Turkmen',\n 'tw':'Twi',\n 'ug':'Uighur, Uyghur',\n 'uk':'Ukrainian',\n 'ur':'Urdu',\n 'uz':'Uzbek',\n 've':'Venda',\n 'vi':'Vietnamese',\n 'vo':'Volap_k',\n 'wa':'Walloon',\n 'cy':'Welsh',\n 'fy':'Western Frisian',\n 'wo':'Wolof',\n 'xh':'Xhosa',\n 'yi':'Yiddish',\n 'yo':'Yoruba',\n 'za':'Zhuang, Chuang',\n 'zu':'Zulu'\n};\n\nconst checkCountryISOCode = (code) => {\n return Object.keys(languages).includes(code) ? true : false;\n}\n\nexport default checkCountryISOCode;\n","/* eslint-disable prefer-template */\n/* eslint-disable prefer-arrow-callback */\n/* eslint-disable object-shorthand */\nimport confirmCallback from './confirm_callback';\nimport { fetchAuthToken } from './integrations';\n\n// Calls confirmCallback as an error with a simple message as argument\nfunction showError(message) {\n confirmCallback(`${message}`, {\n classToAdd: 'bg-xs-yellow-100',\n targetContainer: document.getElementById('layout-notifications'),\n });\n}\n\n/*\n Function that updates the Select address listener\n Making sure that when there is a change in the select the values\n they are either searched again (if it is not an address) \n or retrieves the address with the correct format\n baseUrl arg is to be fed again to both search and retrieve Address functions\n SelectId is the id of the select fields so we can query only the fields that belong to section being changed\n*/\nfunction selectAddress(baseUrl, selectId) {\n const resultList = document.querySelector(\n `.js-result-box[data-select-id=\"${selectId}\"]`,\n );\n\n // No results\n if (resultList.childNodes.length <= 0) return;\n\n const selectors = document.querySelectorAll(\n `.js-result-select[data-select-id=\"${selectId}\"]`,\n );\n\n // Fetch the last selector\n const elem = selectors[selectors.length - 1];\n // IE fix\n elem.onchange = function bar(e) {\n const selectedOption = e.target[e.target.selectedIndex];\n // Get loqate item Type and option value\n const itemType = selectedOption.value.split(\"__\")[0]\n const optionValue = selectedOption.value.split(\"__\")[1]\n\n if (itemType === 'default') return;\n if (itemType === 'Address') {\n // Remove any additional dropdown\n handleAdditionalDropdown(resultList, e.target);\n\n retrieveAddress(baseUrl, selectId, optionValue);\n }\n\n if (itemType == 'Container') {\n searchAddress(baseUrl, selectId, optionValue);\n }\n };\n}\n\n// Remove the secondary dropdown if we selected an result - type \"Address\" on the main dropdown\nfunction handleAdditionalDropdown(selectGroup, triggeredElem) {\n if (selectGroup.childNodes.length == 1) return;\n\n if (triggeredElem.closest('.choices') === selectGroup.childNodes[0]) {\n removeLastDropdown(selectGroup);\n }\n}\n\n/*\n Function that receives the response from the Address Search to loop through the response\n and get add the appropriate options to the select based on the response\n Base Url needs to be passed as an arguments because it needs to be fed back to the search methods\n SelectId is the id of the select fields so we can query only the fields that belong to section being changed\n*/\nfunction searchSuccess(response, baseUrl, selectId) {\n const resultBox = document.querySelector(\n `.js-result-box[data-select-id=\"${selectId}\"]`,\n );\n\n if (resultBox.childNodes.length > 1) {\n removeLastDropdown(resultBox);\n }\n\n // Render the select Choices element\n const list = document.createElement('select');\n list.setAttribute('class', 'js-select js-result-select');\n list.setAttribute('data-select-id', selectId);\n list.setAttribute('data-placeholder', 'Press to select');\n resultBox.appendChild(list);\n\n const defaultOption = document.createElement('option');\n defaultOption.innerHTML = 'Select Address';\n defaultOption.setAttribute('value', '');\n defaultOption.setAttribute('selected', 'selected');\n list.appendChild(defaultOption);\n\n for (let i = 0; i < response.Items.length; i++) {\n const option = document.createElement('option');\n option.setAttribute('value', `${response.Items[i].Type}__${response.Items[i].Id}`);\n option.text = `${response.Items[i].Text} ${response.Items[i].Description}`;\n // Add option to select\n list.appendChild(option);\n }\n\n window.initChoices([list]);\n selectAddress(baseUrl, selectId, list);\n}\n\n/*\n Function that receives the response from the Retrieve Address and \n add the retrieved info to the appropriate place on the FF\n Base Url needs to be passed as an arguments because it needs to be fed back to the search methods\n SelectId is the id of the select fields so we can query only the fields that belong to section being changed\n*/\nfunction retrieveSuccess(response, baseUrl, selectId) {\n const locateSearch = document.querySelector(\n `.js-loqate-element[data-select-id=\"${selectId}\"]`,\n );\n\n const cardContent = locateSearch.closest('.js-card');\n const addressLine1 = cardContent.querySelector('[name*=\"address_line1\"]');\n const addressLine2 = cardContent.querySelector('[name*=\"address_line2\"]');\n const addressLine3 = cardContent.querySelector('[name*=\"address_line3\"]');\n const addressLine4 = cardContent.querySelector('[name*=\"address_line4\"]');\n const addressLine5 = cardContent.querySelector('[name*=\"address_line5\"]');\n const postcode = cardContent.querySelector('[name*=\"postcode\"]');\n\n const address = response.Items[0];\n addressLine1.value = address.Line1;\n addressLine2.value = address.Line2;\n addressLine3.value = address.Line3;\n addressLine4.value = address.Line4;\n addressLine5.value = address.City;\n postcode.value = address.PostalCode;\n // Make sure selecting other address still changes values\n selectAddress(baseUrl, selectId);\n}\n\n/*\n Function that checks if the postcode query is filled\n and calls the fectchRequest method with the appropriate function argument\n Base Url argument holds the first part of the URL which is sent with its suffix to the fetchRequest\n SelectId is the id of the select fields so we can query only the fields that belong to section being changed\n Container is the ID of a group on loqate, if the user selects an PostCode query (for example) instead of an Address it will do a\nsecond request to request the addresses that belong to that container\n*/\nfunction searchAddress(baseUrl, selectId, container = '') {\n const postcodeQuery = document.querySelector(\n `.js-search-address[data-select-id=\"${selectId}\"]`,\n ).value;\n\n if (postcodeQuery === '') {\n showError('Please enter a Postcode');\n return;\n }\n\n // Get country selected on country list to limit addresses from that country\n // Only GBR for now\n // const countrySelected = document.getElementById(selectId).value;\n const countrySelected = 'GBR';\n\n // Create params to be www-form-urlencoded\n const params = new URLSearchParams({\n Text: postcodeQuery,\n Container: container,\n Countries: countrySelected,\n });\n fetchRequest(\n baseUrl + 'loqate/Capture/Interactive/Find/v1.1/json3.ws?',\n params,\n function search(result) {\n searchSuccess(result, baseUrl, selectId);\n },\n );\n}\n\n/*\n Function calls fetchRequest is the appropriate function argument to fetchrequest\n Base Url needs to be passed as an arguments because it needs to be fed back to the search methods\n SelectId is the id of the select fields so we can query only the fields that belong to section being changed\n id is the id of the address to retrieve\n*/\nfunction retrieveAddress(baseUrl, selectId, id) {\n // Create params to be www-form-urlencoded\n const params = new URLSearchParams({\n Id: id,\n });\n fetchRequest(\n baseUrl + 'loqate/Capture/Interactive/Retrieve/v1.00/json3.ws?',\n params,\n function onSuccess(result) {\n retrieveSuccess(result, baseUrl, selectId);\n },\n );\n}\n\n/*\n Function that handles the HTTP request and handles the errors if they happen\n Url is the full URL where to send the request to (URL should end with a question mark \"?\")\n params is the Encoded www-form-urlencoded arguments needed to do the request\n successMethod is an function object which will be called when the response comes back as ok (200)\n*/\nasync function fetchRequest(url, params, successMethod) {\n fetch(url + params, {\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n AUTHORIZATION: await fetchAuthToken(),\n },\n })\n .then((response) => {\n if (response.ok) return response.json();\n return Promise.reject(response);\n })\n .then((result) => {\n successMethod(result);\n })\n .catch((error) => {\n if (error.Items !== undefined) {\n if (\n error.Items.length === 1 &&\n typeof error.Items[0].Error !== 'undefined'\n ) { showError(error.Items[0].Description); }\n if (error.Items.length === 0) showError('Sorry, there were no results');\n } else {\n showError('Something went wrong');\n }\n });\n}\n\nconst renderSearchField = (selectId, button) => {\n const label = document.createElement('LABEL');\n label.innerHTML = 'Search by Postcode';\n // Make attribute specific for this country select2\n label.setAttribute('for', 'loqate-input-' + selectId);\n label.classList.add('m-xs-bottom-1', 'font-xs-12', 'font-md-14');\n\n\n const input = document.createElement('input');\n input.type = 'text';\n input.name = 'Address Search';\n input.placeholder = \"E.g. 'W1D 7DY'\";\n input.id = 'loqate-input-' + selectId;\n input.autocomplete = 'disabled';\n input.classList.add('js-search-address');\n // Make attribute specific for this country select2\n input.setAttribute('data-select-id', selectId);\n\n // On click, reset the search values and re-enable the search button\n input.addEventListener('click', (event) => {\n event.preventDefault();\n input.value = '';\n const loqateBtn = button;\n loqateBtn.disabled = false;\n });\n return { input, label };\n};\n\nconst renderBtn = (baseUrl, selectId) => {\n const button = document.createElement('button');\n button.type = 'button';\n button.innerHTML = 'Search';\n button.onclick = function search() {\n searchAddress(baseUrl, selectId);\n\n // If a search is initiated, disable the search button.\n button.disabled = true;\n // If a search is initiated, remove the previous results.\n const resultsBox = document.querySelector('.js-result-box');\n if (resultsBox) resultsBox.innerHTML = '';\n };\n button.classList.add('btn', 'btn-xs-border-secondary-light', 'text-xs-secondary-dark');\n // Make attribute specific for this country select2\n button.setAttribute('data-select-id', selectId);\n return button;\n};\n\nconst renderSearchRows = (selectId, searchField, button) => {\n const resultDiv = document.createElement('div');\n resultDiv.setAttribute('class', 'js-result-box');\n resultDiv.setAttribute('data-select-id', selectId);\n\n // Create input row\n const inputRow = document.createElement('div');\n inputRow.setAttribute('class', 'row w-xs-full bottom-xs');\n\n // Create input container\n const inputContainer = document.createElement('div');\n inputContainer.setAttribute('class', 'form-section col-xs-7 p-xs-0');\n inputContainer.appendChild(searchField.label);\n\n // Create form-group\n const formGroup = document.createElement('div');\n formGroup.setAttribute('class', 'form-group');\n // Create form-control\n const formControl = document.createElement('div');\n formControl.setAttribute('class', 'form-control');\n\n // form-control << input\n formControl.appendChild(searchField.input);\n // form-group << form-control << input\n formGroup.appendChild(formControl);\n\n // inputContainer << form-group << form-control << input\n inputContainer.appendChild(formGroup);\n\n // Create button container\n const buttonContainer = document.createElement('div');\n buttonContainer.setAttribute('class', 'col-xs-5 p-xs-left-1');\n buttonContainer.appendChild(button);\n\n inputRow.appendChild(inputContainer);\n inputRow.appendChild(buttonContainer);\n\n // Create result row\n const resultsRow = document.createElement('div');\n resultsRow.setAttribute('class', 'w-xs-full m-xs-y-1');\n resultsRow.appendChild(resultDiv);\n\n return { inputRow, resultsRow };\n};\n\nconst triggerAddressSearch = (element) => {\n const select = element.closest('select');\n // Get the ID from the select2 to make sure fields only affected by this code relate to this select\n const selectId = select.id;\n\n // Get the container (valid only on the client side)\n const container = document.querySelector(`#loqate_${selectId}`);\n container.setAttribute('class', 'container-fluid p-xs-0 start-xs m-xs-0');\n\n // Get the URL for the Loqate access from the dataset which in turns gets it from the ENV file\n const baseUrl = select.dataset.locateUrl;\n // Remove older search elements\n const searchElements = document.querySelectorAll(\n `.js-loqate-element[data-select-id=\"${selectId}\"]`,\n );\n searchElements.forEach((searchElement) => {\n searchElement.remove();\n });\n\n // Check if the country selected is UK\n if (select.value !== 'GBR') return;\n\n const newDiv = document.createElement('div');\n const newDivClasses =\n 'js-loqate-element form-control m-xs-top-0-5 p-xs-1 bg-xs-grey-300 b-xs-rad-1 row';\n newDiv.setAttribute('class', newDivClasses);\n // Make attribute specific for this country select2\n newDiv.setAttribute('data-select-id', selectId);\n\n // Render flexbox\n const button = renderBtn(baseUrl, selectId);\n const searchField = renderSearchField(selectId, button);\n const flexRows = renderSearchRows(selectId, searchField, button);\n\n // Add created elements to show\n newDiv.appendChild(flexRows.inputRow);\n newDiv.appendChild(flexRows.resultsRow);\n\n // Add new div to after the select container\n container.insertAdjacentElement('afterend', newDiv);\n};\n\n/*\n Function to handle event trigger\n It will try to find the closes select, get it's ID and Locate URL from the dataset\n Then it will add the elements needed to do the loqate search while adding the \n Select's id so those elements are not confused with other's selects loqate search\n*/\nconst triggerAddressSearchEvent = (event) => {\n const clickedElement = event.target;\n triggerAddressSearch(clickedElement);\n};\n\n// Remove the last dropdown and its elements from the selectGroup\nfunction removeLastDropdown(selectGroup) {\n selectGroup.lastElementChild.remove();\n}\n\nconst initLoqate = () => {\n // Inits the event listeners\n var loqateSearchInput = document.querySelector('.js-loqate-search')\n if (!loqateSearchInput) return;\n\n // Do an initial component render if country is GBR\n triggerAddressSearch(loqateSearchInput)\n\n // Add event listener to the select\n loqateSearchInput.addEventListener('change', triggerAddressSearchEvent);\n}\n\nexport { initLoqate };\nwindow.triggerAddressSearch = triggerAddressSearch;\n","import { initPanels } from \"./menuPanels\";\n\nconst initMenus = () => {\n document.addEventListener(\"click\", (event) => {\n let targetElement = event.target;\n const mobileNavMenu = document.querySelector(\"#layout-navigation\");\n const mobileMainMenu = document.querySelector(\".js-main-menu-wrapper\");\n\n do {\n if (targetElement.matches(\"#layout-main\") && mobileNavMenu !== null) {\n // If the click is on the button\n mobileNavMenu.classList.remove(\"is-open\");\n // mobileNavMenu.classList.toggle(\"hidden-xs-lg\");\n return;\n }\n\n if (targetElement.matches(\".js-mobile-navigation-menu\") && mobileNavMenu !== null) {\n // If the click is on the button\n mobileNavMenu.classList.toggle(\"is-open\");\n // mobileNavMenu.classList.toggle(\"hidden-xs-lg\");\n return;\n }\n\n if (targetElement.matches(\".js-header-menu-mobile-nav\") && mobileMainMenu !== null) {\n mobileMainMenu.classList.toggle(\"is-open\");\n return;\n }\n\n // Go up the DOM\n targetElement = targetElement.parentNode;\n } while (targetElement && targetElement !== document);\n });\n\n initPanels();\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", initMenus);\n","import { autoAjax } from './panels_ajax_calls';\nimport SimpleBar from 'simplebar';\n\nconst panelEvent = new Event('panel:open');\n\nconst initPanels = () => {\n const headerMenuPanelButtons = document.querySelectorAll('.header-menu-entry > [aria-haspopup]');\n\n const closePanel = (button) => {\n button.classList.remove('is-open');\n button.setAttribute('aria-expanded', false);\n };\n\n const closeAllPanels = () => {\n headerMenuPanelButtons.forEach(closePanel);\n };\n\n const openPanel = (button) => {\n button.classList.add('is-open');\n button.setAttribute('aria-expanded', true);\n button.dispatchEvent(panelEvent);\n };\n\n document.addEventListener('click', (event) => {\n const panelOpen = document.querySelectorAll('.header-menu-entry > [aria-expanded=\"true\"]');\n let targetElement = event.target;\n\n // Is there one panel open?\n if (panelOpen.length > 0) {\n do {\n if (targetElement.matches('.menu-entry-button') || targetElement.matches('.menu-entry')) {\n // If the click is on the panel, do not close it!\n return;\n }\n // Go up the DOM\n targetElement = targetElement.parentNode;\n } while (targetElement && targetElement !== document);\n // if the click is anywhere but the panel, close it!\n panelOpen.forEach(closePanel);\n }\n });\n\n const bindPanelOpen = (event) => {\n const button = event.currentTarget;\n\n if (!button.classList.contains('js-user-card')) {\n\n const simplebar = new SimpleBar(button.parentElement.querySelector('.js-header-panel'));\n const target = simplebar.getContentElement();\n const scroll = simplebar.getScrollElement();\n autoAjax({\n path: button.dataset.ajaxPath,\n type: button.dataset.ajaxType,\n dataElement: button,\n sourceType: 'panel',\n target: target,\n });\n\n scroll.addEventListener('scroll', (event) => {\n\n const targetPanel = event.currentTarget;\n const contentHeight = targetPanel.scrollHeight - targetPanel.clientHeight;\n\n if (contentHeight <= targetPanel.scrollTop) {\n const button = targetPanel.closest('.header-menu-entry').querySelector('.menu-entry-button');\n if (button.dataset.nextPage !== '0') {\n autoAjax({\n path: button.dataset.ajaxPath,\n type: button.dataset.ajaxType,\n source: 'panel',\n target: targetPanel,\n dataElement: button,\n page: button.dataset.nextPage,\n });\n }\n }\n });\n }\n };\n\n const bindPanelFocus = (event) => {\n // CLose all open panels\n closeAllPanels();\n openPanel(event.currentTarget);\n };\n\n const bindPanelClick = (event) => {\n event.currentTarget.focus();\n };\n\n headerMenuPanelButtons.forEach((button) => {\n button.addEventListener('click', bindPanelClick);\n button.addEventListener('focus', bindPanelFocus);\n button.addEventListener('panel:open', bindPanelOpen, { once: true });\n });\n\n // Scroll and get more notifications/messages\n const headerMenuPanel = document.querySelectorAll('.js-header-panel');\n headerMenuPanel.forEach((panel) => {\n panel.addEventListener('scroll', (event) => {\n const targetPanel = event.currentTarget;\n const contentHeight = targetPanel.scrollHeight - targetPanel.clientHeight;\n\n if (contentHeight <= targetPanel.scrollTop) {\n const button = targetPanel.closest('.header-menu-entry').querySelector('.menu-entry-button');\n if (button.dataset.nextPage !== '0') {\n autoAjax({\n path: button.dataset.ajaxPath,\n type: button.dataset.ajaxType,\n source: 'panel',\n target: targetPanel,\n dataElement: button,\n page: button.dataset.nextPage,\n });\n }\n }\n });\n });\n};\n\nconst incrementCounter = (element) => {\n // element == button\n const headerElement = element;\n\n // add badge if doens't have\n if (!headerElement.classList.contains('has-badge')) {\n headerElement.classList.add('has-badge');\n }\n\n const currentCount = Number.parseInt(headerElement.dataset.headerBadge, 10);\n const newCount = currentCount + 1;\n headerElement.dataset.headerBadge = newCount;\n};\n\nconst decrementCounter = (element) => {\n // element == button\n const headerElement = element;\n\n const currentCount = Number.parseInt(headerElement.dataset.headerBadge, 10);\n if (currentCount > 0) {\n const newCount = currentCount - 1;\n headerElement.dataset.headerBadge = newCount;\n\n if (newCount === 0) {\n headerElement.classList.remove('has-badge');\n }\n }\n};\n\nwindow.initPanels = initPanels;\n\nexport {\n initPanels,\n incrementCounter,\n decrementCounter,\n};\n","import Rails from '@rails/ujs';\nimport { trailDate } from './trail_date';\n\nconst getTemplate = ({ type, item }) => {\n const senderNameArray = item.sender.name.split(' ');\n const senderInitials = senderNameArray[0][0] + senderNameArray[1][0];\n\n switch (type) {\n case 'notifications':\n return `\n
\n
\n ${item.sender.avatar ? `` : `${senderInitials}`}\n
\n
\n
\n

${item.text}

\n \n
\n
`;\n case 'messages':\n return `\n
\n
\n ${item.sender.avatar ? `` : `${senderInitials}`}\n
\n
${item.sender.name}
\n
\n
\n

${item.title}

\n

${item.content}

\n
\n
\n \n
\n
`;\n default:\n break;\n }\n};\n\nconst appendHtml = ({ response = [], type, target }) => {\n // Remove illustration in case there's one\n const svg = target.querySelector('.js-svg-wrapper');\n if (response.length > 0) {\n if (svg) {\n svg.remove();\n }\n response.forEach((item) => {\n target.insertAdjacentHTML('beforeend', getTemplate({ type, item }));\n });\n }\n};\n\nconst cleanErrors = (target) => {\n if (target.querySelector('[data-error]')) {\n target.querySelector('[data-error]').remove();\n }\n};\n\n// autoAjax({path: '/messages', type: 'messages', source:})\nconst autoAjax = ({ path, type, target, dataElement, page = 1, items = 10, sourceType = 'panel' }) => {\n Rails.ajax({\n type: 'GET',\n url: `${path}?page=${page}&items=${items}`,\n dataType: 'json',\n accept: 'json',\n success: (response, code, xhr) => {\n const currentPage = Number.parseInt(xhr.getResponseHeader('current-page'), 10);\n const totalPages = Number.parseInt(xhr.getResponseHeader('total-pages'), 10);\n cleanErrors(target);\n\n appendHtml({\n response,\n type,\n target,\n });\n\n dataElement.dataset.nextPage = (currentPage < totalPages) ? currentPage + 1 : 0;\n },\n error: (response, error, xhr) => {\n // In case of an error, show error message saying:\n // \"An unexpected error happen. Please try again\"\n cleanErrors(target);\n target.insertAdjacentHTML('beforeend', `
An unexpected error happen. Please try again!
`)\n },\n });\n};\n\nexport { autoAjax };\n","/* eslint-disable */\n\n/**\n * Executes a sungle callback or an array of callbacks in different rendered visual frames (async & sequentially)\n * @param {Function | Function[]} callbacks\n */\n\nexport const raf = (callbacks) => {\n if (typeof callbacks !== \"object\") {\n callbacks = [callbacks];\n }\n\n const run = () => {\n requestAnimationFrame(() => {\n callbacks.shift()();\n\n if (callbacks.length) run();\n });\n };\n\n requestAnimationFrame(run);\n};\n","/*\n Method to get attachments asyncrhonously\n*/\nimport Rails from '@rails/ujs';\n\nconst reloadAttachments = (url) => {\n Rails.ajax({\n type: 'GET',\n url,\n dataType: 'script',\n accept: 'script',\n });\n};\n\nconst initReloadAttachments = () => {\n const attachments = document.querySelectorAll('attachment');\n\n if (attachments.length > 0) {\n attachments.forEach((attachment) => {\n const url = `/docs/attachments/${attachment.dataset.sourceType}/${attachment.dataset.sourceId}`;\n reloadAttachments(url);\n });\n }\n\n window.reloadAttachments = reloadAttachments;\n};\n\nexport { initReloadAttachments };\n","import Rails from '@rails/ujs';\n\nconst initRemoteLinks = () => {\n\n const remoteLinks = Array.from(document.querySelectorAll(\"a[data-remote='true']\"))\n remoteLinks.forEach(function(element) {\n element.dataset.url = element.href\n element.href = \"javascript:void(0);\"\n })\n\n Rails.href = function(element) {\n return element.dataset.url || element.href\n }\n};\n\nexport { initRemoteLinks };\n","/* eslint-disable object-shorthand */\nimport Rails from '@rails/ujs';\n\nconst resendSms = (url) => {\n Rails.ajax({\n url: url,\n type: 'POST',\n });\n};\n\nconst initResendSms = () => {\n window.resendSms = resendSms;\n};\n\nexport { initResendSms };\n","import Rails from '@rails/ujs';\n\nconst cleanErrors = (target) => {\n if (target.querySelector('[data-error]')) {\n target.querySelector('[data-error]').remove();\n }\n};\n\nconst bindScroll = (event) => {\n const targetElement = event.currentTarget;\n const contentHeight = targetElement.scrollHeight - targetElement.clientHeight;\n\n if (contentHeight <= targetElement.scrollTop) {\n const path = targetElement.dataset.scrollAppend;\n const nextPage = targetElement.dataset.nextPage || 2;\n\n if (nextPage !== '0') {\n Rails.ajax({\n type: 'GET',\n url: `${path}?page=${nextPage}&items=10`,\n dataType: 'script',\n accept: 'script',\n success: (response, code, xhr) => {\n const currentPage = Number.parseInt(xhr.getResponseHeader('current-page'), 10);\n const totalPages = Number.parseInt(xhr.getResponseHeader('total-pages'), 10);\n cleanErrors(targetElement);\n\n targetElement.dataset.nextPage = (currentPage < totalPages) ? currentPage + 1 : 0;\n },\n error: (response, error, xhr) => {\n // In case of an error, show error message saying:\n // \"An unexpected error happen. Please try again\"\n cleanErrors(targetElement);\n targetElement.insertAdjacentHTML('beforeend', `
An unexpected error happen. Please try again!
`);\n },\n });\n }\n }\n};\n\nconst eachScrollable = (element) => {\n element.addEventListener('scroll', bindScroll);\n};\n\nconst scrollAppend = () => {\n const scrollableElements = document.querySelectorAll('[data-scroll-append]');\n\n scrollableElements.forEach(eachScrollable);\n};\n\nexport { scrollAppend };\n","const getScrollTarget = () =>\n document.querySelector(\"#layout-page\") || document.body;\n\nlet scrollspy;\nlet scrollspyItems;\nlet scrollspySections;\nlet threshold;\nlet activeMenuItem; // the menu item that is active\n\nconst getThreshold = () => {\n // Method to get a threshold between the element and the top of the page\n return (\n document.getElementById(\"layout-header\").getBoundingClientRect().bottom + 16\n );\n};\n\nconst getSection = (menuItems) => {\n const sections = [];\n\n menuItems.forEach((item) => {\n sections.push(document.querySelector(item.hash));\n });\n\n return sections;\n};\n\nconst scrollspyGoTo = () => {\n const spyLinks = scrollspy.querySelectorAll(\"a\");\n\n spyLinks.forEach((link) => {\n link.addEventListener(\"click\", (event) => {\n event.preventDefault();\n const target = document.querySelector(event.currentTarget.hash);\n const top =\n target.getBoundingClientRect().top +\n getScrollTarget().scrollTop -\n threshold;\n\n const scrollTarget = getScrollTarget() || window;\n\n scrollTarget.scrollTo({ top, behavior: \"smooth\" });\n });\n });\n};\n\nconst setMenuActive = (elem) => {\n scrollspyItems.forEach((menuItem) => {\n menuItem.classList.remove(\"is-active\");\n });\n\n elem.closest(\"li\").classList.add(\"is-active\");\n};\n\nconst scrollspyActivate = () => {\n if (scrollspy) {\n let visibleSection;\n const scrollPos = getScrollTarget().scrollTop;\n\n scrollspySections.forEach((section) => {\n // Added 10px for better detection\n if (section.offsetTop <= scrollPos) {\n visibleSection = section;\n }\n });\n\n const activeSection =\n visibleSection && visibleSection !== null\n ? visibleSection.id\n : scrollspySections[0].id;\n if (activeMenuItem !== activeSection) {\n activeMenuItem = activeSection;\n const menuItem = scrollspy.querySelector(`[href='#${activeMenuItem}']`);\n setMenuActive(menuItem);\n }\n }\n};\n\nconst initScrollspy = () => {\n scrollspy = document.querySelector(\".js-scrollspy\");\n if (scrollspy) {\n scrollspyItems = scrollspy.querySelectorAll(\"li\");\n scrollspySections = getSection(scrollspy.querySelectorAll(\"a\"));\n threshold = getThreshold();\n\n // Start scroll\n getScrollTarget().addEventListener(\"scroll\", scrollspyActivate);\n scrollspyGoTo();\n }\n};\n\nexport { initScrollspy };\n","import Rails from '@rails/ujs';\nimport Turbolinks from 'turbolinks';\nimport debounce from './debounce';\n\nfunction ExtendUserSession() {\n Rails.ajax({\n url: '/auth/reset_session_timer',\n type: 'GET',\n });\n}\n\nconst handleTyping = () => debounce((ExtendUserSession));\n\nwindow.handleTyping = handleTyping;\n\nconst sessionTimeoutPollFrequency = 25;\nconst sessionTimingToTimeout = 2 * 60; // 2min\n\nfunction pollForSessionTimeout() {\n clearTimeout(window.pollingTimeout);\n\n //\n if ((Date.now() - window.heartBeat.lastActive) < (sessionTimeoutPollFrequency * 1000)) {\n window.pollingTimeout = setTimeout(pollForSessionTimeout, (sessionTimeoutPollFrequency * 1000));\n return;\n }\n\n getSessionTimeout()\n .then((response) => {\n response.json().then((data) => {\n const { status } = response;\n\n if (status === 200) {\n if (data <= 0) {\n window.location.href = '/auth/session_timeout';\n } else {\n window.pollingTimeout = setTimeout(pollForSessionTimeout, (sessionTimeoutPollFrequency * 1000));\n }\n } else if (status === 401) {\n if (data.error === 'automatic_logout') {\n Turbolinks.visit(window.location);\n } else if (data.redirect_to) {\n Turbolinks.visit(data.redirect_to);\n }\n }\n });\n });\n}\n\nfunction getSessionTimeout() {\n const csrfToken = document.head.querySelector('meta[name=\"csrf-token\"]').content;\n return fetch('/auth/check_session_timeout', {\n headers: {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-CSRF-TOKEN': csrfToken,\n accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n credentials: 'same-origin',\n });\n}\n\ndocument.addEventListener('turbolinks:load', () => {\n clearTimeout(window.pollingTimeout);\n getSessionTimeout().then((response) => {\n response.json().then((data) => {\n let sessionTime = data;\n if (data <= sessionTimingToTimeout) {\n sessionTime = sessionTimeoutPollFrequency + sessionTimingToTimeout;\n }\n window.pollingTimeout = setTimeout(pollForSessionTimeout, (sessionTime - sessionTimingToTimeout) * 1000);\n })});\n});\n","const isToday = (someDate) => {\n const today = new Date()\n return someDate.getDate() == today.getDate() &&\n someDate.getMonth() == today.getMonth() &&\n someDate.getFullYear() == today.getFullYear()\n}\n\nconst isYesterday = (someDate) => {\n const today = new Date();\n const yesterday = new Date(today.setDate(today.getDate() - 1));\n\n return someDate.getDate() == yesterday.getDate() &&\n someDate.getMonth() == yesterday.getMonth() &&\n someDate.getFullYear() == yesterday.getFullYear()\n}\n\nconst pastWeek = (someDate) => {\n const today = new Date();\n const yesterday = new Date(today.setDate(today.getDate() - 1));\n const oneWeekAgo = new Date(today.setDate(today.getDate() - 7));\n yesterday.setHours(0, 0, 0, 0);\n oneWeekAgo.setHours(0, 0, 0, 0);\n const date = someDate.getTime();\n\n return date < yesterday && date >= oneWeekAgo;\n}\n\nconst thisYear = (someDate) => {\n const thisYear = new Date(new Date().getFullYear(), 0, 1);\n thisYear.getTime();\n const date = someDate.getTime();\n\n return date >= thisYear;\n}\n\nconst trailDate = (date) => {\n if (date !== undefined) {\n let string = '';\n if (isToday(date)) {\n // example: Today, 10:35 AM\n string = `Today, ${date.toLocaleString('en-US', { hour12:'true', hour:'numeric', minute:'2-digit' })}`\n } else if (isYesterday(date)) {\n // example: Yesterday, 10:35 AM\n string = `Yesterday, ${date.toLocaleString('en-US', { hour12:'true', hour:'numeric', minute:'2-digit' })}`\n } else if (pastWeek(date)) {\n // example: Thursday, 10:35 AM\n string = date.toLocaleString('en-US', {\n weekday: 'long',\n hour12: 'true',\n hour: 'numeric',\n minute: '2-digit'\n })\n } else if (thisYear(date)) {\n // example: 3 February\n string = date.toLocaleString('en-US', {\n day: 'numeric',\n month: 'long'\n })\n } else {\n // example: 3 February 2018\n string = date.toLocaleString('en-US', {\n day: 'numeric',\n month: 'long',\n year: 'numeric'\n })\n }\n return string\n }\n}\n\nexport { trailDate }","import Rails from '@rails/ujs';\n\n// As the user picture is the only field to be\n// submitted in this form we want to submit it on input change\nconst submitUserPictureOnChange = () => {\n const imgInput = document.getElementById('img-input');\n const imgForm = document.getElementById('edit_client_avatar');\n if (imgInput) {\n imgInput.addEventListener('change', () => {\n Rails.fire(imgForm, 'submit');\n });\n }\n}\n\nwindow.submitUserPictureOnChange = submitUserPictureOnChange;\n\nexport { submitUserPictureOnChange }\n","// Form validation message reset\nfunction handleValidation(status, resetOnly = false) {\n const list = document.getElementsByClassName('js-validation-questions');\n if (list.length === 0) return;\n\n // Remove any existing error messages\n const formControl = list[0].closest('.form-control');\n formControl.querySelectorAll('[class*=\"validation-message\"]').forEach((a) => {\n a.remove();\n });\n\n // Return if we only need to reset the validation\n if (resetOnly) return;\n\n // Add new validation message\n formControl.insertAdjacentHTML(\n 'beforeend',\n '*Mandatory option',\n );\n}\n\n// Form validation message\nfunction addValidationMessage(status) {\n if (status === 'disable') return;\n handleValidation(status);\n}\n\n// Form validation\nfunction validateElements(status, element) {\n const list = document.getElementsByClassName('js-validation-questions');\n\n // Validation defaults to true\n let itemChecked = true;\n if (list.length === 0) return itemChecked;\n\n // Iterate through the options and check if at least one item is selected\n itemChecked = false;\n for (const item of list) {\n if (item.checked) {\n itemChecked = true;\n }\n }\n\n // If none are selected, disable the button and add message\n if (itemChecked === false) {\n addValidationMessage(status);\n element.checked = false;\n }\n return itemChecked;\n}\n\n// Function to change the submit button status (disabled vs enabled)\nconst toggleAcceptAgreementSubmitButton = (status, element) => {\n // Submit button\n const submitButton = document.getElementById('accept_signature');\n const classesToAddRemove = ['bg-disabled', 'is-disabled'];\n\n // Form validation\n const itemChecked = validateElements(status, element);\n if (itemChecked === false) return;\n\n if (status === 'disable' || !status) {\n submitButton.classList.add(...classesToAddRemove);\n submitButton.disabled = true;\n } else if (status || status === 'enable') {\n handleValidation(status, true);\n submitButton.classList.remove(...classesToAddRemove);\n submitButton.disabled = false;\n }\n};\n\n// Form checkbox validation\nconst validationCheckbox = (event) => {\n if (event.checked === true) return;\n const element = document.querySelector('.js-signature-block input');\n\n const status = element.checked ? 'enable' : 'disable';\n const itemChecked = validateElements(status, element);\n\n if (itemChecked === true) return;\n\n const submitButton = document.getElementById('accept_signature');\n const classesToAddRemove = ['bg-disabled', 'is-disabled'];\n submitButton.classList.add(...classesToAddRemove);\n submitButton.disabled = true;\n};\n\nconst bindChange = (event) => {\n const element = event.target;\n\n if (element === null || !element.matches('.js-signature-block input')) {\n return;\n }\n\n if (element.id === 'signature_status') {\n const status = element.checked ? 'enable' : 'disable';\n toggleAcceptAgreementSubmitButton(status, element);\n }\n};\n\ndocument.addEventListener('change', bindChange);\ndocument.addEventListener('input', bindChange);\n\n// Export and make available in the view\nexport default validationCheckbox;\nwindow.validationCheckbox = validationCheckbox;\n","import Rails from '@rails/ujs';\nimport { decrementCounter } from '../utils/menuPanels';\n\nlet messagesPage;\nlet messagesPanel;\n\nconst updateMessageList = (conversationId) => {\n // Change active element/message\n const previousConversation = document.querySelector('.js-conversation-list .b-xs-left-primary-light');\n if (previousConversation !== null) {\n previousConversation.classList.add('b-xs-left-white');\n previousConversation.classList.remove('b-xs-left-primary-light');\n }\n\n const newConversation = document.querySelector(`#m-${conversationId} div`);\n newConversation.classList.remove('b-xs-left-white');\n newConversation.classList.add('b-xs-left-primary-light');\n\n const conversationElement = document.querySelector('#layout-message-window');\n\n conversationElement.scrollTo({\n left: 0,\n top: conversationElement.scrollHeight\n });\n // Add class active to message layout\n messagesPage.classList.add('is-open');\n\n\n // Decrease the counter on the header panel if we're opening an unread message\n const newCoversationAvatar = newConversation.querySelector('.avatar');\n if (newCoversationAvatar.classList.contains('has-badge')) {\n newConversation.classList.remove('bg-xs-grey-100', 'b-xs-left-grey-100');\n newCoversationAvatar.classList.remove('has-badge');\n decrementCounter(messagesPanel);\n\n const panelConversation = document.getElementById(`panel-conversation-${conversationId}`);\n panelConversation.classList.remove('bg-xs-terciary-light');\n panelConversation.querySelector('.avatar').classList.remove('has-badge');\n }\n};\n\n\nconst initMessages = () => {\n messagesPage = document.getElementById('layout-message');\n messagesPanel = document.querySelector('[aria-controls=\"header-menu-messages\"]');\n\n if (messagesPage == null) return;\n // Add to function to window object (accessable via UJS)\n window.updateMessageList = updateMessageList;\n \n const messageItem = document.querySelector('message');\n if (messageItem) {\n Rails.ajax({\n url: `/messages/${messageItem.dataset.id}`,\n type: 'GET',\n dataType: 'script',\n accept: 'script',\n });\n }\n\n document.addEventListener('keyup', (event) => {\n if (event.target === document.body) {\n // General shortcuts for messages. This is just a prototype, an \"easter-egg\"\n if (event.keyCode === 67) {\n // Click on \"c\"\n Rails.ajax({\n url: '/messages/new',\n type: 'GET',\n dataType: 'script',\n accept: 'script',\n });\n }\n } else if (document.querySelector('.js-message-form').contains(event.target)) {\n // Shortucts inside the form\n if (event.target.classList.contains('js-message-editor')) {\n if ((event.metaKey || event.ctrlKey) && event.keyCode === 13) {\n Rails.fire(event.target.closest('form'), 'submit');\n }\n }\n }\n });\n};\n\nexport { initMessages };\n","const scrollQuestionnaire = (evt, scroll = 'down') => {\n const currElement = evt.target.closest('section');\n const currElementID = parseInt(currElement.getAttribute('data-risk-question'));\n const nextElementID = scroll === 'down' ? currElementID + 1 : currElementID - 1;\n\n const nextElement = document.querySelector(`[data-risk-question='${nextElementID}']`);\n const topScroll = nextElement.offsetTop;\n const actionBtn = nextElement.querySelector(`[data-risk-button=\"${scroll === 'down' ? 'previous' : 'next'}\"]`);\n const riskContainer = document.querySelector('.js-risk-container');\n document.querySelector(\"#risk-questions\").scrollTo({top: topScroll, behavior: 'smooth'});\n\n if (actionBtn.classList.contains('opacity-xs-0')) {\n actionBtn.classList.remove('opacity-xs-0', 'is-disabled');\n }\n \n currElement.classList.add('hidden-xs')\n nextElement.classList.remove('hidden-xs')\n nextElement.classList.add('fade-in')\n \n if (!riskContainer.classList.contains('risk-questionnaire-form')) {\n setTimeout(() => riskContainer.classList.add('risk-questionnaire-form'), 1000);\n }\n}\n\nconst handleImageClick = (images) => {\n const questionnaireHeader = document.querySelector('.js-risk-tolerance-header');\n images.forEach(image => {\n const imageContainer = image.closest('.risk-questionnaire-img-container');\n // create a copy of the image container to insert\n // when we change the position to fixed so we don't break the layout\n const imageContainerCopy = imageContainer.cloneNode(true);\n imageContainerCopy.setAttribute(\"id\", \"placeholder-image-container\");\n // get the image cointainer icons so we can show/hide them \n const imageContainerCollapseBtn = imageContainer.querySelector('.js-collapse-questionnaire-img');\n const imageContainerZoomIcon = imageContainer.querySelector('.js-zoom-questionnaire-img');\n image.addEventListener('click', () => {\n questionnaireHeader.classList.remove('z-xs-top');\n imageContainer.classList.add('expanded');\n imageContainerZoomIcon.classList.add('hidden-xs');\n // insert a copy of the image container so we don't break the layout\n imageContainer.insertAdjacentElement('afterend', imageContainerCopy);\n });\n imageContainerCollapseBtn.addEventListener('click', () => {\n questionnaireHeader.classList.add('z-xs-top');\n imageContainer.classList.remove('expanded');\n imageContainerZoomIcon.classList.remove('hidden-xs');\n // remove the copy of the image container added\n document.querySelector('#placeholder-image-container').remove();\n });\n })\n}\n\nconst initRiskQuestionnaire = () => {\n const riskQuestionnaire = document.getElementById('risk-questions');\n const riskQuestionnaireImages = document.querySelectorAll('.js-risk-questionnaire-img')\n if(riskQuestionnaireImages) handleImageClick(riskQuestionnaireImages)\n\n if (riskQuestionnaire) {\n const answers = riskQuestionnaire.querySelectorAll('.questionnaire-answer');\n const nextButtons = riskQuestionnaire.querySelectorAll('[data-risk-button=\"next\"]');\n const previousButtons = riskQuestionnaire.querySelectorAll('[data-risk-button=\"previous\"]');\n \n const firstElement = document.querySelector(`[data-risk-question='1']`);\n firstElement.classList.remove('hidden-xs')\n \n answers.forEach( answer => {\n answer.addEventListener('change', (evt) => {\n\n const question = evt.currentTarget.closest('section');\n const currQuestionAnswers = question.querySelectorAll('.label');\n const questionnaireComplete = question.getAttribute('data-questionnaire-complete');\n const submitButton = question.querySelector('#submit-button');\n\n if (questionnaireComplete == 'true') {\n submitButton.disabled = false;\n submitButton.classList.remove('is-disabled');\n submitButton.addEventListener('click',() => {\n document.querySelector('.js-loader').classList.remove('hidden-xs');\n submitButton.classList.add('hidden-xs')\n });\n } else {\n scrollQuestionnaire(evt);\n }\n\n currQuestionAnswers.forEach(currAnswer => {\n currAnswer.classList.add('visited');\n })\n\n }, false);\n })\n\n nextButtons.forEach( btn => {\n btn.addEventListener('click', scrollQuestionnaire, false);\n })\n\n previousButtons.forEach( btn => {\n btn.addEventListener('click', (evt) => {\n scrollQuestionnaire(evt, 'up');\n }, false);\n })\n\n }\n}\nexport default initRiskQuestionnaire;\nwindow.initRiskQuestionnaire = initRiskQuestionnaire;","import { initCharts } from \"../plugins/chart\";\nimport { initTabs } from \"../plugins/tabs\";\nimport { initAccordions } from \"../plugins/accordion\";\n\nexport const initSuitabilityReport = () => {\n initCharts();\n initAccordions();\n initTabs();\n};\n"],"names":["Rails","Turbolinks","document","addEventListener","window","originPath","location","pathname","confirmCallback","initChoices","saveFactFind","changeFormStatus","initTooltips","initRemoteLinks","initMessages","initReloadAttachments","scrollAppend","initDropzone","initPanels","initDropdown","initScrollspy","initDynamicToggler","initResendSms","initFactFind","initRiskQuestionnaire","submitUserPictureOnChange","initSuitabilityReport","initLoqate","initAccordions","querySelectorAll","forEach","button","id","getAttribute","target","querySelector","classList","contains","isActive","targetHeight","add","raf","getBoundingClientRect","height","style","setProperty","remove","removeProperty","once","open","close","pluginAttr","pluginAttrActive","initCharts","Array","from","filter","elem","hasAttribute","colorLabels","values","split","v","length","map","y","Number","colors","Highcharts","title","text","credits","enabled","tooltip","chart","plotBackgroundColor","plotBorderWidth","plotShadow","type","width","plotOptions","series","states","inactive","opacity","pie","innerSize","borderWidth","dataLabels","hover","data","label","i","setAttribute","uploadDocuments","form","buttons","attachments","allowedContent","getElementById","value","join","htmlPreviewTemplate","htmlMainTemplate","insertAdjacentHTML","dzMain","dz","Dropzone","parallelUploads","maxFilesize","acceptedFiles","toString","clickable","paramName","createImageThumbnails","previewTemplate","innerHTML","previewsContainer","autoProcessQueue","headers","Accept","on","processQueue","_file","innerText","getUploadingFiles","progress","file","error","accepted","message","options","size","fileSize","Math","round","name","removeFile","targetContainer","classToAdd","dismiss","response","json","JSON","parse","xhr","e","eval","removeAllFiles","MicroModal","dzForm","onClose","modal","disableScroll","awaitOpenAnimation","awaitCloseAnimation","SimpleBar","initTabs","tabs","panels","setActive","btn","btonId","targetTab","panel","elems","Tooltip","position","dataset","container","regex","event","newState","state","path","match","url","cache","dataType","accept","action","confirmModal","trigger","modalAction","modalMethod","optionsAction","method","optionsMethod","isTrue","optionsCallback","csrfToken","head","content","rndID","randomizer","locale","translationPath","confirmModalType","modalTitle","modalContent","modalCancel","modalOk","urlParams","tagName","attributes","confirmModalAction","confirmModalMethod","checkCountryISOCode","fetch","credentials","then","translated","translated_strings","translatedTitle","translatedContent","translatedButtonCancel","translatedButtonOk","generateModal","modalButtonCancel","modalButtonOk","triggeredElem","callback","dataMethod","toUpperCase","template","onShow","confirmationModalEvents","modalID","closest","preventDefault","checked","dateInputKeyUp","dateElement","formGroup","parentElement","validationContainer","isValid","checkValidity","finalMessage","test","parseFinalMessage","validationMessage","timer","debounce","func","timeout","clearTimeout","setTimeout","encryptForm","encrypt","JSEncrypt","encryptKeyElement","encryptKey","setKey","field","encryptedValue","newField","previousName","encryptFields","currentTarget","encryptFormOnSubmit","resetForm","nextElementSibling","heartBeatActivated","HeartBeat","supported","initHeartBeat","this","lastActive","Date","valueOf","activity","timeStamp","performance","timing","navigationStart","heartBeat","fetchAuthToken","host","id_token","languages","code","Object","keys","includes","showError","selectAddress","baseUrl","selectId","resultList","childNodes","selectors","onchange","selectedOption","selectedIndex","itemType","optionValue","selectGroup","removeLastDropdown","handleAdditionalDropdown","params","URLSearchParams","Id","fetchRequest","result","cardContent","addressLine1","addressLine2","addressLine3","addressLine4","addressLine5","postcode","address","Items","Line1","Line2","Line3","Line4","City","PostalCode","retrieveSuccess","retrieveAddress","searchAddress","postcodeQuery","Text","Container","Countries","resultBox","list","createElement","appendChild","defaultOption","option","Type","Description","searchSuccess","successMethod","AUTHORIZATION","ok","Promise","reject","catch","undefined","Error","triggerAddressSearch","element","select","locateUrl","searchElement","newDiv","onclick","disabled","resultsBox","renderBtn","searchField","input","placeholder","autocomplete","renderSearchField","flexRows","resultDiv","inputRow","inputContainer","formControl","buttonContainer","resultsRow","renderSearchRows","insertAdjacentElement","triggerAddressSearchEvent","clickedElement","lastElementChild","loqateSearchInput","targetElement","mobileNavMenu","mobileMainMenu","matches","toggle","parentNode","panelEvent","Event","headerMenuPanelButtons","closePanel","panelOpen","bindPanelOpen","simplebar","getContentElement","scroll","getScrollElement","autoAjax","ajaxPath","ajaxType","dataElement","sourceType","targetPanel","scrollHeight","clientHeight","scrollTop","nextPage","source","page","bindPanelFocus","dispatchEvent","bindPanelClick","focus","decrementCounter","headerElement","currentCount","parseInt","headerBadge","newCount","appendHtml","svg","item","senderNameArray","sender","senderInitials","read","avatar","created_at","trailDate","getTemplate","cleanErrors","items","success","currentPage","getResponseHeader","totalPages","status","callbacks","requestAnimationFrame","run","shift","reloadAttachments","attachment","sourceId","href","resendSms","bindScroll","eachScrollable","scrollspy","scrollspyItems","scrollspySections","threshold","activeMenuItem","getScrollTarget","body","scrollspyActivate","visibleSection","scrollPos","section","offsetTop","activeSection","menuItem","menuItems","sections","push","hash","bottom","link","top","scrollTo","behavior","ExtendUserSession","handleTyping","pollForSessionTimeout","pollingTimeout","now","sessionTimeoutPollFrequency","getSessionTimeout","redirect_to","sessionTime","date","string","someDate","today","getDate","getMonth","getFullYear","toLocaleString","hour12","hour","minute","yesterday","setDate","isYesterday","oneWeekAgo","setHours","getTime","pastWeek","weekday","thisYear","day","month","year","imgInput","imgForm","handleValidation","resetOnly","getElementsByClassName","a","validateElements","itemChecked","addValidationMessage","validationCheckbox","submitButton","bindChange","classesToAddRemove","toggleAcceptAgreementSubmitButton","messagesPage","messagesPanel","updateMessageList","conversationId","previousConversation","newConversation","conversationElement","left","newCoversationAvatar","panelConversation","messageItem","keyCode","metaKey","ctrlKey","scrollQuestionnaire","evt","currElement","currElementID","nextElementID","nextElement","topScroll","actionBtn","riskContainer","images","questionnaireHeader","riskQuestionnaire","riskQuestionnaireImages","image","imageContainer","imageContainerCopy","cloneNode","imageContainerCollapseBtn","imageContainerZoomIcon","answers","nextButtons","previousButtons","answer","question","currQuestionAnswers","questionnaireComplete","currAnswer"],"sourceRoot":""}