{"version":3,"sources":["webpack:///./node_modules/@logitravel/alex-comp-cru/components/searcher-cruises/client/js/config.js","webpack:///./node_modules/@logitravel/alex-comp-cru/components/searcher-cruises/client/js/select.js","webpack:///./node_modules/@logitravel/alex-comp-cru/components/searcher-cruises/client/js/index.js"],"names":["configuration","type","destinations","departures","shippings","durations","ports","submit","reset","loader","filters","message","css","buttonDisable","modalHidden","messageHidden","module","exports","$","require","window","jQuery","SelectClient","addGa4Event","config","updateDestinations","instance","newChoices","value","searcherSelects","get","choices","clearStore","setChoices","set","updateDepartures","updateShippings","updateDurations","updatePorts","animateNumber","number","elementNumber","element","querySelector","elementText","currentNumber","innerHTML","target","parseInt","settings","literals","results","result","numberValue","animate","duration","easing","step","now","toFixed","transformDataItems","arrayData","featuredContent","otherContent","items","features","filter","item","highlight","others","length","push","label","prepareData","data","yearContent","years","obj","feature","other","dates","year","forEach","date","split","indexOf","concat","lines","unshift","selected","getForm","codZona","codSalida","codNaviera","codDuracion","codPuerto","getInputOptions","values","endPoint","urlAjax","params","Object","keys","map","key","encodeURIComponent","join","app","application","lang","language","url","Promise","resolve","reject","done","response","JSON","parse","fail","setButtonReset","buttonReset","document","selector","resetForm","then","counter","classList","add","removeEventListener","isReset","remove","addEventListener","initSelects","configBase","searchPlaceholderValue","placeholderInput","configDurations","_objectSpread","searchEnabled","destinationsSelector","departuresSelector","shippingsSelector","durationsSelector","portsSelector","setSelects","onChange","buttonSubmit","tooltipMessage","baseUrl","urlShowcase","event","contains","validate","buildUrl","event_type","event_detail","labels","filtersText","i","openLoader","fetch","location","assign","setSubmitButton","elementExist","arguments","undefined","dataset"],"mappings":"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","file":"searcher-cruises.f779c2f819435827660e.bundle.js","sourcesContent":["/* ==========================================================================\n Searcher > Config\n ========================================================================== */\n\nconst configuration = {\n type: {\n destinations: 'select-destinations',\n departures: 'select-departures',\n shippings: 'select-shippings',\n durations: 'select-durations',\n ports: 'select-ports',\n submit: 'button-submit',\n reset: 'button-reset',\n loader: 'LoadingModal',\n filters: 'filters-text',\n message: 'tooltip-message'\n },\n css: {\n buttonDisable: 'isDisable',\n modalHidden: 'isHidden',\n messageHidden: 'isHidden'\n }\n};\n\nconst config = () => configuration;\n\nmodule.exports = config;\n","/* ==========================================================================\n Searcher > Select\n ========================================================================== */\nconst $ = require('jquery');\n\nwindow.$ = $;\nwindow.jQuery = $;\n\n/* Modules */\nconst SelectClient = require('@bluekiri/alexandria-contrib-components/components/select/client/js');\n\nconst { addGa4Event } = require('@bluekiri/alexandria-contrib-components/helpers/ga4Event');\n\nconst config = require('./config');\n// require('./vendors/fc.js');\n\nfunction initSelects(instance) {\n const result = instance;\n const selector = instance.selector || '';\n\n // Is reset\n result.isReset = false;\n\n // Set object selects\n result.searcherSelects = setSelects(selector, result);\n\n result.searcherSelects.destinations.config.onChange = [\n () => {\n getInputOptions(result).then(data => {\n const newChoices = prepareData(data, result.settings.literals);\n\n animateNumber(result, data.counter);\n updateDepartures(result, newChoices.departures);\n updateShippings(result, newChoices.shippings);\n updateDurations(result, newChoices.durations);\n updatePorts(result, newChoices.ports);\n\n setButtonReset(result);\n });\n }\n ];\n\n result.searcherSelects.departures.config.onChange = [\n () => {\n getInputOptions(result).then(data => {\n const newChoices = prepareData(data, result.settings.literals);\n\n animateNumber(result, data.counter);\n updateDestinations(result, newChoices.destinations);\n updateShippings(result, newChoices.shippings);\n updateDurations(result, newChoices.durations);\n updatePorts(result, newChoices.ports);\n\n setButtonReset(result);\n });\n }\n ];\n\n result.searcherSelects.shippings.config.onChange = [\n () => {\n getInputOptions(result).then(data => {\n const newChoices = prepareData(data, result.settings.literals);\n\n animateNumber(result, data.counter);\n updateDestinations(result, newChoices.destinations);\n updateDepartures(result, newChoices.departures);\n updateDurations(result, newChoices.durations);\n updatePorts(result, newChoices.ports);\n\n setButtonReset(result);\n });\n }\n ];\n\n result.searcherSelects.durations.config.onChange = [\n () => {\n getInputOptions(result).then(data => {\n const newChoices = prepareData(data, result.settings.literals);\n\n animateNumber(result, data.counter);\n updateDestinations(result, newChoices.destinations);\n updateDepartures(result, newChoices.departures);\n updateShippings(result, newChoices.shippings);\n updatePorts(result, newChoices.ports);\n\n setButtonReset(result);\n });\n }\n ];\n\n result.searcherSelects.ports.config.onChange = [\n () => {\n getInputOptions(result).then(data => {\n const newChoices = prepareData(data, result.settings.literals);\n\n animateNumber(result, data.counter);\n updateDestinations(result, newChoices.destinations);\n updateDepartures(result, newChoices.departures);\n updateShippings(result, newChoices.shippings);\n updateDurations(result, newChoices.durations);\n\n setButtonReset(result);\n });\n }\n ];\n\n setSubmitButton(result);\n}\n\nfunction setSelects(selector, instance) {\n const configBase = {\n choices: {\n searchPlaceholderValue: instance.settings.literals.placeholderInput\n }\n };\n\n const configDurations = {\n choices: {\n ...configBase.choices,\n searchEnabled: false\n }\n };\n\n /* Set Selectors */\n const destinationsSelector = `${selector} [data-component=\"Select\"][data-type=\"${config().type.destinations}\"]`;\n const departuresSelector = `${selector} [data-component=\"Select\"][data-type=\"${config().type.departures}\"]`;\n const shippingsSelector = `${selector} [data-component=\"Select\"][data-type=\"${config().type.shippings}\"]`;\n const durationsSelector = `${selector} [data-component=\"Select\"][data-type=\"${config().type.durations}\"]`;\n const portsSelector = `${selector} [data-component=\"Select\"][data-type=\"${config().type.ports}\"]`;\n\n /* Init client selects */\n const selects = {\n destinations: SelectClient(destinationsSelector, configBase),\n departures: SelectClient(departuresSelector, configBase),\n shippings: SelectClient(shippingsSelector, configBase),\n durations: SelectClient(durationsSelector, configDurations),\n ports: SelectClient(portsSelector, configBase)\n };\n\n return selects;\n}\n\nfunction updateDestinations(instance, newChoices) {\n const { value } = instance.searcherSelects.destinations.get();\n instance.searcherSelects.destinations.choices.clearStore();\n instance.searcherSelects.destinations.choices.setChoices(newChoices, 'value', 'label', false);\n instance.searcherSelects.destinations.set(value);\n}\n\nfunction updateDepartures(instance, newChoices) {\n const { value } = instance.searcherSelects.departures.get();\n instance.searcherSelects.departures.choices.clearStore();\n instance.searcherSelects.departures.choices.setChoices(newChoices, 'value', 'label', false);\n instance.searcherSelects.departures.set(value);\n}\n\nfunction updateShippings(instance, newChoices) {\n const { value } = instance.searcherSelects.shippings.get();\n instance.searcherSelects.shippings.choices.clearStore();\n instance.searcherSelects.shippings.choices.setChoices(newChoices, 'value', 'label', false);\n instance.searcherSelects.shippings.set(value);\n}\n\nfunction updateDurations(instance, newChoices) {\n const { value } = instance.searcherSelects.durations.get();\n instance.searcherSelects.durations.choices.clearStore();\n instance.searcherSelects.durations.choices.setChoices(newChoices, 'value', 'label', false);\n instance.searcherSelects.durations.set(value);\n}\n\nfunction updatePorts(instance, newChoices) {\n const { value } = instance.searcherSelects.ports.get();\n instance.searcherSelects.ports.choices.clearStore();\n instance.searcherSelects.ports.choices.setChoices(newChoices, 'value', 'label', false);\n instance.searcherSelects.ports.set(value);\n}\n\nfunction animateNumber(instance, number) {\n const elementNumber = instance.element.querySelector('[data-type=\"number\"]');\n const elementText = instance.element.querySelector('[data-type=\"number-text\"]');\n const currentNumber = elementNumber.innerHTML;\n const target = parseInt(number, 10);\n\n elementText.innerHTML = instance.settings.literals.results;\n if (target === 1) {\n elementText.innerHTML = instance.settings.literals.result;\n }\n\n $({ numberValue: currentNumber }).animate(\n { numberValue: target },\n {\n duration: 500,\n easing: 'swing',\n step: now => {\n elementNumber.innerHTML = now.toFixed(0);\n }\n }\n );\n}\n\nfunction transformDataItems(arrayData, featuredContent, otherContent) {\n // if (arrayData.length) return arrayData;\n const items = [];\n const features = arrayData.filter(item => item.highlight === true);\n const others = arrayData.filter(item => item.highlight === false);\n\n if (features.length) {\n items.push({\n label: others.length ? featuredContent : '',\n choices: features\n });\n }\n\n if (others.length) {\n items.push({\n label: features.length ? otherContent : '',\n choices: others\n });\n }\n\n return items;\n}\n\nfunction transformDataItemsDate(arrayData, yearContent) {\n const years = [];\n const items = [];\n\n arrayData.forEach(date => {\n const year = parseInt(date.value.split('_')[1], 10);\n\n if (years.indexOf(year) === -1) {\n years.push(year);\n\n items.push({\n label: `${yearContent} ${year}`,\n choices: arrayData.filter(item => parseInt(item.value.split('_')[1], 10) === year)\n });\n }\n });\n\n return items;\n}\n\nfunction prepareData(data, literals) {\n const obj = {\n destinations: transformDataItems(data.destinations, literals.feature, literals.other),\n departures: transformDataItemsDate(data.dates, literals.year),\n shippings: transformDataItems(data.lines, literals.feature, literals.other),\n durations: data.duration,\n ports: transformDataItems(data.ports, literals.feature, literals.other)\n };\n\n obj.destinations.unshift({ label: '', choices: [{ value: '', label: literals.destinations }] });\n obj.departures.unshift({ label: '', choices: [{ value: '', label: literals.departures }] });\n obj.shippings.unshift({ label: '', choices: [{ value: '', label: literals.shippings }] });\n obj.durations.unshift({ label: literals.durations, value: '', selected: true });\n obj.ports.unshift({ label: '', choices: [{ value: '', label: literals.ports }] });\n\n return obj;\n}\n\nfunction getForm(instance) {\n const values = {\n codZona: instance.searcherSelects.destinations.get(),\n codSalida: instance.searcherSelects.departures.get(),\n codNaviera: instance.searcherSelects.shippings.get(),\n codDuracion: instance.searcherSelects.durations.get(),\n codPuerto: instance.searcherSelects.ports.get()\n };\n\n return values;\n}\n\nfunction getInputOptions(instance) {\n const values = getForm(instance);\n const endPoint = instance.settings.urlAjax;\n const params = Object.keys(values)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(values[key].value)}`)\n .join('&');\n const app = instance.settings.application || 'logitravel';\n const lang = instance.settings.language || 'es';\n\n const url = `${endPoint}?${params}&application=${app}&language=${lang}`;\n\n return new Promise((resolve, reject) => {\n const data = $.get(url)\n .done(response => resolve(JSON.parse(response)))\n .fail(reject);\n\n return data;\n });\n}\n\nfunction validate(values) {\n if (\n values.codZona.value ||\n values.codSalida.value ||\n values.codNaviera.value ||\n values.codDuracion.value ||\n values.codPuerto.value\n )\n return true;\n return false;\n}\n\nfunction setButtonReset(instance) {\n const result = instance;\n const buttonReset = document.querySelector(`${result.selector} [data-type=\"${config().type.reset}\"]`);\n const resetForm = () => {\n if (result.searcherSelects) {\n result.searcherSelects.destinations.set('');\n result.searcherSelects.departures.set('');\n result.searcherSelects.shippings.set('');\n result.searcherSelects.durations.set('');\n result.searcherSelects.ports.set('');\n\n getInputOptions(result).then(data => {\n const newChoices = prepareData(data, result.settings.literals);\n\n animateNumber(result, data.counter);\n updateDestinations(result, newChoices.destinations);\n updateDepartures(result, newChoices.departures);\n updateShippings(result, newChoices.shippings);\n updatePorts(result, newChoices.ports);\n updateDurations(result, newChoices.durations);\n });\n }\n\n buttonReset.classList.add(config().css.buttonDisable);\n buttonReset.removeEventListener('click', resetForm);\n result.isReset = false;\n };\n\n if (!result.isReset) {\n buttonReset.classList.remove(config().css.buttonDisable);\n buttonReset.addEventListener('click', resetForm);\n result.isReset = true;\n }\n\n return true;\n}\n\nfunction setSubmitButton(instance) {\n const buttonSubmit = document.querySelector(`${instance.selector} [data-type=\"${config().type.submit}\"]`);\n const tooltipMessage = document.querySelector(`${instance.selector} [data-type=\"${config().type.message}\"]`);\n const baseUrl = instance.settings.urlShowcase;\n\n document.addEventListener('click', event => {\n if (\n !tooltipMessage.classList.contains(config().css.messageHidden) &&\n !event.target.classList.contains('searcher__button')\n ) {\n tooltipMessage.classList.add(config().css.messageHidden);\n }\n });\n\n buttonSubmit.addEventListener('click', () => {\n const values = getForm(instance);\n const params = Object.keys(values)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(values[key].value)}`)\n .join('&');\n const validation = validate(values);\n\n if (validation) {\n const buildUrl = `${baseUrl}?${params}`;\n tooltipMessage.classList.add(config().css.messageHidden);\n\n // Add Ga4 event\n addGa4Event({ event: 'search', event_type: 'availability', event_detail: 'cruises' });\n\n // Show loader and locate to showcase\n openLoader(values, instance.selector);\n fetch(buildUrl).then(() => {\n // closeLoader(instance.selector);\n\n window.location.assign(buildUrl);\n });\n return true;\n }\n\n // Remove class hidden\n tooltipMessage.classList.remove(config().css.messageHidden);\n return false;\n });\n}\n\n// function closeLoader(selector) {\n// const loader = document.querySelector(`${selector} [data-component=\"${config().type.loader}\"]`);\n// loader.classList.add(`${config().css.modalHidden}`);\n// }\n\nfunction openLoader(values, selector) {\n const loader = document.querySelector(`${selector} [data-component=\"${config().type.loader}\"]`);\n const filter = loader.querySelector(`[data-type=${config().type.filters}]`);\n const labels = Object.values(values)\n .filter(item => item.value !== '')\n .map(item => item.label);\n\n let filtersText = '';\n labels.forEach((item, i) => {\n filtersText += labels.length === i + 1 ? item : `${item}, `;\n });\n\n filter.innerHTML = filtersText;\n loader.classList.remove(`${config().css.modalHidden}`);\n}\n\nmodule.exports = {\n initSelects\n};\n","/* ==========================================================================\n Searcher > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { initSelects } = require('./select');\n\n/**\n * Searcher component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function SearcherCruises(selector = '[data-component=\"SearcherCruises\"]') {\n if (elementExist(selector)) {\n // Instance reference\n const instance = {};\n\n // Element reference\n instance.element = document.querySelector(selector);\n\n // Settings\n instance.settings = (function Fn(data) {\n if (data) {\n const settings = JSON.parse(data);\n instance.element.dataset.settings = '';\n\n return settings;\n }\n\n return null;\n })(instance.element.dataset.settings);\n\n // Selector reference\n instance.selector = selector;\n\n // Selects\n initSelects(instance);\n\n return instance;\n }\n};\n"],"sourceRoot":""}