{"version":3,"sources":["webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/accommodation/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/calendar/calendar.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/discounts/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/validations/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/origin/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/services/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/submit/loading.js","webpack:///./node_modules/@logitravel/alex-aubergine/helpers/date.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/destination/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/url/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/operative/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/constants/product.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/store/reducer.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/utils/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/calendar/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/prototype.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/store/actions.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/submit/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/accommodation/addRoom/index.js","webpack:///./node_modules/@logitravel/alex-aubergine/components/searcher-flight-hotel-rxjs/client/js/classes/index.js"],"names":["html","addData","PanelAccommodationTemplate","PanelRoomsActions","PanelAccommodationClient","types","InputPanelClient","InputPanelActions","renderAddRoom","initAddRoom","destroyAddRoom","validate","ACCOMMODATION","configuration","getPanelData","instance","config","store","accommodation","accommodationConfig","literals","adultLabel","adultsLabel","adultsDescription","childLabel","childrenLabel","childrenDescription","adults","children","rooms","roomsConfig","maxAge","defaultAge","select","rangeAge","Array","keys","map","value","ind","label","selected","people","personLabel","personsLabel","personDescription","options","room","childrenAges","ages","age","createPanelAccommodation","hooks","panelBody","context","maxRooms","maxPeople","dataRooms","type","renderRooms","addPanelAccommodation","inst","accommodationInput","actions","setContent","element","querySelector","selector","messageHook","panelContent","reactions","updateDataRooms","subscribe","state","action","UPDATE_ROOMS","error","totalPeople","totalRooms","changeData","setInfoRooms","SET_INFO","addRooms","disable","removeInfoRooms","REMOVE_INFO","enable","setErrorRooms","SET_ERROR","setError","lock","setValidRooms","SET_VALID","resetStatus","unlock","initRooms","loadInfoAccommodation","accommodationInfo","adultAmountInfo","adultsAmountInfo","childAmountInfo","childrenAmountInfo","roomInfo","roomsInfo","reduce","acc","val","adultsInfo","replace","childrenInfo","roomInfoLabel","trim","buildInfo","changeValue","input","title","destroyPanelAccommodation","destroy","unsubscribe","module","exports","initAccommodation","setData","length","changeAccommodation","CHANGE_DATA","payload","subscriptions","openAccommodation","OPEN_PANEL","openPanel","closeAccommodation","CLOSE_PANEL","closePanel","destroyInputAccommodation","DESTROY","DateTime","addStyle","CalendarTemplate","CALENDAR","renderCalendar","maxDateDefault","dateTime","format","stringDateFormat","language","Language","setLocale","toFormat","formatDate","fromJSDate","Date","setMonth","getMonth","DATE_FORMAT","dates","minDate","maxDate","onModal","legent","showMonths","calendarTemplate","mode","startDate","endDate","css","calendarFp","elementExist","prototype","Object","create","document","calendar","submit","dataset","result","JSON","parse","init","toNode","SelectTemplate","Select","SelectActions","initDiscounts","data","node","discountsLabel","selectItems","item","name","String","valueByDefault","find","dataSelect","choices","searchEnabled","items","discounts","template","renderDiscounts","after","openDiscounts","closeDiscounts","changeDiscounts","CHANGE_VALUE","destroyDiscounts","getAirportByDestination","origin","destination","originError","destinationError","originStore","destinationStore","originValue","destinationValue","validateDestination","toggleLoading","next","response","code","complete","err","console","validateDates","calendarInput","calendarError","Autocomplete","AutocompleteActions","addOperative","addDiscounts","initOrigin","originChange","originClear","CLEAR","openOrigin","OPEN_SUGGESTIONS","closeOrigin","CLOSE_SUGGESTIONS","destroyOrigin","changeOrigin","getService","PRODUCT","getTypeValue","getOperative","endpoints","application","url","concat","operative","getDiscount","destinationCode","airportByDestination","LoadingT","Loading","LOADING","loadingText","text","originInfo","destinationInfo","calendarInfo","initLoader","showLoading","LOADING_SRC","LOADING_ALTERNATIVE","image","isLazy","src","alternative","loadingTitle","description","message","loadingMessage","loading","createLoader","body","appendChild","destroyLoader","date","fromISO","toLocaleString","weekday","month","year","day","formatJSDate","initDestination","destinationChange","destinationClear","openDestination","closeDestination","destroyDestination","baseUrl","params","classes","urlParams","entries","param","join","fill","c","addDirectOperativeOut","dayElem","disableDates","disableDateConfig","checkouts","getAttribute","isDisable","some","isDirect","filter","scale","classList","add","innerHTML","getDatesOperative","setOperative","checkins","d","s","sort","a","b","datesConfig","releaseDays","startDateIsValid","starDateAvailable","endDateIsValid","plus","days","endDateAvailable","checkout","operativeDates","addDirectOperativeIn","fp","configDates","diableDatesConfig","selectedDates","remove","getDiscountOperative","disableDiscounts","enableDiscounts","isDiscounts","setOptions","CIU","HOT","ISL","ZON","initialState","hidden","locked","panel","panelOpen","panelClose","hasPanel","reducer","SET_DATA","SET_OPERATIVE","SET_DISCOUNTS","ENABLE_DISCOUNTS","DISABLE_DISCOUNTS","LOCK","UNLOCK","slice","Calendar","CalendarActions","updateCalendar","dayAfter","dayBefore","i","nextDay","setDate","getDate","prevDay","ariaDay","ariaDayBefore","initDates","panelType","panelSelector","from","getFullYear","to","dateFormat","ariaDateFormat","static","inline","onDayCreate","dObj","dStr","sameDay","disableDays","jumpToDate","calendarChange","SET_VALUE","destroyCalendar","initCalendar","calendarConfig","changeDates","openCalendar","contentTemplate","addPanelCalendar","closeCalendar","destroyInputCalendar","Store","initClasses","destroyClasses","initSubmit","this","dispatch","changed","setDiscounts","forEach","key","parentNode","removeChild","start","setupStore","setupActions","setupReactions","Button","buildUrl","isWidget","submit$","events","click$","window","location","assign","ButtonTemplate","ButtonClient","addRoom","dataButton","content","addRooms$","event","stopPropagation","scrollTop","scrollHeight","typeConfig","openClasses","closeClasses","changeClasses","changeclasses"],"mappings":"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","file":"vendors~searcher-flight-hotel-rxjs.22e138ea11f887618cd5.bundle.js","sourcesContent":["/* ==========================================================================\n SearcherTrainHotel > Client > Accommodation\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\n\nconst { addData } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst PanelAccommodationTemplate = require('../../../../panel-accommodation/template');\nconst PanelRoomsActions = require('../../../../panel-accommodation/client/js/store/actions'); // eslint-disable-line\nconst PanelAccommodationClient = require('../../../../panel-accommodation/client/js');\n\nconst { types } = require('../store/actions');\nconst InputPanelClient = require('../../../../input-panel/client/js');\nconst InputPanelActions = require('../../../../input-panel/client/js/store/actions');\nconst { renderAddRoom, initAddRoom, destroyAddRoom } = require('./addRoom');\n\nconst { validate } = require('../validations');\n\nconst { ACCOMMODATION } = require('../../../constants');\nconst configuration = require('../config');\n\nfunction buildInfo(instance) {\n const { config = {}, store = {} } = instance;\n const { literals = {} } = config;\n const {\n adultAmountInfo = '',\n adultsAmountInfo = '',\n childAmountInfo = '',\n childrenAmountInfo = '',\n roomInfo = '',\n roomsInfo = ''\n } = literals;\n\n const { accommodation = {} } = store.select('data');\n const { rooms = [], totalRooms } = accommodation;\n const adults = rooms.map(room => room.people[0].value).reduce((acc, val) => acc + val);\n const children = rooms\n .map(room => {\n if (room.people[1]) return room.people[1].value;\n\n return 0;\n })\n .reduce((acc, val) => acc + val);\n\n /* Adults info literal */\n const adultsInfo =\n adults === 1 ? adultAmountInfo.replace('#number#', adults) : adultsAmountInfo.replace('#number#', adults);\n\n /* Children info literal */\n const childrenInfo =\n children === 1\n ? childAmountInfo.replace('#number#', children)\n : childrenAmountInfo.replace('#number#', children);\n\n /* Rooms info literal */\n const roomInfoLabel =\n totalRooms === 1 ? roomInfo.replace('#adults#', adultsInfo) : roomsInfo.replace('#adults#', adultsInfo);\n\n return children > 0\n ? roomInfoLabel.replace('#children#', childrenInfo).replace('#number#', totalRooms)\n : roomInfoLabel\n .replace('#children#', ' ')\n .replace('#number#', totalRooms)\n .replace(/\\s{2,}/g, ' ')\n .trim();\n}\n\nfunction getPanelData(instance) {\n const { config = {}, store = {} } = instance;\n const { accommodation: accommodationConfig = {}, literals = {} } = config;\n const {\n adultLabel = '',\n adultsLabel = '',\n adultsDescription = '',\n childLabel = '',\n childrenLabel = '',\n childrenDescription = ''\n } = literals;\n\n const {\n adults = ACCOMMODATION.adults,\n children = ACCOMMODATION.children,\n rooms: roomsConfig\n } = accommodationConfig;\n\n const { maxAge, defaultAge } = children;\n\n /* Data */\n const { accommodation = {} } = store.select('data');\n const { rooms = roomsConfig } = accommodation;\n\n const rangeAge = [...Array(maxAge + 1).keys()].map((value, ind) => ({\n value,\n label: `${value}`,\n selected: ind === defaultAge\n }));\n\n const adultsData = {\n ...adults,\n personLabel: adultLabel,\n personsLabel: adultsLabel,\n personDescription: adultsDescription\n };\n\n const childrenData = {\n ...children,\n personLabel: childLabel,\n personsLabel: childrenLabel,\n personDescription: childrenDescription,\n options: rangeAge\n };\n\n return {\n people: [adultsData, childrenData],\n rooms: rooms.map(room => {\n const { childrenAges = [] } = room;\n const ages = childrenAges.map(age => (age > maxAge ? 0 : age));\n\n return { people: [{ value: room.adults }, { value: room.children, ages }] };\n })\n };\n}\n\nfunction renderRooms(instance) {\n const { config = {}, store = {} } = instance;\n const { context = {}, literals = {}, accommodation: accommodationConfig } = config;\n const { maxRooms = ACCOMMODATION.maxRooms, maxPeople = ACCOMMODATION.maxPeople } = accommodationConfig;\n\n /* Data store */\n const { accommodation } = store.select('data');\n const { rooms = [] } = accommodation;\n\n const dataRooms = addData(\n {\n config: {\n literals,\n maxRooms,\n maxPeople\n },\n ...getPanelData(instance),\n rooms\n },\n { type: configuration().type.rooms }\n );\n\n return PanelAccommodationTemplate(dataRooms, context);\n}\n\nfunction createPanelAccommodation(instance) {\n return html(`\n
\n ${renderAddRoom(instance)}\n
\n
${renderRooms(instance)}
\n \n `);\n}\n\nfunction initRooms(instance) {\n const inst = instance;\n const { selector } = instance;\n\n inst.accommodation = PanelAccommodationClient(\n `${selector} [data-component=\"PanelAccommodation\"][data-type=\"${configuration().type.rooms}\"]`,\n { messageHook: inst.accommodationInput.hooks.panelContent.querySelector('[data-input-panel-footer]') }\n );\n\n if (!inst.accommodation) return;\n\n /* Extend reactions */\n inst.reactions = {\n ...inst.reactions,\n updateDataRooms: inst.accommodation.store.subscribe((state, action) => {\n if (action.type !== PanelRoomsActions.types.UPDATE_ROOMS) return;\n\n /* Data accommodation-panel */\n const { error, rooms = [], totalPeople, totalRooms } = inst.accommodation.store.select('data');\n\n if (error) return;\n\n instance.actions.changeData({\n accommodation: { rooms, totalRooms, totalPeople }\n });\n }),\n setInfoRooms: inst.accommodation.store.subscribe((state, action) => {\n if (action.type !== PanelRoomsActions.types.SET_INFO) return;\n if (inst.addRooms) inst.addRooms.actions.disable();\n }),\n removeInfoRooms: inst.accommodation.store.subscribe((state, action) => {\n if (action.type !== PanelRoomsActions.types.REMOVE_INFO) return;\n if (inst.addRooms) inst.addRooms.actions.enable();\n }),\n setErrorRooms: inst.accommodation.store.subscribe((state, action) => {\n if (action.type !== PanelRoomsActions.types.SET_ERROR) return;\n\n if (inst.addRooms) inst.addRooms.actions.disable();\n inst.accommodationInput.actions.setError();\n inst.actions.lock();\n }),\n setValidRooms: inst.accommodation.store.subscribe((state, action) => {\n if (action.type !== PanelRoomsActions.types.SET_VALID) return;\n\n if (inst.addRooms) inst.addRooms.actions.enable();\n inst.accommodationInput.actions.resetStatus();\n inst.actions.unlock();\n })\n };\n}\n\nfunction addPanelAccommodation(instance) {\n const inst = instance;\n const { accommodationInput } = instance;\n\n /* add accomodation to panel */\n instance.accommodationInput.actions.setContent(createPanelAccommodation(instance));\n\n inst.hooks = {\n ...inst.hooks,\n panelBody: accommodationInput.element.querySelector(`[${configuration().hooks.panelBody}]`)\n };\n\n /* Init components */\n initRooms(inst);\n initAddRoom(instance);\n}\n\nfunction loadInfoAccommodation(instance) {\n if (!instance.accommodationInput) return;\n\n const inst = instance;\n const accommodationInfo = buildInfo(instance);\n\n inst.accommodationInput.actions.changeValue(accommodationInfo);\n inst.accommodationInput.input.hooks.input.title = accommodationInfo;\n}\n\nfunction initAccommodation(instance) {\n const inst = instance;\n const { config = {}, selector } = instance;\n\n inst.accommodationInput = InputPanelClient(\n `${selector} [data-component=\"InputPanel\"][data-type=\"${configuration().type.rooms}\"]`\n );\n\n if (!inst.accommodationInput) return;\n\n /* Sync Store */\n if (config.accommodation) {\n const { rooms = [] } = getPanelData(instance);\n\n instance.actions.setData({ accommodation: { rooms, totalRooms: rooms.length } });\n }\n\n /* Sync data accommodation width input */\n loadInfoAccommodation(inst);\n\n /* Extends Reactions */\n inst.reactions = {\n ...inst.reactions,\n changeAccommodation: instance.store.subscribe((state, action) => {\n if (action.type !== types.CHANGE_DATA) return;\n if (!action.payload.accommodation) return;\n\n /* Sync data accommodation width input */\n loadInfoAccommodation(inst);\n })\n };\n\n /* Extends subscriptions */\n inst.subscriptions = {\n ...inst.subscriptions,\n openAccommodation: inst.accommodationInput.store.subscribe((state, action) => {\n if (action.type !== InputPanelActions.types.OPEN_PANEL) return;\n\n addPanelAccommodation(inst);\n inst.actions.openPanel('accommodationInput');\n }),\n closeAccommodation: inst.accommodationInput.store.subscribe((state, action) => {\n if (action.type !== InputPanelActions.types.CLOSE_PANEL) return;\n\n destroyPanelAccommodation(inst);\n inst.actions.closePanel('accommodationInput');\n inst.accommodationInput.actions.resetStatus();\n validate(inst);\n }),\n destroyInputAccommodation: inst.accommodationInput.store.subscribe((state, action) => {\n if (action.type !== InputPanelActions.types.DESTROY) return;\n\n destroyInputAccommodation(inst);\n })\n };\n}\n\nfunction destroyPanelAccommodation(instance) {\n const inst = instance;\n if (!instance.accommodation) return;\n\n /* Destroy */\n instance.accommodation.actions.destroy();\n destroyAddRoom(instance);\n\n /* Unsubcribe */\n instance.reactions.updateDataRooms.unsubscribe();\n instance.reactions.setErrorRooms.unsubscribe();\n instance.reactions.setValidRooms.unsubscribe();\n\n delete inst.reactions.updateDataRooms;\n delete inst.reactions.setErrorRooms;\n delete inst.reactions.setValidRooms;\n delete inst.accommodation;\n}\n\nfunction destroyInputAccommodation(instance) {\n if (!instance.accommodationInput) return;\n\n const inst = instance;\n destroyPanelAccommodation(instance);\n\n delete inst.accommodationInput;\n}\n\nmodule.exports = {\n initAccommodation\n};\n","/* ==========================================================================\n SearcherFlightHotel > Client > Calendar > Panel\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\nconst { DateTime } = require('luxon');\n\nconst { addData, addStyle } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst CalendarTemplate = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/template');\n\nconst { CALENDAR } = require('../../../constants');\nconst configuration = require('../config');\n\nfunction formatDate(instance, dateTime, format = CALENDAR.stringDateFormat) {\n const { config = {} } = instance;\n const { context = {} } = config;\n const language = context.language || context.Language;\n\n return dateTime.setLocale(language).toFormat(format);\n}\n\n/* Render Calendar */\nconst renderCalendar = instance => {\n const maxDateDefault = formatDate(\n instance,\n DateTime.fromJSDate(new Date(new Date().setMonth(new Date().getMonth() + 12))),\n CALENDAR.DATE_FORMAT\n );\n\n const { config = {} } = instance;\n const { literals, context = {}, dates: { minDate, maxDate = maxDateDefault } = {}, onModal } = config;\n const { legent = '' } = literals;\n\n const showMonths = onModal ? 1 : 2;\n\n /* Data store */\n const { dates } = instance.store.select('data');\n\n const calendarTemplate = CalendarTemplate(\n addStyle(\n addData({\n config: {\n mode: CALENDAR.mode,\n showMonths\n },\n ...CALENDAR,\n minDate,\n maxDate,\n startDate: dates[0],\n endDate: dates[1],\n ...dates\n }),\n [onModal ? configuration().css.calendarFp : '']\n ),\n context\n );\n\n return html(`\n
${calendarTemplate}
\n `);\n};\n\nmodule.exports = {\n renderCalendar\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client\n ========================================================================== */\n\n/* Import modules */\nconst { elementExist } = require('@bluekiri/alexandria/helpers/domHelpers');\n\nconst prototype = require('./prototype');\nconst config = require('./config');\n\n/**\n * SearcherFlightHotelRxjs component\n * @param {selector} String selector for the component in the client side.\n */\nmodule.exports = function SearcherFlightHotelRxjs(\n selector = '[data-component=SearcherFlightHotelRxjs]',\n configuration = {}\n) {\n if (elementExist(selector)) {\n /* Instance */\n const instance = Object.create(prototype);\n\n /* Selector */\n instance.selector = selector;\n\n /* Element */\n instance.element = document.querySelector(selector);\n\n /* Hooks */\n instance.hooks = {\n calendar: instance.element.querySelector(`[data-type=\"${config().type.calendar}\"]`),\n rooms: instance.element.querySelector(`[data-type=\"${config().type.rooms}\"]`),\n submit: instance.element.querySelector(`[data-type=\"${config().type.submit}\"]`)\n };\n\n /* Config */\n instance.config = {\n ...config(),\n ...configuration,\n ...(function getConfig() {\n if (!instance.element.dataset.config) return '';\n\n const result = JSON.parse(instance.element.dataset.config);\n instance.element.dataset.config = '';\n return result;\n })()\n };\n\n /* Init */\n instance.init();\n\n /* Return */\n return instance;\n }\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Discounts\n ========================================================================== */\n\n/* Modules */\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { addStyle, addData } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst SelectTemplate = require('../../../../select-panel/template');\nconst Select = require('../../../../select-panel/client/js');\nconst SelectActions = require('../../../../select-panel/client/js/store/actions');\n\nconst configuration = require('../config');\n\n/* render Discounts */\nconst renderDiscounts = (instance, data) => {\n /* Data */\n const { literals, context } = instance.config;\n\n const { discountsLabel } = literals;\n\n const selectItems = data.map(item => ({\n label: item.name,\n value: String(item.type)\n }));\n\n const { type: valueByDefault } = data.find(item => item.type === 0) || {};\n\n const dataSelect = addStyle(\n addData(\n {\n config: {\n choices: {\n searchEnabled: false\n },\n literals\n },\n value: String(valueByDefault),\n label: discountsLabel,\n items: selectItems\n },\n { type: configuration().type.discounts }\n ),\n [configuration().css.item, configuration().css.discounts]\n );\n\n const template = SelectTemplate(dataSelect, context);\n\n /* Return Node */\n return toNode(template)[0];\n};\n\n/* Add modal Discounts */\nfunction initDiscounts(instance, data) {\n const inst = instance;\n\n const { selector } = instance;\n\n /* Data */\n const { type } = instance.config;\n\n const node = renderDiscounts(instance, data);\n\n /* Add to DOM */\n inst.hooks.submit.after(node);\n\n /* Init Select */\n inst.discounts = Select(`${selector} [data-component=\"SelectPanel\"][data-type=\"${type.discounts}\"]`);\n\n /* Update reactions */\n inst.reactions = {\n ...instance.reactions,\n openDiscounts: instance.discounts.store.subscribe((state, action) => {\n if (action.type !== SelectActions.types.OPEN_PANEL) return;\n inst.actions.openPanel('discounts');\n }),\n closeDiscounts: instance.discounts.store.subscribe((state, action) => {\n if (action.type !== SelectActions.types.CLOSE_PANEL) return;\n inst.actions.closePanel('discounts');\n }),\n changeDiscounts: instance.discounts.store.subscribe((state, action) => {\n if (action.type !== SelectActions.types.CHANGE_VALUE) return;\n\n /* Dispatch action */\n instance.actions.changeData({ discounts: action.payload });\n })\n };\n\n const { value } = instance.discounts.store.select('data');\n\n /* Update store discount */\n instance.actions.changeData({ discounts: value });\n}\n\n/* Close modal */\nfunction destroyDiscounts(instance) {\n const inst = instance;\n\n if (!inst.discounts) return;\n\n /* Destroy */\n instance.discounts.actions.destroy();\n\n /* unsuscribe reactions */\n inst.reactions.changeDiscounts.unsubscribe();\n\n /* Remove references */\n delete inst.reactions.changeDiscounts;\n delete inst.discounts;\n}\n\nmodule.exports = {\n initDiscounts,\n destroyDiscounts\n};\n","/* ==========================================================================\n MSearcherFlightHotel > Client > Validations\n ========================================================================== */\n\n/* Modules */\nconst { getAirportByDestination } = require('../services');\n\nfunction validateDestination(instance) {\n const inst = instance;\n\n const { destination = {} } = inst.store.select('data');\n\n if (!destination.value) return;\n\n /* Unsubscribe getAiportByDestination */\n if (inst.subscriptions.getAirportByDestination) inst.subscriptions.getAirportByDestination.unsubscribe();\n\n if (inst.destination) inst.destination.actions.toggleLoading();\n inst.actions.lock();\n\n /* Update subscriptions */\n inst.subscriptions = {\n ...inst.subscriptions,\n getAirportByDestination: getAirportByDestination(instance).subscribe({\n next: response => {\n const { error, code } = response;\n\n if (inst.destination) inst.destination.actions.toggleLoading();\n\n /* Data Store */\n const { origin = {} } = inst.store.select('data');\n const { value: originValue = '' } = origin;\n\n /* Error control */\n if (error) return;\n\n if (code === originValue) {\n inst.destination.actions.setError();\n inst.actions.lock();\n } else {\n inst.destination.actions.resetStatus();\n inst.actions.unlock();\n }\n },\n complete: () => {\n validate(inst);\n },\n error: err => {\n inst.actions.unlock();\n console.error(`${'Error API Packages Discounts'}${err}`);\n }\n })\n };\n}\n\nfunction validateDates(instance) {\n if (!instance.calendarInput) return;\n\n const { dates = {} } = instance.store.select('data');\n const { startDate, endDate } = dates;\n\n const { error: calendarError } = instance.calendarInput.store.select('data');\n\n if (!startDate || !endDate) instance.calendarInput.actions.setError();\n else if (calendarError) instance.calendarInput.actions.resetStatus();\n}\n\n/* Validate form Searcher */\nfunction validate(instance) {\n const { store = {}, origin, destination } = instance;\n\n const { error: originError } = origin.store.select('autocomplete');\n const { error: destinationError } = destination.store.select('autocomplete');\n const { origin: originStore = {}, destination: destinationStore = {}, dates = {} } = store.select('data');\n const { value: originValue } = originStore;\n const { value: destinationValue } = destinationStore;\n const { startDate, endDate } = dates;\n\n if (!originValue || originError || !destinationValue || destinationError || !startDate || !endDate)\n instance.actions.lock();\n else instance.actions.unlock();\n}\n\nmodule.exports = {\n validate,\n validateDestination,\n validateDates\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Autocomplete\n ========================================================================== */\n\n/* Modules */\nconst Autocomplete = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js');\nconst AutocompleteActions = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/store/actions'); // eslint-disable-line\n\nconst { addOperative, addDiscounts } = require('../operative');\n\nconst { validateDestination } = require('../validations');\n\n/* Init Origin */\nfunction initOrigin(instance) {\n /* Instance */\n const inst = instance;\n\n /* Data */\n const { type, origin } = inst.config;\n\n /* Init Origin */\n inst.origin = Autocomplete(`${inst.selector} [data-component=\"AutocompleteRxjs\"][data-type=${type.origin}]`);\n\n /* Update Reactions */\n inst.reactions = {\n ...inst.reactions,\n originChange: inst.origin.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.CHANGE_VALUE) return;\n\n /* Dispatch origin change action to sync with our store */\n inst.actions.changeData({ origin: action.payload });\n\n const { destination } = inst.store.select('data');\n\n /* Validation */\n validateDestination(inst);\n\n if (destination) {\n /* Launch Operative */\n addOperative(inst);\n\n /* Launch Operative Discount */\n addDiscounts(inst);\n }\n }),\n originError: inst.origin.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.SET_ERROR) return;\n\n inst.actions.lock();\n }),\n originClear: inst.origin.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.CLEAR) return;\n\n inst.origin.actions.setError();\n }),\n openOrigin: inst.origin.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.OPEN_SUGGESTIONS) return;\n\n inst.actions.openPanel('origin');\n }),\n closeOrigin: inst.origin.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.CLOSE_SUGGESTIONS) return;\n\n inst.actions.closePanel('origin');\n })\n };\n\n /* Dispatch action to sync store */\n instance.actions.setData({ origin });\n}\n\n/* Destroy */\nfunction destroyOrigin(instance) {\n const inst = instance;\n\n if (!instance.origin) return;\n\n /* Destroy */\n instance.origin.actions.destroy();\n\n /* Unsubscribe */\n instance.reactions.originChange.unsubscribe();\n\n /* Remove references */\n delete inst.origin;\n delete inst.actions.changeOrigin;\n delete inst.reactions.originChange;\n}\n\nmodule.exports = {\n initOrigin,\n destroyOrigin\n};\n","/* ==========================================================================\n MSearcherFlightHotel > Client > Services\n ========================================================================== */\n\n/* Modules */\nconst { getService } = require('../../../../../services/fetch');\n\nconst { PRODUCT } = require('../../../../../constants/product');\nconst { getTypeValue } = require('../utils');\n\n/**\n * Get Operative\n * @returns {JSON} data\n */\nfunction getOperative(instance) {\n /* Data */\n const { endpoints, context } = instance.config;\n\n /* Store */\n const { origin, destination } = instance.store.select('data');\n\n /* Base url */\n const { application } = context;\n\n /* Build url */\n const url = ''.concat(\n `${endpoints.operative}${'?'}`,\n `ori=${origin.value}`,\n `&des_code=${getTypeValue(instance).value}`,\n `&des_type=${PRODUCT[destination.type]}`,\n `&app=${application}`\n // `&stops=${0}`\n );\n\n /* Return Service */\n return getService(instance, url, 'operative');\n}\n\n/**\n * Get Discounts\n * @returns {JSON} data from flight ids\n */\nfunction getDiscount(instance) {\n /* Data */\n const { endpoints, context } = instance.config;\n\n /* Store */\n const { origin } = instance.store.select('data');\n\n /* Base url */\n const { application } = context;\n\n /* Build url */\n const url = ''.concat(\n `${endpoints.discounts}${'?'}`,\n `ori=${origin.value}`,\n `&dest=${getTypeValue(instance).value}`,\n `&type=${getTypeValue(instance).type}`,\n `&app=${application}`,\n `&lang=${context.language}`\n );\n\n /* Return Service */\n return getService(instance, url, 'discount');\n}\n\nfunction getAirportByDestination(instance) {\n const { config = {}, store = {} } = instance;\n const { endpoints = {} } = config;\n\n /* Data Store */\n const { destination = {} } = store.select('data');\n const { value, type } = destination;\n const destinationCode = value.replace(/ZON_/gi, '');\n\n /* Build url */\n const url = `${endpoints.airportByDestination}?`.concat(\n `destinationcode=${destinationCode}`,\n `&destinationType=${type}`\n );\n\n /* Return Service */\n return getService(instance, url, 'airportByDestination');\n}\n\nmodule.exports = {\n getOperative,\n getDiscount,\n getAirportByDestination\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > loading\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\nconst { toNode } = require('@bluekiri/alexandria/helpers/domHelpers');\nconst { addData, addStyle } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst LoadingT = require('@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/template'); //eslint-disable-line\nconst Loading = require('@bluekiri/alexandria-contrib-components/components/loading-information-rxjs/client/js'); //eslint-disable-line\n\nconst { LOADING } = require('../../../constants');\n\nconst configuration = require('../config');\n\n/* Create Loader */\nfunction createLoader(instance) {\n /* Data */\n const { literals = {}, context } = instance.config;\n\n const { destination } = instance.store.select('data');\n\n const { LOADING_SRC, LOADING_ALTERNATIVE } = LOADING;\n\n /* Template */\n const template = LoadingT(\n addStyle(\n addData(\n {\n image: {\n config: {\n isLazy: false\n },\n src: `${LOADING_SRC}${destination.value}${'.jpg'}`,\n alternative: LOADING_ALTERNATIVE\n },\n title: literals.loadingTitle,\n description: loadingText(instance),\n message: literals.loadingMessage\n },\n {\n type: configuration().type.loading\n }\n ),\n [configuration().css.loading]\n ),\n context\n );\n\n /* return Node */\n return toNode(template)[0];\n}\n\nfunction loadingText(instance) {\n /* Store */\n const { origin = {}, destination = {} } = instance.store.select('data');\n const { text: originInfo = '' } = origin;\n const { text: destinationInfo = '' } = destination;\n const { accommodationInput = '', calendarInput = '' } = instance;\n\n const { value: accommodationInfo } = accommodationInput.store.select('data');\n const { value: calendarInfo } = calendarInput.store.select('data');\n\n /* - Template */\n return html(`\n

${originInfo} - ${destinationInfo}

\n

${calendarInfo}

\n

${accommodationInfo}

\n `);\n}\n\n/* Init Loader */\nfunction initLoader(instance) {\n const inst = instance;\n\n /* Modal bolen controler */\n const { showLoading } = instance.config;\n if (!showLoading) return;\n\n /* Node */\n const node = createLoader(instance);\n\n /* Add to DOM */\n document.body.appendChild(node);\n\n /* MLoadingRxjs */\n inst.loading = Loading(`[data-component=\"LoadingInformationRxjs\"][data-type=${configuration().type.loading}]`);\n}\n\n/* Destroy Loading */\nfunction destroyLoader(instance) {\n const inst = instance;\n\n /* Remove from DOM */\n inst.loading.actions.destroy();\n delete inst.loading;\n}\n\n/* Export */\nmodule.exports = {\n initLoader,\n destroyLoader\n};\n","/* ==========================================================================\n Helpers > date\n ========================================================================== */\n\n/* Import */\nconst { DateTime } = require('luxon');\n\n/**\n * Format Date\n * @param {string} date\n * @param {string} language String the store\n * @returns {string} EXAMPLE Jue, 30 Dic 2029\n */\nfunction formatDate(date, language) {\n return DateTime.fromISO([date]).setLocale(language).toLocaleString({\n weekday: 'short',\n month: 'short',\n year: 'numeric',\n day: '2-digit'\n });\n}\n\n/**\n * Format JSDate\n * @param {string} date\n * @param {string} type yyyy-LL-dd\n * @returns {string} EXAMPLE 2022-12-01\n */\nfunction formatJSDate(data, format = 'yyyy-LL-dd') {\n return DateTime.fromJSDate(data).toFormat(format);\n}\n\n/* Exports */\nmodule.exports = {\n formatDate,\n formatJSDate\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Destination\n ========================================================================== */\n\n/* Modules */\nconst Autocomplete = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js');\nconst AutocompleteActions = require('@bluekiri/alexandria-contrib-components/components/autocomplete-rxjs/client/js/store/actions'); // eslint-disable-line\n\nconst { validateDestination } = require('../validations');\n\nconst { addOperative, addDiscounts } = require('../operative');\n\n/* Init Destination */\nfunction initDestination(instance) {\n /* Instance */\n const inst = instance;\n const { config = {} } = inst;\n\n /* Data */\n const { type, destination } = config;\n\n /* Init Origin */\n inst.destination = Autocomplete(\n `${inst.selector} [data-component=\"AutocompleteRxjs\"][data-type=\"${type.destination}\"]`\n );\n\n if (!inst.destination) return;\n\n /* Update Reactions */\n inst.reactions = {\n ...inst.reactions,\n destinationChange: inst.destination.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.CHANGE_VALUE) return;\n\n /* Dispatch destination change action to sync with our store */\n inst.actions.changeData({ destination: action.payload });\n\n /* Validation */\n validateDestination(inst);\n\n /* Launch Operative */\n addOperative(inst);\n\n /* Launch Operative Discount */\n addDiscounts(inst);\n }),\n destinationClear: inst.destination.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.CLEAR) return;\n\n inst.destination.actions.setError();\n }),\n openDestination: inst.destination.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.OPEN_SUGGESTIONS) return;\n\n inst.actions.openPanel('destination');\n }),\n closeDestination: inst.destination.store.subscribe((state, action) => {\n if (action.type !== AutocompleteActions.types.CLOSE_SUGGESTIONS) return;\n\n inst.actions.closePanel('destination');\n })\n };\n\n /* Dispatch action to sync store */\n inst.actions.setData({ destination });\n}\n\n/* Destroy */\nfunction destroyDestination(instance) {\n const inst = instance;\n\n /* Destroy */\n instance.destination.actions.destroy();\n\n /* Unsubscribe Reactions / subscriptions */\n instance.reactions.destinationChange.unsubscribe();\n if (inst.subscriptions.getAirportByDestination) inst.subscriptions.getAirportByDestination.unsubscribe();\n}\n\nmodule.exports = {\n initDestination,\n destroyDestination\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Url\n ========================================================================== */\n\n/* Modules */\nconst { getTypeValue } = require('../utils');\n\n/* get adults Room */\nconst getAccommodationParam = data => {\n if (!data || !data.rooms) return '';\n\n return data.rooms.map(item => {\n const adults = item.people[0];\n const children = item.people[1];\n\n const adultsValues = [...Array(adults.value)].fill('30A').reduce((acc, val) => acc + val);\n const childrenParam = children.ages ? children.ages.map(c => `${c}${'C'}`).join('') : '';\n\n return `${adultsValues}${childrenParam}`;\n });\n};\n\n/* Builds */\nfunction buildUrl(instance) {\n /* Data */\n const { config = {} } = instance;\n const { baseUrl, url, params = {} } = config;\n\n /* Store */\n const { origin, dates, discounts, accommodation, classes } = instance.store.select('data');\n\n /* Params */\n const urlParams = Object.entries(params)\n .map(param => `&${param[0]}=${param[1]}`)\n .join('');\n\n /* Build url */\n return baseUrl.concat(\n `${url}${'?'}`,\n origin ? `&originAirportCode=${origin.value}` : '',\n accommodation ? `&hashRooms=${getAccommodationParam(accommodation).join('%2C')}` : '',\n `&destinationType=${getTypeValue(instance).type}`,\n `&destinationCode=${getTypeValue(instance).value}`,\n `&departureDateStr=${dates.startDate}`,\n `&returnDateStr=${dates.endDate}`,\n `&FamilyDiscount=${discounts}`,\n `&CabinClass=${classes}`,\n `${urlParams}`\n );\n}\n\nmodule.exports = buildUrl;\n","/* ==========================================================================\n MSearcherFlightHotel > Client > Operative\n ========================================================================== */\n\n/* Modules */\nconst { DateTime } = require('luxon');\nconst { getOperative, getDiscount } = require('../services');\nconst { initDiscounts, destroyDiscounts } = require('../discounts');\nconst { validate } = require('../validations');\n\nfunction operativeDates(instance) {\n const { config = {} } = instance;\n const { dates: datesConfig = {} } = config;\n const { releaseDays } = datesConfig;\n\n const { operative = {}, dates = {} } = instance.store.select('data');\n const { checkins = [], checkouts = [] } = operative;\n const { startDate, endDate } = dates;\n\n if (!checkins.length || !checkouts.length || !startDate || !endDate) return;\n\n const startDateIsValid = startDate && checkins.some(item => item.date === startDate);\n const starDateAvailable = startDateIsValid ? startDate : checkins[0].date;\n\n const endDateIsValid =\n endDate &&\n checkouts.some(item => item.date === endDate) &&\n DateTime.fromISO(endDate) > DateTime.fromISO(starDateAvailable).plus({ days: releaseDays });\n\n if (startDateIsValid && endDateIsValid) return;\n\n const endDateAvailable = endDateIsValid\n ? endDate\n : checkouts.find(\n checkout =>\n DateTime.fromISO(checkout.date) > DateTime.fromISO(starDateAvailable).plus({ days: releaseDays })\n ).date;\n\n instance.actions.changeData({ dates: { startDate: starDateAvailable, endDate: endDateAvailable } });\n}\n\n/* Operative services */\nfunction addOperative(instance) {\n const inst = instance;\n\n const { origin, destination } = inst.store.select('data');\n\n if (!origin || !destination) return;\n\n inst.calendarInput.actions.toggleLoading();\n inst.actions.lock();\n\n inst.subscriptions = {\n ...inst.subscriptions,\n getDatesOperative: getOperative(inst).subscribe({\n next: data => {\n /* Error control */\n if (data.error) {\n console.error(`${'API Packages Operative'}`);\n inst.actions.setOperative(null);\n\n validate(inst);\n return;\n }\n\n const { checkins = null, checkouts = null } = data;\n\n /* Set data with the action in the store */\n inst.actions.setOperative({\n checkins: checkins\n .map(item => ({ date: item.d, scale: item.s }))\n .sort((a, b) => new Date(a.date) - new Date(b.date)),\n checkouts: checkouts\n .map(item => ({ date: item.d, scale: item.s }))\n .sort((a, b) => new Date(a.date) - new Date(b.date))\n });\n\n operativeDates(inst);\n },\n complete: () => {\n /* State input calendar */\n if (inst.calendarInput) {\n inst.calendarInput.actions.enable();\n inst.calendarInput.actions.toggleLoading();\n\n validate(inst);\n }\n },\n error: err => {\n console.error(`${'Error API Packages Operative'}${err}`);\n validate(inst);\n }\n })\n };\n}\n\n/* Discount services */\nfunction addDiscounts(instance) {\n const inst = instance;\n\n inst.subscriptions = {\n ...inst.subscriptions,\n getDiscountOperative: getDiscount(instance).subscribe({\n next: data => {\n /* Error control */\n if (data.error || data.length === 0) {\n instance.actions.disableDiscounts();\n\n destroyDiscounts(instance);\n return;\n }\n instance.actions.enableDiscounts();\n\n const { isDiscounts } = instance.store.select('data');\n\n /* KO */\n if (!isDiscounts) {\n destroyDiscounts(instance);\n }\n\n /* OK */\n if (isDiscounts) {\n if (instance.discounts) {\n instance.discounts.actions.setOptions(\n data.map(item => ({\n label: item.name,\n value: `${item.type}`\n }))\n );\n\n instance.discounts.actions.changeValue('0');\n }\n /* Init Discount */\n if (!instance.discounts) initDiscounts(instance, data);\n }\n },\n error: err => console.error(`${'Error API Packages Discounts'}${err}`)\n })\n };\n}\n\nfunction addDirectOperativeIn(dayElem, fp, instance) {\n const inst = instance;\n const { config = {} } = instance;\n const { dates: configDates, disableDates: disableDateConfig } = config;\n const { releaseDays, disable: diableDatesConfig = [] } = configDates;\n\n const { operative } = inst.store.select('data');\n\n if (operative === null) return;\n\n /* Data */\n const { checkins = [] } = operative;\n\n if (!operative.checkins.length) return;\n\n const disableDates = [\n ...diableDatesConfig,\n ...[...Array(releaseDays)].map((element, ind) =>\n DateTime.fromISO(DateTime.fromJSDate(fp.selectedDates[0]).plus({ days: ind + 1 })).toFormat('yyyy-LL-dd')\n )\n ];\n\n const date = dayElem.getAttribute('aria-label');\n\n /* Disable dates */\n const isDisable = !checkins.some(item => item.date === date) || diableDatesConfig.some(item => item === date);\n\n /* Direct flight date */\n const isDirect = checkins.filter(item => item.scale === 0).some(item => item.date === date);\n\n /* Add style class to put day as disable */\n\n if (date !== null && isDisable && disableDateConfig) dayElem.classList.add('flatpickr-disabled');\n\n /* Add Flight Direct */\n if (date !== null && isDirect) {\n // eslint-disable-next-line\n dayElem.innerHTML += ``;\n // eslint-disable-next-line\n }\n\n /* On Change */\n if (fp.selectedDates[0] && fp.selectedDates.length === 1) {\n if (date !== null && isDisable) {\n dayElem.classList.remove('flatpickr-disabled');\n }\n\n if (date !== null && isDirect) {\n const directEl = dayElem.querySelector('[data-direct]');\n\n directEl.remove();\n }\n\n /* Operative Checkout */\n addDirectOperativeOut(dayElem, instance, disableDates);\n }\n}\n\n/* Add operative checkout */\nfunction addDirectOperativeOut(dayElem, instance, disableDates) {\n const inst = instance;\n const { config = {} } = instance;\n const { disableDates: disableDateConfig } = config;\n\n const { operative } = inst.store.select('data');\n\n /* Data */\n const { checkouts = [] } = operative;\n\n const date = dayElem.getAttribute('aria-label');\n\n const isDisable = !checkouts.some(item => item.date === date) || disableDates.some(item => item === date);\n const isDirect = checkouts.filter(item => item.scale === 0).some(item => item.date === date);\n\n /* Add style class to put day as disable */\n if (date !== null && isDisable && disableDateConfig) {\n dayElem.classList.add('flatpickr-disabled');\n }\n\n /* Add Flight Direct */\n if (date !== null && isDirect) {\n // eslint-disable-next-line\n dayElem.innerHTML += ``;\n // eslint-disable-next-line\n }\n}\n\nmodule.exports = {\n addOperative,\n addDirectOperativeIn,\n addDirectOperativeOut,\n addDiscounts\n};\n","/* ==========================================================================\n Contans > Product\n ========================================================================== */\n\n/* Product for Operative searchers */\nconst PRODUCT = {\n CIU: 3,\n HOT: 3,\n ISL: 2,\n ZON: 2\n};\n\n/* Exports */\nmodule.exports = { PRODUCT };\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Store > Reducer\n ========================================================================== */\n\n/* Modules */\nconst { types } = require('./actions');\n\n/* Initial state */\nconst initialState = {\n hidden: false,\n origin: {},\n destination: {},\n dates: {},\n accommodation: {},\n operative: null,\n discounts: 0,\n classes: 0,\n locked: false,\n isDiscounts: false,\n panel: false,\n panelOpen: '',\n panelClose: '',\n hasPanel: false,\n url: ''\n};\n\n/* Reducer */\nfunction reducer(state = initialState, action) {\n switch (action.type) {\n case types.DESTROY:\n return state;\n case types.SET_DATA:\n return {\n ...state,\n origin: action.payload.origin || state.origin,\n destination: action.payload.destination || state.destination,\n dates: action.payload.dates || state.dates,\n accommodation: action.payload.accommodation || state.accommodation,\n classes: 'classes' in action.payload ? action.payload.classes : state.classes,\n discounts: 'discounts' in action.payload ? action.payload.discounts : state.discounts,\n url: action.payload.url || state.url\n };\n case types.CHANGE_DATA:\n return {\n ...state,\n ...action.payload\n };\n case types.SET_OPERATIVE:\n return {\n ...state,\n operative: action.payload\n };\n case types.SET_DISCOUNTS:\n return {\n ...state,\n discounts: action.payload\n };\n case types.ENABLE_DISCOUNTS:\n return {\n ...state,\n isDiscounts: true\n };\n case types.DISABLE_DISCOUNTS:\n return {\n ...state,\n isDiscounts: false\n };\n case types.OPEN_PANEL:\n return {\n ...state,\n panelOpen: action.payload,\n hasPanel: true\n };\n case types.CLOSE_PANEL:\n return {\n ...state,\n panelClose: action.payload,\n hasPanel: false\n };\n case types.LOCK:\n return {\n ...state,\n locked: true\n };\n case types.UNLOCK:\n return {\n ...state,\n locked: false\n };\n\n default:\n return state;\n }\n}\n\n/* Exports */\nmodule.exports = {\n reducer\n};\n","/* ==========================================================================\n SearcherFlightHotel > Client > Utils\n ========================================================================== */\n\n/**\n * Get Type Value\n * @returns {object} value and type autocomplete\n */\nfunction getTypeValue(instance) {\n /* Store */\n const { destination } = instance.store.select('data');\n\n const { type, value } = destination;\n\n /* Type zone when is ZONE */\n if (type === 'ISL') {\n return {\n value: value.slice(4),\n type: 'ZON'\n };\n }\n\n return {\n value,\n type\n };\n}\n\n/* Exports */\nmodule.exports = {\n getTypeValue\n};\n","/* ==========================================================================\n SearcherFlightHotel > Client > Calendar\n ========================================================================== */\n\n/* Modules */\nconst { html } = require('common-tags');\nconst { DateTime } = require('luxon');\n\nconst Calendar = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js');\nconst CalendarActions = require('@bluekiri/alexandria-contrib-components/components/calendar-rxjs/client/js/store/actions'); // eslint-disable-line\n\nconst { types } = require('../store/actions');\n\nconst InputPanelClient = require('../../../../input-panel/client/js');\nconst InputPanelActions = require('../../../../input-panel/client/js/store/actions');\n\nconst { formatJSDate, formatDate } = require('../../../../../helpers/date');\nconst { addDirectOperativeIn } = require('../operative');\nconst { renderCalendar } = require('./calendar');\nconst { validate, validateDates } = require('../validations');\n\nconst { CALENDAR } = require('../../../constants');\n\nconst configuration = require('../config');\n\n/* Update Input Calendar */\nfunction updateCalendar(instance, selectedDates = []) {\n /* Data */\n const { config = {} } = instance;\n const { context, dates: datesConfig = {} } = config;\n const { releaseDays } = datesConfig;\n\n const { language = 'es' } = context;\n\n /* Data */\n const { dates } = instance.store.select('data');\n\n /* Disable release days when operative is disabled */\n if (selectedDates.length === 1 && releaseDays) {\n const startDate = new Date(selectedDates[0]);\n\n const dayAfter = new Date(startDate);\n const dayBefore = new Date(startDate);\n\n /* Search prev/next releaseDays && disable */\n for (let i = 1; i < releaseDays; i++) {\n const nextDay = dayAfter.setDate(startDate.getDate() + i);\n const prevDay = dayBefore.setDate(startDate.getDate() - i);\n const ariaDay = formatJSDate(new Date(nextDay));\n const ariaDayBefore = formatJSDate(new Date(prevDay));\n document.querySelector(`[aria-label=\"${ariaDay}\"]:not(.hidden)`).classList.add('flatpickr-disabled');\n document.querySelector(`[aria-label=\"${ariaDayBefore}\"]:not(.hidden)`).classList.add('flatpickr-disabled');\n }\n }\n\n if (!dates.startDate || !dates.endDate) return;\n\n if (selectedDates.length) {\n instance.calendarInput.actions.changeValue(`${formatDate(formatJSDate(selectedDates[0]), language)} → `);\n return;\n }\n\n if (dates !== null) {\n instance.calendarInput.actions.changeValue(\n `${formatDate(dates.startDate, language)} → ${formatDate(dates.endDate, language)}`\n );\n }\n\n if (selectedDates.length === 2) validateDates(instance);\n}\n\nfunction disableDays(instance, fp, dayElem) {\n const { config = {} } = instance;\n const { sameDay } = config;\n\n const date = dayElem.getAttribute('aria-label');\n\n /* Selected day isn't selectable as a return day */\n if (!sameDay && fp.selectedDates.length === 1) {\n const selectedDate = formatJSDate(fp.selectedDates[0]);\n\n if (selectedDate === date) dayElem.classList.add('flatpickr-disabled');\n }\n\n /* Disable dates that's less than current date */\n if (DateTime.fromISO(date) < DateTime.fromJSDate(new Date()) && fp.selectedDates.length === 1) {\n dayElem.classList.add('flatpickr-disabled');\n }\n}\n\nfunction initDates(instance) {\n const inst = instance;\n const { calendarInput, config = {} } = inst;\n const {\n dates: { minDate }\n } = config;\n\n const { dates = {} } = inst.store.select('data');\n\n const { panelType } = calendarInput.store.select('data');\n const panelSelector = `[data-type=\"${panelType}\"]`;\n\n const disableDates = minDate\n ? [\n {\n from: formatJSDate(new Date(`${new Date().getFullYear()}-01-01`)),\n to: minDate\n }\n ]\n : [];\n\n /* Init Calendar */\n inst.calendar = Calendar(`${panelSelector} [data-component=\"CalendarRxjs\"]`, {\n fp: {\n dateFormat: CALENDAR.dateFormat,\n ariaDateFormat: CALENDAR.ariaDateFormat,\n static: CALENDAR.static,\n inline: CALENDAR.inline,\n disable: disableDates,\n onChange(selectedDates) {\n if (selectedDates.length === 1) updateCalendar(inst, selectedDates);\n },\n // eslint-disable-next-line max-params\n onDayCreate: (dObj, dStr, fp, dayElem) => {\n addDirectOperativeIn(dayElem, fp, inst);\n disableDays(inst, fp, dayElem);\n }\n }\n });\n\n if (!inst.calendar) return;\n\n /* Jump to first day */\n if (dates.startDate) inst.calendar.fp.jumpToDate(dates.startDate);\n\n /* Update reactions */\n inst.reactions = {\n ...inst.reactions,\n calendarChange: inst.calendar.store.subscribe((state, action) => {\n if (action.type !== CalendarActions.types.CHANGE_VALUE && action.type !== CalendarActions.types.SET_VALUE) {\n return;\n }\n\n /* Data */\n const { value } = inst.calendar.store.select('calendar');\n const { error: calendarError } = inst.calendarInput.store.select('data');\n\n /* Dispatch calendar change action to sync with our store */\n inst.actions.changeData({\n dates: {\n startDate: formatJSDate(value[0]),\n endDate: formatJSDate(value[1])\n }\n });\n\n /* Destroy */\n inst.calendarInput.actions.closePanel();\n\n /* Unlock */\n validate(inst);\n\n if (calendarError) inst.calendarInput.actions.resetStatus();\n })\n };\n}\n\n/**\n * Append ui-panel-rxj to input.\n * @summary init panel, init calendar, close events, event subcriptions\n * @param {Object} Instance component client instance\n * @return {void}\n */\nfunction addPanelCalendar(instance) {\n const inst = instance;\n const { calendarInput } = instance;\n\n const contentTemplate = html(renderCalendar(instance));\n\n /* add accomodation to panel */\n instance.calendarInput.actions.setContent(contentTemplate);\n\n inst.hooks = {\n ...inst.hooks,\n panelBody: calendarInput.element.querySelector(`[${configuration().hooks.panelBody}]`)\n };\n\n /* Init */\n initDates(instance);\n}\n\nfunction initCalendar(instance) {\n const inst = instance;\n const { config = {}, selector } = instance;\n const { dates: calendarConfig = {} } = config;\n\n const { startDate, endDate } = calendarConfig;\n\n inst.calendarInput = InputPanelClient(\n `${selector} [data-component=\"InputPanel\"][data-type=\"${configuration().type.calendar}\"]`\n );\n\n if (!inst.calendarInput) return;\n\n /* Extends reactios */\n inst.reactions = {\n ...inst.reactions,\n changeDates: inst.store.subscribe((state, action) => {\n if (action.type !== types.CHANGE_DATA) return;\n if (!action.payload.dates) return;\n\n updateCalendar(inst);\n }),\n openCalendar: inst.calendarInput.store.subscribe((state, action) => {\n if (action.type !== InputPanelActions.types.OPEN_PANEL) return;\n\n addPanelCalendar(inst);\n inst.actions.openPanel('calendarInput');\n }),\n closeCalendar: inst.calendarInput.store.subscribe((state, action) => {\n if (action.type !== InputPanelActions.types.CLOSE_PANEL) return;\n\n /* Destroy */\n updateCalendar(inst);\n destroyCalendar(inst);\n inst.actions.closePanel('calendarInput');\n }),\n destroyInputCalendar: inst.calendarInput.store.subscribe((state, action) => {\n if (action.type !== InputPanelActions.types.DESTROY) return;\n\n destroyInputCalendar(inst);\n })\n };\n\n /* Start */\n inst.calendarInput.actions.disable();\n\n /* Sync store */\n if (startDate && endDate) inst.actions.setData({ dates: { startDate, endDate } });\n\n /* Update calendar */\n updateCalendar(inst);\n}\n\nfunction destroyCalendar(instance) {\n const inst = instance;\n\n if (!instance.calendar) return;\n\n /* Destroy */\n instance.calendar.actions.destroy();\n\n /* Unsubscribe reactions */\n inst.reactions.calendarChange.unsubscribe();\n\n /* Remove references */\n delete inst.calendar;\n delete inst.reactions.calendarChange;\n}\n\nfunction destroyInputCalendar(instance) {\n const inst = instance;\n\n if (!instance.calendarInput) return;\n\n /* Remove References */\n delete inst.calendarInput;\n\n /* Destroy */\n destroyCalendar(inst);\n}\nmodule.exports = {\n initCalendar\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Prototype\n ========================================================================== */\n\n/* Import modules */\nconst { Store } = require('@bluekiri/alexandria/helpers/state');\n\nconst { actions, types } = require('./store/actions');\nconst { reducer } = require('./store/reducer');\n\nconst { initOrigin } = require('./origin');\nconst { initDestination } = require('./destination');\nconst { initCalendar } = require('./calendar');\nconst { initAccommodation } = require('./accommodation');\nconst { destroyDiscounts } = require('./discounts');\nconst { initClasses, destroyClasses } = require('./classes');\nconst { initSubmit } = require('./submit');\n\nconst { addOperative, addDiscounts } = require('./operative');\nconst { validate } = require('./validations');\n\nfunction destroyComponents(instance) {\n if (instance.origin) instance.origin.actions.destroy();\n if (instance.destination) instance.destination.actions.destroy();\n if (instance.calendarInput) instance.calendarInput.actions.destroy();\n if (instance.accommodationInput) instance.accommodationInput.actions.destroy();\n if (instance.submit) instance.submit.actions.destroy();\n if (instance.discounts) destroyDiscounts(instance);\n if (instance.classes) destroyClasses(instance);\n}\n\n/* Prototype */\nconst prototype = {\n /* Setup store */\n setupStore() {\n if (this.store) return this;\n\n this.store = new Store({\n data: reducer\n });\n\n return this;\n },\n /* Setup actions */\n setupActions() {\n if (this.actions) return this;\n\n this.actions = {\n destroy: () => this.store.dispatch(actions.destroy()),\n setData: payload => this.store.dispatch(actions.setData(payload)),\n setOperative: data => this.store.dispatch(actions.setOperative(data)),\n changeData: changed => this.store.dispatch(actions.changeData(changed)),\n setDiscounts: payload => this.store.dispatch(actions.setDiscounts(payload)),\n enableDiscounts: () => this.store.dispatch(actions.enableDiscounts()),\n isDiscounts: () => this.store.dispatch(actions.isDiscounts()),\n disableDiscounts: () => this.store.dispatch(actions.disableDiscounts()),\n openPanel: panel => this.store.dispatch(actions.openPanel(panel)),\n closePanel: panel => this.store.dispatch(actions.closePanel(panel)),\n lock: () => this.store.dispatch(actions.lock()),\n unlock: () => this.store.dispatch(actions.unlock())\n };\n\n return this;\n },\n /* Setup reactions */\n setupReactions() {\n if (this.reactions) return this;\n\n this.reactions = {\n destroy: this.store.subscribe((state, action) => {\n if (action.type !== types.DESTROY) return;\n\n /* Destroy components */\n destroyComponents(this);\n\n /* Unsubscribe */\n this.unsubscribe();\n [...Object.keys(this.reactions)].forEach(key => this.reactions[key].unsubscribe());\n\n /* Clean DOM */\n this.element.parentNode.removeChild(this.element);\n\n /* Clean reference */\n [...Object.keys(this)].forEach(key => delete this[key]);\n }),\n\n lock: this.store.subscribe((state, action) => {\n if (action.type !== types.LOCK) return;\n\n this.submit.actions.disable();\n }),\n unlock: this.store.subscribe((state, action) => {\n if (action.type !== types.UNLOCK) return;\n\n this.submit.actions.enable();\n })\n };\n\n return this;\n },\n /* Subscribe */\n subscribe() {\n if (this.subscriptions) this.unsubscribe();\n\n this.subscriptions = {};\n\n return this;\n },\n /* Unsubscribe */\n unsubscribe() {\n if (!this.subscriptions) return this;\n\n [...Object.keys(this.subscriptions)].forEach(key => this.subscriptions[key].unsubscribe());\n\n return this;\n },\n /* Start */\n start() {\n if (!this.config.start) return this;\n\n /* Start logic */\n const { origin = false, destination = false } = this.config;\n validate(this);\n\n /* Update accommodation */\n if (origin && origin.value && destination && destination.value) {\n addOperative(this);\n addDiscounts(this);\n }\n\n return this;\n },\n /* Init */\n init() {\n if (!this.config.init) return this;\n\n /* Setup store */\n this.setupStore();\n\n /* Setup actions */\n this.setupActions();\n\n /* Setup reactions */\n this.setupReactions();\n\n /* Subscribe */\n this.subscribe();\n\n /* Init components */\n initSubmit(this);\n initOrigin(this);\n initDestination(this);\n initCalendar(this);\n initAccommodation(this);\n initClasses(this);\n\n /* Start */\n this.start();\n\n return this;\n }\n};\n\n/* Exports */\nmodule.exports = prototype;\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Store > Actions\n ========================================================================== */\n\n/* Types */\nconst DESTROY = 'SEARCHER_FLIGHT_HOTEL::DESTROY';\n\nconst SET_DATA = 'SEARCHER_FLIGHT_HOTEL::SET_FILTERS';\nconst CHANGE_DATA = 'SEARCHER_FLIGHT_HOTEL::CHANGE_DATA';\n\nconst SET_OPERATIVE = 'SEARCHER_FLIGHT_HOTEL::SET_OPERATIVE';\nconst SET_DISCOUNTS = 'SEARCHER_FLIGHT_HOTEL::SET_DISCOUNTS';\n\nconst ENABLE_DISCOUNTS = 'SEARCHER_FLIGHT_HOTEL::ENABLE_DISCOUNTS';\nconst DISABLE_DISCOUNTS = 'SEARCHER_FLIGHT_HOTEL::DISABLE_DISCOUNTS';\nconst OPEN_PANEL = 'SEARCHER_FLIGHT_HOTEL::OPEN_PANEL';\nconst CLOSE_PANEL = 'SEARCHER_FLIGHT_HOTEL::CLOSE_PANEL';\n\nconst LOCK = 'SEARCHER_FLIGHT_HOTEL::LOCK';\nconst UNLOCK = 'SEARCHER_FLIGHT_HOTEL::UNLOCK';\n\n/* Actions */\nconst destroy = () => ({ type: DESTROY });\n\nconst setData = payload => ({ type: SET_DATA, payload });\nconst changeData = payload => ({ type: CHANGE_DATA, payload });\n\nconst setOperative = payload => ({ type: SET_OPERATIVE, payload });\nconst setDiscounts = payload => ({ type: SET_DISCOUNTS, payload });\n\nconst enableDiscounts = () => ({ type: ENABLE_DISCOUNTS });\nconst disableDiscounts = () => ({ type: DISABLE_DISCOUNTS });\n\nconst openPanel = payload => ({ type: OPEN_PANEL, payload });\nconst closePanel = payload => ({ type: CLOSE_PANEL, payload });\n\nconst lock = () => ({ type: LOCK });\nconst unlock = () => ({ type: UNLOCK });\n\n/* Exports */\nmodule.exports = {\n types: {\n DESTROY,\n SET_DATA,\n CHANGE_DATA,\n SET_OPERATIVE,\n SET_DISCOUNTS,\n ENABLE_DISCOUNTS,\n DISABLE_DISCOUNTS,\n OPEN_PANEL,\n CLOSE_PANEL,\n LOCK,\n UNLOCK\n },\n actions: {\n destroy,\n changeData,\n setOperative,\n setDiscounts,\n enableDiscounts,\n disableDiscounts,\n setData,\n openPanel,\n closePanel,\n lock,\n unlock\n }\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Submit\n ========================================================================== */\n\n/* Modules */\nconst Button = require('@bluekiri/alexandria-contrib-components/components/button-rxjs/client/js');\n\nconst buildUrl = require('../url');\nconst { validate } = require('../validations');\n\nconst { initLoader } = require('./loading');\n\n/* Init Submit */\nfunction initSubmit(instance) {\n /* Reference */\n const inst = instance;\n const { config = {} } = instance;\n const { isWidget } = config;\n /* Type */\n const { type } = instance.config;\n\n /* Submit */\n inst.submit = Button(`${inst.selector} [data-component=\"ButtonRxjs\"][data-type=\"${type.submit}\"]`);\n\n /* Set subscriptions */\n inst.subscriptions = {\n ...instance.subscriptions,\n submit$: instance.submit.events.click$.subscribe(() => {\n validate(instance);\n\n const { locked } = instance.store.select('data');\n\n if (locked) return;\n\n /* Add Loader */\n initLoader(instance);\n\n const url = buildUrl(inst);\n /* Sync store, build url */\n inst.actions.setData({ url });\n\n /* Send form */\n if (!isWidget) window.location.assign(url);\n })\n };\n}\n\n/* Exports */\nmodule.exports = {\n initSubmit\n};\n","/* ==========================================================================\n SearcherTrainHotel > Client > AddRoom\n ========================================================================== */\n/* Modules */\nconst { addStyle, addData } = require('@bluekiri/alexandria/helpers/dataHelpers');\n\nconst ButtonTemplate = require('@bluekiri/alexandria-contrib-components/components/button-rxjs/template');\nconst ButtonClient = require('@bluekiri/alexandria-contrib-components/components/button-rxjs/client/js');\nconst configuration = require('../../config');\n\nfunction renderAddRoom(instance) {\n const { config = {} } = instance;\n const { context = {}, literals = {} } = config;\n const { addRoom = '' } = literals;\n\n const dataButton = addStyle(addData({ content: addRoom }, { type: configuration().type.addRoom }), [\n 'button-rxjs--add'\n ]);\n\n return ButtonTemplate(dataButton, context);\n}\n\nfunction initAddRoom(instance) {\n const result = instance;\n const { subscriptions = {}, accommodationInput, accommodation } = instance;\n const { panelType } = accommodationInput.store.select('data');\n\n result.addRooms = ButtonClient(\n `[data-type=\"${panelType}\"] [data-component=\"ButtonRxjs\"][data-type=\"${configuration().type.addRoom}\"]`\n );\n\n if (result.addRooms) {\n /* Extends subscriptions */\n result.subscriptions = {\n ...subscriptions,\n addRooms$: result.addRooms.events.click$.subscribe(event => {\n event.stopPropagation();\n\n /* Store */\n const { error } = accommodation.store.select('data');\n\n if (error) result.addRooms.actions.disable();\n\n /* Data Panel accomodation */\n accommodation.actions.addRoom();\n\n result.hooks.panelBody.scrollTop = result.hooks.panelBody.scrollHeight;\n })\n };\n }\n}\n\nfunction destroyAddRoom(instance) {\n const result = instance;\n if (!instance.addRooms) return;\n\n instance.addRooms.actions.destroy();\n delete result.addRooms;\n}\n\nmodule.exports = {\n renderAddRoom,\n initAddRoom,\n destroyAddRoom\n};\n","/* ==========================================================================\n SearcherFlightHotelRxjs > Client > Classes\n ========================================================================== */\n\n/* Modules */\n\nconst Select = require('../../../../select-panel/client/js');\nconst SelectActions = require('../../../../select-panel/client/js/store/actions');\n\nconst configuration = require('../config');\n\nconst { type: typeConfig } = configuration();\n\n/* Add modal classes */\nfunction initClasses(instance) {\n const inst = instance;\n\n const { selector } = inst;\n\n /* Init Select */\n inst.classes = Select(`${selector} [data-component=\"SelectPanel\"][data-type=\"${typeConfig.classes}\"]`);\n\n if (!inst.classes) return;\n\n /* Update reactions */\n inst.reactions = {\n ...inst.reactions,\n openClasses: inst.classes.store.subscribe((state, action) => {\n if (action.type !== SelectActions.types.OPEN_PANEL) return;\n inst.actions.openPanel('classes');\n }),\n closeClasses: inst.classes.store.subscribe((state, action) => {\n if (action.type !== SelectActions.types.CLOSE_PANEL) return;\n inst.actions.closePanel('classes');\n }),\n changeClasses: inst.classes.store.subscribe((state, action) => {\n if (action.type !== SelectActions.types.CHANGE_VALUE) return;\n\n /* Dispatch action */\n inst.actions.changeData({ classes: action.payload });\n })\n };\n\n const { value } = inst.classes.store.select('data');\n\n /* Update store discount */\n inst.actions.changeData({ classes: value });\n}\n\n/* Close modal */\nfunction destroyClasses(instance) {\n const inst = instance;\n\n if (!inst.classes) return;\n\n /* Destroy */\n inst.classes.actions.destroy();\n\n /* unsuscribe reactions */\n inst.reactions.changeClasses.unsubscribe();\n\n /* Remove references */\n delete inst.reactions.changeclasses;\n delete inst.classes;\n}\n\nmodule.exports = {\n initClasses,\n destroyClasses\n};\n"],"sourceRoot":""}