|function(...?)|number|void)?} plugin\n\t */\n\tfunction use (plugin) {\n\t\tswitch (plugin) {\n\t\t\tcase void 0:\n\t\t\tcase null: {\n\t\t\t\tplugged = plugins.length = 0\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tswitch (plugin.constructor) {\n\t\t\t\t\tcase Array: {\n\t\t\t\t\t\tfor (var i = 0, length = plugin.length; i < length; ++i) {\n\t\t\t\t\t\t\tuse(plugin[i])\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase Function: {\n\t\t\t\t\t\tplugins[plugged++] = plugin\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase Boolean: {\n\t\t\t\t\t\tunkwn = !!plugin|0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n \t\t}\n\n \t\treturn use\n\t}\n\n\t/**\n\t * Set\n\t *\n\t * @param {*} options\n\t */\n\tfunction set (options) {\n\t\tfor (var name in options) {\n\t\t\tvar value = options[name]\n\t\t\tswitch (name) {\n\t\t\t\tcase 'keyframe': keyed = value|0; break\n\t\t\t\tcase 'global': escape = value|0; break\n\t\t\t\tcase 'cascade': cascade = value|0; break\n\t\t\t\tcase 'compress': compress = value|0; break\n\t\t\t\tcase 'semicolon': semicolon = value|0; break\n\t\t\t\tcase 'preserve': preserve = value|0; break\n\t\t\t\tcase 'prefix':\n\t\t\t\t\tshould = null\n\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tprefix = 0\n\t\t\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\t\t\tprefix = 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprefix = 2\n\t\t\t\t\t\tshould = value\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn set\n\t}\n\n\t/**\n\t * Stylis\n\t *\n\t * @param {string} selector\n\t * @param {string} input\n\t * @return {*}\n\t */\n\tfunction stylis (selector, input) {\n\t\tif (this !== void 0 && this.constructor === stylis) {\n\t\t\treturn factory(selector)\n\t\t}\n\n\t\t// setup\n\t\tvar ns = selector\n\t\tvar code = ns.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (ns = ns.trim()).charCodeAt(0)\n\t\t}\n\n\t\t// keyframe/animation namespace\n\t\tif (keyed > 0) {\n\t\t\tkey = ns.replace(invalidptn, code === OPENBRACKET ? '' : '-')\n\t\t}\n\n\t\t// reset, used to assert if a plugin is moneky-patching the return value\n\t\tcode = 1\n\n\t\t// cascade/isolate\n\t\tif (cascade === 1) {\n\t\t\tnscope = ns\n\t\t} else {\n\t\t\tnscopealt = ns\n\t\t}\n\n\t\tvar selectors = [nscope]\n\t\tvar result\n\n\t\t// execute plugins, pre-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(PREPS, input, selectors, selectors, line, column, 0, 0, 0, 0)\n\n\t\t\tif (result !== void 0 && typeof result === 'string') {\n\t\t\t\tinput = result\n\t\t\t}\n\t\t}\n\n\t\t// build\n\t\tvar output = compile(array, selectors, input, 0, 0)\n\n\t\t// execute plugins, post-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(POSTS, output, selectors, selectors, line, column, output.length, 0, 0, 0)\n\n\t\t\t// bypass minification\n\t\t\tif (result !== void 0 && typeof(output = result) !== 'string') {\n\t\t\t\tcode = 0\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tkey = ''\n\t\tnscope = ''\n\t\tnscopealt = ''\n\t\tpattern = 0\n\t\tline = 1\n\t\tcolumn = 1\n\n\t\treturn compress*code === 0 ? output : minify(output)\n\t}\n\n\tstylis['use'] = use\n\tstylis['set'] = set\n\n\tif (options !== void 0) {\n\t\tset(options)\n\t}\n\n\treturn stylis\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/stylis/stylis.js\n// module id = 1525\n// module chunks = 0","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/stylis-rule-sheet/index.js\n// module id = 1526\n// module chunks = 0","'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = getPrototypeOf && getPrototypeOf(Object);\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components\n\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try { // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/styled-components/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\n// module id = 1527\n// module chunks = 0","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-is/index.js\n// module id = 1528\n// module chunks = 0","/** @license React v16.5.0\n * react-is.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});\nvar b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.forward_ref\"):60112,n=b?Symbol.for(\"react.placeholder\"):60113;\nfunction q(a){if(\"object\"===typeof a&&null!==a){var p=a.$$typeof;switch(p){case c:switch(a=a.type,a){case l:case e:case g:case f:return a;default:switch(a=a&&a.$$typeof,a){case k:case m:case h:return a;default:return p}}case d:return p}}}exports.typeOf=q;exports.AsyncMode=l;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=m;exports.Fragment=e;exports.Profiler=g;exports.Portal=d;exports.StrictMode=f;\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===l||a===g||a===f||a===n||\"object\"===typeof a&&null!==a&&(\"function\"===typeof a.then||a.$$typeof===h||a.$$typeof===k||a.$$typeof===m)};exports.isAsyncMode=function(a){return q(a)===l};exports.isContextConsumer=function(a){return q(a)===k};exports.isContextProvider=function(a){return q(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};\nexports.isForwardRef=function(a){return q(a)===m};exports.isFragment=function(a){return q(a)===e};exports.isProfiler=function(a){return q(a)===g};exports.isPortal=function(a){return q(a)===d};exports.isStrictMode=function(a){return q(a)===f};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-is/cjs/react-is.production.min.js\n// module id = 1529\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"btn-wrapper\":\"Button_btn-wrapper---sb\",\"btnWrapper\":\"Button_btn-wrapper---sb\",\"ie-is-shit\":\"Button_ie-is-shit---sb\",\"ieIsShit\":\"Button_ie-is-shit---sb\",\"btn\":\"Button_btn---sb\",\"prev\":\"Button_prev---sb\",\"next\":\"Button_next---sb\",\"rtl\":\"Button_rtl---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Carousel/Button/styles.less\n// module id = 1530\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Carousel_with-ellipsis---sb\",\"withEllipsis\":\"Carousel_with-ellipsis---sb\",\"Carousel\":\"Carousel_Carousel---sb\",\"with-arrows\":\"Carousel_with-arrows---sb\",\"withArrows\":\"Carousel_with-arrows---sb\",\"center-mode\":\"Carousel_center-mode---sb\",\"centerMode\":\"Carousel_center-mode---sb\",\"container\":\"Carousel_container---sb\",\"thumb-wrapper\":\"Carousel_thumb-wrapper---sb\",\"thumbWrapper\":\"Carousel_thumb-wrapper---sb\",\"thumbnail-wrapper\":\"Carousel_thumbnail-wrapper---sb\",\"thumbnailWrapper\":\"Carousel_thumbnail-wrapper---sb\",\"pad-right\":\"Carousel_pad-right---sb\",\"padRight\":\"Carousel_pad-right---sb\",\"pad-left\":\"Carousel_pad-left---sb\",\"padLeft\":\"Carousel_pad-left---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Carousel/styles.less\n// module id = 1531\n// module chunks = 0","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport styles from \"./styles.less\";\r\nimport ResultBox from \"./ResultBox\";\r\nimport ThumbNailCustom from \"../ThumbNailCustom\";\r\n\r\nexport class ResultsGroup extends Component {\r\n renderRoomBoxMarkUp = result => {\r\n const {\r\n titles,\r\n isIE,\r\n onShowDetailsClick,\r\n MoreDetailsTitle,\r\n onResultClick,\r\n propertyType,\r\n isMobileView,\r\n showPricePerNightThumb,\r\n checkinDate,\r\n checkoutDate,\r\n //clubUserLoggedIn,\r\n discountClubConfig\r\n } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n\r\n renderBox = result => {\r\n const {\r\n isRtl,\r\n titles,\r\n onResultClick,\r\n onShowDetailsClick,\r\n isMobileView,\r\n normalizeResult,\r\n isDeals,\r\n isRegionResult,\r\n isIos\r\n } = this.props;\r\n const normalizedResult = normalizeResult ? normalizeResult(result) : result;\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { results, isRtl } = this.props;\r\n\r\n return (\r\n \r\n {results.map((result, key) => (\r\n \r\n {this.renderBox(result, key)}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n}\r\n\r\nResultsGroup.defaultProps = {\r\n isRtl: false,\r\n isMobileView: false,\r\n isRegionResult: false,\r\n titles: {},\r\n results: [],\r\n onShowDetailsClick: () => {},\r\n onResultClick: () => {}\r\n};\r\n\r\nResultsGroup.propTypes = {\r\n isRtl: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n isRegionResult: PropTypes.bool,\r\n titles: PropTypes.object,\r\n results: PropTypes.array,\r\n onResultClick: PropTypes.func,\r\n onShowDetailsClick: PropTypes.func,\r\n normalizeResult: PropTypes.func,\r\n isDeals: PropTypes.bool,\r\n isIos: PropTypes.bool,\r\n MoreDetailsTitle: PropTypes.string,\r\n propertyType: PropTypes.string,\r\n isIE: PropTypes.bool,\r\n showPricePerNightThumb: PropTypes.bool,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string\r\n //clubUserLoggedIn: PropTypes.bool\r\n};\r\n\r\nexport default ResultsGroup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/ResultsGroup/ResultsGroup.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"main-results-wrapper\":\"ResultsGroup_main-results-wrapper---sb\",\"mainResultsWrapper\":\"ResultsGroup_main-results-wrapper---sb\",\"result-box-row\":\"ResultsGroup_result-box-row---sb\",\"resultBoxRow\":\"ResultsGroup_result-box-row---sb\",\"result-box\":\"ResultsGroup_result-box---sb\",\"resultBox\":\"ResultsGroup_result-box---sb\",\"main-header-wrapper\":\"ResultsGroup_main-header-wrapper---sb\",\"mainHeaderWrapper\":\"ResultsGroup_main-header-wrapper---sb\",\"header-wrapper\":\"ResultsGroup_header-wrapper---sb\",\"headerWrapper\":\"ResultsGroup_header-wrapper---sb\",\"result-name\":\"ResultsGroup_result-name---sb\",\"resultName\":\"ResultsGroup_result-name---sb\",\"main-results-wrapper-deals\":\"ResultsGroup_main-results-wrapper-deals---sb\",\"mainResultsWrapperDeals\":\"ResultsGroup_main-results-wrapper-deals---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/ResultsGroup/styles.less\n// module id = 1533\n// module chunks = 0","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport ThumbNail from \"../../ThumbNail\";\r\nimport styles from \"./styles.less\";\r\nimport cx from \"classnames\";\r\n\r\nexport class ResultBox extends Component {\r\n onClick = () => {\r\n const { result, onClick } = this.props;\r\n onClick(result.id);\r\n };\r\n\r\n renderMobileThumbnail = () => {\r\n const {\r\n innerRef,\r\n result,\r\n isRtl,\r\n isMobileView,\r\n titles,\r\n onShowDetailsClick,\r\n onClick,\r\n isRegionResult,\r\n isDeals,\r\n renderMarkup,\r\n renderImageMarkup,\r\n onImageLoad,\r\n isIos\r\n } = this.props;\r\n return (\r\n \r\n
\r\n \r\n
\r\n {/*
\r\n {titles.Continue}\r\n
*/}\r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n innerRef,\r\n result,\r\n isRtl,\r\n isMobileView,\r\n titles,\r\n onShowDetailsClick,\r\n onClick,\r\n isRegionResult,\r\n isDeals,\r\n renderMarkup,\r\n renderImageMarkup,\r\n onImageLoad,\r\n isIos,\r\n showPricePerNightThumb\r\n } = this.props;\r\n return (\r\n \r\n
\r\n \r\n
\r\n {/*
\r\n {titles.Continue}\r\n
*/}\r\n
\r\n );\r\n }\r\n}\r\n\r\nResultBox.defaultProps = {\r\n isRtl: false,\r\n titles: {},\r\n isRegionResult: false,\r\n isMobileView: false,\r\n result: {},\r\n onClick: () => {},\r\n onShowDetailsClick: () => {},\r\n innerRef: () => {},\r\n onImageLoad: () => {}\r\n};\r\n\r\nResultBox.propTypes = {\r\n isRtl: PropTypes.bool,\r\n isRegionResult: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n titles: PropTypes.object,\r\n result: PropTypes.object,\r\n onClick: PropTypes.func,\r\n onShowDetailsClick: PropTypes.func,\r\n isDeals: PropTypes.bool,\r\n renderMarkup: PropTypes.func,\r\n renderImageMarkup: PropTypes.func,\r\n innerRef: PropTypes.func,\r\n onImageLoad: PropTypes.func,\r\n isIos: PropTypes.bool,\r\n showPricePerNightThumb: PropTypes.bool\r\n};\r\n\r\nexport default ResultBox;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/ResultsGroup/ResultBox/ResultBox.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"ResultBox_with-ellipsis---sb\",\"withEllipsis\":\"ResultBox_with-ellipsis---sb\",\"result-box-wrapper\":\"ResultBox_result-box-wrapper---sb\",\"resultBoxWrapper\":\"ResultBox_result-box-wrapper---sb\",\"result-box-thumbnail-wrapper\":\"ResultBox_result-box-thumbnail-wrapper---sb\",\"resultBoxThumbnailWrapper\":\"ResultBox_result-box-thumbnail-wrapper---sb\",\"rate-select-btn\":\"ResultBox_rate-select-btn---sb\",\"rateSelectBtn\":\"ResultBox_rate-select-btn---sb\",\"result-box-wrapper-deals\":\"ResultBox_result-box-wrapper-deals---sb\",\"resultBoxWrapperDeals\":\"ResultBox_result-box-wrapper-deals---sb\",\"result-box-wrapper-deals-mobile\":\"ResultBox_result-box-wrapper-deals-mobile---sb\",\"resultBoxWrapperDealsMobile\":\"ResultBox_result-box-wrapper-deals-mobile---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/ResultsGroup/ResultBox/styles.less\n// module id = 1535\n// module chunks = 0","export { default } from \"./ThumbNailCustom\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/ThumbNailCustom/index.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"ThumbNailCustom_with-ellipsis---sb\",\"withEllipsis\":\"ThumbNailCustom_with-ellipsis---sb\",\"room-box-wrapper\":\"ThumbNailCustom_room-box-wrapper---sb\",\"roomBoxWrapper\":\"ThumbNailCustom_room-box-wrapper---sb\",\"room-box-title\":\"ThumbNailCustom_room-box-title---sb\",\"roomBoxTitle\":\"ThumbNailCustom_room-box-title---sb\",\"ie-is-shit\":\"ThumbNailCustom_ie-is-shit---sb\",\"ieIsShit\":\"ThumbNailCustom_ie-is-shit---sb\",\"mobile-view\":\"ThumbNailCustom_mobile-view---sb\",\"mobileView\":\"ThumbNailCustom_mobile-view---sb\",\"room-box-description\":\"ThumbNailCustom_room-box-description---sb\",\"roomBoxDescription\":\"ThumbNailCustom_room-box-description---sb\",\"room-box-upper-section\":\"ThumbNailCustom_room-box-upper-section---sb\",\"roomBoxUpperSection\":\"ThumbNailCustom_room-box-upper-section---sb\",\"room-box-per-night\":\"ThumbNailCustom_room-box-per-night---sb\",\"roomBoxPerNight\":\"ThumbNailCustom_room-box-per-night---sb\",\"room-box-price\":\"ThumbNailCustom_room-box-price---sb\",\"roomBoxPrice\":\"ThumbNailCustom_room-box-price---sb\",\"room-box-price-old\":\"ThumbNailCustom_room-box-price-old---sb\",\"roomBoxPriceOld\":\"ThumbNailCustom_room-box-price-old---sb\",\"room-box-price-new\":\"ThumbNailCustom_room-box-price-new---sb\",\"roomBoxPriceNew\":\"ThumbNailCustom_room-box-price-new---sb\",\"room-box-price-separator\":\"ThumbNailCustom_room-box-price-separator---sb\",\"roomBoxPriceSeparator\":\"ThumbNailCustom_room-box-price-separator---sb\",\"room-box-button\":\"ThumbNailCustom_room-box-button---sb\",\"roomBoxButton\":\"ThumbNailCustom_room-box-button---sb\",\"room-box-club-memeber\":\"ThumbNailCustom_room-box-club-memeber---sb\",\"roomBoxClubMemeber\":\"ThumbNailCustom_room-box-club-memeber---sb\",\"room-box-more-details\":\"ThumbNailCustom_room-box-more-details---sb\",\"roomBoxMoreDetails\":\"ThumbNailCustom_room-box-more-details---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/ThumbNailCustom/styles.less\n// module id = 1537\n// module chunks = 0","export { default } from \"./RoomsResultsGroup\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomsResultsGroup/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport ResultsGroup from \"../ResultsGroup\";\r\n\r\nexport class RoomsResultsGroup extends Component {\r\n state = {\r\n rooms: []\r\n };\r\n\r\n componentDidMount() {\r\n const { getAnalyticsPlaceHolders } = this.props;\r\n this.setResults();\r\n this.props.onLoad();\r\n getAnalyticsPlaceHolders && getAnalyticsPlaceHolders();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const { results } = this.props;\r\n if (results != prevProps.results) {\r\n this.setResults();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n const { clearAnalyticsPlaceHolders } = this.props;\r\n clearAnalyticsPlaceHolders && clearAnalyticsPlaceHolders();\r\n }\r\n\r\n setResults = () => {\r\n const { results: rooms } = this.props;\r\n let results = rooms;\r\n\r\n results = results.sort((r1, r2) => {\r\n return r1.sortOrder - r2.sortOrder || r1.lowestPrice - r2.lowestPrice;\r\n });\r\n\r\n this.setState({ rooms: results });\r\n };\r\n\r\n /// normal room object model to an acceptable thumbnail object\r\n normalizeRoom = room => {\r\n const normalizedRoom = {\r\n id: room.id,\r\n name: room.name,\r\n lowestPrice: room.lowestPrice,\r\n currency: room.currency,\r\n currencyCode: room.currencyCode,\r\n simpleClubTotalPrice: room.simpleClubLowestPrice,\r\n description: room.description,\r\n images: room.images,\r\n defaultImage: room.defaultImageUrl,\r\n requestedRoom: room.requestedRoom\r\n };\r\n return normalizedRoom;\r\n };\r\n\r\n render() {\r\n const {\r\n isRtl,\r\n titles,\r\n isMobileView,\r\n onRoomResultClick,\r\n onShowRoomDetailsClick,\r\n renderMarkup,\r\n isIos,\r\n showPricePerNightThumb,\r\n checkinDate,\r\n checkoutDate,\r\n clubUserLoggedIn,\r\n discountClubConfig\r\n } = this.props;\r\n\r\n const { rooms } = this.state;\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nRoomsResultsGroup.defaultProps = {\r\n isRtl: false,\r\n isMobileView: false,\r\n titles: {},\r\n results: [],\r\n onShowRoomDetailsClick: () => {},\r\n onRoomResultClick: () => {},\r\n onLoad: () => {}\r\n};\r\n\r\nRoomsResultsGroup.propTypes = {\r\n isRtl: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n titles: PropTypes.object,\r\n results: PropTypes.array,\r\n onRoomResultClick: PropTypes.func,\r\n onShowRoomDetailsClick: PropTypes.func,\r\n isIos: PropTypes.bool,\r\n onLoad: PropTypes.func,\r\n renderMarkup: PropTypes.func,\r\n getAnalyticsPlaceHolders: PropTypes.func,\r\n clearAnalyticsPlaceHolders: PropTypes.func,\r\n showPricePerNightThumb: PropTypes.bool,\r\n checkoutDate: PropTypes.string,\r\n checkinDate: PropTypes.string,\r\n clubUserLoggedIn: PropTypes.bool\r\n};\r\n\r\nexport default RoomsResultsGroup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomsResultsGroup/RoomsResultsGroup.js","export { default } from \"./RoomboxDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomboxDetails/index.js","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport { Grid, Form, Checkbox, Ref } from \"semantic-ui-react\";\nimport { RoomboxDetailsHeader, RatesGroup, Gallery } from \"../\";\nimport RoomData from \"../RoomData\";\nimport { Amenities, NoResults, ContactUs, RawHTML } from \"../common\";\nimport Only from \"react-only-when\";\nimport styles from \"./styles.less\";\nimport RatesTable from \"../RatesTable/RatesTable\";\n\nclass RoomboxDetails extends Component {\n state = {\n ratesHeightExpanded: null,\n ratesHeightCollapsed: 0,\n initialLoading: true\n };\n componentDidMount() {\n this.calcRatesSize();\n }\n onRateSelection = ({ ...rateSelectedParams }) => {\n const {\n onRateSelection,\n room,\n clubUserLoggedIn,\n isClubPricesInterested,\n showSimpleClubLoginModal,\n isMobileView\n } = this.props;\n if (isMobileView && !clubUserLoggedIn && isClubPricesInterested) {\n showSimpleClubLoginModal();\n } else {\n onRateSelection({ ...rateSelectedParams, roomId: room.id });\n }\n };\n\n showSimpleClubLoginModal = () => {\n const {\n clubUserLoggedIn,\n isClubPricesInterested,\n showSimpleClubLoginModal\n } = this.props;\n if (!clubUserLoggedIn && isClubPricesInterested) {\n showSimpleClubLoginModal();\n }\n };\n\n onRateReadMore = ({ rateId }) => {\n const { onRateReadMore, room } = this.props;\n onRateReadMore(rateId, room.id);\n };\n\n onShowMoreAmenities = () => {\n const { onShowMoreAmenities, room } = this.props;\n onShowMoreAmenities(room.id);\n };\n\n renderHeader = () => {\n const {\n titles,\n room,\n isRtl,\n isMobileView,\n showFullHeaderDetails,\n onRoomDetailsClick,\n onShowRatesClick,\n onShowContactUsForm,\n ratesGroupVisible\n } = this.props;\n\n return (\n \n );\n };\n\n handleRefToRoomboxDetailsHeader = ref => {\n const { roomBoxDetailsHeaderRef } = this.props;\n if (roomBoxDetailsHeaderRef) {\n roomBoxDetailsHeaderRef(ref);\n }\n };\n\n renderRatesGroup = () => {\n const {\n selectedRateIdOfCurrentPax,\n isRtl,\n titles,\n room,\n showAvailability,\n lowAvailabilityCount,\n clubUserLoggedIn,\n isClubActive,\n isClubPricesInterested,\n clubPercentageDiscount,\n ratesGroupRef,\n ShowCancellationPolicy,\n selectedPaxId,\n //isDealMode,\n isMobileView,\n isIE,\n displayPriceWithoutTaxes\n } = this.props;\n const showClubPrices = isClubPricesInterested || clubUserLoggedIn;\n const hasRates =\n room.rates && room.rates.filter(rate => rate.availability > 0).length;\n const numberOfAmenitiesToShow = 5;\n const amenitiesPreviewLimit =\n room.amenities && room.amenities.length < numberOfAmenitiesToShow\n ? room.amenities.length\n : numberOfAmenitiesToShow;\n const amenitiesToPreview =\n room.amenities && room.amenities.slice(0, amenitiesPreviewLimit);\n // const groupedRates = isDealMode\n // ? this.groupRatesByPackages(room.rates)\n // : room.rates;\n return (\n [\n \n {isMobileView && (\n \n \n \n \n {room.amenities &&\n room.amenities.length > numberOfAmenitiesToShow && (\n \n ]\n \n
\n \n )}\n \n )}\n {!!hasRates &&\n isClubActive &&\n !clubUserLoggedIn &&\n isMobileView && (\n \n {this.renderFilterStripe()}\n \n )}\n \n [\n \n ]\n \n \n \n );\n };\n\n renderGallery = () => {\n const { images, isRtl } = this.props;\n return ;\n };\n\n renderFilterStripe = () => {\n const {\n titles,\n isRtl,\n onClubPricesInterestingClick,\n isClubPricesInterested\n } = this.props;\n return (\n \n
\n
\n \n
\n
\n );\n };\n\n calcRatesSize = () => {\n const { expandbleState } = this.props;\n const isInitial = this.state.initialLoading;\n if (isInitial && this.ratesRef) {\n this.setState({\n ratesHeightExpanded: expandbleState ? this.ratesRef.offsetHeight : null,\n ratesHeightCollapsed: 0,\n initialLoading: false\n });\n }\n };\n\n renderContactUs = () => {\n const {\n titles,\n hotelData,\n isMobileView,\n room,\n lang,\n checkinDate,\n checkoutDate,\n selectedOption,\n currentPaxCombination,\n contactUsSubmitingStatus,\n submitContactUsForm,\n contactUsFormRef\n } = this.props;\n\n const needToShowForm = !contactUsSubmitingStatus.succeed == true;\n\n return (\n [\n \n \n {({ onSubmit }) =>\n needToShowForm ? (\n \n ]\n \n \n \n \n
\n \n \n {titles.SendYourRequestAndWeWillReturn}\n
\n \n \n ) : (\n \n )\n }\n \n \n \n );\n };\n\n renderNoResultsPage = () => {\n const { titles, isRtl } = this.props;\n return (\n \n \n \n );\n };\n\n renderDesktopRoomData = () => {\n const {\n titles,\n room,\n isRtl,\n isMobileView,\n showFullHeaderDetails,\n onRoomDetailsClick,\n onShowRatesClick,\n onShowContactUsForm,\n ratesGroupVisible,\n onShowMoreAmenities,\n onShowRoomGalleryPopUp,\n switchImagesAutomatically,\n selectedPaxId,\n images,\n toggleExpandbleResultsView,\n expandbleState\n } = this.props;\n\n return (\n \n );\n };\n\n renderMobileRoomHeader = () => {\n return (\n \n \n {this.renderHeader()}\n
\n {this.renderGallery()}\n \n );\n };\n\n setRatesRef = ref => (this.ratesRef = ref);\n\n render() {\n const { visibleRoomPage, room, isMobileView } = this.props;\n return (\n \n {isMobileView\n ? this.renderMobileRoomHeader()\n : this.renderDesktopRoomData()}\n \n \n {this.renderRatesGroup()}
\n \n \n {this.renderContactUs()}\n \n );\n }\n}\n\nRoomboxDetails.defaultProps = {\n ratesGroupRef: () => {},\n roomBoxDetailsHeaderRef: () => {},\n contactUsFormRef: () => {}\n};\n\nRoomboxDetails.propTypes = {\n isRtl: PropTypes.bool,\n hotelData: PropTypes.object.isRequired,\n visibleRoomPage: PropTypes.string,\n selectedRateIdOfCurrentPax: PropTypes.string,\n checkinDate: PropTypes.string,\n checkoutDate: PropTypes.string,\n selectedOption: PropTypes.object,\n contactUsSubmitingStatus: PropTypes.object,\n currentPaxCombination: PropTypes.object,\n submitContactUsForm: PropTypes.func,\n titles: PropTypes.object,\n lang: PropTypes.string,\n isMobileView: PropTypes.bool,\n images: PropTypes.array,\n room: PropTypes.object,\n showAvailability: PropTypes.bool,\n lowAvailabilityCount: PropTypes.number,\n isClubActive: PropTypes.bool,\n showFullHeaderDetails: PropTypes.bool,\n isClubPricesInterested: PropTypes.bool,\n clubUserLoggedIn: PropTypes.bool,\n onRoomDetailsClick: PropTypes.func,\n onRateSelection: PropTypes.func,\n onShowRatesClick: PropTypes.func,\n onShowContactUsForm: PropTypes.func,\n onRateReadMore: PropTypes.func,\n onShowMoreAmenities: PropTypes.func,\n ratesGroupRef: PropTypes.func,\n contactUsFormRef: PropTypes.func,\n roomBoxDetailsHeaderRef: PropTypes.func,\n onClubPricesInterestingClick: PropTypes.func,\n showSimpleClubLoginModal: PropTypes.func,\n ShowCancellationPolicy: PropTypes.bool,\n isIE: PropTypes.bool,\n onShowRoomGalleryPopUp: PropTypes.func,\n ratesGroupVisible: PropTypes.bool,\n clubPercentageDiscount: PropTypes.number,\n switchImagesAutomatically: PropTypes.bool,\n selectedPaxId: PropTypes.number,\n toggleExpandbleResultsView: PropTypes.func,\n expandbleState: PropTypes.bool,\n displayPriceWithoutTaxes: PropTypes.bool\n};\n\nexport default RoomboxDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomboxDetails/RoomboxDetails.js","export { default } from \"./RoomData\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomData/index.js","import React, { Component } from \"react\";\r\nimport { PropTypes } from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Amenities, RawHTML } from \"../common\";\r\nimport PriceDisplay from \"../../containers/PriceDisplay\";\r\nimport styles from \"./styles.less\";\r\nimport { Gallery } from \"../\";\r\n\r\nclass RoomData extends Component {\r\n state = {\r\n showReadMore: false,\r\n galleryWidthExpanded: null,\r\n galleryWidthCollapsed: null,\r\n roomDetailsWidthExpanded: null,\r\n roomDetailsWidthCollapsed: null,\r\n initialLoading: true,\r\n resizeOccured: false\r\n };\r\n\r\n componentDidMount() {\r\n this.isReadMoreOverlapping(); // after first mount ( refs already got attached ) , update showReadMore flag.\r\n window.addEventListener(\"resize\", this.isReadMoreOverlapping); // add showReadMore flag updating callback to window resize event.\r\n this.resizeImageAndRoomDetails();\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"resize\", this.isReadMoreOverlapping);\r\n }\r\n\r\n innerRoomDescriptionRef = null;\r\n outerRoomDescriptionRef = null;\r\n\r\n /** check if the wrapper element of the room description TEXT is higher\r\n * than the wrapper element of the room description area ( inc read more text and fader ).\r\n * if so, the fader (inc read more text) should be applied on the dom and be visible to the user.\r\n */\r\n isReadMoreOverlapping = () => {\r\n let newState = {\r\n showReadMore: false\r\n };\r\n\r\n if (\r\n this.state.roomDetailsWidthCollapsed &&\r\n this.innerRoomDescriptionRef &&\r\n this.outerRoomDescriptionRef &&\r\n this.innerRoomDescriptionRef.offsetHeight > 100 &&\r\n this.innerRoomDescriptionRef.offsetHeight >=\r\n this.outerRoomDescriptionRef.offsetHeight\r\n ) {\r\n newState.showReadMore = true;\r\n }\r\n\r\n this.setState(newState);\r\n };\r\n\r\n setOuterRoomDescriptionRef = ref => (this.outerRoomDescriptionRef = ref);\r\n\r\n setInnerRoomDescriptionRef = ref => (this.innerRoomDescriptionRef = ref);\r\n\r\n setGalleryRoomRef = ref => (this.galleryRoomRef = ref);\r\n\r\n setRoomDetailsRef = ref => (this.roomDetailsRef = ref);\r\n\r\n setRoomHeaderRef = ref => (this.roomHeaderRef = ref);\r\n\r\n resizeImageAndRoomDetails = () => {\r\n const isInitial = this.state.initialLoading;\r\n //const { expandbleState } = this.props;\r\n if (isInitial && this.roomHeaderRef) {\r\n this.setState({\r\n galleryWidthExpanded: this.roomHeaderRef.offsetWidth / 2,\r\n galleryWidthCollapsed: this.roomHeaderRef.offsetWidth / 4,\r\n roomDetailsWidthExpanded: this.roomHeaderRef.offsetWidth / 2,\r\n roomDetailsWidthCollapsed: (this.roomHeaderRef.offsetWidth * 3) / 4,\r\n initialLoading: false\r\n });\r\n }\r\n };\r\n\r\n renderGallery = () => {\r\n const { images, isRtl, room, switchImagesAutomatically } = this.props;\r\n return (\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n onShowRoomGalleryPopUp = () => {\r\n const { onShowRoomGalleryPopUp, room } = this.props;\r\n onShowRoomGalleryPopUp(room);\r\n };\r\n\r\n onShowMoreAmenities = () => {\r\n const { onShowMoreAmenities, room } = this.props;\r\n onShowMoreAmenities(room.id);\r\n };\r\n\r\n onRoomDetailsClick = () => {\r\n const { room, onRoomDetailsClick } = this.props;\r\n onRoomDetailsClick({ id: room.id });\r\n };\r\n\r\n toggleExpandbleResults = () => {\r\n this.setState({ resizeOccured: true });\r\n const { toggleExpandbleResultsView, room, selectedPaxId } = this.props;\r\n toggleExpandbleResultsView({\r\n id: room.id,\r\n name: room.name,\r\n requestDescriptor: selectedPaxId\r\n });\r\n };\r\n\r\n startFromPrice = price => {\r\n const { titles } = this.props;\r\n const startFromPrice = price && `${titles.StartingFrom} ${price}`;\r\n return startFromPrice;\r\n };\r\n\r\n findLowestPrice = () => {\r\n const { room } = this.props;\r\n const isData = room && room.rates;\r\n let lowestPrice = isData && room.rates[0].totalPrice;\r\n room.rates.forEach(rate => {\r\n if (rate.totalPrice < lowestPrice) {\r\n lowestPrice = rate.totalPrice;\r\n }\r\n });\r\n return lowestPrice;\r\n };\r\n\r\n renderRoomDetails = () => {\r\n const { room, isRtl, titles, expandbleState } = this.props;\r\n const { showReadMore } = this.state;\r\n const numberOfAmenitiesToShow = 5;\r\n const amenitiesPreviewLimit =\r\n room.amenities && room.amenities.length < numberOfAmenitiesToShow\r\n ? room.amenities.length\r\n : numberOfAmenitiesToShow;\r\n const displayShowMoreAmeneties =\r\n room.amenities && room.amenities.length > numberOfAmenitiesToShow;\r\n const amenitiesToPreview =\r\n room.amenities && room.amenities.slice(0, amenitiesPreviewLimit);\r\n const hasAmeneties =\r\n amenitiesToPreview != null && amenitiesToPreview.length > 0;\r\n const shouldSpaceBetweenAmeneties =\r\n amenitiesToPreview && amenitiesToPreview.length > 3;\r\n const lowestPrice = this.findLowestPrice();\r\n\r\n return (\r\n \r\n
\r\n
{room.name}
\r\n
\r\n
\r\n
\r\n
\r\n {titles.ReadMore}\r\n
\r\n
\r\n {room.description && (\r\n
\r\n )}\r\n
\r\n
\r\n {hasAmeneties && (\r\n
\r\n
\r\n
\r\n {displayShowMoreAmeneties && (\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
{room.availability}
\r\n
{titles.RoomsLeft}
\r\n
\r\n
\r\n
\r\n {calcPrice => this.startFromPrice(calcPrice)}\r\n \r\n
\r\n
\r\n {expandbleState ? titles.HideRates : titles.ShowRates}\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n galleryWidthExpanded,\r\n galleryWidthCollapsed,\r\n roomDetailsWidthExpanded,\r\n roomDetailsWidthCollapsed\r\n } = this.state;\r\n const { expandbleState } = this.props;\r\n const galleryWidth = expandbleState\r\n ? `${galleryWidthExpanded}px`\r\n : `${galleryWidthCollapsed}px`;\r\n const roomDetailsWidth = expandbleState\r\n ? `${roomDetailsWidthExpanded}px`\r\n : `${roomDetailsWidthCollapsed}px`;\r\n return (\r\n \r\n
\r\n {this.renderGallery()}\r\n
\r\n
\r\n {this.renderRoomDetails()}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nRoomData.propTypes = {\r\n isRtl: PropTypes.bool,\r\n titles: PropTypes.object,\r\n room: PropTypes.object,\r\n images: PropTypes.array,\r\n onShowMoreAmenities: PropTypes.func,\r\n onShowRoomGalleryPopUp: PropTypes.func,\r\n onRoomDetailsClick: PropTypes.func,\r\n switchImagesAutomatically: PropTypes.bool,\r\n toggleExpandbleResultsView: PropTypes.func,\r\n selectedPaxId: PropTypes.number,\r\n expandbleState: PropTypes.bool\r\n};\r\n\r\nexport default RoomData;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomData/RoomData.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RoomData_with-ellipsis---sb\",\"withEllipsis\":\"RoomData_with-ellipsis---sb\",\"room-header\":\"RoomData_room-header---sb\",\"roomHeader\":\"RoomData_room-header---sb\",\"room-data-section\":\"RoomData_room-data-section---sb\",\"roomDataSection\":\"RoomData_room-data-section---sb\",\"room-gallery-section\":\"RoomData_room-gallery-section---sb\",\"roomGallerySection\":\"RoomData_room-gallery-section---sb\",\"room-details-upper-wrapper\":\"RoomData_room-details-upper-wrapper---sb\",\"roomDetailsUpperWrapper\":\"RoomData_room-details-upper-wrapper---sb\",\"room-details-wrapper\":\"RoomData_room-details-wrapper---sb\",\"roomDetailsWrapper\":\"RoomData_room-details-wrapper---sb\",\"room-name\":\"RoomData_room-name---sb\",\"roomName\":\"RoomData_room-name---sb\",\"room-description-wrapper\":\"RoomData_room-description-wrapper---sb\",\"roomDescriptionWrapper\":\"RoomData_room-description-wrapper---sb\",\"room-description-fade\":\"RoomData_room-description-fade---sb\",\"roomDescriptionFade\":\"RoomData_room-description-fade---sb\",\"room-description\":\"RoomData_room-description---sb\",\"roomDescription\":\"RoomData_room-description---sb\",\"room-description-read-more\":\"RoomData_room-description-read-more---sb\",\"roomDescriptionReadMore\":\"RoomData_room-description-read-more---sb\",\"show\":\"RoomData_show---sb\",\"room-ameneties\":\"RoomData_room-ameneties---sb\",\"roomAmeneties\":\"RoomData_room-ameneties---sb\",\"room-availability\":\"RoomData_room-availability---sb\",\"roomAvailability\":\"RoomData_room-availability---sb\",\"availability-circle\":\"RoomData_availability-circle---sb\",\"availabilityCircle\":\"RoomData_availability-circle---sb\",\"availability-text\":\"RoomData_availability-text---sb\",\"availabilityText\":\"RoomData_availability-text---sb\",\"show-more-amenities\":\"RoomData_show-more-amenities---sb\",\"showMoreAmenities\":\"RoomData_show-more-amenities---sb\",\"show-more-amenities-btn\":\"RoomData_show-more-amenities-btn---sb\",\"showMoreAmenitiesBtn\":\"RoomData_show-more-amenities-btn---sb\",\"room-data-footer\":\"RoomData_room-data-footer---sb\",\"roomDataFooter\":\"RoomData_room-data-footer---sb\",\"show-rates-button\":\"RoomData_show-rates-button---sb\",\"showRatesButton\":\"RoomData_show-rates-button---sb\",\"start-from-price\":\"RoomData_start-from-price---sb\",\"startFromPrice\":\"RoomData_start-from-price---sb\",\"start-from-price-visible\":\"RoomData_start-from-price-visible---sb\",\"startFromPriceVisible\":\"RoomData_start-from-price-visible---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RoomData/styles.less\n// module id = 1544\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RoomboxDetails_with-ellipsis---sb\",\"withEllipsis\":\"RoomboxDetails_with-ellipsis---sb\",\"with-line-breal\":\"RoomboxDetails_with-line-breal---sb\",\"withLineBreal\":\"RoomboxDetails_with-line-breal---sb\",\"roombox-details\":\"RoomboxDetails_roombox-details---sb\",\"roomboxDetails\":\"RoomboxDetails_roombox-details---sb\",\"ie-is-shit\":\"RoomboxDetails_ie-is-shit---sb\",\"ieIsShit\":\"RoomboxDetails_ie-is-shit---sb\",\"relative-container\":\"RoomboxDetails_relative-container---sb\",\"relativeContainer\":\"RoomboxDetails_relative-container---sb\",\"rail\":\"RoomboxDetails_rail---sb\",\"alpha-color\":\"RoomboxDetails_alpha-color---sb\",\"alphaColor\":\"RoomboxDetails_alpha-color---sb\",\"stacked-header\":\"RoomboxDetails_stacked-header---sb\",\"stackedHeader\":\"RoomboxDetails_stacked-header---sb\",\"mobile-view\":\"RoomboxDetails_mobile-view---sb\",\"mobileView\":\"RoomboxDetails_mobileView---sb\",\"relaxed\":\"RoomboxDetails_relaxed---sb\",\"view-port\":\"RoomboxDetails_view-port---sb\",\"viewPort\":\"RoomboxDetails_view-port---sb\",\"devider\":\"RoomboxDetails_devider---sb\",\"btn-group\":\"RoomboxDetails_btn-group---sb\",\"btnGroup\":\"RoomboxDetails_btn-group---sb\",\"rtl\":\"RoomboxDetails_rtl---sb\",\"extended\":\"RoomboxDetails_extended---sb\",\"extend-more\":\"RoomboxDetails_extend-more---sb\",\"extendMore\":\"RoomboxDetails_extend-more---sb\",\"extended-details\":\"RoomboxDetails_extended-details---sb\",\"extendedDetails\":\"RoomboxDetails_extended-details---sb\",\"rates-wrapper\":\"RoomboxDetails_rates-wrapper---sb\",\"ratesWrapper\":\"RoomboxDetails_rates-wrapper---sb\",\"filter-stripe-wrapper\":\"RoomboxDetails_filter-stripe-wrapper---sb\",\"filterStripeWrapper\":\"RoomboxDetails_filter-stripe-wrapper---sb\",\"header-wrapper\":\"RoomboxDetails_header-wrapper---sb\",\"headerWrapper\":\"RoomboxDetails_header-wrapper---sb\",\"room-name\":\"RoomboxDetails_room-name---sb\",\"roomName\":\"RoomboxDetails_room-name---sb\",\"amenities\":\"RoomboxDetails_amenities---sb\",\"show-rates-btn\":\"RoomboxDetails_show-rates-btn---sb\",\"showRatesBtn\":\"RoomboxDetails_show-rates-btn---sb\",\"defaultColor\":\"RoomboxDetails_defaultColor---sb\",\"invertedColor\":\"RoomboxDetails_invertedColor---sb\",\"toggle\":\"RoomboxDetails_toggle---sb\",\"checkbox\":\"RoomboxDetails_checkbox---sb\",\"inverted\":\"RoomboxDetails_inverted---sb\",\"contact-us-wrapper\":\"RoomboxDetails_contact-us-wrapper---sb\",\"contactUsWrapper\":\"RoomboxDetails_contact-us-wrapper---sb\",\"contact-us-header\":\"RoomboxDetails_contact-us-header---sb\",\"contactUsHeader\":\"RoomboxDetails_contact-us-header---sb\",\"in-order-to\":\"RoomboxDetails_in-order-to---sb\",\"inOrderTo\":\"RoomboxDetails_in-order-to---sb\",\"options-to-contant\":\"RoomboxDetails_options-to-contant---sb\",\"optionsToContant\":\"RoomboxDetails_options-to-contant---sb\",\"header-text\":\"RoomboxDetails_header-text---sb\",\"headerText\":\"RoomboxDetails_header-text---sb\",\"send-your-request\":\"RoomboxDetails_send-your-request---sb\",\"sendYourRequest\":\"RoomboxDetails_send-your-request---sb\",\"noRates\":\"RoomboxDetails_noRates---sb\",\"filter-stripe\":\"RoomboxDetails_filter-stripe---sb\",\"filterStripe\":\"RoomboxDetails_filter-stripe---sb\",\"title\":\"RoomboxDetails_title---sb\",\"show-more-amenities\":\"RoomboxDetails_show-more-amenities---sb\",\"showMoreAmenities\":\"RoomboxDetails_show-more-amenities---sb\",\"show-more-amenities-btn\":\"RoomboxDetails_show-more-amenities-btn---sb\",\"showMoreAmenitiesBtn\":\"RoomboxDetails_show-more-amenities-btn---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RoomboxDetails/styles.less\n// module id = 1545\n// module chunks = 0","'use strict';\n\nexports.__esModule = true;\nexports.defaultMemoize = defaultMemoize;\nexports.createSelectorCreator = createSelectorCreator;\nexports.createStructuredSelector = createStructuredSelector;\nfunction defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n var length = prev.length;\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction defaultMemoize(func) {\n var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n var lastArgs = null;\n var lastResult = null;\n // we reference arguments instead of spreading them for performance reasons\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments);\n }\n\n lastArgs = arguments;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep;\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nfunction createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptions[_key - 1] = arguments[_key];\n }\n\n return function () {\n for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++;\n // apply arguments instead of spreading for performance.\n return resultFunc.apply(null, arguments);\n }].concat(memoizeOptions));\n\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n var selector = defaultMemoize(function () {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n }\n\n // apply arguments instead of spreading for performance.\n return memoizedResultFunc.apply(null, params);\n });\n\n selector.resultFunc = resultFunc;\n selector.recomputations = function () {\n return recomputations;\n };\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n return selector;\n };\n}\n\nvar createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);\n\nfunction createStructuredSelector(selectors) {\n var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n }\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/reselect/lib/index.js\n// module id = 1546\n// module chunks = 0","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport default (state = initialState.globalModal, action) => {\r\n switch (action.type) {\r\n case types.GLOBAL_MODAL_DISMISS:\r\n return initialState;\r\n\r\n case types.GLOBAL_MODAL_SHOW:\r\n return {\r\n show: true,\r\n ...action.payload\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/globalModalReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialstate from \"./initialState\";\n\nexport default (state = initialstate.globalNotification, action) => {\n switch (action.type) {\n case types.SHOW_GLOBAL_NOTIFICATION:\n return action.payload;\n case types.HIDE_GLOBAL_NOTIFICATION:\n return {\n show: false,\n msg: \"\"\n };\n case types.ADDON_ADDED:\n return {\n show: true,\n msg: action.payload.msg\n };\n case types.CLUB_USER_LOGIN:\n if (action.msg) {\n return {\n show: true,\n msg: action.msg,\n type: \"success\"\n };\n } else {\n return state;\n }\n case types.CLUB_USER_LOGIN_FAILED:\n return {\n show: true,\n msg: action.msg,\n type: \"error\"\n };\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/globalNotificationReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const clubUserLoggedInReducer = (\r\n state = initialState.clubUserLoggedIn,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CLUB_USER_LOGIN:\r\n return true;\r\n\r\n case types.CLUB_USER_LOGOUT:\r\n return false;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const clubPricesInterestingReducer = (\r\n state = initialState.isClubPricesInterested,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CLUB_PRICES_INTERESTING:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const clubUserDataReducer = (\r\n state = initialState.clubUserData,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CLUB_USER_LOGIN:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/discountClubReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialstate from \"./initialState\";\n\nexport default (state = initialstate.lang, action) => {\n switch (action.type) {\n case types.CHANGE_LANG:\n return action.payload;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/langReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialstate from \"./initialState\";\n\nexport default (state = initialstate.viewDirection, action) => {\n switch (action.type) {\n case types.CHANGE_VIEW_DIRECTION:\n return action.payload;\n\n case types.CHANGE_LANG: {\n const { payload = \"\" } = action;\n let direction = initialstate.viewDirection;\n if (payload.toLowerCase() === \"heb\") {\n direction = \"rtl\";\n }\n return direction;\n }\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/viewDirectionReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.GET_ROOM_RESULTS_REQUEST:\n return true;\n\n case types.GET_ROOM_RESULTS_FAIL:\n case types.GET_ROOM_RESULTS_SUCESS:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isfetchingRoomsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\nimport { ratesReducer } from \"./ratesReducer\";\nimport { availabilityReducer } from \"./availabilityReducer\";\n\n//This reducer is not included in the root reducer\nexport const roomsReducer = (state = initialState.rooms, action) => {\n switch (action.type) {\n case types.GET_ROOM_RESULTS_FAIL:\n case types.RESET_ROOM_RESULTS: {\n return initialState.rooms;\n }\n\n case types.SORT_BY_LOWEST_PRICE:\n case types.GET_ROOM_RESULTS_SUCESS: {\n const nextState =\n state &&\n state.map(room => {\n return roomReducer(room, action);\n });\n\n return nextState;\n }\n\n case types.PAX_REMOVED: {\n return (\n state &&\n state.filter(room => {\n room.id !== action.payload.paxId;\n })\n );\n }\n\n case types.RATE_SELECTED:\n case types.RATE_UNSELECTED: {\n const { roomId } = action.payload;\n const nextState =\n state &&\n state.map(room => {\n if (room.id !== roomId) {\n return room; // not the room of this selected rate\n }\n return roomReducer(room, action);\n });\n\n return nextState;\n }\n\n case types.FILTER_ROOMS_BY_ISPACKAGE: {\n return state && state.map(room => room.filter(rates => rates.isPackage));\n }\n\n default:\n return state;\n }\n};\n\nexport const roomReducer = (state = {}, action) => {\n switch (action.type) {\n case types.SORT_BY_LOWEST_PRICE:\n case types.GET_ROOM_RESULTS_SUCESS:\n case types.RATE_SELECTED:\n case types.RATE_UNSELECTED: {\n const nextAvailability = availabilityReducer(state.availability, action);\n const extendedAction = {\n ...action,\n payload: {\n ...action.payload,\n roomInventory: nextAvailability\n }\n };\n return {\n ...state,\n availability: nextAvailability,\n rates: ratesReducer(state.rates, extendedAction)\n };\n }\n\n default:\n return state;\n }\n};\n\nexport const roomsByRequestDescriptor = (state = {}, action) => {\n switch (action.type) {\n case types.GET_ROOM_RESULTS_SUCESS: {\n // we are getting array of rooms\n const rooms = action.payload && roomsReducer(action.payload, action);\n\n // convert it to a lookup table object [key === requestDescriptor]: [value === rooms]. ie: {0: [...rooms]}\n const groupByDescriptor = rooms && groopRoomsByDescriptor(rooms);\n const filteredRooms =\n groupByDescriptor &&\n getRoomsWithAvailabilitySelector(groupByDescriptor);\n return filteredRooms;\n }\n\n case types.RATE_SELECTED:\n case types.RATE_UNSELECTED: {\n const { RequestDescriptor } = action.payload;\n const nextState = Object.entries(state).reduce(\n (acc, [groupName, rooms]) => {\n if (groupName === RequestDescriptor.toString()) {\n return {\n ...state,\n ...acc\n };\n } else {\n return {\n ...acc,\n [groupName]: roomsReducer(rooms, action)\n };\n }\n },\n {}\n );\n\n return nextState;\n }\n\n case types.SORT_BY_LOWEST_PRICE: {\n const nextState = getRoomsWithSortedRates(state, action);\n return nextState;\n }\n\n case types.PAX_REMOVED: {\n const { paxId } = action.payload;\n const nextState = filterObjectByKeys(state, key => Number(key) !== paxId);\n return nextState;\n }\n\n case types.TOGGLE_EXPANDBLE_VIEW_FOR_ROOM: {\n const { requestDescriptor, id, name } = action.payload;\n const roomsByRequestDescriptor = state && state[requestDescriptor];\n const relevantRoom =\n roomsByRequestDescriptor &&\n roomsByRequestDescriptor.filter(\n room => room.id == id && room.name == name\n );\n let roomKey = Object.keys(relevantRoom);\n const newRoom = {\n [roomKey]: {\n ...relevantRoom[roomKey],\n ShowViewExpanded: !relevantRoom[roomKey]\n }\n };\n const newRoomsByRequestDescriptor = {\n ...roomsByRequestDescriptor,\n ...newRoom\n };\n const result = {\n ...state,\n [requestDescriptor]: { ...newRoomsByRequestDescriptor }\n };\n return result;\n }\n\n default:\n return state;\n }\n};\n\nexport const displayRoomIdReducer = (\n state = initialState.displayRoomId,\n action\n) => {\n switch (action.type) {\n case types.CHANGE_DISPLAY_ROOM:\n return action.payload;\n case types.RESET_DISPLAY_ROOM:\n case types.SELECTION_RESET:\n return initialState.displayRoomId;\n default:\n return state;\n }\n};\n\nexport const getRoomByIdAndDescriptor = (state, id, descriptor) => {\n const room =\n state &&\n state[descriptor] &&\n state[descriptor].find(room => room.id === id);\n return room;\n};\n\nconst groopRoomsByDescriptor = state => state.groupBy(x => x.requestDescriptor);\n\nconst getRoomsWithSortedRates = (state, action) => {\n const asArray = (state && Object.entries(state)) || [];\n const nextState =\n asArray &&\n asArray.reduce((result, [roomDescriptor, rooms]) => {\n result[roomDescriptor] = roomsReducer(rooms, action);\n return result;\n }, {});\n\n return nextState;\n};\n\nconst filterObjectByKeys = (obj, predicate) => {\n const filtered = Object.keys(obj).filter(predicate);\n const nextObj = filtered.reduce((acc, key) => {\n return {\n ...acc,\n [key]: obj[key]\n };\n }, {});\n return nextObj;\n};\n\nconst getRoomsWithAvailabilitySelector = state => {\n const roomsWithAvailability = Object.entries(state).reduce(\n (acc, [key, rooms]) => {\n const filteredRooms = rooms.filter(room => room.availability > 0);\n acc[key] = filteredRooms;\n return acc;\n },\n {}\n );\n return roomsWithAvailability;\n};\n\nexport const getFirstRoomBySortOrder = state =>\n state.reduce(\n (prev, current) => (prev.sortOrder <= current.sortOrder ? prev : current)\n );\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/roomResultsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport const regionResultsReducer = (\n state = initialState.regionResults,\n action\n) => {\n switch (action.type) {\n case types.GET_REGION_RESULTS_FAIL: {\n return initialState.regionResults;\n }\n case types.GET_REGION_RESULTS_SUCCESS: {\n return action.payload;\n }\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/regionResultsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.GET_REGION_RESULTS_REQUEST:\n return true;\n\n case types.GET_REGION_RESULTS_FAIL:\n case types.GET_REGION_RESULTS_SUCCESS:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isFetchingRegionResultsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport const selectedHotelIdReducer = (\n state = initialState.selectedHotelID,\n action\n) => {\n switch (action.type) {\n case types.SELECTED_HOTEL_ID: {\n return action.payload || initialState.selectedHotelID;\n }\n case types.UPDATE_SELECTED_OPTION: {\n if (action.payload.optionType === \"Hotel\") {\n return action.payload.value;\n } else {\n return state;\n }\n }\n\n case types.SET_SEARCH_DATA:\n return (\n (action.payload && action.payload.SelectedHotelID) ||\n initialState.selectedHotelID\n );\n\n default:\n return state;\n }\n};\n\nexport const selectedRegionIdReducer = (\n state = initialState.selectedRegionID,\n action\n) => {\n switch (action.type) {\n case types.SELECTED_REGION_ID: {\n return action.payload || initialState.selectedRegionID;\n }\n case types.UPDATE_SELECTED_OPTION: {\n if (action.payload.optionType === \"Region\") {\n return action.payload.value;\n } else {\n return state;\n }\n }\n\n default:\n return state;\n }\n};\n\nexport const selectedCityCodeReducer = (\n state = initialState.selectedCityCode,\n action\n) => {\n switch (action.type) {\n case types.SELECTED_CITY_CODE: {\n return action.payload || initialState.selectedCityCode;\n }\n case types.UPDATE_SELECTED_OPTION: {\n if (action.payload.optionType === \"City\") {\n return action.payload.value;\n } else {\n return state;\n }\n }\n\n default:\n return state;\n }\n};\n\nexport const selectedDealIdReducer = (\n state = initialState.selectedDealID,\n action\n) => {\n switch (action.type) {\n case types.SELECTED_DEAL_ID: {\n return action.payload || initialState.selectedDealID;\n }\n case types.RESET_SELECTED_DEAL: {\n return state;\n }\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/hotelsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nconst paxCombinationReducer = (state = {}, action) => {\n switch (action.type) {\n case types.RATE_SELECTED:\n case types.DEAL_RATE_SELECTED: {\n const { rateId, roomId } = action.payload;\n return {\n ...state,\n rateId,\n roomId\n };\n }\n\n default:\n return state;\n }\n};\n\nexport const paxListReducer = (state = initialState.paxList, action) => {\n switch (action.type) {\n case types.PAX_LOADED:\n return [...action.payload];\n\n // case types.SET_SEARCH_DATA:\n // return (action.payload && action.payload.Pax) || initialState.paxList;\n\n case types.RATE_SELECTED:\n case types.DEAL_RATE_SELECTED: {\n const { RequestDescriptor } = action.payload;\n const nextState = state.map(pax => {\n if (pax.id != RequestDescriptor) return pax;\n return paxCombinationReducer(pax, action);\n });\n return nextState;\n }\n case types.RESET_RATE_SELECTION:\n case types.SELECTION_RESET:\n case types.DEAL_RATE_UNSELECTED: {\n const nextState = state.map(pax => {\n return { ...pax, rateId: null, roomId: null };\n });\n return nextState;\n }\n\n case types.PAX_REMOVED: {\n const { paxId } = action.payload;\n const nextPax = state.filter(px => px.id !== paxId);\n return nextPax;\n }\n\n case types.SET_SEARCH_DATA:\n return (action.payload && action.payload.Pax) || initialState.paxList;\n\n case types.RESET_PAX_LIST:\n return state;\n\n default:\n return state;\n }\n};\n\nexport const selectedPaxIdReducer = (\n state = initialState.selectedPaxId,\n action\n) => {\n switch (action.type) {\n case types.SELECTED_PAX_INDEX_CHANGE:\n return action.payload;\n case types.DEAL_RATE_SELECTED: {\n if (\n action.payload.dealSearchResults &&\n action.payload.dealSearchResults.length >\n action.payload.RequestDescriptor + 1\n ) {\n return action.payload.RequestDescriptor + 1;\n } else {\n return action.payload.RequestDescriptor;\n }\n }\n case types.RESET_SELECTED_PAX_INDEX:\n case types.SELECTION_RESET:\n case types.SET_SEARCH_DATA:\n return initialState.selectedPaxId;\n default:\n return state;\n }\n};\n\nexport const singlePaxLoadedReducer = (\n state = initialState.singlePaxLoaded,\n action\n) => {\n switch (action.type) {\n case types.PAX_LOADED: {\n const nextState = action.payload.length == 1;\n return nextState;\n }\n case types.SET_SEARCH_DATA: {\n const nextState = action.payload && action.payload.Pax == 1;\n return nextState;\n }\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/paxReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const checkinDateReducer = (\r\n state = initialState.checkinDate,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CHECKIN_DATE:\r\n return action.payload;\r\n\r\n case types.SET_SEARCH_DATA:\r\n return (\r\n (action.payload && action.payload.CheckIn) || initialState.checkinDate\r\n );\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const checkoutDateReducer = (\r\n state = initialState.checkoutDate,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CHECKOUT_DATE:\r\n return action.payload;\r\n\r\n case types.SET_SEARCH_DATA:\r\n return (\r\n (action.payload && action.payload.CheckOut) || initialState.checkoutDate\r\n );\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/datesReducer.js","import {\r\n SHOW_CART,\r\n HIDE_CART,\r\n TOGGLE_CART_VISIBILITY,\r\n RATE_SELECTED\r\n} from \"../constants/actionTypes\";\r\n\r\nexport const visibleCartReducer = (state = false, action) => {\r\n switch (action.type) {\r\n case SHOW_CART:\r\n case HIDE_CART:\r\n return action.payload;\r\n\r\n case TOGGLE_CART_VISIBILITY:\r\n return !state;\r\n\r\n case RATE_SELECTED: {\r\n let result = false;\r\n if (!action.payload.disableCartSlideOut) {\r\n result = true;\r\n }\r\n return result;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/cartReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialstate from \"./initialState\";\n\nexport default (state = initialstate.isMobileView, action) => {\n switch (action.type) {\n case types.CHANGE_MOBILEVIEW_FLAG:\n return action.payload;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/mobileViewReducer.js","import * as types from \"../constants/actionTypes\";\nimport { LOCATION_CHANGE } from \"react-router-redux\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.contactUsSubmitingStatus, action) => {\n switch (action.type) {\n case types.START_CONTACT_US_REQUEST:\n return {\n ...state,\n loading: true\n };\n case types.CONTACT_US_REQUEST_HAS_FAILED:\n return {\n error: true,\n loading: false,\n succeed: false\n };\n case types.CONTACT_US_REQUEST_HAS_SUCCEED:\n return {\n error: false,\n loading: false,\n succeed: true\n };\n case types.CHANGE_DISPLAY_ROOM:\n case LOCATION_CHANGE:\n return {\n error: false,\n loading: false,\n succeed: false\n };\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/contactUsReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nconst symbols = {\r\n EGP: \"£\",\r\n LBP: \"£\",\r\n CHF: \"CHF\",\r\n JOD: \"JOD\",\r\n SEK: \"kr\",\r\n ZAR: \"R\",\r\n NOK: \"kr\",\r\n DKK: \"kr\",\r\n AUD: \"$\",\r\n CAD: \"$\",\r\n EUR: \"€\",\r\n JPY: \"¥\",\r\n GBP: \"£\",\r\n USD: \"$\",\r\n ILS: \"₪\",\r\n NIS: \"₪\",\r\n PLN: \"zł\"\r\n};\r\n\r\nconst mainCurrencies = [\"ILS\", \"NIS\", \"USD\", \"EUR\"];\r\n\r\nconst getMappedCurrency = (curr, symbol, isMain) => {\r\n const currObj = {\r\n ...curr,\r\n symbol: symbol,\r\n main: isMain\r\n };\r\n if (curr.unit === 0) currObj.unit = 1;\r\n return currObj;\r\n};\r\n\r\nexport const currenciesReducer = (state = initialState.currencies, action) => {\r\n switch (action.type) {\r\n // case types.GET_MOCK_CURRENCIES_SUCCESS:\r\n case types.GET_CURRENCIES_SUCCESS: {\r\n const currenciesList = [...action.payload];\r\n const mappedCurrencies = currenciesList.reduce((mapped, current) => {\r\n if (typeof current === \"undefined\") return mapped;\r\n const code = current.currencyCode;\r\n let symbol = symbols[code];\r\n if (symbol == null) symbol = code;\r\n const isMain = mainCurrencies.some(mc => mc === code);\r\n mapped.push(getMappedCurrency(current, symbol, isMain));\r\n return mapped;\r\n }, []);\r\n const ilsCurrency = {\r\n name: \"NIS\", //inside Price Display component, we consider NIS as ILS as well\r\n unit: \"1\",\r\n currencyCode: \"NIS\",\r\n country: \"Israel\",\r\n rate: \"1\"\r\n };\r\n mappedCurrencies.unshift(\r\n getMappedCurrency(ilsCurrency, symbols[ilsCurrency.currencyCode], true)\r\n );\r\n return mappedCurrencies;\r\n }\r\n case types.GET_CURRENCIES_FAILED:\r\n return initialState.currencies;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const selectedCurrencyReducer = (\r\n state = initialState.selectedCurrency,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.SET_CURRENCY:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/currenciesReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const addonsReducer = (state = initialState.addons, action) => {\r\n switch (action.type) {\r\n case types.GET_ADDONS_SUCESS:\r\n return action.payload;\r\n\r\n case types.GET_ADDONS_FAIL:\r\n return initialState.addons;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const addonImagesLookupTableReducer = (\r\n state = initialState.addonImagesLookupTable,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_ADDONS_IMAGES_SUCESS:\r\n return action.payload;\r\n\r\n case types.GET_ADDONS_FAIL:\r\n return initialState.addonImagesLookupTable;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst selectedAddonReducer = (state = 0, action) => {\r\n switch (action.type) {\r\n case types.ADDON_ADDED:\r\n return state + 1;\r\n\r\n case types.ADDON_REMOVED:\r\n return state > 0 ? state - 1 : 0;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst selectedAddonsReducer = (state = {}, action) => {\r\n switch (action.type) {\r\n case types.ADDON_ADDED:\r\n case types.ADDON_REMOVED: {\r\n const currentValue = state[action.payload.addonCode];\r\n return {\r\n ...state,\r\n [action.payload.addonCode]: selectedAddonReducer(currentValue, action)\r\n };\r\n }\r\n case types.ADDONS_CANCELED:\r\n return {};\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const selectedAddonsGroupReducer = (\r\n state = initialState.selectedAddonsGroup,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.ADDON_ADDED:\r\n case types.ADDON_REMOVED:\r\n case types.ADDONS_CANCELED: {\r\n const nextstate = {\r\n ...state,\r\n [action.payload.groupId]: selectedAddonsReducer(\r\n state[action.payload.groupId],\r\n action\r\n )\r\n };\r\n return nextstate;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const addonsForOrderReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case types.SET_ADDONS_FOR_ORDER:\r\n return action.payload || state;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const addonsCurosselRoomNumberReducer = (state = 0, action) => {\r\n switch (action.type) {\r\n case types.SET_ADDONS_CUROSSEL_ROOM_NUMBER:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/addonsReducer.js","import {\r\n UPDATE_PROMO_CODE,\r\n SET_SEARCH_DATA,\r\n PROMO_CODE_VALIDATION,\r\n GET_ROOM_RESULTS_FAIL\r\n} from \"../constants/actionTypes\";\r\nimport initialstate from \"./initialState\";\r\n\r\nexport const promoCodeReducer = (state = initialstate.promoCode, action) => {\r\n switch (action.type) {\r\n case UPDATE_PROMO_CODE:\r\n return action.payload;\r\n\r\n case SET_SEARCH_DATA:\r\n return (\r\n (action.payload && action.payload.promoCode) || initialstate.promoCode\r\n );\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const isPromoCodeValidReducer = (\r\n state = initialstate.isPromoCodeValid,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case PROMO_CODE_VALIDATION:\r\n return action.payload;\r\n\r\n case GET_ROOM_RESULTS_FAIL:\r\n return state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/promoCodeReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const dealsReducer = (state = initialState.deals, action) => {\r\n switch (action.type) {\r\n case types.GET_DEALS_SUCCESS:\r\n return action.payload;\r\n\r\n case types.GET_DEALS_FAIL:\r\n return initialState.deals;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const dealDetailsReducer = (state = initialState.deal, action) => {\r\n switch (action.type) {\r\n case types.GET_DEAL_DETAILS_SUCCESS:\r\n return action.payload;\r\n\r\n case types.GET_DEAL_DETAILS_FAIL:\r\n return initialState.deal;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const dealSearchResultsReducer = (\r\n state = initialState.dealSearchResults,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_DEAL_SEARCH_SUCCESS:\r\n return action.payload;\r\n\r\n case types.GET_DEAL_SEARCH_FAIL:\r\n return initialState.dealSearchResults;\r\n\r\n case types.DEAL_RATE_SELECTED: {\r\n const roomType = action.payload && action.payload.roomId;\r\n const updatedDeals =\r\n action.payload &&\r\n action.payload.dealSearchResults.map(deals => {\r\n const nextDeals = deals.map(deal => {\r\n if (deal && deal.roomType == roomType) {\r\n return {\r\n ...deal,\r\n availability: deal.availability - 1,\r\n rate: {\r\n ...deal.rate,\r\n availability: deal.rate.availability - 1\r\n }\r\n };\r\n } else return deal;\r\n });\r\n return nextDeals;\r\n });\r\n return updatedDeals;\r\n }\r\n\r\n case types.DEAL_RATE_UNSELECTED: {\r\n const roomType = action.payload && action.payload.roomId;\r\n const updatedDeals =\r\n action.payload &&\r\n action.payload.dealSearchResults.map(deals => {\r\n const nextDeals = deals.map(deal => {\r\n if (deal && deal.roomType == roomType) {\r\n return {\r\n ...deal,\r\n availableRooms: deal.availableRooms - 1,\r\n rate: {\r\n ...deal.rate,\r\n availability: deal.rate.availability - 1\r\n }\r\n };\r\n } else return deal;\r\n });\r\n return nextDeals;\r\n });\r\n return updatedDeals;\r\n }\r\n\r\n case types.GET_DEALS_SUCCESS: {\r\n return [];\r\n }\r\n\r\n case types.GET_DEAL_SEARCH_RESET:\r\n return initialState.dealSearchResults;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const setDealMode = (state = initialState.isDealMode, action) => {\r\n switch (action.type) {\r\n case types.GET_ROOM_RESULTS_DEALS_REQUEST:\r\n case types.SET_SEARCH_DATA:\r\n return true;\r\n case types.RESET_ROOM_RESULTS_DEALS_REQUEST:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const hasDealResultsReducer = (\r\n state = initialState.hasDealResults,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_DEAL_DETAILS_SUCCESS:\r\n case types.GET_DEALS_SUCCESS:\r\n return true;\r\n case types.GET_DEAL_DETAILS_FAIL:\r\n case types.GET_DEALS_FAIL:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/dealsReducer.js","import {\r\n OPEN_SEARCHBOX_MODAL,\r\n CLOSE_SEARCHBOX_MODAL\r\n} from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const searchBoxModalOpenReducer = (\r\n state = initialState.isSearchboxModalOpen,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case OPEN_SEARCHBOX_MODAL:\r\n return true;\r\n case CLOSE_SEARCHBOX_MODAL:\r\n return false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/generalReducers.js","import { IS_IE } from \"../constants/actionTypes\";\r\n\r\nexport const isIEReducer = (state = false, action) => {\r\n switch (action.type) {\r\n case IS_IE:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/browserReducer.js","import { IS_IOS } from \"../constants/actionTypes\";\r\n\r\nexport const isIosReducer = (state = false, action) => {\r\n switch (action.type) {\r\n case IS_IOS:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/OperationSystemReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.GET_DEALS_REQUEST:\n case types.GET_DEAL_DETAIL_REQUEST:\n return true;\n\n case types.GET_DEALS_FAIL:\n case types.GET_DEALS_SUCCESS:\n case types.GET_DEAL_DETAILS_SUCCESS:\n case types.GET_DEAL_DETAILS_FAIL:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isFetchingDealsResultsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.GET_DEAL_SEARCH_REQUEST:\n return true;\n\n case types.GET_DEAL_SEARCH_SUCCESS:\n case types.GET_DEAL_SEARCH_FAIL:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isFetchingDealsSearchResultsReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.DEAL_ANIMATION_START:\n return true;\n\n case types.DEAL_ANIMATION_END:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isDealAnimationActive.js","import * as types from \"../constants/actionTypes\";\nimport initialstate from \"./initialState\";\n\nexport default (state = initialstate.searchDataTimestamp, action) => {\n switch (action.type) {\n case types.SEARCH_DATA_TIMESTAMP:\n return action.payload;\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/searchDataTimestampReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nconst optionTypeReducer = (state, action) => {\r\n switch (action.type) {\r\n case types.SELECTED_HOTEL_ID:\r\n return \"Hotel\";\r\n\r\n case types.SELECTED_REGION_ID:\r\n return \"Region\";\r\n\r\n case types.SELECTED_CITY_CODE:\r\n return \"City\";\r\n\r\n case types.SET_SEARCH_DATA:\r\n return (\r\n (action.payload &&\r\n action.payload.SelectedOption &&\r\n action.payload.SelectedOption.optionType) ||\r\n state\r\n );\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default (state = initialState.selectedOption, action) => {\r\n switch (action.type) {\r\n case types.UPDATE_SELECTED_OPTION:\r\n return action.payload;\r\n\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.selectedOption || state;\r\n\r\n case types.SELECTED_HOTEL_ID:\r\n case types.SELECTED_REGION_ID:\r\n case types.SELECTED_CITY_CODE:\r\n return {\r\n value: action.payload || state.value,\r\n optionType: action.payload\r\n ? optionTypeReducer(state, action)\r\n : state.optionType\r\n };\r\n\r\n case types.SET_SEARCH_DATA:\r\n return (action.payload && action.payload.SelectedOption) || state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/selectedOptionReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nconst selectedRoomCategoryReducer = (\r\n state = initialState.selectedRoomCategory,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.UPDATE_SELECTED_ROOM_CATEGORY:\r\n return action.payload;\r\n\r\n case types.RESET_SELECTED_ROOM_CATEGORY:\r\n return initialState.selectedRoomCategory;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default selectedRoomCategoryReducer;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/selectedRoomCategoryReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const countriesReducer = (state = initialState.countries, action) => {\r\n switch (action.type) {\r\n case types.GET_COUNTRIES_SUCCESS: {\r\n let result =\r\n action.payload &&\r\n action.payload.map(c => {\r\n let country = {};\r\n country.key = c.countryCode;\r\n country.value = c.countryCode;\r\n country.label = c.countryName;\r\n return country;\r\n });\r\n return result;\r\n }\r\n case types.GET_COUNTRIES_FAILED:\r\n return initialState.countries;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const selectedCountryReducer = (\r\n state = initialState.selectedCountry,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.SET_COUNTRY:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/countriesReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialstate from \"./initialState\";\r\n\r\nexport const registrationData = (\r\n state = initialstate.registrationData,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.SET_REGISTRATION_DATA:\r\n return action.payload;\r\n case types.GET_CLUB_LOGGED_SUCCESS:\r\n case types.CLUB_USER_LOGIN:\r\n return {\r\n ...state\r\n };\r\n case types.GET_CLUB_LOGGED_FAIL:\r\n case types.CLUB_USER_LOGOUT:\r\n return state;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const totalAmountToPay = (state = null, action) => {\r\n switch (action.type) {\r\n case types.SET_TOTAL_AMOUNT_TO_PAY:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const totalClubAmountToPay = (state = null, action) => {\r\n switch (action.type) {\r\n case types.SET_TOTAL_CLUB_AMOUNT_TO_PAY:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const orderCurrency = (state = {}, action) => {\r\n switch (action.type) {\r\n case types.SET_ORDER_CURRENCY:\r\n return action.payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/registrationReducer.js","import * as types from \"../constants/actionTypes\";\nimport { LOCATION_CHANGE } from \"react-router-redux\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.registrationSubmitingStatus, action) => {\n switch (action.type) {\n case types.SET_REGISTRATION_DATA:\n return {\n error: false,\n loading: false,\n succeed: true\n };\n //todo check when should reset model\n case LOCATION_CHANGE:\n return {\n error: false,\n loading: false,\n succeed: false\n };\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/registrationSubmitingStatus.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.START_SETTING_RESERVATION:\n return true;\n\n case types.SET_RESERVATION_SUCCEED:\n case types.SET_RESERVATION_FAILED:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isFetchingConfirmationData.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport const payment = (state = initialState.payment, action) => {\n switch (action.type) {\n case types.GET_PAYMENT_URL_SUCCEED: {\n return action.payload;\n }\n case types.GET_PAYMENT_URL_FAILED: {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const paymentUrlRequestStatus = (state = true, action) => {\n switch (action.type) {\n case types.GET_PAYMENT_URL_SUCCEED: {\n return true;\n }\n case types.GET_PAYMENT_URL_FAILED: {\n return false;\n }\n default:\n return state;\n }\n};\n\nexport const reservationId = (state = null, action) => {\n switch (action.type) {\n case types.SET_RESERVATION_SUCCEED: {\n return action.payload.MasterID;\n }\n case types.SET_RESERVATION_FAILED: {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const redirectURL = (state = null, action) => {\n switch (action.type) {\n case types.SET_RESERVATION_SUCCEED: {\n return action.payload.RedirectionURL;\n }\n case types.SET_RESERVATION_FAILED: {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const payPalUrl = (state = \"\", action) => {\n switch (action.type) {\n case types.PAYPAL_PROXY_SUCCEED: {\n return action.payload && action.payload.URL;\n }\n case types.PAYPAL_PROXY_FAILED: {\n return state;\n }\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/paymentReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.paymentFinished, action) => {\n switch (action.type) {\n case types.GET_PAYMENT_FINISHED: {\n return true;\n }\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/paymentFinishedReducer.js","import { SET_ORDER_SUMMARY } from \"../constants/actionTypes\";\r\n\r\nexport default (state = [], action) => {\r\n switch (action.type) {\r\n case SET_ORDER_SUMMARY:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/orderSummaryReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialState from \"./initialState\";\n\nexport default (state = initialState.isGlobalFetch, action) => {\n switch (action.type) {\n case types.START_RECEIVING_PAYMENT_URL:\n case types.START_PAYPAL_PROXY:\n return true;\n\n case types.GET_PAYMENT_URL_SUCCEED:\n case types.GET_PAYMENT_URL_FAILED:\n case types.PAYPAL_PROXY_SUCCEED:\n case types.PAYPAL_PROXY_FAILED:\n return false;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/isFetchingPaymentData.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const activeBreadCrumbReducer = (\r\n state = initialState.activeBreadCrumb,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.SET_ACTIVE_BREAD_CRUMB:\r\n return action.payload || state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/breadCrumbsReducer.js","import { THUMBNAIL_DISPLAY } from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const thumbnailDisplayReducer = (\r\n state = initialState.thumbanilDisplay,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case THUMBNAIL_DISPLAY:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/thumbnailDisplayReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const domainUrlReducer = (state = null, action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload && action.payload.domainUrl;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const enableAddonsPopUpReducer = (\r\n state = initialState.enableAddonsPopUp,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload && action.payload.enableAddonsPopUp != null\r\n ? action.payload.enableAddonsPopUp\r\n : state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const enableAddonsRegistrationReducer = (\r\n state = initialState.enableAddonsRegistration,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload && action.payload.enableAddonsRegistration != null\r\n ? action.payload.enableAddonsRegistration\r\n : state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const showCartSubmitBtnReducer = (state = false, action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload && action.payload.showCartSubmitBtn != null\r\n ? action.payload.showCartSubmitBtn\r\n : false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const chainHotelsReducer = (\r\n state = initialState.chainHotels,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload && action.payload.chainHotels != null\r\n ? action.payload.chainHotels\r\n : initialState.chainHotels;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const lastMinuteDaysDealReducer = (\r\n state = initialState.lastMinuteDaysDeal,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload && action.payload.lastMinuteDaysDeal != null\r\n ? action.payload.lastMinuteDaysDeal\r\n : state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const showHotDealReducer = (\r\n state = initialState.showHotDeal,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n if (action.payload && action.payload.showHotDeal != null) {\r\n return action.payload.showHotDeal;\r\n } else {\r\n return state;\r\n }\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const discountClubConfigReducer = (\r\n state = initialState.discountClubConfig,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n const { discountClubConfig } = action.payload;\r\n return discountClubConfig || initialState.discountClubConfig;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const hotelDataReducer = (state = initialState.hotelData, action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.hotelData;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const sortRatesByDefaultReducer = (state = false, action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.sortRatesByLowestPrice;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const showContactDetailsInRegistrationReducer = (\r\n state = initialState.showContactDetailsInRegistration,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload &&\r\n action.payload.showContactDetailsInRegistration != null\r\n ? action.payload.showContactDetailsInRegistration\r\n : state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const registrationModelReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n const registrationModel = action.payload.registrationModel;\r\n const filteredRegistrationModel = [];\r\n for (const key in registrationModel) {\r\n if (registrationModel[key].visible) {\r\n filteredRegistrationModel.push({\r\n ...registrationModel[key],\r\n name: key\r\n });\r\n }\r\n }\r\n return filteredRegistrationModel;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const registrationModelContactReducer = (state = [], action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n const registrationModel = action.payload.registrationModelContact;\r\n const filteredRegistrationModel = [];\r\n for (const key in registrationModel) {\r\n if (registrationModel[key].visible) {\r\n filteredRegistrationModel.push({\r\n ...registrationModel[key],\r\n name: key\r\n });\r\n }\r\n }\r\n return filteredRegistrationModel;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const showThumbnailDisplayReducer = (\r\n state = initialState.ShowThumbnailDisplay,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n const { ShowThumbnailDisplay } = action.payload;\r\n return ShowThumbnailDisplay != null\r\n ? ShowThumbnailDisplay\r\n : initialState.ShowThumbnailDisplay;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const numRoomsToSwitchToThumnailDisplayReducer = (\r\n state = initialState.numRoomsToSwitchToThumnailDisplay,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n const { numRoomsToSwitchToThumnailDisplay } = action.payload;\r\n return (\r\n numRoomsToSwitchToThumnailDisplay ||\r\n initialState.numRoomsToSwitchToThumnailDisplay\r\n );\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const serverConfigReducer = (state = initialState.config, action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return {\r\n ...state,\r\n received: true\r\n };\r\n }\r\n case types.CONFIG_FAIL: {\r\n return {\r\n ...state,\r\n received: false\r\n };\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const showAvailabilityReducer = (\r\n state = initialState.showAvailability,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.showAvailability;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const lowAvailabilityCountReducer = (\r\n state = initialState.lowAvailabilityCount,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.lowAvailabilityCount;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const ShowCancellationPolicyReducer = (\r\n state = initialState.ShowCancellationPolicy,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.ShowCancellationPolicy;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const titlesReducer = (state = initialState.titles, action) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.titles;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const termsAndConditionsReducer = (\r\n state = initialState.termsAndConditions,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return (\r\n action.payload.termsAndConditions || initialState.termsAndConditions\r\n );\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const singlePaxCartSkippingReducer = (\r\n state = initialState.enableSinglePaxCartSkipping,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.enableSinglePaxCartSkipping;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const propertyTypeReducer = (\r\n state = initialState.propertyType,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.propertyType;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const propertyTypePluralReducer = (\r\n state = initialState.propertyTypePlural,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.propertyTypePlural;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const allwayShowInRoomUnderRoomDisplayReducer = (\r\n state = initialState.allwayShowInRoomUnderRoomDisplay,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.allwayShowInRoomUnderRoomDisplay;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const bookingRatesReducer = (\r\n state = initialState.bookingRates,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.bookingRates;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const isNoPaymentReducer = (\r\n state = initialState.isNoPayment,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload && action.payload.isNoPayment != null\r\n ? action.payload.isNoPayment\r\n : false;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const bookingRatesEnabledReducer = (\r\n state = initialState.bookingRatesEnabled,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS:\r\n return action.payload.bookingRatesEnabled;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const ShowViewExpandedByDefaultReducer = (\r\n state = initialState.ShowViewExpandedByDefault,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload.ShowViewExpandedByDefault;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const DisplayPriceWithoutTaxesReducer = (\r\n state = initialState.displayPriceWithoutTaxes,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload.displayPriceWithoutTaxes;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const TaxesPrecentageReducer = (\r\n state = initialState.taxesPrecentage,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload.taxesPrecentage;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const showPricePerNightThumbReducer = (\r\n state = initialState.showPricePerNightThumb,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload.showPricePerNightThumb;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const excludedTaxAtHotelReducer = (\r\n state = initialState.excludedTaxAtHotel,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.CONFIG_SUCCESS: {\r\n return action.payload.excludedTaxAtHotel;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/configReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const placeHoldersReducer = (\r\n state = initialState.placeHolder,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_PLACE_HOLDERS_SUCCESS:\r\n return state.concat(action.payload);\r\n\r\n case types.GET_PLACE_HOLDERS_FAILED:\r\n return state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const analyticsPlaceHoldersReducer = (\r\n state = initialState.analyticsPlaceHolders,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_ANALYTICS_PLACE_HOLDERS_SUCCESS: {\r\n if (action.payload && action.payload.data) {\r\n let headerAnalytics = action.payload.data.find(\r\n data => data.section == \"Header\"\r\n );\r\n let bodyAnalytics = action.payload.data.find(\r\n data => data.section == \"Body\"\r\n );\r\n appendAnalyticsToHeader(headerAnalytics && headerAnalytics.content);\r\n appendAnalyticsToBody(bodyAnalytics && bodyAnalytics.content);\r\n }\r\n return {\r\n phase: action.payload.phase,\r\n code: action.payload.content\r\n };\r\n }\r\n\r\n case types.GET_ANALYTICS_PLACE_HOLDERS_FAILED:\r\n return state;\r\n\r\n case types.CLEAR_ANALYTICS_PLACE_HOLDERS: {\r\n return {};\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nasync function appendAnalyticsToBody(htmlCode) {\r\n //Habdle body analytics\r\n const wrapper = document.getElementById(`page-analytics-wrapper-Body`);\r\n if (!wrapper) return;\r\n wrapper.innerHTML = \"\";\r\n let doc = document.implementation.createHTMLDocument();\r\n doc.body.innerHTML = htmlCode;\r\n let allScriptsTag = doc.getElementsByTagName(\"script\");\r\n\r\n Array.from(allScriptsTag).forEach(s => {\r\n let scriptElem = document.createElement(\"script\");\r\n\r\n const scriptBody = document.createTextNode(s.innerText);\r\n if (s.src) {\r\n scriptElem.src = s.src;\r\n }\r\n if (s.async) {\r\n scriptElem.async = s.async;\r\n }\r\n scriptElem.appendChild(scriptBody);\r\n\r\n wrapper && wrapper.appendChild(scriptElem);\r\n });\r\n}\r\n\r\nasync function appendAnalyticsToHeader(htmlCode) {\r\n if (htmlCode != \"\") {\r\n const doc = new DOMParser().parseFromString(htmlCode, \"text/html\");\r\n const elementToAppend = doc.head.firstElementChild;\r\n document.head.appendChild(elementToAppend);\r\n }\r\n}\r\n\r\n// const removeAnalyticsFromDOM = () => {\r\n// const wrapper = document.getElementById(\"page-analytics-wrapper\");\r\n// if (!wrapper) return;\r\n// wrapper.innerHTML = \"\";\r\n// };\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/placeHoldersReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const expandbleViewReducer = (\r\n state = initialState.expandbleView,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.TOGGLE_EXPANDBLE_VIEW:\r\n return !state;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/expandbleViewReducer.js","import * as types from \"../constants/actionTypes\";\r\nimport initialState from \"./initialState\";\r\n\r\nexport const roomFilterReducer = (state = initialState.roomFilters, action) => {\r\n switch (action.type) {\r\n case types.GET_ROOM_FILTERS_SUCCESS:\r\n return action.payload;\r\n case types.RESET_ROOM_FILTERS_SUCCESS:\r\n return [];\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const planFilterReducer = (state = initialState.planFilters, action) => {\r\n switch (action.type) {\r\n case types.GET_PLAN_FILTERS_SUCCESS:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const maxPriceRangeFilterReducer = (\r\n state = initialState.maxPriceRangeFilter,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_MAX_PRICE_FILTERS_SUCCESS:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const minPriceRangeFilterReducer = (\r\n state = initialState.minPriceRangeFilter,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.GET_MIN_PRICE_FILTERS_SUCCESS:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const hotelFilterReducer = (\r\n state = initialState.hotelFilter,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.SET_HOTEL_FILTERS_SUCCESS:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const regionFilterReducer = (\r\n state = initialState.regionFilter,\r\n action\r\n) => {\r\n switch (action.type) {\r\n case types.SET_REGION_FILTERS_SUCCESS:\r\n return action.payload;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/filtersReducer.js","import * as types from \"../constants/actionTypes\";\nimport initialstate from \"./initialState\";\n\nexport default (state = initialstate.userComments, action) => {\n switch (action.type) {\n case types.SET_USER_COMMENTS:\n return action.payload;\n\n default:\n return state;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/reducers/userCommentsReducer.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RatesTable_with-ellipsis---sb\",\"withEllipsis\":\"RatesTable_with-ellipsis---sb\",\"show-all-rates-btn\":\"RatesTable_show-all-rates-btn---sb\",\"showAllRatesBtn\":\"RatesTable_show-all-rates-btn---sb\",\"rates-group-row\":\"RatesTable_rates-group-row---sb\",\"ratesGroupRow\":\"RatesTable_rates-group-row---sb\",\"hide\":\"RatesTable_hide---sb\",\"rate-wrapper\":\"RatesTable_rate-wrapper---sb\",\"rateWrapper\":\"RatesTable_rate-wrapper---sb\",\"rates-data-wrapper\":\"RatesTable_rates-data-wrapper---sb\",\"ratesDataWrapper\":\"RatesTable_rates-data-wrapper---sb\",\"rate-data\":\"RatesTable_rate-data---sb\",\"rateData\":\"RatesTable_rate-data---sb\",\"rate-name\":\"RatesTable_rate-name---sb\",\"rateName\":\"RatesTable_rate-name---sb\",\"rate-name-title\":\"RatesTable_rate-name-title---sb\",\"rateNameTitle\":\"RatesTable_rate-name-title---sb\",\"deal\":\"RatesTable_deal---sb\",\"rtl\":\"RatesTable_rtl---sb\",\"ribbon-wrapper-text\":\"RatesTable_ribbon-wrapper-text---sb\",\"ribbonWrapperText\":\"RatesTable_ribbon-wrapper-text---sb\",\"rate-header\":\"RatesTable_rate-header---sb\",\"rateHeader\":\"RatesTable_rate-header---sb\",\"view-gallery\":\"RatesTable_view-gallery---sb\",\"viewGallery\":\"RatesTable_view-gallery---sb\",\"rate-read-more\":\"RatesTable_rate-read-more---sb\",\"rateReadMore\":\"RatesTable_rate-read-more---sb\",\"plans-wrapper\":\"RatesTable_plans-wrapper---sb\",\"plansWrapper\":\"RatesTable_plans-wrapper---sb\",\"ribbon\":\"RatesTable_ribbon---sb\",\"ribbon-ios-is-shit\":\"RatesTable_ribbon-ios-is-shit---sb\",\"ribbonIosIsShit\":\"RatesTable_ribbon-ios-is-shit---sb\",\"ribbon-wrapper\":\"RatesTable_ribbon-wrapper---sb\",\"ribbonWrapper\":\"RatesTable_ribbon-wrapper---sb\",\"ribbon-wrapper-rtl\":\"RatesTable_ribbon-wrapper-rtl---sb\",\"ribbonWrapperRtl\":\"RatesTable_ribbon-wrapper-rtl---sb\",\"ribbon-wrapper-rtl-mobile-view\":\"RatesTable_ribbon-wrapper-rtl-mobile-view---sb\",\"ribbonWrapperRtlMobileView\":\"RatesTable_ribbon-wrapper-rtl-mobile-view---sb\",\"ribbon-wrapper-mobile-view\":\"RatesTable_ribbon-wrapper-mobile-view---sb\",\"ribbonWrapperMobileView\":\"RatesTable_ribbon-wrapper-mobile-view---sb\",\"appeared\":\"RatesTable_appeared---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RatesTable/styles.less\n// module id = 1590\n// module chunks = 0","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport { RawHTML, Button } from \"../common\";\n//import Dotdotdot from \"react-dotdotdot\";\nimport styles from \"./styles.less\";\nimport PriceDisplay from \"../../containers/PriceDisplay\";\n\nclass RateTableRow extends Component {\n onClick = () => {\n const {\n onClick,\n rateId,\n priceCode,\n planCode,\n allocationCode,\n roomId\n } = this.props;\n\n onClick({ rateId, priceCode, planCode, allocationCode, roomId });\n };\n\n onReadeMoreClick = e => {\n e.preventDefault();\n e.stopPropagation(); // so we won't select the rate (parent element)\n const { onReadeMoreClick, rateId, roomId } = this.props;\n onReadeMoreClick({ rateId, roomId });\n };\n\n renderPriceBox = (\n isClub,\n basePrice,\n currentPrice,\n currentPriceclub,\n isDeal\n ) => {\n const {\n titles,\n clubPercentageDiscount,\n currencyCode,\n currency,\n displayPriceWithoutTaxes\n } = this.props;\n const basePriceIsLower = basePrice > currentPrice && basePrice > 0;\n const clubTitle = `${clubPercentageDiscount}% ${titles.ClubDiscount}`;\n const priceBoxTitle = isClub\n ? clubTitle\n : isDeal\n ? titles.DealPrice\n : basePriceIsLower\n ? titles.WebsiteDoscount\n : titles.OnlineBooking;\n return (\n \n
\n {priceBoxTitle}\n
\n
\n {basePriceIsLower &&\n !isClub &&\n !displayPriceWithoutTaxes &&\n !displayPriceWithoutTaxes && (\n
\n \n {convertedPrice => convertedPrice}\n \n \n )}\n {isClub && (\n
\n \n {convertedPrice => convertedPrice}\n \n \n )}\n
\n \n {convertedPrice => convertedPrice}\n \n \n
\n
\n );\n };\n\n renderRate = () => {\n const {\n planName,\n price,\n basePrice,\n simpleClubTotalPrice,\n clubPercentageDiscount,\n titles,\n clubUserLoggedIn,\n isClubActive,\n isDeal\n } = this.props;\n const clubPrice =\n simpleClubTotalPrice || (price * (100 - clubPercentageDiscount)) / 100;\n return (\n \n
\n {planName &&
}\n
{titles.ForMoreDetails}
\n
\n
\n
\n {!clubUserLoggedIn &&\n this.renderPriceBox(false, basePrice, price, null, isDeal)}\n {isClubActive &&\n this.renderPriceBox(true, basePrice, price, clubPrice, isDeal)}\n
\n \n
\n
\n
\n
\n );\n };\n\n render() {\n return {this.renderRate()};\n }\n}\n\nRateTableRow.propTypes = {\n titles: PropTypes.object,\n rateId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n roomId: PropTypes.string,\n planName: PropTypes.string,\n price: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n basePrice: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n priceCode: PropTypes.string,\n planCode: PropTypes.string,\n simpleClubTotalPrice: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n allocationCode: PropTypes.string,\n onClick: PropTypes.func,\n onReadeMoreClick: PropTypes.func,\n isClubActive: PropTypes.bool,\n clubUserLoggedIn: PropTypes.bool,\n currencyCode: PropTypes.string,\n currency: PropTypes.string,\n isDeal: PropTypes.bool,\n clubPercentageDiscount: PropTypes.number,\n displayPriceWithoutTaxes: PropTypes.bool\n};\n\nRateTableRow.defaultProps = {\n showAvailability: true,\n lowAvailabilityCount: 4,\n titles: {\n ReadMore: \"Read More...\"\n }\n};\n\nexport default RateTableRow;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RateTableRow/RateTableRow.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RateTableRow_with-ellipsis---sb\",\"withEllipsis\":\"RateTableRow_with-ellipsis---sb\",\"plans-data\":\"RateTableRow_plans-data---sb\",\"plansData\":\"RateTableRow_plans-data---sb\",\"plan-name\":\"RateTableRow_plan-name---sb\",\"planName\":\"RateTableRow_plan-name---sb\",\"more-details\":\"RateTableRow_more-details---sb\",\"moreDetails\":\"RateTableRow_more-details---sb\",\"book-section\":\"RateTableRow_book-section---sb\",\"bookSection\":\"RateTableRow_book-section---sb\",\"plan-prices-book-wrapper\":\"RateTableRow_plan-prices-book-wrapper---sb\",\"planPricesBookWrapper\":\"RateTableRow_plan-prices-book-wrapper---sb\",\"prices-wrapper\":\"RateTableRow_prices-wrapper---sb\",\"pricesWrapper\":\"RateTableRow_prices-wrapper---sb\",\"base-price\":\"RateTableRow_base-price---sb\",\"basePrice\":\"RateTableRow_base-price---sb\",\"total-price\":\"RateTableRow_total-price---sb\",\"totalPrice\":\"RateTableRow_total-price---sb\",\"club-wrapper\":\"RateTableRow_club-wrapper---sb\",\"clubWrapper\":\"RateTableRow_club-wrapper---sb\",\"club-join\":\"RateTableRow_club-join---sb\",\"clubJoin\":\"RateTableRow_club-join---sb\",\"rate-order-button-wrapper\":\"RateTableRow_rate-order-button-wrapper---sb\",\"rateOrderButtonWrapper\":\"RateTableRow_rate-order-button-wrapper---sb\",\"price-box-wrapper\":\"RateTableRow_price-box-wrapper---sb\",\"priceBoxWrapper\":\"RateTableRow_price-box-wrapper---sb\",\"price-box-title\":\"RateTableRow_price-box-title---sb\",\"priceBoxTitle\":\"RateTableRow_price-box-title---sb\",\"price-box-title-club\":\"RateTableRow_price-box-title-club---sb\",\"priceBoxTitleClub\":\"RateTableRow_price-box-title-club---sb\",\"price-box-data-wrapper\":\"RateTableRow_price-box-data-wrapper---sb\",\"priceBoxDataWrapper\":\"RateTableRow_price-box-data-wrapper---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RateTableRow/styles.less\n// module id = 1592\n// module chunks = 0","export { default } from \"./RoomboxDetailsHeader\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomboxDetailsHeader/index.js","import React, { Component } from \"react\";\r\nimport { PropTypes } from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport Only from \"react-only-when\";\r\nimport { Amenities } from \"../common\";\r\nimport styles from \"./styles.less\";\r\nimport PriceDisplay from \"../../containers/PriceDisplay\";\r\n\r\nclass RoomboxDetailsHeader extends Component {\r\n renderPrice = room => {\r\n return (\r\n \r\n
\r\n {convertedPrice => `${convertedPrice}`}\r\n \r\n
\r\n );\r\n };\r\n\r\n onRoomDetailsClick = () => {\r\n const { room, onRoomDetailsClick } = this.props;\r\n onRoomDetailsClick(room.id);\r\n };\r\n\r\n renderHeaderShowContactUsBtn = () => {\r\n const { titles, onShowContactUsForm } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n\r\n renderAmenities = () => {\r\n const { amenities, isRtl, isMobileView } = this.props;\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n mobileHeader = () => {\r\n const { titles, room } = this.props;\r\n return (\r\n \r\n {room.name}
\r\n \r\n {titles.MoreDetails}\r\n
\r\n \r\n );\r\n };\r\n\r\n desktopHeader = () => {\r\n const { titles, room, onShowRatesClick, ratesGroupVisible } = this.props;\r\n return (\r\n \r\n \r\n
\r\n
\r\n
{room.name}
\r\n
\r\n {titles.MoreDetails}\r\n
\r\n
\r\n
\r\n
\r\n {titles.StartingFrom}\r\n \r\n {this.renderPrice(room)}\r\n \r\n
\r\n
\r\n
\r\n {!ratesGroupVisible && (\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { room, className, showFullHeaderDetails, isMobileView } = this.props;\r\n const isRequestedRoom = room.requestedRoom;\r\n return (\r\n \r\n \r\n {isMobileView ? this.mobileHeader() : this.desktopHeader()}\r\n \r\n \r\n \r\n \r\n \r\n {this.renderHeaderShowContactUsBtn()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nRoomboxDetailsHeader.propTypes = {\r\n isRtl: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n titles: PropTypes.object,\r\n room: PropTypes.object,\r\n amenities: PropTypes.array,\r\n className: PropTypes.string,\r\n showFullHeaderDetails: PropTypes.bool,\r\n onRoomDetailsClick: PropTypes.func,\r\n onShowRatesClick: PropTypes.func,\r\n onShowContactUsForm: PropTypes.func,\r\n ratesGroupVisible: PropTypes.bool\r\n};\r\n\r\nexport default RoomboxDetailsHeader;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomboxDetailsHeader/RoomboxDetailsHeader.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RoomboxDetailsHeader_with-ellipsis---sb\",\"withEllipsis\":\"RoomboxDetailsHeader_with-ellipsis---sb\",\"tight\":\"RoomboxDetailsHeader_tight---sb\",\"roombox-details-header\":\"RoomboxDetailsHeader_roombox-details-header---sb\",\"roomboxDetailsHeader\":\"RoomboxDetailsHeader_roombox-details-header---sb\",\"btn-group\":\"RoomboxDetailsHeader_btn-group---sb\",\"btnGroup\":\"RoomboxDetailsHeader_btn-group---sb\",\"rtl\":\"RoomboxDetailsHeader_rtl---sb\",\"action-btn\":\"RoomboxDetailsHeader_action-btn---sb\",\"actionBtn\":\"RoomboxDetailsHeader_action-btn---sb\",\"defaultColor\":\"RoomboxDetailsHeader_defaultColor---sb\",\"invertedColor\":\"RoomboxDetailsHeader_invertedColor---sb\",\"header-main-content\":\"RoomboxDetailsHeader_header-main-content---sb\",\"headerMainContent\":\"RoomboxDetailsHeader_header-main-content---sb\",\"room-name-header\":\"RoomboxDetailsHeader_room-name-header---sb\",\"roomNameHeader\":\"RoomboxDetailsHeader_room-name-header---sb\",\"info-btn\":\"RoomboxDetailsHeader_info-btn---sb\",\"infoBtn\":\"RoomboxDetailsHeader_info-btn---sb\",\"header-main-desktop-content\":\"RoomboxDetailsHeader_header-main-desktop-content---sb\",\"headerMainDesktopContent\":\"RoomboxDetailsHeader_header-main-desktop-content---sb\",\"amenities\":\"RoomboxDetailsHeader_amenities---sb\",\"side-header\":\"RoomboxDetailsHeader_side-header---sb\",\"sideHeader\":\"RoomboxDetailsHeader_side-header---sb\",\"scroll-to-rates-btn\":\"RoomboxDetailsHeader_scroll-to-rates-btn---sb\",\"scrollToRatesBtn\":\"RoomboxDetailsHeader_scroll-to-rates-btn---sb\",\"popup\":\"RoomboxDetailsHeader_popup---sb\",\"title-row-wrapper\":\"RoomboxDetailsHeader_title-row-wrapper---sb\",\"titleRowWrapper\":\"RoomboxDetailsHeader_title-row-wrapper---sb\",\"price-wrapper\":\"RoomboxDetailsHeader_price-wrapper---sb\",\"priceWrapper\":\"RoomboxDetailsHeader_price-wrapper---sb\",\"price-title\":\"RoomboxDetailsHeader_price-title---sb\",\"priceTitle\":\"RoomboxDetailsHeader_price-title---sb\",\"button-wrapper\":\"RoomboxDetailsHeader_button-wrapper---sb\",\"buttonWrapper\":\"RoomboxDetailsHeader_button-wrapper---sb\",\"button-arrow\":\"RoomboxDetailsHeader_button-arrow---sb\",\"buttonArrow\":\"RoomboxDetailsHeader_button-arrow---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RoomboxDetailsHeader/styles.less\n// module id = 1595\n// module chunks = 0","export { default } from \"./RatesGroup\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RatesGroup/index.js","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport { Grid, Image } from \"semantic-ui-react\";\nimport { Rate } from \"../\";\nimport { numberToArray } from \"../../helpers/functional\";\nimport { filteredAvailableRates } from \"../../reducers/\";\nimport styles from \"./styles.less\";\nimport PriceDisplay from \"../../containers/PriceDisplay\";\n\nclass RatesGroup extends Component {\n state = {\n showAllRates: false,\n shouldPushSelectedTostart: false\n };\n\n componentDidMount() {\n this.setState({ shouldPushSelectedTostart: true });\n }\n\n componentDidUpdate(prevProps, prevState) {\n /* determain if we should move the selected rate to the start of the list\n only do this after we go away from the room and comming back. (sagiv)*/\n const {\n requestDescriptor: newRequestDescriptor,\n categoryId: newCategoryId\n } = this.props;\n const {\n requestDescriptor: prevRequestDescriptor,\n categoryId: prevCategoryId\n } = prevProps;\n const shouldPushSelectedTostart =\n newCategoryId !== prevCategoryId &&\n prevRequestDescriptor !== newRequestDescriptor;\n if (prevState.shouldPushSelectedTostart !== shouldPushSelectedTostart) {\n this.setState({ shouldPushSelectedTostart });\n }\n }\n\n expendRates = () => this.setState(() => ({ showAllRates: true }));\n\n renderRate = rate => {\n const {\n categoryId,\n selectedItemId,\n titles,\n isRtl,\n showClubPrices,\n showAvailability,\n lowAvailabilityCount,\n onItemClick,\n onReadeMoreClick,\n ShowCancellationPolicy,\n isIE\n } = this.props;\n return (\n \n \n {ratePriceStr => {\n return (\n \n {ratePriceAfterDiscountStr => {\n return (\n \n );\n }}\n \n );\n }}\n \n \n );\n };\n renderEmptyRates = numberOfPlacholders => {\n let placeHolders = numberToArray(numberOfPlacholders).map(num => (\n \n \n \n ));\n return placeHolders;\n };\n\n renderRateImage = imageSrc => {\n return (\n \n \n \n );\n };\n\n shapeRatesAsRowsGroup = (rates, numOfRatesInRow) => {\n const ratesAsGroups = rates.reduce((result, currentRate, idx) => {\n const isNewGroup = idx % numOfRatesInRow === 0; // n items in group\n const nextPosition = isNewGroup ? result.length : result.length - 1;\n result[nextPosition] = result[nextPosition] || [];\n result[nextPosition].push(currentRate);\n return result;\n }, []);\n return ratesAsGroups;\n };\n\n renderRatesAsGroups = () => {\n const { titles, rates, selectedItemId } = this.props;\n const { showAllRates, shouldPushSelectedTostart } = this.state;\n const availableRates = filteredAvailableRates(rates);\n const withNoSelectedRate =\n shouldPushSelectedTostart &&\n selectedItemId &&\n availableRates.filter(rate => rate.id !== selectedItemId);\n const effectiverates = withNoSelectedRate || availableRates;\n const selectedRate = availableRates.find(\n rate => rate.id === selectedItemId\n );\n const selectedRatefirst = [\n ...(shouldPushSelectedTostart && selectedRate ? [selectedRate] : []), // conditionally add the selected rate to top of the list if exists\n ...effectiverates\n ];\n const numOfRatesInRow = 3;\n const ratesAsGroups = this.shapeRatesAsRowsGroup(\n selectedRatefirst,\n numOfRatesInRow\n );\n const maxRows = 2;\n\n return (\n \n {ratesAsGroups.map((ratesGroupArray, rowIndex) => {\n const hideRow = !showAllRates && rowIndex >= maxRows;\n const isOnMaxRow = rowIndex === maxRows;\n const showMoreButton = !showAllRates && isOnMaxRow;\n const numberOfEmptyRates = numOfRatesInRow - ratesGroupArray.length; // fill empty rates with placeholder to render aligner grid\n return (\n \n \n {ratesGroupArray.map(rate => this.renderRate(rate))}\n {numberOfEmptyRates > 0 &&\n this.renderEmptyRates(numberOfEmptyRates)}\n \n {showMoreButton && (\n \n {titles.ShowMoreRates}\n
\n )}\n \n );\n })}\n \n );\n };\n\n render() {\n return {this.renderRatesAsGroups()};\n }\n}\n\nRatesGroup.propTypes = {\n isRtl: PropTypes.bool,\n titles: PropTypes.object,\n rates: PropTypes.array,\n showAvailability: PropTypes.bool,\n lowAvailabilityCount: PropTypes.number,\n requestDescriptor: PropTypes.number,\n categoryId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n selectedItemId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n onItemClick: PropTypes.func,\n onReadeMoreClick: PropTypes.func,\n showClubPrices: PropTypes.bool,\n ShowCancellationPolicy: PropTypes.bool,\n isIE: PropTypes.bool\n};\n\nexport default RatesGroup;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RatesGroup/RatesGroup.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"show-all-rates-btn\":\"RatesGroup_show-all-rates-btn---sb\",\"showAllRatesBtn\":\"RatesGroup_show-all-rates-btn---sb\",\"rates-group-row\":\"RatesGroup_rates-group-row---sb\",\"ratesGroupRow\":\"RatesGroup_rates-group-row---sb\",\"hide\":\"RatesGroup_hide---sb\",\"rate-wrapper\":\"RatesGroup_rate-wrapper---sb\",\"rateWrapper\":\"RatesGroup_rate-wrapper---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RatesGroup/styles.less\n// module id = 1598\n// module chunks = 0","export { default } from \"./Rate\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Rate/index.js","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport { RawHTML } from \"../common\";\nimport Dotdotdot from \"react-dotdotdot\";\nimport styles from \"./styles.less\";\n\nclass Rate extends Component {\n onClick = () => {\n const {\n onClick,\n rateId,\n priceCode,\n planCode,\n allocationCode,\n roomType\n } = this.props;\n onClick({ rateId, priceCode, planCode, allocationCode, roomId: roomType });\n };\n\n onReadeMoreClick = e => {\n e.preventDefault();\n e.stopPropagation(); // so we won't select the rate (parent element)\n const { onReadeMoreClick, rateId } = this.props;\n onReadeMoreClick({ rateId });\n };\n\n renderRate = () => {\n const {\n active,\n planName,\n titleName,\n price,\n isRtl,\n titles,\n isPackage,\n availability,\n lowAvailabilityCount,\n showAvailability,\n showClubPrices,\n ratePriceAfterDiscount,\n isIE,\n image\n } = this.props;\n return (\n \n \n
\n
\n {isPackage ? titles.Sale + \"!!!\" : \"\"}\n
\n
\n {titles.ForMoreDetails}\n
\n
\n\n
\n {/* {isPackage && (\n
\n )} */}\n {image && (\n

\n )}\n
\n
\n
\n
\n
\n \n
\n {showAvailability && (\n
\n
{titles.Availability}
\n
{availability}
\n
\n )}\n
\n
\n
\n
\n {price}\n \n {showClubPrices && (\n
\n {ratePriceAfterDiscount}\n \n )}\n
\n {titles.Checkout}\n
\n
\n {/*
\n
\n {titles.ReadMore}\n
\n
*/}\n
\n
\n
\n
\n {/*
\n {isPackage ? titles.Sale : titles.SelectRateBtn}\n
*/}\n
\n
\n \n );\n };\n\n render() {\n return {this.renderRate()};\n }\n}\n\nRate.propTypes = {\n isRtl: PropTypes.bool,\n titles: PropTypes.object,\n rateId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n priceCode: PropTypes.string,\n planCode: PropTypes.string,\n planName: PropTypes.string,\n titleName: PropTypes.string,\n price: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n availability: PropTypes.number,\n allocationCode: PropTypes.string,\n lowAvailabilityCount: PropTypes.number,\n showAvailability: PropTypes.bool,\n active: PropTypes.bool,\n isPackage: PropTypes.bool,\n onClick: PropTypes.func,\n onReadeMoreClick: PropTypes.func,\n showClubPrices: PropTypes.bool,\n ratePriceAfterDiscount: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n isIE: PropTypes.bool,\n image: PropTypes.string,\n roomType: PropTypes.string\n};\n\nRate.defaultProps = {\n showAvailability: true,\n lowAvailabilityCount: 4,\n titles: {\n ReadMore: \"View Daily Rates ...\"\n }\n};\n\nexport default Rate;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Rate/Rate.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Rate_with-ellipsis---sb\",\"withEllipsis\":\"Rate_with-ellipsis---sb\",\"rate\":\"Rate_rate---sb\",\"ie-is-shit\":\"Rate_ie-is-shit---sb\",\"ieIsShit\":\"Rate_ie-is-shit---sb\",\"rate-image\":\"Rate_rate-image---sb\",\"rateImage\":\"Rate_rate-image---sb\",\"rate-body\":\"Rate_rate-body---sb\",\"rateBody\":\"Rate_rate-body---sb\",\"active\":\"Rate_active---sb\",\"rate-select-btn\":\"Rate_rate-select-btn---sb\",\"rateSelectBtn\":\"Rate_rate-select-btn---sb\",\"ribbon-wrapper\":\"Rate_ribbon-wrapper---sb\",\"ribbonWrapper\":\"Rate_ribbon-wrapper---sb\",\"ribbon\":\"Rate_ribbon---sb\",\"rtl\":\"Rate_rtl---sb\",\"rate-main-content\":\"Rate_rate-main-content---sb\",\"rateMainContent\":\"Rate_rate-main-content---sb\",\"radio-btn-section\":\"Rate_radio-btn-section---sb\",\"radioBtnSection\":\"Rate_radio-btn-section---sb\",\"data-section\":\"Rate_data-section---sb\",\"dataSection\":\"Rate_data-section---sb\",\"price-name-wrapper\":\"Rate_price-name-wrapper---sb\",\"priceNameWrapper\":\"Rate_price-name-wrapper---sb\",\"price-name\":\"Rate_price-name---sb\",\"priceName\":\"Rate_price-name---sb\",\"icon\":\"Rate_icon---sb\",\"plan-name\":\"Rate_plan-name---sb\",\"planName\":\"Rate_plan-name---sb\",\"availability\":\"Rate_availability---sb\",\"low-count\":\"Rate_low-count---sb\",\"lowCount\":\"Rate_low-count---sb\",\"count\":\"Rate_count---sb\",\"prices-wrapper\":\"Rate_prices-wrapper---sb\",\"pricesWrapper\":\"Rate_prices-wrapper---sb\",\"inner-prices-wrapper\":\"Rate_inner-prices-wrapper---sb\",\"innerPricesWrapper\":\"Rate_inner-prices-wrapper---sb\",\"prices-section\":\"Rate_prices-section---sb\",\"pricesSection\":\"Rate_prices-section---sb\",\"price\":\"Rate_price---sb\",\"strike-price\":\"Rate_strike-price---sb\",\"strikePrice\":\"Rate_strike-price---sb\",\"strike-price-rtl\":\"Rate_strike-price-rtl---sb\",\"strikePriceRtl\":\"Rate_strike-price-rtl---sb\",\"sale\":\"Rate_sale---sb\",\"read-more\":\"Rate_read-more---sb\",\"readMore\":\"Rate_read-more---sb\",\"read-more-sale-wrapper\":\"Rate_read-more-sale-wrapper---sb\",\"readMoreSaleWrapper\":\"Rate_read-more-sale-wrapper---sb\",\"rate-order-button\":\"Rate_rate-order-button---sb\",\"rateOrderButton\":\"Rate_rate-order-button---sb\",\"rate-sale\":\"Rate_rate-sale---sb\",\"rateSale\":\"Rate_rate-sale---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Rate/styles.less\n// module id = 1601\n// module chunks = 0","export { default } from \"./RateDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RateDetails/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport moment from \"moment\";\r\nimport { Grid, Header, Table } from \"semantic-ui-react\";\r\nimport { LineBreaks, RawHTML } from \"../common\";\r\nimport styles from \"./styles.less\";\r\nimport PriceDisplay from \"../../containers/PriceDisplay\";\r\nimport { daysOfWeek } from \"../../constants/general\";\r\nimport { spliteByWeeks } from \"../../helpers/dateHelpers\";\r\n\r\nclass RateDetails extends Component {\r\n renderCancellationPolicy = () => {\r\n const {\r\n cancellationPolicyDescription,\r\n titles,\r\n ShowCancellationPolicy\r\n } = this.props;\r\n if (ShowCancellationPolicy) {\r\n return (\r\n \r\n \r\n {`* ${titles.CancellationPolicy}: `}\r\n \r\n
\r\n \r\n );\r\n } else return ;\r\n };\r\n render() {\r\n const {\r\n totalPrice,\r\n currency,\r\n currencyCode,\r\n priceName,\r\n priceDescription,\r\n planName,\r\n planDescription,\r\n pricePerDayList,\r\n titles,\r\n hotelData,\r\n isRtl,\r\n isMobileView,\r\n selectedHotelId,\r\n excludedTaxAtHotel\r\n } = this.props;\r\n const textAlign = isRtl ? \"right\" : \"left\";\r\n const weeksData = spliteByWeeks(pricePerDayList);\r\n const showTaxTitle =\r\n hotelData &&\r\n hotelData.TaxIncluded === \"true\" &&\r\n excludedTaxAtHotel &&\r\n !excludedTaxAtHotel.includes(selectedHotelId);\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n className={styles.priceTitle}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {daysOfWeek.map((day, idx) => (\r\n \r\n {titles[isMobileView ? day.shortKey : day.longKey] ||\r\n (isMobileView ? day.shortName : day.name)}\r\n \r\n ))}\r\n \r\n \r\n \r\n {Object.entries(weeksData).map(([week, priceList], idx) => {\r\n const currentWeekNum = Number(week);\r\n return (\r\n \r\n \r\n {daysOfWeek.map((day, i) => {\r\n const foundPrice = priceList.find(\r\n ppd =>\r\n moment(ppd.dayDate).day() === i &&\r\n moment(ppd.dayDate).week() === currentWeekNum\r\n );\r\n const content = foundPrice && (\r\n \r\n {convertedPrice => convertedPrice}\r\n \r\n );\r\n const toRender = foundPrice && (\r\n \r\n {content}
\r\n \r\n {moment(foundPrice.dayDate).format(\"DD/MM/YY\")}\r\n \r\n \r\n );\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {convertedPrice => `${titles.Total} - ${convertedPrice}`}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {showTaxTitle && (\r\n {titles.TaxIncludedTitle}
\r\n )}\r\n \r\n {this.renderCancellationPolicy()}\r\n \r\n );\r\n }\r\n}\r\n\r\nRateDetails.propTypes = {\r\n isRtl: PropTypes.bool,\r\n currency: PropTypes.string,\r\n currencyCode: PropTypes.string,\r\n priceName: PropTypes.string,\r\n priceDescription: PropTypes.string,\r\n planName: PropTypes.string,\r\n planDescription: PropTypes.string,\r\n pricePerDayList: PropTypes.array,\r\n titles: PropTypes.object,\r\n hotelData: PropTypes.object,\r\n cancellationPolicyDescription: PropTypes.string,\r\n totalPrice: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n ShowCancellationPolicy: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n selectedHotelId: PropTypes.string\r\n};\r\n\r\nexport default RateDetails;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RateDetails/RateDetails.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RateDetails_with-ellipsis---sb\",\"withEllipsis\":\"RateDetails_with-ellipsis---sb\",\"rate-details\":\"RateDetails_rate-details---sb\",\"rateDetails\":\"RateDetails_rate-details---sb\",\"table\":\"RateDetails_table---sb\",\"rtl\":\"RateDetails_rtl---sb\",\"price-title\":\"RateDetails_price-title---sb\",\"priceTitle\":\"RateDetails_price-title---sb\",\"plan-title\":\"RateDetails_plan-title---sb\",\"planTitle\":\"RateDetails_plan-title---sb\",\"plan-description\":\"RateDetails_plan-description---sb\",\"planDescription\":\"RateDetails_plan-description---sb\",\"price-description\":\"RateDetails_price-description---sb\",\"priceDescription\":\"RateDetails_price-description---sb\",\"tax-included-title\":\"RateDetails_tax-included-title---sb\",\"taxIncludedTitle\":\"RateDetails_tax-included-title---sb\",\"cancellation-policy\":\"RateDetails_cancellation-policy---sb\",\"cancellationPolicy\":\"RateDetails_cancellation-policy---sb\",\"day-date\":\"RateDetails_day-date---sb\",\"dayDate\":\"RateDetails_day-date---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RateDetails/styles.less\n// module id = 1604\n// module chunks = 0","export { default } from \"./RoomDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomDetails/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid, Header } from \"semantic-ui-react\";\r\nimport { RawHTML, LineBreaks } from \"../common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass RoomDetails extends Component {\r\n render() {\r\n const { name, description, isRtl } = this.props;\r\n const textAlign = isRtl ? \"right\" : \"left\";\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nRoomDetails.propTypes = {\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n isRtl: PropTypes.bool\r\n};\r\n\r\nexport default RoomDetails;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomDetails/RoomDetails.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"room-details\":\"RoomDetails_room-details---sb\",\"roomDetails\":\"RoomDetails_room-details---sb\",\"rtl\":\"RoomDetails_rtl---sb\",\"room-name\":\"RoomDetails_room-name---sb\",\"roomName\":\"RoomDetails_room-name---sb\",\"room-description\":\"RoomDetails_room-description---sb\",\"roomDescription\":\"RoomDetails_room-description---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RoomDetails/styles.less\n// module id = 1607\n// module chunks = 0","export { default } from \"./AddonDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/AddonDetails/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid, Header } from \"semantic-ui-react\";\r\nimport { RawHTML, LineBreaks } from \"../common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass AddonDetails extends Component {\r\n render() {\r\n const { name, description, isRtl } = this.props;\r\n const textAlign = isRtl ? \"right\" : \"left\";\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nAddonDetails.propTypes = {\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n isRtl: PropTypes.bool\r\n};\r\n\r\nexport default AddonDetails;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/AddonDetails/AddonDetails.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"details\":\"AddonDetails_details---sb\",\"rtl\":\"AddonDetails_rtl---sb\",\"name\":\"AddonDetails_name---sb\",\"description\":\"AddonDetails_description---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/AddonDetails/styles.less\n// module id = 1610\n// module chunks = 0","export { default } from \"./HotelDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/HotelDetails/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid, Header } from \"semantic-ui-react\";\r\nimport { LineBreaks, RawHTML } from \"../common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass HotelDetails extends Component {\r\n render() {\r\n const { name, description, isRtl } = this.props;\r\n const textAlign = isRtl ? \"right\" : \"left\";\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n }\r\n className={styles.hotelName}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nHotelDetails.propTypes = {\r\n name: PropTypes.string,\r\n description: PropTypes.string,\r\n isRtl: PropTypes.bool\r\n};\r\n\r\nexport default HotelDetails;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/HotelDetails/HotelDetails.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"hotel-details\":\"HotelDetails_hotel-details---sb\",\"hotelDetails\":\"HotelDetails_hotel-details---sb\",\"rtl\":\"HotelDetails_rtl---sb\",\"hotel-name\":\"HotelDetails_hotel-name---sb\",\"hotelName\":\"HotelDetails_hotel-name---sb\",\"description\":\"HotelDetails_description---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/HotelDetails/styles.less\n// module id = 1613\n// module chunks = 0","export { default } from \"./StyleSplitter\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/StyleSplitter/index.js","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nconst StyleSplitter = ({ content, indexToSplit, cssNames, className }) => {\n const contentArray = content.splitByIndex(indexToSplit);\n return (\n \n {contentArray.map((str, i) => (\n \n {str}\n \n ))}\n
\n );\n};\n\nStyleSplitter.propTypes = {\n content: PropTypes.string,\n indexToSplit: PropTypes.number,\n cssNames: PropTypes.array,\n className: PropTypes.string\n};\n\nexport default StyleSplitter;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/StyleSplitter/StyleSplitter.js","export { default } from \"./Addon\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Addon/index.js","import React, { Component } from \"react\";\r\nimport cx from \"classnames\";\r\nimport { addonTypes, addonDefaultProps } from \"../../types\";\r\nimport { LineBreaks, RawHTML } from \"../common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass Addon extends Component {\r\n onIncrement = () => {\r\n const { id, onIncrement } = this.props;\r\n onIncrement(id);\r\n };\r\n\r\n onDecrement = () => {\r\n const { id, onDecrement } = this.props;\r\n onDecrement(id);\r\n };\r\n\r\n render() {\r\n const {\r\n amount,\r\n name,\r\n description,\r\n imageURL,\r\n price,\r\n isRtl,\r\n defaultImageURL\r\n } = this.props;\r\n return (\r\n \r\n
\r\n

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n
{amount}
\r\n
\r\n
{price}
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nAddon.defaultProps = addonDefaultProps;\r\n\r\nAddon.propTypes = addonTypes;\r\n\r\nexport default Addon;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Addon/Addon.js","export { addonTypes, addonDefaultProps } from \"./addonTypes\";\r\nexport { addonsTypes, addonsDefaultProps } from \"./addonsTypes\";\r\nexport {\r\n addonsContainerTypes,\r\n addonsContainerDefaultProps\r\n} from \"./addonsContainerTypes\";\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/types/addonsTypes/index.js","import propTypes from \"prop-types\";\r\nimport noop from \"no-op\";\r\nimport customTypes from \"../customTypes\";\r\n\r\nexport const addonDefaultProps = {\r\n onIncrement: noop,\r\n onDecrement: noop\r\n};\r\n\r\nexport const addonTypes = {\r\n id: customTypes.stringOrNumber.isRequired,\r\n amount: propTypes.number,\r\n name: propTypes.string.isRequired,\r\n description: propTypes.string,\r\n price: customTypes.stringOrNumber.isRequired,\r\n currency: propTypes.string,\r\n imageUrl: propTypes.string,\r\n onIncrement: propTypes.func,\r\n onDecrement: propTypes.func,\r\n titles: propTypes.PropTypes.object,\r\n onShowAddonDetailsClick: propTypes.PropTypes.func\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/types/addonsTypes/addonTypes.js","import PropTypes from \"prop-types\";\r\nimport noop from \"no-op\";\r\n//import { addonTypes } from './addonTypes';\r\nimport customTypes from \"../customTypes\";\r\n\r\nexport const addonsDefaultProps = {\r\n addons: [],\r\n selectedAddonsGroup: {},\r\n onAddonIncrementClick: noop\r\n};\r\n\r\nexport const addonsTypes = {\r\n id: customTypes.stringOrNumber.isRequired,\r\n addons: PropTypes.array,\r\n selectedAddonsGroup: PropTypes.object,\r\n onAddonIncrementClick: PropTypes.func\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/types/addonsTypes/addonsTypes.js","import PropTypes from \"prop-types\";\r\n//import { addonsTypes } from './addonsTypes';\r\n\r\nexport const addonsContainerDefaultProps = {\r\n addonsByPaxIndex: []\r\n};\r\n\r\nexport const addonsContainerTypes = {\r\n isRtl: PropTypes.bool,\r\n addonsByPaxIndex: PropTypes.array,\r\n actions: PropTypes.object,\r\n selectedPaxId: PropTypes.number,\r\n selectedAddonsGroup: PropTypes.object\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/types/addonsTypes/addonsContainerTypes.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Addon_with-ellipsis---sb\",\"withEllipsis\":\"Addon_with-ellipsis---sb\",\"addon\":\"Addon_addon---sb\",\"image-container\":\"Addon_image-container---sb\",\"imageContainer\":\"Addon_image-container---sb\",\"image\":\"Addon_image---sb\",\"content-container\":\"Addon_content-container---sb\",\"contentContainer\":\"Addon_content-container---sb\",\"name\":\"Addon_name---sb\",\"rtl\":\"Addon_rtl---sb\",\"description\":\"Addon_description---sb\",\"buttons-wrapper\":\"Addon_buttons-wrapper---sb\",\"buttonsWrapper\":\"Addon_buttons-wrapper---sb\",\"btn\":\"Addon_btn---sb\",\"plus\":\"Addon_plus---sb\",\"minus\":\"Addon_minus---sb\",\"price-wrapper\":\"Addon_price-wrapper---sb\",\"priceWrapper\":\"Addon_price-wrapper---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Addon/styles.less\n// module id = 1622\n// module chunks = 0","export { default } from \"./Addons\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Addons/index.js","import React, { Component } from \"react\";\r\nimport cx from \"classnames\";\r\nimport { addonsTypes, addonsDefaultProps } from \"../../types\";\r\nimport { Addon } from \"../../components\"; // waiting for alias to work\r\nimport { OptimaStripes } from \"../../components/common\";\r\nimport styles from \"./styles.less\";\r\nimport PriceDisplay from \"../../containers/PriceDisplay\";\r\n\r\nclass Addons extends Component {\r\n onAddonIncrementClick = (addonCode, msg) => {\r\n const { id, onAddonIncrementClick } = this.props;\r\n onAddonIncrementClick(id, addonCode, msg);\r\n };\r\n\r\n onAddonDecrementClick = addonCode => {\r\n const { id, onAddonDecrementClick } = this.props;\r\n onAddonDecrementClick(id, addonCode);\r\n };\r\n\r\n onCancel = () => {\r\n const { onCancel, id } = this.props;\r\n onCancel(id);\r\n };\r\n\r\n onConfirm = () => {\r\n const { onConfirm, id } = this.props;\r\n onConfirm(id);\r\n };\r\n\r\n render() {\r\n const {\r\n addons,\r\n selectedAddonsGroup,\r\n roomNumber,\r\n isRtl,\r\n headerTitle,\r\n subHeaderTitle,\r\n confirmTitle,\r\n noThanksTitle\r\n } = this.props;\r\n return (\r\n \r\n \r\n \r\n
\r\n
{headerTitle}
\r\n
\r\n ( {subHeaderTitle} {roomNumber} )\r\n
\r\n
\r\n
\r\n {addons.map((addon, i) => (\r\n
\r\n {convertedPrice => (\r\n \r\n )}\r\n \r\n ))}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nAddons.defaultProps = addonsDefaultProps;\r\n\r\nAddons.propTypes = addonsTypes;\r\n\r\nexport default Addons;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Addons/Addons.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Addons_with-ellipsis---sb\",\"withEllipsis\":\"Addons_with-ellipsis---sb\",\"addons\":\"Addons_addons---sb\",\"headers\":\"Addons_headers---sb\",\"header\":\"Addons_header---sb\",\"sub-header\":\"Addons_sub-header---sb\",\"subHeader\":\"Addons_sub-header---sb\",\"list\":\"Addons_list---sb\",\"actions\":\"Addons_actions---sb\",\"action-btn\":\"Addons_action-btn---sb\",\"actionBtn\":\"Addons_action-btn---sb\",\"confirm-btn\":\"Addons_confirm-btn---sb\",\"confirmBtn\":\"Addons_confirm-btn---sb\",\"cancel-btn\":\"Addons_cancel-btn---sb\",\"cancelBtn\":\"Addons_cancel-btn---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Addons/styles.less\n// module id = 1625\n// module chunks = 0","export { default } from \"./SlideMenu\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/SlideMenu/index.js","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Button } from \"semantic-ui-react\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst SlideMenu = ({ visible, unFixed, onToggle, children, isRtl }) => {\r\n const portlElement = document.body;\r\n const iconName = visible ? \"close\" : \"cart\";\r\n return ReactDOM.createPortal(\r\n \r\n
{children}
\r\n
\r\n \r\n
\r\n
,\r\n portlElement\r\n );\r\n};\r\n\r\nSlideMenu.propTypes = {\r\n isRtl: PropTypes.bool,\r\n visible: PropTypes.bool,\r\n unFixed: PropTypes.bool, // positioned absolute\r\n onToggle: PropTypes.func,\r\n children: PropTypes.node\r\n};\r\n\r\nexport default SlideMenu;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/SlideMenu/SlideMenu.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"SlideMenu_with-ellipsis---sb\",\"withEllipsis\":\"SlideMenu_with-ellipsis---sb\",\"menu-wrapper\":\"SlideMenu_menu-wrapper---sb\",\"menuWrapper\":\"SlideMenu_menu-wrapper---sb\",\"unFixed\":\"SlideMenu_unFixed---sb\",\"rtl\":\"SlideMenu_rtl---sb\",\"visible\":\"SlideMenu_visible---sb\",\"menu\":\"SlideMenu_menu---sb\",\"menu-btn-wrapper\":\"SlideMenu_menu-btn-wrapper---sb\",\"menuBtnWrapper\":\"SlideMenu_menu-btn-wrapper---sb\",\"menu-btn\":\"SlideMenu_menu-btn---sb\",\"menuBtn\":\"SlideMenu_menu-btn---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/SlideMenu/styles.less\n// module id = 1628\n// module chunks = 0","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport PriceDisplay from \"../../containers/PriceDisplay\";\r\nimport { Header } from \"../../components/common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass ClubBanner extends Component {\r\n state = { finishedRendering: false };\r\n\r\n componentDidMount() {\r\n //setInterval(() => {\r\n this.setState({ finishedRendering: true });\r\n //}, 0);\r\n }\r\n\r\n render() {\r\n const {\r\n totalToSave,\r\n discountClubConfig,\r\n titles,\r\n orderCurrency,\r\n isRtl,\r\n showSimpleClubLoginModal,\r\n domainUrl,\r\n isMobileView\r\n } = this.props;\r\n const { finishedRendering } = this.state;\r\n const clubTitle = `${titles.Get} ${discountClubConfig &&\r\n discountClubConfig.Percentage}% ${titles.Discount}`;\r\n const checkImgUrlBase = domainUrl.substring(\r\n 0,\r\n domainUrl.indexOf(\"actionUrl\")\r\n );\r\n const checkImageUrl =\r\n checkImgUrlBase + \"Content/HotelContent/images/check.png\";\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {titles.AlreadyMember}\r\n \r\n {titles.Login}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
{clubTitle}
\r\n
\r\n {titles.JoinAndSave}\r\n
\r\n \r\n {convertedPrice => convertedPrice}\r\n \r\n \r\n {titles.InThisOrder}\r\n

\r\n
\r\n
\r\n
\r\n {titles.Join}!\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nClubBanner.propTypes = {\r\n totalToSave: PropTypes.number,\r\n discountClubConfig: PropTypes.object,\r\n titles: PropTypes.object,\r\n orderCurrency: PropTypes.object,\r\n showSimpleClubLoginModal: PropTypes.func,\r\n isMobileView: PropTypes.bool,\r\n isRtl: PropTypes.bool,\r\n domainUrl: PropTypes.string\r\n};\r\n\r\nexport default ClubBanner;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/ClubBanner/ClubBanner.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"ClubBanner_with-ellipsis---sb\",\"withEllipsis\":\"ClubBanner_with-ellipsis---sb\",\"club-banner\":\"ClubBanner_club-banner---sb\",\"clubBanner\":\"ClubBanner_club-banner---sb\",\"club-banner-wrapper\":\"ClubBanner_club-banner-wrapper---sb\",\"clubBannerWrapper\":\"ClubBanner_club-banner-wrapper---sb\",\"club-banner-save\":\"ClubBanner_club-banner-save---sb\",\"clubBannerSave\":\"ClubBanner_club-banner-save---sb\",\"club-banner-text-wrapper\":\"ClubBanner_club-banner-text-wrapper---sb\",\"clubBannerTextWrapper\":\"ClubBanner_club-banner-text-wrapper---sb\",\"club-banner-title\":\"ClubBanner_club-banner-title---sb\",\"clubBannerTitle\":\"ClubBanner_club-banner-title---sb\",\"club-banner-sub-title\":\"ClubBanner_club-banner-sub-title---sb\",\"clubBannerSubTitle\":\"ClubBanner_club-banner-sub-title---sb\",\"club-banner-button\":\"ClubBanner_club-banner-button---sb\",\"clubBannerButton\":\"ClubBanner_club-banner-button---sb\",\"club-header\":\"ClubBanner_club-header---sb\",\"clubHeader\":\"ClubBanner_club-header---sb\",\"club-header-sub-title\":\"ClubBanner_club-header-sub-title---sb\",\"clubHeaderSubTitle\":\"ClubBanner_club-header-sub-title---sb\",\"club-header-login\":\"ClubBanner_club-header-login---sb\",\"clubHeaderLogin\":\"ClubBanner_club-header-login---sb\",\"club-wrapper\":\"ClubBanner_club-wrapper---sb\",\"clubWrapper\":\"ClubBanner_club-wrapper---sb\",\"icon\":\"ClubBanner_icon---sb\",\"appeared\":\"ClubBanner_appeared---sb\",\"check-image\":\"ClubBanner_check-image---sb\",\"checkImage\":\"ClubBanner_check-image---sb\",\"mobile-view\":\"ClubBanner_mobile-view---sb\",\"mobileView\":\"ClubBanner_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/ClubBanner/styles.less\n// module id = 1630\n// module chunks = 0","export { default } from \"./NoResultsDialog\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/NoResultsDialog/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nclass NoResultsDialog extends Component {\r\n render() {\r\n const { onContinue, onCancel } = this.props;\r\n return (\r\n \r\n
Some results are not available
\r\n
\r\n Would you like to continue with the available results or search again?\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nNoResultsDialog.propTypes = {\r\n onContinue: PropTypes.func,\r\n onCancel: PropTypes.func\r\n};\r\n\r\nexport default NoResultsDialog;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/NoResultsDialog/NoResultsDialog.js","import React from \"react\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst Divider = () =>
;\r\n\r\nexport default Divider;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Divider/Divider.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Divider_with-ellipsis---sb\",\"withEllipsis\":\"Divider_with-ellipsis---sb\",\"divider\":\"Divider_divider---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Divider/styles.less\n// module id = 1634\n// module chunks = 0","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { IcoMoon } from \"../../common\";\r\n// import { noUndefStrings } from \"../../../helpers/tags\";\r\nimport { getPropertyTitle } from \"../../../helpers/general-helpers\";\r\nimport { Divider } from \"../\";\r\n// import Divider from \"../Divider/Divider\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst Header = ({\r\n className,\r\n titles,\r\n propertyType,\r\n propertyName,\r\n isMobileView\r\n}) => (\r\n \r\n
{titles.VacationDetails}
\r\n
\r\n
10\r\n })}\r\n >\r\n
\r\n
\r\n
\r\n {getPropertyTitle(titles, propertyType)}:\r\n
\r\n
\r\n
{propertyName}
\r\n {/*
{noUndefStrings`${propertyName}`}
*/}\r\n
\r\n
\r\n);\r\n\r\nHeader.propTypes = {\r\n propertyName: PropTypes.string,\r\n propertyType: PropTypes.string,\r\n className: PropTypes.string,\r\n titles: PropTypes.object,\r\n isMobileView: PropTypes.bool\r\n};\r\n\r\nexport default Header;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Header/Header.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Header_with-ellipsis---sb\",\"withEllipsis\":\"Header_with-ellipsis---sb\",\"header\":\"Header_header---sb\",\"main-title\":\"Header_main-title---sb\",\"mainTitle\":\"Header_main-title---sb\",\"property-name\":\"Header_property-name---sb\",\"propertyName\":\"Header_property-name---sb\",\"type\":\"Header_type---sb\",\"title\":\"Header_title---sb\",\"name\":\"Header_name---sb\",\"long-name\":\"Header_long-name---sb\",\"longName\":\"Header_long-name---sb\",\"mobile-view\":\"Header_mobile-view---sb\",\"mobileView\":\"Header_mobile-view---sb\",\"header-property-name\":\"Header_header-property-name---sb\",\"headerPropertyName\":\"Header_header-property-name---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Header/styles.less\n// module id = 1636\n// module chunks = 0","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport Only from \"react-only-when\";\r\nimport PriceDisplay from \"../../../containers/PriceDisplay\";\r\nimport { getPropertyItemTitle } from \"../../../helpers/general-helpers\";\r\nimport { LineBreaks, RawHTML } from \"../../common\";\r\nimport { priceNormelizer } from \"../../../helpers/tags\";\r\nimport { Divider } from \"../\";\r\nimport styles from \"./styles.less\";\r\n// import { getGlobalCurrencyCode, getGlobalCurrency } from \"../../../reducers\";\r\n\r\nconst Prices = ({\r\n isRtl,\r\n className,\r\n titles,\r\n // rooms,\r\n currency,\r\n currencyCode,\r\n selectedCurrency,\r\n totalPrices,\r\n clubTotalPrices,\r\n clubUserLoggedIn,\r\n propertyType,\r\n hasPrice,\r\n isMobileView,\r\n displayPriceWithoutTaxes,\r\n taxesPrecentage\r\n}) => {\r\n const renderPriceOrNone = (price, c, cCode) => {\r\n if (!price || price == 0) return \"-\";\r\n return (\r\n \r\n
\r\n {convertedPrice => convertedPrice}\r\n \r\n
\r\n );\r\n };\r\n\r\n const hasAddons = Boolean(\r\n totalPrices.addonsPrice && totalPrices.addonsPrice > 0\r\n );\r\n\r\n const fullPrice = totalPrices.totalPrice * ((100 + taxesPrecentage) / 100);\r\n const taxesPrice = fullPrice - totalPrices.totalPrice;\r\n\r\n let isSelectedCurrencyDifferent = false;\r\n if (selectedCurrency)\r\n isSelectedCurrencyDifferent = currencyCode !== selectedCurrency;\r\n\r\n return (\r\n \r\n
\r\n
\r\n
{getPropertyItemTitle(titles, propertyType, true)}:
\r\n
\r\n
\r\n {renderPriceOrNone(\r\n totalPrices.roomsPrice,\r\n currency,\r\n currencyCode\r\n )}\r\n
\r\n
\r\n \r\n {renderPriceOrNone(\r\n clubTotalPrices.roomsPrice,\r\n currency,\r\n currencyCode\r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
{titles.Taxes}:
\r\n
\r\n {renderPriceOrNone(taxesPrice, currency, currencyCode)}\r\n
\r\n
\r\n \r\n
\r\n \r\n
{titles.Extras}:
\r\n
\r\n {renderPriceOrNone(\r\n totalPrices.addonsPrice,\r\n currency,\r\n currencyCode\r\n )}\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n
{titles.TotalPrice}:
\r\n
\r\n
\r\n {renderPriceOrNone(\r\n displayPriceWithoutTaxes ? fullPrice : totalPrices.totalPrice,\r\n currency,\r\n currencyCode\r\n )}\r\n
\r\n
\r\n \r\n {renderPriceOrNone(\r\n clubTotalPrices.totalPrice,\r\n currency,\r\n currencyCode\r\n )}\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
{titles.PriceBeforeConvertion}:
\r\n
\r\n {currency}\r\n {priceNormelizer`${fullPrice}`}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nPrices.defaultProps = {\r\n clubUserLoggedIn: false,\r\n propertyType: \"hotel\",\r\n hasPrice: false\r\n};\r\n\r\nPrices.propTypes = {\r\n isRtl: PropTypes.bool,\r\n titles: PropTypes.object,\r\n className: PropTypes.string,\r\n currency: PropTypes.string,\r\n currencyCode: PropTypes.string,\r\n clubUserLoggedIn: PropTypes.bool,\r\n propertyType: PropTypes.string,\r\n selectedCurrency: PropTypes.string,\r\n totalPrices: PropTypes.object,\r\n hasPrice: PropTypes.bool,\r\n clubTotalPrices: PropTypes.object,\r\n isMobileView: PropTypes.bool,\r\n displayPriceWithoutTaxes: PropTypes.bool,\r\n taxesPrecentage: PropTypes.number\r\n};\r\n\r\nexport default Prices;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Prices/Prices.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Prices_with-ellipsis---sb\",\"withEllipsis\":\"Prices_with-ellipsis---sb\",\"prices\":\"Prices_prices---sb\",\"prices-details\":\"Prices_prices-details---sb\",\"pricesDetails\":\"Prices_prices-details---sb\",\"rooms\":\"Prices_rooms---sb\",\"addons\":\"Prices_addons---sb\",\"taxes\":\"Prices_taxes---sb\",\"prices-values\":\"Prices_prices-values---sb\",\"pricesValues\":\"Prices_prices-values---sb\",\"total-price\":\"Prices_total-price---sb\",\"totalPrice\":\"Prices_total-price---sb\",\"title\":\"Prices_title---sb\",\"true-price\":\"Prices_true-price---sb\",\"truePrice\":\"Prices_true-price---sb\",\"no-price\":\"Prices_no-price---sb\",\"noPrice\":\"Prices_no-price---sb\",\"deleted-price\":\"Prices_deleted-price---sb\",\"deletedPrice\":\"Prices_deleted-price---sb\",\"value\":\"Prices_value---sb\",\"price-before\":\"Prices_price-before---sb\",\"priceBefore\":\"Prices_price-before---sb\",\"price-value\":\"Prices_price-value---sb\",\"priceValue\":\"Prices_price-value---sb\",\"notification\":\"Prices_notification---sb\",\"mobile-view\":\"Prices_mobile-view---sb\",\"mobileView\":\"Prices_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Prices/styles.less\n// module id = 1638\n// module chunks = 0","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\n// import { IcoMoon } from \"../../common\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst BookingRating = ({ className, titles, rate, isRtl, isMobileView }) => {\r\n // const renderStaredRates = rate => {\r\n // let numberOfFulledStars = 0;\r\n // let numberOfEmptyStars = 5;\r\n // let hasHalfStar = false;\r\n // numberOfFulledStars = Math.floor(rate);\r\n // hasHalfStar = rate % numberOfFulledStars > 0;\r\n // numberOfEmptyStars = 5 - numberOfFulledStars;\r\n // if (hasHalfStar) {\r\n // numberOfEmptyStars - 1;\r\n // }\r\n\r\n // const fullStarsHolder = [];\r\n // for (let i = 0; i < numberOfFulledStars; i++) {\r\n // fullStarsHolder.push(\r\n // \r\n // );\r\n // }\r\n\r\n // const emptyStarsHolder = [];\r\n // for (let i = 0; i < numberOfEmptyStars; i++) {\r\n // emptyStarsHolder.push(\r\n // \r\n // );\r\n // }\r\n\r\n // return (\r\n // \r\n // {fullStarsHolder}\r\n // {hasHalfStar && }\r\n // {emptyStarsHolder}\r\n // \r\n // );\r\n // };\r\n\r\n return (\r\n \r\n
\r\n
{rate}\r\n {/*
{renderStaredRates(rate / 2)}
*/}\r\n
\r\n {titles.CartBookingRatingSubtitle}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nBookingRating.defaultProps = {\r\n titles: {},\r\n isRtl: false\r\n};\r\n\r\nBookingRating.propTypes = {\r\n titles: PropTypes.object,\r\n rate: PropTypes.number,\r\n className: PropTypes.string,\r\n isRtl: PropTypes.bool,\r\n isMobileView: PropTypes.bool\r\n};\r\n\r\nexport default BookingRating;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/BookingRating/BookingRating.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"booking-rating\":\"BookingRating_booking-rating---sb\",\"bookingRating\":\"BookingRating_booking-rating---sb\",\"rate\":\"BookingRating_rate---sb\",\"numbered-rate\":\"BookingRating_numbered-rate---sb\",\"numberedRate\":\"BookingRating_numbered-rate---sb\",\"stared-rate\":\"BookingRating_stared-rate---sb\",\"staredRate\":\"BookingRating_stared-rate---sb\",\"subtitle\":\"BookingRating_subtitle---sb\",\"rtl\":\"BookingRating_rtl---sb\",\"mobile-view\":\"BookingRating_mobile-view---sb\",\"mobileView\":\"BookingRating_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/BookingRating/styles.less\n// module id = 1640\n// module chunks = 0","export { default as Rooms } from \"./Rooms\";\nexport { default as Room } from \"./Room/Room\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport Only from \"react-only-when\";\r\nimport { RoomBody } from \"./\";\r\nimport { IcoMoon, Ribbon } from \"../../../common\";\r\nimport { getPropertyItemTitle } from \"../../../../helpers/general-helpers\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass Room extends Component {\r\n onRemoveClick = addonCode => {\r\n const { onAddonRemove, pax } = this.props;\r\n onAddonRemove && onAddonRemove(pax.id, addonCode);\r\n };\r\n\r\n render() {\r\n const {\r\n id,\r\n isPackage,\r\n name,\r\n roomName,\r\n planName,\r\n pax,\r\n titles,\r\n isRtl,\r\n roomId,\r\n rateId,\r\n selectedAddons,\r\n propertyType,\r\n className\r\n } = this.props;\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n {`${getPropertyItemTitle(titles, propertyType)} ${name}`}:\r\n
\r\n
\r\n\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nRoom.defaultProps = {\r\n roomName: \"\",\r\n planName: \"\"\r\n};\r\n\r\nRoom.propTypes = {\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n name: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n rateId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n roomName: PropTypes.string,\r\n roomId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n planName: PropTypes.string,\r\n isPackage: PropTypes.bool,\r\n isRtl: PropTypes.bool,\r\n //clubUserLoggedIn: PropTypes.bool,\r\n pax: PropTypes.object,\r\n selectedAddons: PropTypes.array,\r\n titles: PropTypes.object,\r\n className: PropTypes.string,\r\n propertyType: PropTypes.string,\r\n onAddonRemove: PropTypes.func\r\n};\r\n\r\nexport default Room;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/Room.js","export { default as RoomBody } from \"./RoomBody/RoomBody\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/index.js","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport Only from \"react-only-when\";\r\nimport { PaxDetails, AddonsList } from \"./\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst RoomBody = ({\r\n // id,\r\n roomName,\r\n planName,\r\n // roomId,\r\n // rateId,\r\n isRtl,\r\n titles,\r\n pax,\r\n selectedAddons,\r\n onAddonRemove,\r\n className\r\n}) => {\r\n return (\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n\r\n
\r\n {planName}
\r\n \r\n\r\n
0}>\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nRoomBody.defaultProps = {\r\n selectedAddons: []\r\n};\r\n\r\nRoomBody.propTypes = {\r\n // id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n className: PropTypes.string,\r\n roomName: PropTypes.string,\r\n planName: PropTypes.string,\r\n // currency: PropTypes.string,\r\n // currencyCode: PropTypes.string,\r\n //globalCurrencyCode: PropTypes.string,ד\r\n // roomId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n // rateId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n isRtl: PropTypes.bool,\r\n titles: PropTypes.object,\r\n pax: PropTypes.object,\r\n selectedAddons: PropTypes.array,\r\n onAddonRemove: PropTypes.func\r\n};\r\n\r\nexport default RoomBody;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/RoomBody/RoomBody.js","export { default as AddonsList } from \"./AddonsList/AddonsList\";\nexport { default as PaxDetails } from \"./PaxDetails/PaxDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/RoomBody/index.js","export { default as AddonItem } from \"./AddonItem/AddonItem\";\nexport { default as AddonsList } from \"./AddonsList\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/RoomBody/AddonsList/index.js","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport PriceDisplay from \"../../../../../../../containers/PriceDisplay\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst AddonItem = ({\r\n id,\r\n name,\r\n amount,\r\n price,\r\n titles,\r\n onAddonRemove,\r\n currency,\r\n currencyCode\r\n}) => {\r\n const onRemove = () => {\r\n onAddonRemove && onAddonRemove(id);\r\n };\r\n\r\n const priceToDisplay = (\r\n \r\n {convertedPrice => `- ${name} ( ${amount}x${convertedPrice} )`}\r\n \r\n );\r\n\r\n return (\r\n \r\n
{priceToDisplay}
\r\n
\r\n {titles.Remove}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAddonItem.propTypes = {\r\n id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n name: PropTypes.string,\r\n amount: PropTypes.number,\r\n price: PropTypes.number,\r\n titles: PropTypes.object,\r\n currency: PropTypes.string,\r\n currencyCode: PropTypes.string,\r\n onAddonRemove: PropTypes.func\r\n};\r\n\r\nexport default AddonItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/RoomBody/AddonsList/AddonItem/AddonItem.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"addon\":\"AddonItem_addon---sb\",\"remove-btn\":\"AddonItem_remove-btn---sb\",\"removeBtn\":\"AddonItem_remove-btn---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Rooms/Room/RoomBody/AddonsList/AddonItem/styles.less\n// module id = 1648\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"addons\":\"AddonsList_addons---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Rooms/Room/RoomBody/AddonsList/styles.less\n// module id = 1649\n// module chunks = 0","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst PaxDetails = ({ pax, titles, className }) => {\r\n let result = \"\";\r\n if (pax.Adults) {\r\n result += `${pax.Adults} ${titles.Adults}`;\r\n }\r\n if (pax.Children) {\r\n result += `, ${pax.Children} ${titles.Children}`;\r\n }\r\n if (pax.Infants) {\r\n result += `, ${pax.Infants} ${titles.Infants}`;\r\n }\r\n\r\n return {result}
;\r\n};\r\n\r\nPaxDetails.propTypes = {\r\n className: PropTypes.string,\r\n pax: PropTypes.object,\r\n titles: PropTypes.object\r\n};\r\n\r\nexport default PaxDetails;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Rooms/Room/RoomBody/PaxDetails/PaxDetails.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"pax-details\":\"PaxDetails_pax-details---sb\",\"paxDetails\":\"PaxDetails_pax-details---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Rooms/Room/RoomBody/PaxDetails/styles.less\n// module id = 1651\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RoomBody_with-ellipsis---sb\",\"withEllipsis\":\"RoomBody_with-ellipsis---sb\",\"room-body\":\"RoomBody_room-body---sb\",\"roomBody\":\"RoomBody_room-body---sb\",\"name\":\"RoomBody_name---sb\",\"plan\":\"RoomBody_plan---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Rooms/Room/RoomBody/styles.less\n// module id = 1652\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Room_with-ellipsis---sb\",\"withEllipsis\":\"Room_with-ellipsis---sb\",\"room\":\"Room_room---sb\",\"room-number\":\"Room_room-number---sb\",\"roomNumber\":\"Room_room-number---sb\",\"title\":\"Room_title---sb\",\"ribbon-wrapper\":\"Room_ribbon-wrapper---sb\",\"ribbonWrapper\":\"Room_ribbon-wrapper---sb\",\"rtl\":\"Room_rtl---sb\",\"ribbon-inner\":\"Room_ribbon-inner---sb\",\"ribbonInner\":\"Room_ribbon-inner---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Rooms/Room/styles.less\n// module id = 1653\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"rooms\":\"Rooms_rooms---sb\",\"mobile-view\":\"Rooms_mobile-view---sb\",\"mobileView\":\"Rooms_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Rooms/styles.less\n// module id = 1654\n// module chunks = 0","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst Notes = ({ className, notesArr, isMobileView }) => {\r\n return (\r\n \r\n {notesArr.map((n, i) =>
{`* ${n}`}
)}\r\n
\r\n );\r\n};\r\n\r\nNotes.propTypes = {\r\n className: PropTypes.string,\r\n isMobileView: PropTypes.bool,\r\n notesArr: PropTypes.array\r\n};\r\n\r\nexport default Notes;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Notes/Notes.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Notes_with-ellipsis---sb\",\"withEllipsis\":\"Notes_with-ellipsis---sb\",\"notes\":\"Notes_notes---sb\",\"mobile-view\":\"Notes_mobile-view---sb\",\"mobileView\":\"Notes_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Notes/styles.less\n// module id = 1656\n// module chunks = 0","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { changeDateToMomentFormat } from \"../../../helpers/dateHelpers\";\r\nimport styles from \"./styles.less\";\r\n\r\nconst Dates = ({\r\n className,\r\n titles,\r\n checkin,\r\n checkout,\r\n onNewSearchClick,\r\n isMobileView\r\n}) => {\r\n const calculateNights = () => {\r\n let result = \"\";\r\n\r\n if (checkin && checkout) {\r\n const ciMoment = changeDateToMomentFormat(checkin, \".\");\r\n const coMoment = changeDateToMomentFormat(checkout, \".\");\r\n result = coMoment.diff(ciMoment, \"days\");\r\n }\r\n\r\n return result;\r\n };\r\n\r\n return (\r\n \r\n
\r\n
{titles.CartCheckIn}:
\r\n
{checkin}
\r\n
\r\n
\r\n
{titles.CartCheckOut}:
\r\n
{checkout}
\r\n
\r\n
\r\n
\r\n
{titles.CartNights}:
\r\n
{calculateNights()}
\r\n
\r\n
\r\n {titles.NewSearch}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nDates.defaultProps = {\r\n titles: {}\r\n};\r\n\r\nDates.propTypes = {\r\n titles: PropTypes.object,\r\n checkin: PropTypes.string,\r\n checkout: PropTypes.string,\r\n className: PropTypes.string,\r\n onNewSearchClick: PropTypes.func,\r\n isMobileView: PropTypes.bool\r\n};\r\n\r\nexport default Dates;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Dates/Dates.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"dates\":\"Dates_dates---sb\",\"checkin\":\"Dates_checkin---sb\",\"checkout\":\"Dates_checkout---sb\",\"nights-and-new-search\":\"Dates_nights-and-new-search---sb\",\"nightsAndNewSearch\":\"Dates_nights-and-new-search---sb\",\"nights\":\"Dates_nights---sb\",\"title\":\"Dates_title---sb\",\"value\":\"Dates_value---sb\",\"new-search-btn\":\"Dates_new-search-btn---sb\",\"newSearchBtn\":\"Dates_new-search-btn---sb\",\"mobile-view\":\"Dates_mobile-view---sb\",\"mobileView\":\"Dates_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/Dates/styles.less\n// module id = 1658\n// module chunks = 0","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport Only from \"react-only-when\";\r\nimport { PlaceHolder } from \"../common\";\r\nimport {\r\n Header,\r\n BookingRating,\r\n Rooms,\r\n Prices,\r\n Notes,\r\n Dates,\r\n Divider\r\n} from \"./\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass Cart extends Component {\r\n componentDidMount() {\r\n window.silverbyteDOM.searchbox &&\r\n window.silverbyteDOM.searchbox.unmount(document.querySelector(\"#sbox\"));\r\n }\r\n\r\n componentWillUnmount() {\r\n window.silverbyteDOM.searchbox &&\r\n window.silverbyteDOM.searchbox.mount(document.querySelector(\"#sbox\"));\r\n }\r\n\r\n getNotesArr = () => {\r\n const { discountClubConfig, clubUserLoggedIn, titles } = this.props;\r\n\r\n let arr = [];\r\n if (titles.CartPayArrival) {\r\n arr.push(titles.CartPayArrival);\r\n }\r\n if (titles.CustomerRequestCartTitle) {\r\n arr.push(titles.CustomerRequestCartTitle);\r\n }\r\n if (titles.CustomerRequestCartTitle2) {\r\n arr.push(titles.CustomerRequestCartTitle2);\r\n }\r\n if (clubUserLoggedIn) {\r\n arr.push(\r\n titles.CartDiscountPercent &&\r\n titles.CartDiscountPercent.replace(\r\n \"%\",\r\n discountClubConfig.Percentage + \"%\"\r\n )\r\n );\r\n }\r\n\r\n return arr;\r\n };\r\n\r\n render() {\r\n const {\r\n items,\r\n isRtl,\r\n titles,\r\n propertyType,\r\n propertyName,\r\n globalCurrency,\r\n globalCurrencyCode,\r\n selectedCurrency,\r\n clubUserLoggedIn,\r\n totalPrices,\r\n clubTotalPrices,\r\n promoCode,\r\n isPromoCodeValid,\r\n checkinDate,\r\n checkoutDate,\r\n bookingRates,\r\n showCancellationPolicy,\r\n onShowCancellationPolicy,\r\n onAddonRemove,\r\n onNewSearchClick,\r\n isMobileView,\r\n placeHolders,\r\n displayPriceWithoutTaxes,\r\n taxesPrecentage\r\n } = this.props;\r\n let { bookingRatesEnabled } = this.props;\r\n\r\n const hasAnySelections = Boolean(items && items.length > 0);\r\n const hasPromocode = promoCode != \"\" && promoCode.length > 0;\r\n const hasPrice = Boolean(\r\n totalPrices.totalPrice && totalPrices.totalPrice > 0\r\n );\r\n\r\n const validBookingRate =\r\n bookingRates && bookingRates.general && bookingRates.general.score;\r\n\r\n bookingRatesEnabled = Boolean(bookingRatesEnabled && validBookingRate);\r\n\r\n return (\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n\r\n
\r\n\r\n
\r\n \r\n \r\n
{titles.PromoCode}:
\r\n
\r\n {isPromoCodeValid\r\n ? promoCode\r\n : titles.TheEnteredCodeIsNotActive}\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n\r\n
\r\n \r\n {titles.ReadOurCancelationPolicy}\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nCart.defaultProps = {\r\n items: [],\r\n propertyType: \"hotel\",\r\n showCancellationPolicy: false,\r\n clubUserLoggedIn: false,\r\n discountClubConfig: {},\r\n selectedCurrency: {},\r\n bookingRatesEnabled: false,\r\n bookingRates: {},\r\n isPromoCodeValid: false\r\n};\r\n\r\nCart.propTypes = {\r\n items: PropTypes.array,\r\n isRtl: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n titles: PropTypes.object,\r\n propertyType: PropTypes.string,\r\n propertyName: PropTypes.string,\r\n selectedCurrency: PropTypes.string,\r\n globalCurrency: PropTypes.string,\r\n globalCurrencyCode: PropTypes.string,\r\n totalPrices: PropTypes.object,\r\n clubTotalPrices: PropTypes.object,\r\n clubUserLoggedIn: PropTypes.bool,\r\n discountClubConfig: PropTypes.object,\r\n promoCode: PropTypes.string,\r\n isPromoCodeValid: PropTypes.bool,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string,\r\n bookingRatesEnabled: PropTypes.bool,\r\n bookingRates: PropTypes.object,\r\n onAddonRemove: PropTypes.func,\r\n showCancellationPolicy: PropTypes.bool,\r\n onShowCancellationPolicy: PropTypes.func,\r\n onNewSearchClick: PropTypes.func,\r\n placeHolders: PropTypes.array,\r\n displayPriceWithoutTaxes: PropTypes.bool,\r\n taxesPrecentage: PropTypes.number\r\n};\r\n\r\nexport default Cart;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/Cart/Cart.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"Cart_with-ellipsis---sb\",\"withEllipsis\":\"Cart_with-ellipsis---sb\",\"cart\":\"Cart_cart---sb\",\"rtl\":\"Cart_rtl---sb\",\"coupon\":\"Cart_coupon---sb\",\"mobile-view\":\"Cart_mobile-view---sb\",\"mobileView\":\"Cart_mobile-view---sb\",\"title\":\"Cart_title---sb\",\"code\":\"Cart_code---sb\",\"unvalid\":\"Cart_unvalid---sb\",\"booking-rating\":\"Cart_booking-rating---sb\",\"bookingRating\":\"Cart_booking-rating---sb\",\"cancelation-policy\":\"Cart_cancelation-policy---sb\",\"cancelationPolicy\":\"Cart_cancelation-policy---sb\",\"divider\":\"Cart_divider---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/Cart/styles.less\n// module id = 1660\n// module chunks = 0","/* eslint-disable no-console, no-constant-condition */\r\n\r\nimport React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nclass SearchboxWrapper extends React.Component {\r\n static defaultProps = {\r\n domAttributes: {}\r\n };\r\n\r\n static propTypes = {\r\n url: PropTypes.string.isRequired,\r\n domAttributes: PropTypes.object,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string\r\n // we may need to add more proptypes like onchangeDate onChangePax etc...\r\n };\r\n\r\n componentDidMount() {\r\n if (!this._globalSbox) {\r\n throw \"Cannot find window.silverbyteDOM or window.silverbyteDOM.searchbox, did you forgot to include the searchbox script?\";\r\n }\r\n this.mount();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const { url, checkinDate, checkoutDate } = this.props;\r\n if (url !== prevProps.url) {\r\n this.mount();\r\n }\r\n if (\r\n checkinDate !== prevProps.checkinDate ||\r\n checkoutDate !== prevProps.checkoutDate\r\n ) {\r\n this.mount();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.unmount();\r\n }\r\n\r\n _globalSbox = window.silverbyteDOM && window.silverbyteDOM.searchbox;\r\n\r\n setSboxRef = ref => (this.sboxRef = ref);\r\n\r\n mount = () => {\r\n /*still not sure what is the best approach here (sagiv)\r\n 1. we could pass all {...props} but it may cause extra renders for none relevant props.\r\n 2. we could filter props like {url, domAttributes, ...rest} but we will need to remember adding new props to filter\r\n 3. we could add a special prop like searchboxProps={key:value} then pass {...searchboxProps}\r\n 4. we could explicit add props we care about but it can get tedious and we might miss some.\r\n -------\r\n for now i went with #2 because the API looks solid and i don't think we will add any new props.\r\n */\r\n const { url, domAttributes, ...rest } = this.props;\r\n this._globalSbox && this._globalSbox.mount(this.sboxRef, rest);\r\n };\r\n\r\n unmount = () => {\r\n this._globalSbox && this._globalSbox.unmount(this.sboxRef);\r\n };\r\n\r\n render() {\r\n const { url, domAttributes } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SearchboxWrapper;\r\n\r\n/* \r\n**** Example Usage *****\r\n--------------------------------\r\n console.log(date)}\r\n onChangeCheckoutDate={date => console.log(date)}\r\n/>\r\n\r\n*/\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/SearchboxWrapper/SearchboxWrapper.js","import React, { Component } from \"react\";\r\nimport { Modal, Button } from \"semantic-ui-react\";\r\nimport cx from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\nimport { SearchboxWrapper } from \"../\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass SearchboxModal extends Component {\r\n componentDidMount() {\r\n document.addEventListener(\"click\", this.onWindowClick, false);\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener(\"click\", this.onWindowClick);\r\n }\r\n\r\n onWindowClick = event => {\r\n // If the click happened inside the modal, do nothing\r\n if (event.target.closest(\"#general-searchbox\")) return;\r\n };\r\n\r\n render() {\r\n const { domainUrl, onClose, lang, isMobileView } = this.props;\r\n const modalStyle = {\r\n background: \"transparent\"\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n // \r\n );\r\n }\r\n}\r\n\r\nSearchboxModal.propTypes = {\r\n domainUrl: PropTypes.string,\r\n onClose: PropTypes.func,\r\n lang: PropTypes.string,\r\n isMobileView: PropTypes.bool\r\n};\r\n\r\nexport default SearchboxModal;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/SearchboxModal/SearchboxModal.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"sbox-modal\":\"SearchboxModal_sbox-modal---sb\",\"sboxModal\":\"SearchboxModal_sbox-modal---sb\",\"searchbox\":\"SearchboxModal_searchbox---sb\",\"close-btn\":\"SearchboxModal_close-btn---sb\",\"closeBtn\":\"SearchboxModal_close-btn---sb\",\"mobile-view\":\"SearchboxModal_mobile-view---sb\",\"mobileView\":\"SearchboxModal_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/SearchboxModal/styles.less\n// module id = 1663\n// module chunks = 0","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid, Header } from \"semantic-ui-react\";\r\nimport { LineBreaks, RawHTML } from \"../common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass RoomsCancellationPolicy extends Component {\r\n getPaxTitles = room => {\r\n const { titles } = this.props;\r\n let result = \"\";\r\n if (room.Adults > 0) {\r\n result += `${room.Adults} ${titles.Adults}`;\r\n }\r\n if (room.Children > 0) {\r\n result += `, ${room.Children} ${titles.Children}`;\r\n }\r\n if (room.Infants > 0) {\r\n result += `, ${room.Infants} ${titles.Infants}`;\r\n }\r\n return result;\r\n };\r\n\r\n renderText = html => (\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n\r\n renderTitle = (room, index) => {\r\n const { titles } = this.props;\r\n const toRender = (\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { cpList, isRtl } = this.props;\r\n const textAlign = isRtl ? \"right\" : \"left\";\r\n return (\r\n \r\n {cpList.map((cp, index) => {\r\n return (\r\n \r\n \r\n {this.renderTitle(cp, index)}\r\n \r\n \r\n {this.renderText(cp.cancellationPolicy)}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n }\r\n}\r\n\r\nRoomsCancellationPolicy.propTypes = {\r\n isRtl: PropTypes.bool,\r\n cpList: PropTypes.array,\r\n titles: PropTypes.object\r\n};\r\n\r\nexport default RoomsCancellationPolicy;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomsCancellationPolicy/RoomsCancellationPolicy.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RoomsCancellationPolicy_with-ellipsis---sb\",\"withEllipsis\":\"RoomsCancellationPolicy_with-ellipsis---sb\",\"rooms-cancellation-policy\":\"RoomsCancellationPolicy_rooms-cancellation-policy---sb\",\"roomsCancellationPolicy\":\"RoomsCancellationPolicy_rooms-cancellation-policy---sb\",\"rtl\":\"RoomsCancellationPolicy_rtl---sb\",\"row\":\"RoomsCancellationPolicy_row---sb\",\"title\":\"RoomsCancellationPolicy_title---sb\",\"text\":\"RoomsCancellationPolicy_text---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RoomsCancellationPolicy/styles.less\n// module id = 1665\n// module chunks = 0","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nclass VirtualAnalyticsAppender extends Component {\r\n componentDidMount() {\r\n const { getAnalyticsPlaceHolders } = this.props;\r\n getAnalyticsPlaceHolders && getAnalyticsPlaceHolders();\r\n }\r\n\r\n componentWillUnmount() {\r\n const { clearAnalyticsPlaceHolders } = this.props;\r\n clearAnalyticsPlaceHolders && clearAnalyticsPlaceHolders();\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\nVirtualAnalyticsAppender.propTypes = {\r\n clearAnalyticsPlaceHolders: PropTypes.func,\r\n getAnalyticsPlaceHolders: PropTypes.func\r\n};\r\nexport default VirtualAnalyticsAppender;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/VirtualAnalyticsAppender/VirtualAnalyticsAppender.js","import BaseApi from \"./BaseApi\";\nimport { serverURL, submitRedirectURL } from \"../constants/constants\";\n//import { requestData3Pax } from './mockRequestData';\nimport qs from \"qs\";\n\nexport const getRooms = async reqObj => {\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\n const result = await BaseApi.get(`/reservationProcess/roomResults?${reqStr}`);\n return result;\n};\n\nexport const redirectToregistrationPage = (selectedSessions, hotelId) => {\n //const selectedSessionsAsJson = JSON.stringify(selectedSessions);\n let query = `hotelId=${hotelId}`;\n for (let i = 0; i < selectedSessions.length; i++) {\n const encodedSession = encodeURIComponent(selectedSessions[i]);\n query += `&sessions[${i}]=${encodedSession}`;\n }\n window.location = `${serverURL}${submitRedirectURL}?${query}`;\n};\n\nexport const getCurrencies = async () => {\n //const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\n const result = await BaseApi.get(`http://www.boi.org.il/currency.xml`, true);\n return result;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/rooms.js","(function(self) {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob()\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isDataView = function(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers()\n rawHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = 'status' in options ? options.status : 200\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/whatwg-fetch/fetch.js\n// module id = 1668\n// module chunks = 0","import BaseApi from \"./BaseApi\";\r\n//import { serverURL } from '../constants/constants';\r\n//import { requestData3Pax } from './mockRequestData';\r\nimport qs from \"qs\";\r\n\r\nexport const getAddons = async reqObj => {\r\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\r\n const result = await BaseApi.get(`/reservationProcess/GetAddons?${reqStr}`);\r\n return result;\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/addons.js","import { THUMBNAIL_DISPLAY } from \"../constants/actionTypes\";\r\n\r\nexport const setThumbnailDisplay = thumbailDisplay => ({\r\n type: THUMBNAIL_DISPLAY,\r\n payload: thumbailDisplay\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/actions/thumbnailDisplayActions.js","import BaseApi from \"./BaseApi\";\r\nimport qs from \"qs\";\r\n\r\nexport const getPlaceHoldersApi = async reqObj => {\r\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\r\n return await BaseApi.get(`/placeholders/GetPlaceHolders?${reqStr}`);\r\n};\r\n\r\nexport const getAnalyticsPlaceHoldersApi = async reqObj => {\r\n return await BaseApi.post(`/placeholders/GetAnalyticsMarkup`, reqObj);\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/placeHolders.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"SearchResults_with-ellipsis---sb\",\"withEllipsis\":\"SearchResults_with-ellipsis---sb\",\"search-results\":\"SearchResults_search-results---sb\",\"searchResults\":\"SearchResults_search-results---sb\",\"title\":\"SearchResults_title---sb\",\"inner-grid\":\"SearchResults_inner-grid---sb\",\"innerGrid\":\"SearchResults_inner-grid---sb\",\"mobileViewWrapper\":\"SearchResults_mobileViewWrapper---sb\",\"main-header-wrapper\":\"SearchResults_main-header-wrapper---sb\",\"mainHeaderWrapper\":\"SearchResults_main-header-wrapper---sb\",\"header-text\":\"SearchResults_header-text---sb\",\"headerText\":\"SearchResults_header-text---sb\",\"rtl\":\"SearchResults_rtl---sb\",\"subtitle-text\":\"SearchResults_subtitle-text---sb\",\"subtitleText\":\"SearchResults_subtitle-text---sb\",\"compact-bottom\":\"SearchResults_compact-bottom---sb\",\"compactBottom\":\"SearchResults_compact-bottom---sb\",\"main-view-wrapper\":\"SearchResults_main-view-wrapper---sb\",\"mainViewWrapper\":\"SearchResults_main-view-wrapper---sb\",\"appeared\":\"SearchResults_appeared---sb\",\"mobile-view\":\"SearchResults_mobile-view---sb\",\"mobileView\":\"SearchResults_mobile-view---sb\",\"room-seperator\":\"SearchResults_room-seperator---sb\",\"roomSeperator\":\"SearchResults_room-seperator---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/containers/SearchResults/styles.less\n// module id = 1672\n// module chunks = 0","export { default as RegionResults } from \"./RegionResults\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/RegionResults/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { push } from \"react-router-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { isRTL, selectedType } from \"../../reducers\";\r\nimport { getPropertyRegionsTitle } from \"../../helpers/general-helpers\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport * as regionResultsActions from \"../../actions/regionResultsActions\";\r\nimport { RegionsHotelsGroup } from \"../../components/RegionsHotelsGroup/RegionsHotelsGroup\";\r\nimport { Header, PlaceHolder } from \"../../components/common\";\r\nimport qs from \"qs\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass RegionResults extends Component {\r\n async componentDidMount() {\r\n // onLoad from generalHandlers of ScrollManager wrapper:\r\n // check whether scrolling up should be done, if do, scroll.\r\n this.props.onLoad();\r\n await this.loadData();\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n const { searchDataTimestamp } = this.props;\r\n const { searchDataTimestamp: prevSearchDataTimestamp } = prevProps;\r\n if (searchDataTimestamp && searchDataTimestamp > prevSearchDataTimestamp) {\r\n await this.loadData();\r\n }\r\n }\r\n\r\n async loadData() {\r\n const {\r\n selectedRegionId: regionId,\r\n selectedCityCode: cityCode,\r\n checkinDate: fromDate,\r\n checkoutDate: toDate,\r\n lang,\r\n paxList,\r\n actions,\r\n promoCode,\r\n selectedType\r\n } = this.props;\r\n const reqObj = { pax: paxList, fromDate, toDate, lang, promoCode };\r\n\r\n reqObj.searchOption = {\r\n value: regionId || cityCode,\r\n optionType: selectedType\r\n };\r\n\r\n await actions.getRegionResults(reqObj); // pause next execution\r\n }\r\n\r\n /// remove previous selection key and add the new selection key to query.\r\n /// push the updated data to browser histoy to change current route\r\n onHotelSelect = hotelId => {\r\n const { actions } = this.props;\r\n const getHotelRouteWithQuery = id => {\r\n const { routing } = this.props;\r\n const currentQuery = qs.parse(routing.location.search, {\r\n ignoreQueryPrefix: true\r\n });\r\n currentQuery.selectedRegionId = undefined;\r\n currentQuery.selectedCityCode = undefined;\r\n currentQuery.selectedHotelId = id;\r\n return {\r\n pathname: \"/hotel\",\r\n search: qs.stringify(currentQuery, { addQueryPrefix: true }),\r\n notifyRoute: this.props.notifyRouteChange\r\n };\r\n };\r\n\r\n actions.push(getHotelRouteWithQuery(hotelId));\r\n };\r\n\r\n onShowHotelDetailsClick = hotelId => {\r\n const { onShowHotelDetailsClick } = this.props;\r\n onShowHotelDetailsClick(hotelId);\r\n };\r\n\r\n filterByHotel = regions => {\r\n const { hotelFilter } = this.props;\r\n if (hotelFilter && hotelFilter.length > 0) {\r\n const hotelsAfterFilter = [];\r\n regions &&\r\n regions.forEach(region => {\r\n const hotels = [];\r\n region &&\r\n region.roomResult &&\r\n region.roomResult.forEach(hotel => {\r\n let index = hotelFilter.findIndex(\r\n r => r.hotelId == hotel.hotelId && r.hotelName == hotel.name\r\n );\r\n if (index > -1) {\r\n hotels.push(hotel);\r\n }\r\n });\r\n if (hotels && hotels.length > 0) {\r\n hotelsAfterFilter.push({\r\n ...region,\r\n roomResult: [...hotels]\r\n });\r\n }\r\n });\r\n return hotelsAfterFilter;\r\n } else {\r\n return regions;\r\n }\r\n };\r\n\r\n filterByPrice = regions => {\r\n const { minPriceRangeFilter, maxPriceRangeFilter } = this.props;\r\n if (minPriceRangeFilter > 0 || maxPriceRangeFilter > 0) {\r\n const regionsAfterFilter = [];\r\n regions.forEach(region => {\r\n const hotels = [];\r\n region &&\r\n region.roomResult &&\r\n region.roomResult.forEach(hotel => {\r\n let isInRange =\r\n Math.round(hotel.startFromPrice) >= minPriceRangeFilter &&\r\n Math.round(hotel.startFromPrice) <= maxPriceRangeFilter;\r\n if (isInRange) {\r\n hotels.push(hotel);\r\n }\r\n });\r\n if (hotels && hotels.length > 0) {\r\n regionsAfterFilter.push({\r\n ...region,\r\n roomResult: [...hotels]\r\n });\r\n }\r\n });\r\n return regionsAfterFilter;\r\n } else {\r\n return regions;\r\n }\r\n };\r\n\r\n filterRegions = regions => {\r\n const filteredByHotel = this.filterByHotel(regions);\r\n const filteredByPrice = this.filterByPrice(filteredByHotel);\r\n return filteredByPrice;\r\n };\r\n\r\n renderPageContent = () => {\r\n const {\r\n isRtl,\r\n titles,\r\n onShowHotelDetailsClick,\r\n regionResults,\r\n isMobileView,\r\n selectedType,\r\n propertyType,\r\n propertyTypePlural,\r\n checkinDate,\r\n checkoutDate,\r\n clubUserLoggedIn,\r\n discountClubConfig\r\n } = this.props;\r\n const filteredRegions = this.filterRegions(regionResults);\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n isFetchingRegionResults,\r\n renderLoader,\r\n regionResults,\r\n isRtl,\r\n isMobileView,\r\n titles,\r\n propertyType,\r\n handleRegionResultsRef,\r\n placeHolders\r\n } = this.props;\r\n let hasResults = regionResults.length > 0;\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {isFetchingRegionResults || !hasResults\r\n ? renderLoader(isFetchingRegionResults)\r\n : this.renderPageContent()}\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nRegionResults.propTypes = {\r\n lang: PropTypes.string,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string,\r\n paxList: PropTypes.array,\r\n titles: PropTypes.object,\r\n promoCode: PropTypes.string,\r\n isMobileView: PropTypes.bool,\r\n isRtl: PropTypes.bool,\r\n actions: PropTypes.object,\r\n selectedRegionId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n selectedCityCode: PropTypes.string,\r\n regionResults: PropTypes.array,\r\n isFetchingRegionResults: PropTypes.bool,\r\n routing: PropTypes.object,\r\n onShowHotelDetailsClick: PropTypes.func,\r\n renderLoader: PropTypes.func,\r\n selectedType: PropTypes.string,\r\n searchDataTimestamp: PropTypes.number,\r\n notifyRouteChange: PropTypes.func,\r\n onLoad: PropTypes.func,\r\n propertyType: PropTypes.string,\r\n propertyTypePlural: PropTypes.string,\r\n handleRegionResultsRef: PropTypes.func,\r\n placeHolders: PropTypes.array,\r\n hotelFilter: PropTypes.array,\r\n minPriceRangeFilter: PropTypes.number,\r\n maxPriceRangeFilter: PropTypes.number,\r\n clubUserLoggedIn: PropTypes.bool,\r\n discountClubConfig: PropTypes.object\r\n};\r\n\r\nfunction mapStateToProps(store) {\r\n const state = {\r\n lang: store.lang,\r\n checkinDate: store.checkinDate,\r\n checkoutDate: store.checkoutDate,\r\n titles: store.titles,\r\n promoCode: store.promoCode,\r\n viewDirection: store.viewDirection,\r\n isMobileView: store.isMobileView,\r\n isRtl: isRTL(store),\r\n selectedType: selectedType(store),\r\n selectedRegionId: store.selectedRegionId,\r\n selectedCityCode: store.selectedCityCode,\r\n paxList: store.paxList,\r\n regionResults: store.regionResults,\r\n isFetchingRegionResults: store.isFetchingRegionResults,\r\n routing: store.routing,\r\n searchDataTimestamp: store.searchDataTimestamp,\r\n propertyType: store.propertyType,\r\n propertyTypePlural: store.propertyTypePlural,\r\n placeHolders: store.placeHolders,\r\n hotelFilter: store.hotelFilter,\r\n minPriceRangeFilter: store.minPriceRangeFilter,\r\n maxPriceRangeFilter: store.maxPriceRangeFilter,\r\n clubUserLoggedIn: store.clubUserLoggedIn,\r\n discountClubConfig: store.discountClubConfig\r\n };\r\n return state;\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n const combinedActions = {\r\n ...regionResultsActions,\r\n push\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(RegionResults);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/RegionResults/RegionResults.js","import BaseApi from \"./BaseApi\";\nimport qs from \"qs\";\n\nexport const getRegionResults = async reqObj => {\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\n const result = await BaseApi.get(\n `/reservationProcess/RegionResultsR?${reqStr}`\n );\n return result;\n};\n\n// export const redirectToHotelSearchResultsPage = (selectedSessions, hotelId) => {\n// let query = `hotelId=${hotelId}`;\n// for (let i = 0; i < selectedSessions.length; i++) {\n// const encodedSession = encodeURIComponent(selectedSessions[i]);\n// query += `&sessions[${i}]=${encodedSession}`;\n// }\n// window.location = `${serverURL}/reservationProcess/?${query}`;\n// };\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/regions.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"main-regions-hotels-wrapper\":\"RegionsHotelsGroup_main-regions-hotels-wrapper---sb\",\"mainRegionsHotelsWrapper\":\"RegionsHotelsGroup_main-regions-hotels-wrapper---sb\",\"main-header-wrapper\":\"RegionsHotelsGroup_main-header-wrapper---sb\",\"mainHeaderWrapper\":\"RegionsHotelsGroup_main-header-wrapper---sb\",\"header-wrapper\":\"RegionsHotelsGroup_header-wrapper---sb\",\"headerWrapper\":\"RegionsHotelsGroup_header-wrapper---sb\",\"room-name\":\"RegionsHotelsGroup_room-name---sb\",\"roomName\":\"RegionsHotelsGroup_room-name---sb\",\"custom-sub-title\":\"RegionsHotelsGroup_custom-sub-title---sb\",\"customSubTitle\":\"RegionsHotelsGroup_custom-sub-title---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RegionsHotelsGroup/styles.less\n// module id = 1676\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"RegionResults_with-ellipsis---sb\",\"withEllipsis\":\"RegionResults_with-ellipsis---sb\",\"region-results\":\"RegionResults_region-results---sb\",\"regionResults\":\"RegionResults_region-results---sb\",\"inner-grid\":\"RegionResults_inner-grid---sb\",\"innerGrid\":\"RegionResults_inner-grid---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/containers/RegionResults/styles.less\n// module id = 1677\n// module chunks = 0","export { default as AllResults } from \"./AllResults\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/AllResults/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { push } from \"react-router-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { isRTL, selectedType } from \"../../reducers\";\r\nimport { getPropertyRegionsTitle } from \"../../helpers/general-helpers\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport * as regionResultsActions from \"../../actions/regionResultsActions\";\r\nimport { RegionsHotelsGroup } from \"../../components/RegionsHotelsGroup/RegionsHotelsGroup\";\r\nimport { Header } from \"../../components/common\";\r\nimport qs from \"qs\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass AllResults extends Component {\r\n async componentDidMount() {\r\n // onLoad from generalHandlers of ScrollManager wrapper:\r\n // check whether scrolling up should be done, if do, scroll.\r\n this.props.onLoad();\r\n await this.loadData();\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n const { searchDataTimestamp } = this.props;\r\n const { searchDataTimestamp: prevSearchDataTimestamp } = prevProps;\r\n if (searchDataTimestamp && searchDataTimestamp > prevSearchDataTimestamp) {\r\n await this.loadData();\r\n }\r\n }\r\n\r\n async loadData() {\r\n const {\r\n selectedRegionId: regionId,\r\n selectedCityCode: cityCode,\r\n checkinDate: fromDate,\r\n checkoutDate: toDate,\r\n lang,\r\n paxList,\r\n promoCode,\r\n actions,\r\n selectedType\r\n } = this.props;\r\n const reqObj = { pax: paxList, fromDate, toDate, lang, promoCode };\r\n\r\n reqObj.searchOption = {\r\n value: regionId || cityCode,\r\n optionType: selectedType\r\n };\r\n\r\n await actions.getRegionResults(reqObj); // pause next execution\r\n }\r\n\r\n /// remove previous selection key and add the new selection key to query.\r\n /// push the updated data to browser histoy to change current route\r\n onHotelSelect = hotelId => {\r\n const { actions } = this.props;\r\n const getHotelRouteWithQuery = id => {\r\n const { routing } = this.props;\r\n const currentQuery = qs.parse(routing.location.search, {\r\n ignoreQueryPrefix: true\r\n });\r\n currentQuery.selectedRegionId = undefined;\r\n currentQuery.selectedCityCode = undefined;\r\n currentQuery.selectedHotelId = id;\r\n return {\r\n pathname: \"/hotel\",\r\n search: qs.stringify(currentQuery, { addQueryPrefix: true }),\r\n notifyRoute: this.props.notifyRouteChange\r\n };\r\n };\r\n\r\n actions.push(getHotelRouteWithQuery(hotelId));\r\n };\r\n\r\n onShowHotelDetailsClick = hotelId => {\r\n const { onShowHotelDetailsClick } = this.props;\r\n onShowHotelDetailsClick(hotelId);\r\n };\r\n\r\n filterByHotel = regions => {\r\n const { hotelFilter } = this.props;\r\n if (hotelFilter && hotelFilter.length > 0) {\r\n const hotelsAfterFilter = [];\r\n regions &&\r\n regions.forEach(region => {\r\n const hotels = [];\r\n region &&\r\n region.roomResult &&\r\n region.roomResult.forEach(hotel => {\r\n let index = hotelFilter.findIndex(\r\n r => r.hotelId == hotel.hotelId && r.hotelName == hotel.name\r\n );\r\n if (index > -1) {\r\n hotels.push(hotel);\r\n }\r\n });\r\n if (hotels && hotels.length > 0) {\r\n hotelsAfterFilter.push({\r\n ...region,\r\n roomResult: [...hotels]\r\n });\r\n }\r\n });\r\n return hotelsAfterFilter;\r\n } else {\r\n return regions;\r\n }\r\n };\r\n\r\n filterByRegion = regions => {\r\n const { regionFilter } = this.props;\r\n if (regionFilter && regionFilter.length > 0) {\r\n const regionsAfterFilter = [];\r\n regions &&\r\n regions.forEach(region => {\r\n let index = regionFilter.findIndex(\r\n r => r.regionId == region.regionId && r.title == region.title\r\n );\r\n if (index > -1) {\r\n regionsAfterFilter.push(region);\r\n }\r\n });\r\n return regionsAfterFilter;\r\n } else {\r\n return regions;\r\n }\r\n };\r\n\r\n filterByPrice = regions => {\r\n const { minPriceRangeFilter, maxPriceRangeFilter } = this.props;\r\n if (minPriceRangeFilter > 0 || maxPriceRangeFilter > 0) {\r\n const regionsAfterFilter = [];\r\n regions.forEach(region => {\r\n const hotels = [];\r\n region &&\r\n region.roomResult &&\r\n region.roomResult.forEach(hotel => {\r\n let isInRange =\r\n Math.round(hotel.startFromPrice) >= minPriceRangeFilter &&\r\n Math.round(hotel.startFromPrice) <= maxPriceRangeFilter;\r\n if (isInRange) {\r\n hotels.push(hotel);\r\n }\r\n });\r\n if (hotels && hotels.length > 0) {\r\n regionsAfterFilter.push({\r\n ...region,\r\n roomResult: [...hotels]\r\n });\r\n }\r\n });\r\n return regionsAfterFilter;\r\n } else {\r\n return regions;\r\n }\r\n };\r\n\r\n filterRegions = regions => {\r\n const filteredByRegion = this.filterByRegion(regions);\r\n const filteredByHotel = this.filterByHotel(filteredByRegion);\r\n const filteredByPrice = this.filterByPrice(filteredByHotel);\r\n return filteredByPrice;\r\n };\r\n\r\n renderAllResults = () => {\r\n const { regionResults } = this.props;\r\n const filteredRegions = this.filterRegions(regionResults);\r\n return filteredRegions.map((region, key) =>\r\n this.renderPageContent(region, key)\r\n );\r\n };\r\n\r\n renderPageContent = (region, key) => {\r\n const {\r\n isRtl,\r\n titles,\r\n onShowHotelDetailsClick,\r\n isMobileView,\r\n selectedType,\r\n propertyType,\r\n propertyTypePlural,\r\n checkinDate,\r\n checkoutDate,\r\n clubUserLoggedIn,\r\n discountClubConfig,\r\n showPricePerNightThumb\r\n } = this.props;\r\n let regionarray = [];\r\n regionarray.push(region);\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n isFetchingRegionResults,\r\n renderLoader,\r\n regionResults,\r\n titles,\r\n isRtl,\r\n isMobileView,\r\n handleRegionResultsRef,\r\n propertyType\r\n } = this.props;\r\n let hasResults = regionResults.length > 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {isFetchingRegionResults || !hasResults\r\n ? renderLoader(isFetchingRegionResults)\r\n : this.renderAllResults()}\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nAllResults.propTypes = {\r\n lang: PropTypes.string,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string,\r\n paxList: PropTypes.array,\r\n titles: PropTypes.object,\r\n isMobileView: PropTypes.bool,\r\n isRtl: PropTypes.bool,\r\n actions: PropTypes.object,\r\n selectedRegionId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n selectedCityCode: PropTypes.string,\r\n regionResults: PropTypes.array,\r\n isFetchingRegionResults: PropTypes.bool,\r\n routing: PropTypes.object,\r\n onShowHotelDetailsClick: PropTypes.func,\r\n renderLoader: PropTypes.func,\r\n selectedType: PropTypes.string,\r\n searchDataTimestamp: PropTypes.number,\r\n notifyRouteChange: PropTypes.func,\r\n onLoad: PropTypes.func,\r\n propertyType: PropTypes.string,\r\n propertyTypePlural: PropTypes.string,\r\n handleRegionResultsRef: PropTypes.func,\r\n hotelFilter: PropTypes.array,\r\n regionFilter: PropTypes.array,\r\n minPriceRangeFilter: PropTypes.number,\r\n maxPriceRangeFilter: PropTypes.number,\r\n clubUserLoggedIn: PropTypes.bool,\r\n showPricePerNightThumb: PropTypes.bool,\r\n discountClubConfig: PropTypes.object\r\n};\r\n\r\nfunction mapStateToProps(store) {\r\n const state = {\r\n lang: store.lang,\r\n checkinDate: store.checkinDate,\r\n checkoutDate: store.checkoutDate,\r\n titles: store.titles,\r\n viewDirection: store.viewDirection,\r\n isMobileView: store.isMobileView,\r\n promoCode: store.promoCode,\r\n isRtl: isRTL(store),\r\n selectedType: selectedType(store),\r\n selectedRegionId: store.selectedRegionId,\r\n selectedCityCode: store.selectedCityCode,\r\n paxList: store.paxList,\r\n regionResults: store.regionResults,\r\n isFetchingRegionResults: store.isFetchingRegionResults,\r\n routing: store.routing,\r\n searchDataTimestamp: store.searchDataTimestamp,\r\n propertyType: store.propertyType,\r\n propertyTypePlural: store.propertyTypePlural,\r\n hotelFilter: store.hotelFilter,\r\n regionFilter: store.regionFilter,\r\n minPriceRangeFilter: store.minPriceRangeFilter,\r\n maxPriceRangeFilter: store.maxPriceRangeFilter,\r\n clubUserLoggedIn: store.clubUserLoggedIn,\r\n showPricePerNightThumb: store.showPricePerNightThumb,\r\n discountClubConfig: store.discountClubConfig\r\n };\r\n return state;\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n const combinedActions = {\r\n ...regionResultsActions,\r\n push\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n}\r\n\r\nexport default withRouter(\r\n connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n )(AllResults)\r\n);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/AllResults/AllResults.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"AllResults_with-ellipsis---sb\",\"withEllipsis\":\"AllResults_with-ellipsis---sb\",\"all-results\":\"AllResults_all-results---sb\",\"allResults\":\"AllResults_all-results---sb\",\"inner-grid\":\"AllResults_inner-grid---sb\",\"innerGrid\":\"AllResults_inner-grid---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/containers/AllResults/styles.less\n// module id = 1680\n// module chunks = 0","export { default as DealsResults } from \"./DealsResults\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/DealsResults/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { Route } from \"react-router-dom\";\r\nimport { push } from \"react-router-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport moment from \"moment\";\r\nimport qs from \"qs\";\r\nimport {\r\n clearAnalyticsPlaceHolders,\r\n getAnalyticsPlaceHolders\r\n} from \"../../actions/placeHoldersActions\";\r\nimport { DEAL_RESULTS_ANALYTICS_PHASE } from \"../../constants/general\";\r\nimport { Grid, Ref } from \"semantic-ui-react\";\r\nimport * as dealsActions from \"../../actions/dealsActions\";\r\nimport DealsGroup from \"../../components/DealsGroup\";\r\nimport DealDetails from \"../../components/DealDetails\";\r\nimport RoomDetailsAndAmenities from \"../../components/RoomDetailsAndAmenities\";\r\nimport { isRTL } from \"../../reducers\";\r\nimport * as roomResultsActions from \"../../actions/roomResultsActions\";\r\nimport * as paxActions from \"../../actions/paxActions\";\r\nimport * as addonsActions from \"../../actions/addonsActions\";\r\nimport { priceNormelizer } from \"../../helpers/tags\";\r\nimport { NoResultsPage, Fader, AnimatedSwitch } from \"../../components/common\";\r\nimport DealThumbNailCustom from \"../../components/DealThumbNailCustom\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass DealsResults extends Component {\r\n state = {\r\n title: null,\r\n subTitle: null,\r\n\r\n // for scrolling logic (we need to scroll when the image loaded)\r\n selectedDealImageLoaded: false\r\n };\r\n\r\n async componentDidMount() {\r\n const {\r\n selectedDealId,\r\n selectedHotelId,\r\n actions,\r\n discountClubConfig,\r\n lang\r\n } = this.props;\r\n this.props.onLoad();\r\n const reqObj = {\r\n clubCode: discountClubConfig && discountClubConfig.ClubCode,\r\n selectedHotelId: null,\r\n lang\r\n };\r\n await actions.getDealsResult(reqObj);\r\n\r\n if (selectedDealId) {\r\n const { deals } = this.props;\r\n const selectedDeal = deals.find(\r\n deal =>\r\n deal.id &&\r\n deal.id.toString() == selectedDealId &&\r\n deal.hotelId == selectedHotelId\r\n );\r\n actions.getDealDetails(selectedDeal);\r\n }\r\n }\r\n\r\n async componentDidUpdate(prevProps, prevState) {\r\n const { onLoad, selectedDealId, actions, deals } = this.props;\r\n //remove unusable code\r\n const { selectedDealImageLoaded } = this.state;\r\n if (\r\n selectedDealImageLoaded &&\r\n prevState.selectedDealImageLoaded !== selectedDealImageLoaded\r\n ) {\r\n onLoad();\r\n }\r\n //end remove\r\n if (prevProps.selectedDealId !== selectedDealId) {\r\n if (selectedDealId) {\r\n const selectedDeal = deals.find(\r\n deal => deal.id && deal.id.toString() == selectedDealId\r\n );\r\n //Get deal data\r\n await actions.getDealDetails(selectedDeal);\r\n }\r\n //reset previous search\r\n actions.resetSelection();\r\n actions.resetSelectedPaxIndex();\r\n actions.resetPaxList();\r\n actions.changeDisplayRoom(null);\r\n actions.resetDealSearchResult();\r\n }\r\n }\r\n\r\n /**\r\n * Get analytics code from server and append it to #page-analytics-wrapper element ( append action include the execution ).\r\n * Generate the code with the data stored until this phase ( ex, no masterid )\r\n */\r\n getAnalyticsPlaceHolders = deal => {\r\n const { actions } = this.props;\r\n let checkin = moment(deal.startDate);\r\n checkin = checkin.format(\"DD.MM.YYYY\");\r\n let checkout = moment(deal.endDate);\r\n checkout = checkout.format(\"DD.MM.YYYY\");\r\n const postObject = {\r\n Phase: DEAL_RESULTS_ANALYTICS_PHASE,\r\n Currency: deal.currencyCode,\r\n HotelId: deal.hotelId,\r\n HotelName: deal.hotelName,\r\n CheckInDate: checkin,\r\n CheckoutDate: checkout,\r\n DealId: deal.id\r\n };\r\n actions.getAnalyticsPlaceHolders(postObject);\r\n };\r\n\r\n //remove unusable code\r\n onSelectedDealImageLoaded = () => {\r\n this.setState({ selectedDealImageLoaded: true });\r\n };\r\n //end remove\r\n\r\n onRateSelection = ({ ...selectedRateParams }) => {\r\n const { onRateSelection, dealSearchResults } = this.props;\r\n\r\n // dispatch global event of roomselected\r\n const event = new CustomEvent(\"__be_dealSelected\", {\r\n detail: {\r\n roomId: selectedRateParams.roomId,\r\n dealId: selectedRateParams.dealId\r\n }\r\n });\r\n window.dispatchEvent(event);\r\n\r\n onRateSelection({\r\n ...selectedRateParams,\r\n dealSearchResults\r\n });\r\n };\r\n\r\n onRateReadMore = ({ rateId, roomId }) => {\r\n const { onRateReadMore } = this.props;\r\n onRateReadMore({ rateId, roomId, render: this.renderRoomDetails });\r\n };\r\n\r\n renderRoomDetails = room => {\r\n const { titles, isRtl, ShowCancellationPolicy, isMobileView } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n\r\n /// remove previous selection key and add the new selection key to query.\r\n /// push the updated data to browser histoy to change current route\r\n onDealSelect = (dealId, hotelId) => {\r\n const { actions } = this.props;\r\n const getDealRouteWithQuery = id => {\r\n const { routing } = this.props;\r\n let resultPathname = \"/deals\";\r\n const currentQuery = qs.parse(routing.location.search, {\r\n ignoreQueryPrefix: true\r\n });\r\n currentQuery.selectedHotelId = hotelId;\r\n currentQuery.selectedCityCode = undefined;\r\n currentQuery.selectedRegionId = undefined;\r\n if (\r\n currentQuery.selectedDealId != null &&\r\n currentQuery.selectedDealId == id\r\n ) {\r\n currentQuery.selectedDealId = undefined;\r\n } else {\r\n resultPathname += \"/deal\";\r\n currentQuery.selectedDealId = id;\r\n }\r\n\r\n return {\r\n pathname: resultPathname,\r\n search: qs.stringify(currentQuery, { addQueryPrefix: true })\r\n };\r\n };\r\n\r\n actions.push(getDealRouteWithQuery(dealId));\r\n actions.resetDealMode();\r\n };\r\n\r\n performDealSearch = async dealData => {\r\n const {\r\n actions,\r\n showMessage,\r\n enableAddonsPopUp,\r\n enableAddonsRegistration\r\n } = this.props;\r\n try {\r\n await actions.getDealSearch(dealData);\r\n const {\r\n SelectedHotelID,\r\n CheckIn,\r\n CheckOut,\r\n Lang,\r\n PromoCode,\r\n Pax\r\n } = dealData.searchData;\r\n const addonReqObj = {\r\n hotelId: SelectedHotelID,\r\n fromDate: CheckIn,\r\n toDate: CheckOut,\r\n lang: Lang,\r\n promoCode: PromoCode,\r\n pax: Pax\r\n };\r\n if (enableAddonsPopUp || enableAddonsRegistration) {\r\n await actions.getAddonsResult(addonReqObj); // pause next execution\r\n }\r\n } catch (err) {\r\n showMessage(\"An error occoured, Please try again later\", \"error\");\r\n }\r\n };\r\n\r\n normalizeDealsToProduct = deal => {\r\n const product = {\r\n id: deal.id,\r\n name: deal.name,\r\n lowestPrice: deal.totalPrice,\r\n oldPrice: deal.oldPrice,\r\n simpleClubTotalPrice: deal.simpleClubTotalPrice,\r\n currency: deal.currency,\r\n currencyCode: deal.currencyCode,\r\n description: deal.description,\r\n images: deal.image,\r\n defaultImage: deal.image,\r\n hotelName: deal.hotelName,\r\n hotelId: deal.hotelId,\r\n startDate: moment(deal.startDate).format(\"DD/MM/YY\"),\r\n endDate: moment(deal.endDate).format(\"DD/MM/YY\")\r\n };\r\n return product;\r\n };\r\n\r\n filterByPlans = rooms => {\r\n const { planFilter } = this.props;\r\n if (planFilter && planFilter.length > 0) {\r\n const roomsAfterFilter = [];\r\n rooms.forEach(element => {\r\n const rates = [];\r\n element &&\r\n element.rates &&\r\n element.rates.forEach(rate => {\r\n let index = planFilter.findIndex(\r\n r => r.planCode == rate.planCode && r.planName == rate.planName\r\n );\r\n if (index > -1) {\r\n rates.push(rate);\r\n }\r\n });\r\n if (rates && rates.length > 0) {\r\n roomsAfterFilter.push({\r\n ...element,\r\n rates: [...rates]\r\n });\r\n }\r\n });\r\n return roomsAfterFilter;\r\n } else {\r\n return rooms;\r\n }\r\n };\r\n\r\n createPrice = (price, currency) => {\r\n const priceStr = priceNormelizer`${price} ${currency}`;\r\n return {priceStr}
;\r\n };\r\n\r\n renderDealsMarkUp = (product, onDealClick) => {\r\n const { titles, isIE, discountClubConfig, clubUserLoggedIn } = this.props;\r\n const showClubPrices =\r\n discountClubConfig && discountClubConfig.Active && !clubUserLoggedIn;\r\n return (\r\n \r\n );\r\n };\r\n\r\n renderImageMarkup = product => {\r\n //const { titles } = this.props;\r\n return {product.hotelName}
;\r\n };\r\n\r\n showSimpleClubLoginModal = () => {\r\n const { showSimpleClubLoginModal } = this.props;\r\n showSimpleClubLoginModal();\r\n };\r\n\r\n filterByHotel = deals => {\r\n const { hotelFilter } = this.props;\r\n if (hotelFilter && hotelFilter.length > 0) {\r\n const dealsAfterFilter = [];\r\n deals &&\r\n deals.forEach(deal => {\r\n let index = hotelFilter.findIndex(\r\n r => r.hotelId == deal.hotelId && r.hotelName == deal.hotelName\r\n );\r\n if (index > -1) {\r\n dealsAfterFilter.push(deal);\r\n }\r\n });\r\n return dealsAfterFilter;\r\n } else {\r\n return deals;\r\n }\r\n };\r\n\r\n filterByPrice = deals => {\r\n const { minPriceRangeFilter, maxPriceRangeFilter } = this.props;\r\n if (minPriceRangeFilter > 0 || maxPriceRangeFilter > 0) {\r\n const dealsAfterFilter = [];\r\n deals.forEach(deal => {\r\n let isInRange =\r\n Math.round(deal.totalPricee) >= minPriceRangeFilter &&\r\n Math.round(deal.totalPrice) <= maxPriceRangeFilter;\r\n if (isInRange) {\r\n dealsAfterFilter.push(deal);\r\n }\r\n });\r\n return dealsAfterFilter;\r\n } else {\r\n return deals;\r\n }\r\n };\r\n\r\n filterDeals = deals => {\r\n const filteredByHotel = this.filterByHotel(deals);\r\n const filteredByPrice = this.filterByPrice(filteredByHotel);\r\n return filteredByPrice;\r\n };\r\n\r\n renderDealsGroup = () => {\r\n const {\r\n isRtl,\r\n titles,\r\n isMobileView,\r\n deals,\r\n lang,\r\n routing,\r\n rooms,\r\n dealSearchPerformed,\r\n isDealMode,\r\n isfetchingRooms,\r\n renderLoader,\r\n selectedDealId,\r\n handleSelectedDealRef,\r\n clubUserLoggedIn,\r\n discountClubConfig,\r\n showClubPrices,\r\n isIos,\r\n isIE,\r\n lastMinuteDaysDeal,\r\n showHotDeal,\r\n onLoad\r\n } = this.props;\r\n const filteredDeals = this.filterDeals(deals);\r\n return (\r\n 0}\r\n selectedDealId={selectedDealId}\r\n handleSelectedDealRef={handleSelectedDealRef}\r\n onThumbnailImageLoad={this.onSelectedDealImageLoaded}\r\n isRtl={isRtl}\r\n isMobileView={isMobileView}\r\n titles={titles}\r\n onDealClick={this.onDealSelect}\r\n results={filteredDeals}\r\n normalizeResult={this.normalizeDealsToProduct}\r\n isDeals={true}\r\n renderMarkup={this.renderDealsMarkUp}\r\n lang={lang}\r\n routing={routing}\r\n performDealSearch={this.performDealSearch}\r\n rooms={rooms}\r\n dealSearchPerformed={dealSearchPerformed}\r\n isDealMode={isDealMode}\r\n renderImageMarkup={this.renderImageMarkup}\r\n isFetchingDealSearchResults={isfetchingRooms}\r\n renderLoader={renderLoader}\r\n clubUserLoggedIn={clubUserLoggedIn}\r\n isClubActive={discountClubConfig && discountClubConfig.Active}\r\n showClubPrices={showClubPrices}\r\n lastMinuteDaysDeal={lastMinuteDaysDeal}\r\n showHotDeal={showHotDeal}\r\n isIos={isIos}\r\n isIE={isIE}\r\n onLoad={onLoad}\r\n />\r\n );\r\n };\r\n\r\n renderDealDetails = () => {\r\n const {\r\n isRtl,\r\n onLoad,\r\n titles,\r\n isMobileView,\r\n deal,\r\n lang,\r\n actions,\r\n routing,\r\n selectedDealId,\r\n dealSearchResults,\r\n selectedPaxId,\r\n clubUserLoggedIn,\r\n discountClubConfig,\r\n redirectFormRef,\r\n ShowCancellationPolicy,\r\n isFetchingDealsSearchResults,\r\n showClubPrices,\r\n renderLoader,\r\n showAvailability,\r\n onShowRoomGalleryPopUp,\r\n isDealAnimationActive,\r\n isDealMode,\r\n handleDealRatesGroupRef,\r\n onShowDealExtraDetailsClick,\r\n onDealRatesClick,\r\n domainUrl,\r\n placeHolders,\r\n isIos,\r\n isIE,\r\n minPriceRangeFilter,\r\n maxPriceRangeFilter,\r\n planFilter,\r\n showPricePerNightThumb,\r\n displayPriceWithoutTaxes\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n renderNoResultsPage = () => {\r\n const { titles, hotelData, isRtl } = this.props;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n isFetchingDealsResults,\r\n renderLoader,\r\n hasDealResults,\r\n handleDealsResultsRef,\r\n routing\r\n } = this.props;\r\n return (\r\n \r\n [\r\n \r\n {/* while fetching data - render only loader */}\r\n {isFetchingDealsResults && renderLoader(true)}\r\n\r\n {/* if result is empty - render no results view*/}\r\n {!isFetchingDealsResults &&\r\n !hasDealResults &&\r\n this.renderNoResultsPage()}\r\n\r\n {/* if result is exist - render relavent route*/}\r\n {!isFetchingDealsResults &&\r\n hasDealResults && (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ]\r\n \r\n );\r\n }\r\n}\r\n\r\nDealsResults.defaultProps = {\r\n onLoad: () => {}\r\n};\r\n\r\nDealsResults.propTypes = {\r\n lang: PropTypes.string,\r\n titles: PropTypes.object,\r\n isMobileView: PropTypes.bool,\r\n isRtl: PropTypes.bool,\r\n isIE: PropTypes.bool,\r\n isIos: PropTypes.bool,\r\n actions: PropTypes.object,\r\n routing: PropTypes.object,\r\n renderLoader: PropTypes.func,\r\n deals: PropTypes.array,\r\n deal: PropTypes.object,\r\n isFetchingDealsResults: PropTypes.bool,\r\n dealSearchPerformed: PropTypes.bool,\r\n rooms: PropTypes.object,\r\n isDealMode: PropTypes.bool,\r\n isfetchingRooms: PropTypes.bool,\r\n selectedDealId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n handleSelectedDealRef: PropTypes.func,\r\n onLoad: PropTypes.func,\r\n discountClubConfig: PropTypes.object,\r\n dealSearchResults: PropTypes.array,\r\n selectedPaxId: PropTypes.number,\r\n onRateSelection: PropTypes.func,\r\n clubUserLoggedIn: PropTypes.bool,\r\n showSimpleClubLoginModal: PropTypes.func,\r\n onRateReadMore: PropTypes.func,\r\n ShowCancellationPolicy: PropTypes.bool,\r\n redirectFormRef: PropTypes.func,\r\n showClubPrices: PropTypes.bool,\r\n isFetchingDealsSearchResults: PropTypes.bool,\r\n showAvailability: PropTypes.bool,\r\n isDealAnimationActive: PropTypes.bool,\r\n onShowRoomGalleryPopUp: PropTypes.func,\r\n handleDealRatesGroupRef: PropTypes.func,\r\n handleDealsResultsRef: PropTypes.func,\r\n onDealRatesClick: PropTypes.func,\r\n hasDealResults: PropTypes.bool,\r\n hotelData: PropTypes.object,\r\n showMessage: PropTypes.func,\r\n onShowDealExtraDetailsClick: PropTypes.func,\r\n showHotDeal: PropTypes.bool,\r\n lastMinuteDaysDeal: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n domainUrl: PropTypes.string,\r\n placeHolders: PropTypes.array,\r\n planFilter: PropTypes.array,\r\n hotelFilter: PropTypes.array,\r\n maxPriceRangeFilter: PropTypes.number,\r\n minPriceRangeFilter: PropTypes.number,\r\n enableAddonsPopUp: PropTypes.bool,\r\n enableAddonsRegistration: PropTypes.bool,\r\n showPricePerNightThumb: PropTypes.bool,\r\n displayPriceWithoutTaxes: PropTypes.bool\r\n};\r\n\r\nDealsResults.defaultProps = {\r\n isIE: false\r\n};\r\n\r\nfunction mapStateToProps(store) {\r\n const state = {\r\n lang: store.lang,\r\n titles: store.titles,\r\n isMobileView: store.isMobileView,\r\n isRtl: isRTL(store),\r\n isIE: store.isIE,\r\n isIos: store.isIos,\r\n isFetchingDealsResults: store.isFetchingDealsResults,\r\n routing: store.routing,\r\n deals: store.deals,\r\n deal: store.deal,\r\n rooms: store.rooms,\r\n dealSearchPerformed: store.dealSearchPerformed,\r\n isDealMode: store.isDealMode,\r\n isfetchingRooms: store.isfetchingRooms,\r\n selectedDealId: store.selectedDealId,\r\n selectedHotelId: store.selectedHotelId,\r\n discountClubConfig: store.discountClubConfig,\r\n dealSearchResults: store.dealSearchResults,\r\n selectedPaxId: store.selectedPaxId,\r\n clubUserLoggedIn: store.clubUserLoggedIn,\r\n ShowCancellationPolicy: store.ShowCancellationPolicy,\r\n isFetchingDealsSearchResults: store.isFetchingDealsSearchResults,\r\n showAvailability: store.showAvailability,\r\n isDealAnimationActive: store.isDealAnimationActive,\r\n selectedAddonsGroup: store.selectedAddonsGroup,\r\n hasDealResults: store.hasDealResults,\r\n hotelData: store.hotelData,\r\n showHotDeal: store.showHotDeal,\r\n lastMinuteDaysDeal: store.lastMinuteDaysDeal,\r\n domainUrl: store.domainUrl,\r\n placeHolders: store.placeHolders,\r\n planFilter: store.planFilter,\r\n hotelFilter: store.hotelFilter,\r\n maxPriceRangeFilter: store.maxPriceRangeFilter,\r\n minPriceRangeFilter: store.minPriceRangeFilter,\r\n enableAddonsPopUp: store.enableAddonsPopUp,\r\n enableAddonsRegistration: store.enableAddonsRegistration,\r\n showPricePerNightThumb: store.showPricePerNightThumb,\r\n displayPriceWithoutTaxes: store.displayPriceWithoutTaxes\r\n };\r\n return state;\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n const combinedActions = {\r\n ...dealsActions,\r\n ...roomResultsActions,\r\n ...paxActions,\r\n ...addonsActions,\r\n clearAnalyticsPlaceHolders,\r\n getAnalyticsPlaceHolders,\r\n push\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(DealsResults);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/DealsResults/DealsResults.js","import BaseApi from \"./BaseApi\";\r\n//import { serverURL } from '../constants/constants';\r\n//import { requestData3Pax } from './mockRequestData';\r\nimport qs from \"qs\";\r\n\r\nexport const getDeals = async reqObj => {\r\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\r\n const result = await BaseApi.get(`/deals/GetDeals?${reqStr}`);\r\n return result;\r\n};\r\n\r\nexport const getDealDetail = async reqObj => {\r\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\r\n const result = await BaseApi.get(`/deals/GetDeal?${reqStr}`);\r\n return result;\r\n};\r\n\r\nexport const doDealSearch = async reqObj => {\r\n const reqStr = qs.stringify(reqObj, { allowDots: true, encode: false });\r\n const result = await BaseApi.get(`/deals/GetPackageSearch?${reqStr}`);\r\n return result;\r\n};\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/api/deals.js","export { default } from \"./DealsGroup\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealsGroup/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport styles from \"./styles.less\";\r\nimport ResultBox from \"../ResultsGroup/ResultBox\";\r\nimport { DealWrraper } from \"../DealWrraper\";\r\nimport { Header } from \"../../components/common\";\r\n\r\nconst noop = () => {};\r\nexport class DealsGroup extends Component {\r\n componentDidMount() {\r\n this.props.onLoad();\r\n }\r\n\r\n renderBox = (result, onShowDealDetailsClick) => {\r\n const {\r\n isRtl,\r\n titles,\r\n isMobileView,\r\n normalizeResult,\r\n isDeals,\r\n isRegionResult,\r\n renderMarkup,\r\n renderImageMarkup,\r\n selectedDealId,\r\n onThumbnailImageLoad,\r\n handleSelectedDealRef\r\n } = this.props;\r\n const normalizedResult = normalizeResult ? normalizeResult(result) : result;\r\n const isSelectedResult = selectedDealId === result.id.toString();\r\n return (\r\n \r\n );\r\n };\r\n\r\n getDealComponents = (results, numElemsInRow) => {\r\n let desktopResutlsIndex = -1;\r\n let desktopResults = [];\r\n results.map((result, index) => {\r\n if (index % numElemsInRow == 0) {\r\n desktopResutlsIndex++;\r\n desktopResults[desktopResutlsIndex] = [];\r\n }\r\n desktopResults[desktopResutlsIndex].push(result);\r\n });\r\n return desktopResults;\r\n };\r\n\r\n getHotDeal = () => {\r\n const { results, showHotDeal } = this.props;\r\n // let sortedDealsByPrice = results.sort(function(a, b) {\r\n // return a.totalPrice - b.totalPrice;\r\n // });\r\n const dealWithMinPrice =\r\n showHotDeal &&\r\n results.length > 0 &&\r\n results.reduce(function(p, v) {\r\n return p.totalPrice < v.totalPrice ? p : v;\r\n });\r\n return dealWithMinPrice;\r\n };\r\n\r\n // getFastDesicionDeal = () => {\r\n // const { results } = this.props;\r\n // const fastDesicionDeals =\r\n // results.length > 0 &&\r\n // results.map(\r\n // deals =>\r\n // deals.startDate.diff(deals.endDate, \"days\") < moment().add(30, \"days\")\r\n // );\r\n // return fastDesicionDeals;\r\n // };\r\n\r\n render() {\r\n const {\r\n results,\r\n isRtl,\r\n isMobileView,\r\n lang,\r\n onDealClick,\r\n routing,\r\n titles,\r\n performDealSearch,\r\n rooms,\r\n dealSearchPerformed,\r\n isDealMode,\r\n isFetchingDealSearchResults,\r\n lastMinuteDaysDeal,\r\n renderLoader,\r\n isIos,\r\n isIE\r\n } = this.props;\r\n let data = isMobileView\r\n ? this.getDealComponents(results, 1)\r\n : this.getDealComponents(results, 2);\r\n const dealWithMinPrice = this.getHotDeal();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {data.map((item, key) => (\r\n \r\n ))}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nDealsGroup.defaultProps = {\r\n isRtl: false,\r\n isIE: false,\r\n isMobileView: false,\r\n isRegionResult: false,\r\n titles: {},\r\n results: []\r\n};\r\n\r\nDealsGroup.propTypes = {\r\n isRtl: PropTypes.bool,\r\n isIE: PropTypes.bool,\r\n isIos: PropTypes.bool,\r\n isMobileView: PropTypes.bool,\r\n isRegionResult: PropTypes.bool,\r\n titles: PropTypes.object,\r\n results: PropTypes.array,\r\n normalizeResult: PropTypes.func,\r\n isDeals: PropTypes.bool,\r\n renderMarkup: PropTypes.func,\r\n renderImageMarkup: PropTypes.func,\r\n lang: PropTypes.string,\r\n onDealClick: PropTypes.func,\r\n routing: PropTypes.object,\r\n performDealSearch: PropTypes.func,\r\n dealSearchPerformed: PropTypes.bool,\r\n rooms: PropTypes.object,\r\n isDealMode: PropTypes.bool,\r\n isFetchingDealSearchResults: PropTypes.bool,\r\n selectedDealId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n renderLoader: PropTypes.func,\r\n onThumbnailImageLoad: PropTypes.func,\r\n handleSelectedDealRef: PropTypes.func,\r\n showHotDeal: PropTypes.bool,\r\n lastMinuteDaysDeal: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n onLoad: PropTypes.func\r\n};\r\n\r\nexport default DealsGroup;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealsGroup/DealsGroup.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"main-deals-group-wrapper\":\"DealsGroup_main-deals-group-wrapper---sb\",\"mainDealsGroupWrapper\":\"DealsGroup_main-deals-group-wrapper---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/DealsGroup/styles.less\n// module id = 1686\n// module chunks = 0","export { default as DealWrraper } from \"./DealWrraper\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealWrraper/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport qs from \"qs\";\r\nimport cx from \"classnames\";\r\nimport styles from \"./styles.less\";\r\nimport moment from \"moment\";\r\nimport { Ribbon } from \"../common\";\r\n\r\nclass DealWrraper extends Component {\r\n getDealRoute = () => {\r\n const { routing } = this.props;\r\n const currentQuery = qs.parse(\r\n routing && routing.location && routing.location.search,\r\n {\r\n ignoreQueryPrefix: true\r\n }\r\n );\r\n return currentQuery ? currentQuery.selectedDealId : null;\r\n };\r\n\r\n getDetailsExpanded = dealId => {\r\n const { deals } = this.props;\r\n let dealDetailsExpanded = false;\r\n deals.forEach(deal => {\r\n if (deal.id == dealId) {\r\n dealDetailsExpanded = true;\r\n }\r\n });\r\n return dealDetailsExpanded;\r\n };\r\n\r\n getSelectedDeal = dealId => {\r\n const { deals } = this.props;\r\n let selectedDeal = null;\r\n deals.forEach(deal => {\r\n if (deal.id == dealId) {\r\n selectedDeal = deal;\r\n }\r\n });\r\n return selectedDeal;\r\n };\r\n\r\n checkIfFastDecosionDeal = deal => {\r\n const { lastMinuteDaysDeal } = this.props;\r\n const today = moment();\r\n const isFastDecision = moment(deal.endDate).diff(\r\n today.add(lastMinuteDaysDeal, \"days\")\r\n );\r\n return isFastDecision < 0;\r\n };\r\n\r\n checkIfShowRibbon = deal => {\r\n const { dealWithMinPrice } = this.props;\r\n if (deal.id == dealWithMinPrice.id || this.checkIfFastDecosionDeal(deal)) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n getRibbonType = deal => {\r\n const { dealWithMinPrice } = this.props;\r\n if (deal.id == dealWithMinPrice.id) {\r\n return 1;\r\n } else if (this.checkIfFastDecosionDeal(deal)) {\r\n return 2;\r\n }\r\n };\r\n\r\n getRibbonTitle = deal => {\r\n const { titles } = this.props;\r\n switch (this.getRibbonType(deal)) {\r\n case 1:\r\n return titles.HotDeal;\r\n case 2:\r\n return titles.LastMinuteDeal;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n renderRibbon = deal => {\r\n const { isRtl, isMobileView, isIos } = this.props;\r\n return (\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n deals,\r\n renderBox,\r\n onDealClick,\r\n isMobileView,\r\n isRtl,\r\n isIos,\r\n isIE\r\n } = this.props;\r\n return (\r\n //\r\n deals.map((deal, index) => (\r\n \r\n {this.checkIfShowRibbon(deal) && this.renderRibbon(deal)}\r\n {renderBox(deal, onDealClick)}\r\n \r\n ))\r\n //\r\n );\r\n }\r\n}\r\n\r\nDealWrraper.propTypes = {\r\n deals: PropTypes.array,\r\n renderBox: PropTypes.func,\r\n routing: PropTypes.object,\r\n onDealClick: PropTypes.func,\r\n titles: PropTypes.object,\r\n isMobileView: PropTypes.bool,\r\n isRtl: PropTypes.bool,\r\n dealWithMinPrice: PropTypes.object,\r\n isIos: PropTypes.bool,\r\n isIE: PropTypes.bool,\r\n lastMinuteDaysDeal: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\r\n};\r\n\r\nexport default DealWrraper;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealWrraper/DealWrraper.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"title-deal\":\"DealWrraper_title-deal---sb\",\"titleDeal\":\"DealWrraper_title-deal---sb\",\"title-dealTop\":\"DealWrraper_title-dealTop---sb\",\"titleDealTop\":\"DealWrraper_title-dealTop---sb\",\"title-dealWrapper\":\"DealWrraper_title-dealWrapper---sb\",\"titleDealWrapper\":\"DealWrraper_title-dealWrapper---sb\",\"title-dealSlash\":\"DealWrraper_title-dealSlash---sb\",\"titleDealSlash\":\"DealWrraper_title-dealSlash---sb\",\"slash\":\"DealWrraper_slash---sb\",\"price-deal\":\"DealWrraper_price-deal---sb\",\"priceDeal\":\"DealWrraper_price-deal---sb\",\"deal-box-row\":\"DealWrraper_deal-box-row---sb\",\"dealBoxRow\":\"DealWrraper_deal-box-row---sb\",\"deal-box-column\":\"DealWrraper_deal-box-column---sb\",\"dealBoxColumn\":\"DealWrraper_deal-box-column---sb\",\"mobile-view\":\"DealWrraper_mobile-view---sb\",\"mobileView\":\"DealWrraper_mobile-view---sb\",\"ie-is-shit\":\"DealWrraper_ie-is-shit---sb\",\"ieIsShit\":\"DealWrraper_ie-is-shit---sb\",\"deal-details-container\":\"DealWrraper_deal-details-container---sb\",\"dealDetailsContainer\":\"DealWrraper_deal-details-container---sb\",\"deal-details-arrow-up\":\"DealWrraper_deal-details-arrow-up---sb\",\"dealDetailsArrowUp\":\"DealWrraper_deal-details-arrow-up---sb\",\"deal-details-arrow-up-visible\":\"DealWrraper_deal-details-arrow-up-visible---sb\",\"dealDetailsArrowUpVisible\":\"DealWrraper_deal-details-arrow-up-visible---sb\",\"deal-ribbon\":\"DealWrraper_deal-ribbon---sb\",\"dealRibbon\":\"DealWrraper_deal-ribbon---sb\",\"deal-ribbon-ios-is-shit\":\"DealWrraper_deal-ribbon-ios-is-shit---sb\",\"dealRibbonIosIsShit\":\"DealWrraper_deal-ribbon-ios-is-shit---sb\",\"deal-ribbon-wrapper\":\"DealWrraper_deal-ribbon-wrapper---sb\",\"dealRibbonWrapper\":\"DealWrraper_deal-ribbon-wrapper---sb\",\"deal-ribbon-wrapper-rtl\":\"DealWrraper_deal-ribbon-wrapper-rtl---sb\",\"dealRibbonWrapperRtl\":\"DealWrraper_deal-ribbon-wrapper-rtl---sb\",\"deal-ribbon-wrapper-rtl-mobile-view\":\"DealWrraper_deal-ribbon-wrapper-rtl-mobile-view---sb\",\"dealRibbonWrapperRtlMobileView\":\"DealWrraper_deal-ribbon-wrapper-rtl-mobile-view---sb\",\"deal-ribbon-wrapper-mobile-view\":\"DealWrraper_deal-ribbon-wrapper-mobile-view---sb\",\"dealRibbonWrapperMobileView\":\"DealWrraper_deal-ribbon-wrapper-mobile-view---sb\",\"deal-ribbon-wrapper-text\":\"DealWrraper_deal-ribbon-wrapper-text---sb\",\"dealRibbonWrapperText\":\"DealWrraper_deal-ribbon-wrapper-text---sb\",\"deal-ribbon-wrapper-text-hot-deal\":\"DealWrraper_deal-ribbon-wrapper-text-hot-deal---sb\",\"dealRibbonWrapperTextHotDeal\":\"DealWrraper_deal-ribbon-wrapper-text-hot-deal---sb\",\"deal-ribbon-wrapper-text-fast-decision\":\"DealWrraper_deal-ribbon-wrapper-text-fast-decision---sb\",\"dealRibbonWrapperTextFastDecision\":\"DealWrraper_deal-ribbon-wrapper-text-fast-decision---sb\",\"visible\":\"DealWrraper_visible---sb\",\"ios-is-shit\":\"DealWrraper_ios-is-shit---sb\",\"iosIsShit\":\"DealWrraper_ios-is-shit---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/DealWrraper/styles.less\n// module id = 1689\n// module chunks = 0","export { default } from \"./DealDetails\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealDetails/index.js","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport moment from \"moment\";\nimport { Grid, Form } from \"semantic-ui-react\";\nimport SearchboxWrapper from \"../SearchboxWrapper\";\nimport DealsRatesGroup from \"../DealsRatesGroup\";\nimport PriceDisplay from \"../../containers/PriceDisplay\";\nimport { Header, RawHTML, PlaceHolder } from \"../../components/common\";\nimport styles from \"./styles.less\";\n\nconst imageSrcWithCrop = src => `${src}?w=450&h=300&mode=crop`;\n\nclass DealDetails extends React.Component {\n state = {\n searchBoxRendered: false,\n showNoResultsMesage: false,\n searchBoxVisible: true,\n showReadMore: false,\n searchBoxUrl: null,\n checkinDate: null,\n checkoutDate: null\n };\n\n componentDidMount() {\n const { onLoad, domainUrl, lang, deal } = this.props;\n this.isReadMoreOverlapping(); // after first mount ( refs already got attached ) , update showReadMore flag.\n window.addEventListener(\"resize\", this.isReadMoreOverlapping); // add showReadMore flag updating callback to window resize event.\n onLoad();\n const hotel = deal && deal.hotelId ? deal.hotelId.toString() : null;\n const searchBoxUrl = `${domainUrl}?enabledRegionSelection=false&lang=${lang}&selectedOption.optionType=Hotel&selectedOption.value=${hotel}&date=${moment()}`;\n this.setState({ searchBoxUrl });\n }\n\n // componentDidUpdate(prevProps, prevState) {\n // if(this.props.selectedPaxId !== prevProps.selectedPaxId){\n // this.setState({triggerFading: true})\n // }\n // }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.isReadMoreOverlapping);\n }\n\n innerDealDescriptionRef = null;\n outerDealDescriptionRef = null;\n\n getAnalyticsPlaceHolders = () => {\n const { deal, getAnalyticsPlaceHolders } = this.props;\n getAnalyticsPlaceHolders && getAnalyticsPlaceHolders(deal);\n };\n\n /** check if the wrapper element of the room description TEXT is higher\n * than the wrapper element of the room description area ( inc read more text and fader ).\n * if so, the fader (inc read more text) should be applied on the dom and be visible to the user.\n */\n isReadMoreOverlapping = () => {\n let newState = {\n showReadMore: false\n };\n\n if (this.innerDealDescriptionRef && this.outerDealDescriptionRef) {\n if (\n this.innerDealDescriptionRef.offsetHeight >\n this.outerDealDescriptionRef.offsetHeight\n ) {\n newState.showReadMore = true;\n }\n }\n\n this.setState(newState);\n };\n\n setOuterDealDescriptionRef = ref => (this.outerDealDescriptionRef = ref);\n\n setInnerDealDescriptionRef = ref => (this.innerDealDescriptionRef = ref);\n\n openSearchBox = () => {\n this.setState({ searchBoxVisible: true });\n };\n\n performSearch = data => {\n const { performDealSearch, deal, lang } = this.props;\n const SelectedOption = {\n value: data.selectedOption.value,\n optionType: data.selectedOption.optionType\n };\n const paxList =\n data &&\n data.pax &&\n data.pax.map((p, index) => {\n return {\n ...p,\n id: index\n };\n });\n const searchData = {\n CheckIn: data.checkinDate,\n CheckOut: data.checkoutDate,\n Pax: paxList,\n PromoCode: data.promoCode,\n SelectedHotelID: data.selectedOption.value,\n SelectedOption: SelectedOption,\n Lang: lang\n };\n const dealData = {\n dealID: deal.id,\n dealParentID: deal.parentID,\n searchData: searchData,\n lang: lang\n };\n performDealSearch(dealData);\n this.setState({ searchBoxVisible: false, showNoResultsMesage: true });\n };\n\n renderDealLoader = isFetchingDealsSearchResults => {\n const { renderLoader } = this.props;\n return (\n \n {renderLoader(isFetchingDealsSearchResults)}\n
\n );\n };\n\n showSimpleClubLoginModal = () => {\n const { showSimpleClubLoginModal } = this.props;\n showSimpleClubLoginModal();\n };\n\n onShowDealDetailsClick = () => {\n const { deal, onShowDealExtraDetailsClick } = this.props;\n onShowDealExtraDetailsClick && onShowDealExtraDetailsClick(deal);\n };\n\n onRateSelection = ({ ...rateSelectedParams }) => {\n this.setState({ showNoResultsMesage: false });\n const { onRateSelection, onDealRatesClick } = this.props;\n onRateSelection({ ...rateSelectedParams });\n onDealRatesClick();\n };\n\n handleDealRatesGroupRef = node => {\n const { handleDealRatesGroupRef } = this.props;\n if (handleDealRatesGroupRef) {\n handleDealRatesGroupRef(node);\n } else {\n this.dealRatesGroup = node;\n }\n };\n\n getDealComponents = (results, numElemsInRow) => {\n let desktopResutlsIndex = -1;\n let desktopResults = [];\n results.map((result, index) => {\n if (index % numElemsInRow == 0) {\n desktopResutlsIndex++;\n desktopResults[desktopResutlsIndex] = [];\n }\n desktopResults[desktopResutlsIndex].push(result);\n });\n return desktopResults;\n };\n\n renderDealSearchResults = (deals, showClubPrices, showRoomNumberTitle) => {\n const {\n titles,\n selectedPaxId,\n ShowCancellationPolicy,\n showAvailability,\n onRateReadMore,\n clubUserLoggedIn,\n onShowRoomGalleryPopUp,\n clubPercentageDiscount,\n isClubActive,\n isRtl,\n isMobileView,\n onDealRatesClick,\n clearAnalyticsPlaceHolders,\n showPricePerNightThumb,\n displayPriceWithoutTaxes\n } = this.props;\n //const groupedDeals = this.getDealComponents(deals, 3);\n\n return (\n // [\n \n // ]\n );\n };\n\n renderNoResults = () => {\n const { titles } = this.props;\n return (\n \n {titles.NoSearchResultsMessage}\n
\n );\n };\n\n filterDealsSearchResults = data => {\n const filteredByPlan = this.filterByPlans(data);\n const filteredByPriceRange = this.filterByPriceRange(filteredByPlan);\n return filteredByPriceRange;\n };\n\n filterByPriceRange = rooms => {\n const { minPriceRangeFilter, maxPriceRangeFilter } = this.props;\n if (minPriceRangeFilter > 0 || maxPriceRangeFilter > 0) {\n const roomsAfterFilter = [];\n rooms.forEach(rate => {\n let isInRange =\n rate.totalPrice >= minPriceRangeFilter &&\n rate.totalPrice <= maxPriceRangeFilter;\n if (isInRange) {\n roomsAfterFilter.push(rate);\n }\n });\n return roomsAfterFilter;\n } else {\n return rooms;\n }\n };\n\n filterByPlans = rooms => {\n const { planFilter } = this.props;\n if (planFilter && planFilter.length > 0) {\n const roomsAfterFilter = [];\n rooms.forEach(rate => {\n let index = planFilter.findIndex(\n r => r.planCode == rate.planCode && r.planName == rate.planName\n );\n if (index > -1) {\n roomsAfterFilter.push(rate);\n }\n });\n return roomsAfterFilter;\n } else {\n return rooms;\n }\n };\n\n render() {\n const {\n deal,\n titles,\n isMobileView,\n isRtl,\n onImageLoad,\n dealSearchResults,\n selectedPaxId,\n isFetchingDealsSearchResults,\n isClubActive,\n placeHolders,\n clubUserLoggedIn,\n displayPriceWithoutTaxes\n } = this.props;\n const { showReadMore } = this.state;\n const dealRatesByReqDesc =\n dealSearchResults && dealSearchResults[selectedPaxId];\n const hasResults = dealRatesByReqDesc\n ? dealRatesByReqDesc.filter(deal => deal.availability > 0).length > 0\n : false;\n const filteredDealsSearchResults = this.filterDealsSearchResults(\n dealRatesByReqDesc\n );\n const showClubPrices = isClubActive && !clubUserLoggedIn;\n dealSearchResults && dealSearchResults[selectedPaxId];\n const showRoomNumberTitle = dealSearchResults.length > 1;\n const altImage = `${deal.name} ${titles.room}`;\n\n let formattedStartDate;\n if (deal) {\n formattedStartDate = moment(deal.startDate).format(\"DD.MM.YYYY\");\n }\n\n const {\n showNoResultsMesage,\n searchBoxVisible,\n searchBoxUrl,\n checkinDate,\n checkoutDate\n } = this.state;\n return (\n \n \n \n \n \n \n \n \n \n \n
\n
\n
}\n)
\n
\n
\n
\n
\n \n {moment(deal.startDate).format(\"DD/MM/YY\") +\n \" - \" +\n moment(deal.endDate).format(\"DD/MM/YY\")}\n \n
\n {isMobileView && (\n
\n {deal.description && (\n \n )}\n
\n )}\n {!isMobileView && (\n
\n
\n
\n
\n {titles.ReadMore}\n
\n
\n
\n {deal.description && (\n \n )}\n
\n
\n
\n )}\n
\n
\n {titles.StartingFrom}\n {deal.oldPrice > 0 &&\n !displayPriceWithoutTaxes && (\n
\n \n {price => price}\n \n \n )}\n
\n \n {price => price}\n \n \n {titles.ForNight}\n
\n {showClubPrices && (\n
\n {titles.SpecialPriceForClubMemeber} \n
\n {price => price}\n \n
\n )}\n
\n
\n
\n
\n
\n \n \n {searchBoxUrl && (\n \n \n \n
\n {titles.SearchForAvailableDates}:\n
\n
\n {\n this.setState({ checkinDate });\n }}\n onChangeCheckoutDate={checkoutDate => {\n this.setState({ checkoutDate });\n }}\n />\n
\n
\n \n \n )}\n \n \n \n \n \n \n );\n }\n}\n\nDealDetails.propTypes = {\n deal: PropTypes.object,\n lang: PropTypes.string,\n titles: PropTypes.object,\n isMobileView: PropTypes.bool,\n onLoad: PropTypes.func,\n performDealSearch: PropTypes.func,\n isRtl: PropTypes.bool,\n isFetchingDealsSearchResults: PropTypes.bool,\n renderLoader: PropTypes.func,\n //createPrice: PropTypes.func,\n onImageLoad: PropTypes.func,\n dealSearchResults: PropTypes.array,\n selectedPaxId: PropTypes.number,\n onRateSelection: PropTypes.func,\n isClubActive: PropTypes.bool,\n clubUserLoggedIn: PropTypes.bool,\n showSimpleClubLoginModal: PropTypes.func,\n showAvailability: PropTypes.bool,\n onRateReadMore: PropTypes.func,\n ShowCancellationPolicy: PropTypes.bool,\n onShowRoomGalleryPopUp: PropTypes.func,\n //isDealMode: PropTypes.bool,\n handleDealRatesGroupRef: PropTypes.func,\n onDealRatesClick: PropTypes.func,\n onShowDealExtraDetailsClick: PropTypes.func,\n clubPercentageDiscount: PropTypes.number,\n domainUrl: PropTypes.string,\n placeHolders: PropTypes.array,\n getAnalyticsPlaceHolders: PropTypes.func,\n clearAnalyticsPlaceHolders: PropTypes.func,\n planFilter: PropTypes.array,\n maxPriceRangeFilter: PropTypes.number,\n minPriceRangeFilter: PropTypes.number,\n showPricePerNightThumb: PropTypes.bool,\n displayPriceWithoutTaxes: PropTypes.bool\n};\n\nexport default DealDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealDetails/DealDetails.js","export { default } from \"./DealsRatesGroup\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealsRatesGroup/index.js","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport { Grid, Image } from \"semantic-ui-react\";\nimport { Header } from \"../common\";\nimport DealRate from \"../../components/DealRate\";\nimport RatesTable from \"../RatesTable/RatesTable\";\nimport styles from \"./styles.less\";\n\nclass DealsRatesGroup extends Component {\n state = {\n appearRates: true,\n rateSelected: false\n };\n\n componentDidMount() {\n const { onDealRatesShow, getAnalyticsPlaceHolders } = this.props;\n setTimeout(onDealRatesShow, 0);\n getAnalyticsPlaceHolders && getAnalyticsPlaceHolders();\n }\n\n componentWillUnmount() {\n const { clearAnalyticsPlaceHolders } = this.props;\n clearAnalyticsPlaceHolders && clearAnalyticsPlaceHolders();\n }\n\n onRateSelection = ({ ...rateSelectedParams }) => {\n // dispatch global event of roomselected\n const event = new CustomEvent(\"__be_roomSelected\", {\n detail: {\n roomId: rateSelectedParams.roomId\n }\n });\n window.dispatchEvent(event);\n\n this.setState({ rateSelected: true });\n const { onRateSelection } = this.props;\n onRateSelection({ ...rateSelectedParams });\n };\n\n renderRate = (rate, image, roomId, oldPrice, roomName, deal) => {\n const {\n titles,\n isRtl,\n isMobileView,\n showClubPrices,\n showAvailability,\n onRateReadMore,\n ShowCancellationPolicy,\n showSimpleClubLoginModal,\n clubUserLoggedIn,\n onShowRoomGalleryPopUp,\n isIE\n } = this.props;\n\n return (\n \n \n \n );\n };\n\n renderRateImage = imageSrc => {\n return (\n \n \n \n );\n };\n\n renderRoomsAsTables = data => {\n const {\n showClubPrices,\n isRtl,\n titles,\n selectedPaxId,\n ShowCancellationPolicy,\n isClubActive,\n clubUserLoggedIn,\n clubPercentageDiscount,\n onRateReadMore,\n onShowRoomGalleryPopUp,\n isIE,\n showPricePerNightThumb,\n displayPriceWithoutTaxes\n } = this.props;\n\n return (\n \n );\n };\n\n renderRatesAsGroups = data => {\n if (data && data.length >= 1) {\n return data.map((deal /*, rowIndex*/) => {\n return (\n //\n this.renderRate(\n deal.rate,\n deal.imageUrl,\n deal.roomId,\n deal.oldPrice,\n deal.name,\n deal\n )\n //\n );\n });\n } else {\n return (\n //\n this.renderRate(\n data.rate,\n data.imageUrl,\n data.roomId,\n data.oldPrice,\n data.name,\n data\n )\n //\n );\n }\n };\n\n render() {\n const {\n titles,\n selectedPaxId,\n showRoomNumberTitle,\n isMobileView,\n isRtl,\n deals\n } = this.props;\n const headerText = showRoomNumberTitle\n ? `${titles.PleaseSelectRoomNumber} ${selectedPaxId + 1} :`\n : `${titles.SelectRate}`;\n //const fadeIn = deals.length > 0;\n return (\n \n \n \n \n {isMobileView\n ? deals.map((data, key) => (\n \n {this.renderRatesAsGroups(data, key)}\n \n ))\n : this.renderRoomsAsTables(deals)}\n \n );\n }\n}\n\nDealsRatesGroup.propTypes = {\n isRtl: PropTypes.bool,\n isMobileView: PropTypes.bool,\n titles: PropTypes.object,\n showAvailability: PropTypes.bool,\n onRateReadMore: PropTypes.func,\n showClubPrices: PropTypes.bool,\n ShowCancellationPolicy: PropTypes.bool,\n isIE: PropTypes.bool,\n deals: PropTypes.array,\n onRateSelection: PropTypes.func,\n clubUserLoggedIn: PropTypes.bool,\n showSimpleClubLoginModal: PropTypes.func,\n selectedPaxId: PropTypes.number,\n showRoomNumberTitle: PropTypes.bool,\n onShowRoomGalleryPopUp: PropTypes.func,\n onDealRatesShow: PropTypes.func,\n isClubActive: PropTypes.bool,\n clubPercentageDiscount: PropTypes.number,\n getAnalyticsPlaceHolders: PropTypes.func,\n clearAnalyticsPlaceHolders: PropTypes.func,\n showPricePerNightThumb: PropTypes.bool,\n displayPriceWithoutTaxes: PropTypes.bool\n};\n\nexport default DealsRatesGroup;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealsRatesGroup/DealsRatesGroup.js","export { default } from \"./DealRate\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealRate/index.js","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport { RawHTML } from \"../common\";\nimport Dotdotdot from \"react-dotdotdot\";\nimport styles from \"./styles.less\";\nimport GalleryPopUp from \"../GalleryPopUp\";\nimport PriceDisplay from \"../../containers/PriceDisplay\";\n\nconst imageSrcWithCrop = src => `${src}?w=450&h=300&mode=crop`;\n\nclass DealRate extends Component {\n // componentDidUpdate() {\n // if (this.rateRef && this.imageRef) {\n // const rate = this.rateRef;\n // const image = this.imageRef;\n // const width = rate.scrollWidth;\n // const height = (width * 3) / 4;\n // requestAnimationFrame(() => {\n // image.style.height = height + \"px\";\n // });\n // }\n // }\n\n createDealRef = ref => (this.rateRef = ref);\n createImageRef = ref => (this.imageRef = ref);\n\n onClick = () => {\n const {\n onClick,\n rateId,\n priceCode,\n planCode,\n allocationCode,\n roomId\n } = this.props;\n onClick({ rateId, priceCode, planCode, allocationCode, roomId });\n };\n\n onReadeMoreClick = e => {\n e.preventDefault();\n e.stopPropagation(); // so we won't select the rate (parent element)\n const { onRateReadMore, rateId, roomId } = this.props;\n onRateReadMore({ rateId, roomId });\n };\n\n showSimpleClubLoginModal = () => {\n const { showSimpleClubLoginModal } = this.props;\n showSimpleClubLoginModal();\n };\n\n onShowRoomGalleryPopUp = () => {\n const { onShowRoomGalleryPopUp, room } = this.props;\n onShowRoomGalleryPopUp(room);\n };\n\n renderRate = () => {\n const {\n active,\n planName,\n titleName,\n price,\n isRtl,\n titles,\n isPackage,\n availability,\n lowAvailabilityCount,\n showAvailability,\n showClubPrices,\n ratePriceAfterDiscount,\n oldPrice,\n isIE,\n isMobileView,\n room,\n image\n } = this.props;\n const showMobileGallery = image && isMobileView;\n const showDesktopGallery = image && !isMobileView;\n return (\n \n \n
\n
\n {isPackage ? titles.Sale + \"!!!\" : \"\"}\n
\n
\n {titles.RoomDetails}\n
\n
\n\n
\n {showDesktopGallery && (\n
\n
}\n)
\n
\n
\n )}\n {showMobileGallery && (\n
\n )}\n
\n
\n
\n
\n \n
\n {showAvailability && (\n
\n
{titles.Availability}
\n
{availability}
\n
\n )}\n
\n
\n
\n {oldPrice > 0 && (\n
\n \n {price => price}\n \n \n )}\n
\n \n {price => price}\n \n \n
\n
\n {titles.Checkout}\n
\n
\n
\n {showClubPrices && (\n
\n
\n
\n {titles.PriceForClubMemeber} \n
\n \n {price => price}\n \n \n
\n
\n
\n )}\n
\n
\n
\n
\n \n );\n };\n\n render() {\n return {this.renderRate()};\n }\n}\n\nDealRate.propTypes = {\n isRtl: PropTypes.bool,\n titles: PropTypes.object,\n rateId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n priceCode: PropTypes.string,\n planCode: PropTypes.string,\n planName: PropTypes.string,\n titleName: PropTypes.string,\n price: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n availability: PropTypes.number,\n allocationCode: PropTypes.string,\n lowAvailabilityCount: PropTypes.number,\n showAvailability: PropTypes.bool,\n active: PropTypes.bool,\n isPackage: PropTypes.bool,\n onClick: PropTypes.func,\n onRateReadMore: PropTypes.func,\n showClubPrices: PropTypes.bool,\n ratePriceAfterDiscount: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]),\n isIE: PropTypes.bool,\n image: PropTypes.string,\n roomId: PropTypes.string,\n oldPrice: PropTypes.number,\n showSimpleClubLoginModal: PropTypes.func,\n onShowRoomGalleryPopUp: PropTypes.func,\n isMobileView: PropTypes.bool,\n room: PropTypes.object\n};\n\nDealRate.defaultProps = {\n showAvailability: true,\n lowAvailabilityCount: 4,\n titles: {\n ReadMore: \"Read More...\"\n }\n};\n\nexport default DealRate;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealRate/DealRate.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"DealRate_with-ellipsis---sb\",\"withEllipsis\":\"DealRate_with-ellipsis---sb\",\"rate\":\"DealRate_rate---sb\",\"ie-is-shit\":\"DealRate_ie-is-shit---sb\",\"ieIsShit\":\"DealRate_ie-is-shit---sb\",\"rate-image\":\"DealRate_rate-image---sb\",\"rateImage\":\"DealRate_rate-image---sb\",\"rate-image-wrapper\":\"DealRate_rate-image-wrapper---sb\",\"rateImageWrapper\":\"DealRate_rate-image-wrapper---sb\",\"rate-body\":\"DealRate_rate-body---sb\",\"rateBody\":\"DealRate_rate-body---sb\",\"rate-body-mobile-view\":\"DealRate_rate-body-mobile-view---sb\",\"rateBodyMobileView\":\"DealRate_rate-body-mobile-view---sb\",\"active\":\"DealRate_active---sb\",\"rate-select-btn\":\"DealRate_rate-select-btn---sb\",\"rateSelectBtn\":\"DealRate_rate-select-btn---sb\",\"ribbon-wrapper\":\"DealRate_ribbon-wrapper---sb\",\"ribbonWrapper\":\"DealRate_ribbon-wrapper---sb\",\"ribbon\":\"DealRate_ribbon---sb\",\"rtl\":\"DealRate_rtl---sb\",\"rate-main-content\":\"DealRate_rate-main-content---sb\",\"rateMainContent\":\"DealRate_rate-main-content---sb\",\"radio-btn-section\":\"DealRate_radio-btn-section---sb\",\"radioBtnSection\":\"DealRate_radio-btn-section---sb\",\"data-section\":\"DealRate_data-section---sb\",\"dataSection\":\"DealRate_data-section---sb\",\"price-name-wrapper\":\"DealRate_price-name-wrapper---sb\",\"priceNameWrapper\":\"DealRate_price-name-wrapper---sb\",\"price-name\":\"DealRate_price-name---sb\",\"priceName\":\"DealRate_price-name---sb\",\"icon\":\"DealRate_icon---sb\",\"availability\":\"DealRate_availability---sb\",\"low-count\":\"DealRate_low-count---sb\",\"lowCount\":\"DealRate_low-count---sb\",\"count\":\"DealRate_count---sb\",\"prices-wrapper\":\"DealRate_prices-wrapper---sb\",\"pricesWrapper\":\"DealRate_prices-wrapper---sb\",\"inner-prices-wrapper\":\"DealRate_inner-prices-wrapper---sb\",\"innerPricesWrapper\":\"DealRate_inner-prices-wrapper---sb\",\"prices-section-orig\":\"DealRate_prices-section-orig---sb\",\"pricesSectionOrig\":\"DealRate_prices-section-orig---sb\",\"prices-section\":\"DealRate_prices-section---sb\",\"pricesSection\":\"DealRate_prices-section---sb\",\"price\":\"DealRate_price---sb\",\"club-price\":\"DealRate_club-price---sb\",\"clubPrice\":\"DealRate_club-price---sb\",\"orig-price\":\"DealRate_orig-price---sb\",\"origPrice\":\"DealRate_orig-price---sb\",\"strike-price-rtl\":\"DealRate_strike-price-rtl---sb\",\"strikePriceRtl\":\"DealRate_strike-price-rtl---sb\",\"sale\":\"DealRate_sale---sb\",\"read-more\":\"DealRate_read-more---sb\",\"readMore\":\"DealRate_read-more---sb\",\"read-more-sale-wrapper\":\"DealRate_read-more-sale-wrapper---sb\",\"readMoreSaleWrapper\":\"DealRate_read-more-sale-wrapper---sb\",\"rate-order-button\":\"DealRate_rate-order-button---sb\",\"rateOrderButton\":\"DealRate_rate-order-button---sb\",\"rate-sale\":\"DealRate_rate-sale---sb\",\"rateSale\":\"DealRate_rate-sale---sb\",\"plan-name\":\"DealRate_plan-name---sb\",\"planName\":\"DealRate_plan-name---sb\",\"data-section-rtl\":\"DealRate_data-section-rtl---sb\",\"dataSectionRtl\":\"DealRate_data-section-rtl---sb\",\"club-badge-Wrapper\":\"DealRate_club-badge-Wrapper---sb\",\"clubBadgeWrapper\":\"DealRate_club-badge-Wrapper---sb\",\"club-badge-content\":\"DealRate_club-badge-content---sb\",\"clubBadgeContent\":\"DealRate_club-badge-content---sb\",\"club-badge-content-price\":\"DealRate_club-badge-content-price---sb\",\"clubBadgeContentPrice\":\"DealRate_club-badge-content-price---sb\",\"club-badge-content-price-title\":\"DealRate_club-badge-content-price-title---sb\",\"clubBadgeContentPriceTitle\":\"DealRate_club-badge-content-price-title---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/DealRate/styles.less\n// module id = 1696\n// module chunks = 0","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport ImageGallery from \"react-image-gallery\";\nimport { Grid } from \"semantic-ui-react\";\n\nimport \"react-image-gallery/styles/css/image-gallery.css\";\nimport styles from \"./styles.less\";\n\nclass GalleryPopUp extends Component {\n constructor(props) {\n super(props);\n const { descriptionPosition } = this.props;\n this.descriptionClass = `${styles.descPosition} ${styles.top}`;\n if (descriptionPosition) {\n this.descriptionClass = styles.descPosition + \" \";\n if (Array.isArray(descriptionPosition)) {\n this.descriptionClass += descriptionPosition\n .map(position => styles[position])\n .join(\" \");\n } else {\n this.descriptionClass += styles[descriptionPosition];\n }\n }\n }\n _handleImageError = () => {\n // event\n /* we no longer recieve default image\n if (this.props.defaultImage &&\n event.target.src.indexOf(this.props.defaultImage) === -1) {\n event.target.src = this.props.defaultImage;\n }\n */\n };\n\n handleShowItemDetails = event => {\n const { handleShowItemDetails } = this.props;\n handleShowItemDetails(event);\n };\n\n _myImageGalleryRenderer = item => {\n const onImageError = this._handleImageError;\n return (\n \n

\n
\n );\n };\n\n imageSrcWithCrop = src => {\n const { isMobileView } = this.props;\n if (isMobileView) {\n return `${src}`;\n } else {\n return src;\n }\n };\n\n imageSrcWithCropThumb = src => {\n const { isMobileView } = this.props;\n if (isMobileView) {\n return `${src}?w=375&h=250&mode=crop`;\n } else {\n return `${src}`;\n }\n };\n\n mapRoomImages = room => {\n let images = [];\n if (room) {\n if (room.images && room.images.length > 0) {\n images = room.images.map(image => ({\n original: image && this.imageSrcWithCrop(image),\n originalTitle: room.name,\n thumbnail: image && this.imageSrcWithCropThumb(image),\n description: room.roomDescription,\n price: room.TotalPrice,\n currency: room.currency\n }));\n } else {\n images = [\n {\n original: room.imageUrl && this.imageSrcWithCrop(room.imageUrl),\n originalTitle: room.name,\n thumbnail:\n room.imageUrl && this.imageSrcWithCropThumb(room.imageUrl),\n description: room.roomDescription,\n price: room.TotalPrice,\n currency: room.currency\n }\n ];\n }\n }\n return images;\n };\n\n render() {\n const { room, isRtl, showThumbnails, images } = this.props;\n const galleryImages = images != null ? images : this.mapRoomImages(room);\n return (\n \n \n \n );\n }\n}\n\nGalleryPopUp.defaultProps = {\n showThumbnails: true\n};\n\nGalleryPopUp.propTypes = {\n isRtl: PropTypes.bool,\n descriptionPosition: PropTypes.oneOfType([PropTypes.array, PropTypes.string]),\n room: PropTypes.object,\n onImageLoad: PropTypes.func,\n handleShowItemDetails: PropTypes.func,\n showThumbnails: PropTypes.bool,\n images: PropTypes.array,\n isMobileView: PropTypes.bool\n};\n\nexport default GalleryPopUp;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/GalleryPopUp/GalleryPopUp.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"GalleryPopUp_with-ellipsis---sb\",\"withEllipsis\":\"GalleryPopUp_with-ellipsis---sb\",\"gallery\":\"GalleryPopUp_gallery---sb\",\"rtl\":\"GalleryPopUp_rtl---sb\",\"header-wrapper\":\"GalleryPopUp_header-wrapper---sb\",\"headerWrapper\":\"GalleryPopUp_header-wrapper---sb\",\"hide\":\"GalleryPopUp_hide---sb\",\"image-gallery\":\"GalleryPopUp_image-gallery---sb\",\"imageGallery\":\"GalleryPopUp_image-gallery---sb\",\"image-gallery-description\":\"GalleryPopUp_image-gallery-description---sb\",\"imageGalleryDescription\":\"GalleryPopUp_image-gallery-description---sb\",\"desc-position\":\"GalleryPopUp_desc-position---sb\",\"descPosition\":\"GalleryPopUp_desc-position---sb\",\"top\":\"GalleryPopUp_top---sb\",\"right\":\"GalleryPopUp_right---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/GalleryPopUp/styles.less\n// module id = 1698\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"rates-group-row\":\"DealsRatesGroup_rates-group-row---sb\",\"ratesGroupRow\":\"DealsRatesGroup_rates-group-row---sb\",\"hide\":\"DealsRatesGroup_hide---sb\",\"rate-wrapper\":\"DealsRatesGroup_rate-wrapper---sb\",\"rateWrapper\":\"DealsRatesGroup_rate-wrapper---sb\",\"header-text\":\"DealsRatesGroup_header-text---sb\",\"headerText\":\"DealsRatesGroup_header-text---sb\",\"header-text-mobile-view\":\"DealsRatesGroup_header-text-mobile-view---sb\",\"headerTextMobileView\":\"DealsRatesGroup_header-text-mobile-view---sb\",\"results-wrapper\":\"DealsRatesGroup_results-wrapper---sb\",\"resultsWrapper\":\"DealsRatesGroup_results-wrapper---sb\",\"flex-column\":\"DealsRatesGroup_flex-column---sb\",\"flexColumn\":\"DealsRatesGroup_flex-column---sb\",\"rates-group-title\":\"DealsRatesGroup_rates-group-title---sb\",\"ratesGroupTitle\":\"DealsRatesGroup_rates-group-title---sb\",\"flex-column-mobile-view\":\"DealsRatesGroup_flex-column-mobile-view---sb\",\"flexColumnMobileView\":\"DealsRatesGroup_flex-column-mobile-view---sb\",\"no-padding\":\"DealsRatesGroup_no-padding---sb\",\"noPadding\":\"DealsRatesGroup_no-padding---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/DealsRatesGroup/styles.less\n// module id = 1699\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"DealDetails_with-ellipsis---sb\",\"withEllipsis\":\"DealDetails_with-ellipsis---sb\",\"noResult\":\"DealDetails_noResult---sb\",\"isFetching\":\"DealDetails_isFetching---sb\",\"mobile-view\":\"DealDetails_mobile-view---sb\",\"mobileView\":\"DealDetails_mobile-view---sb\",\"mobile-view-noResult\":\"DealDetails_mobile-view-noResult---sb\",\"mobileViewNoResult\":\"DealDetails_mobile-view-noResult---sb\",\"mobile-view-isFetching\":\"DealDetails_mobile-view-isFetching---sb\",\"mobileViewIsFetching\":\"DealDetails_mobile-view-isFetching---sb\",\"rendered\":\"DealDetails_rendered---sb\",\"dealsSearchBox\":\"DealDetails_dealsSearchBox---sb\",\"deal-details\":\"DealDetails_deal-details---sb\",\"dealDetails\":\"DealDetails_deal-details---sb\",\"deal-box-column\":\"DealDetails_deal-box-column---sb\",\"dealBoxColumn\":\"DealDetails_deal-box-column---sb\",\"data-container\":\"DealDetails_data-container---sb\",\"dataContainer\":\"DealDetails_data-container---sb\",\"data-container-mobile-view\":\"DealDetails_data-container-mobile-view---sb\",\"dataContainerMobileView\":\"DealDetails_data-container-mobile-view---sb\",\"hotel\":\"DealDetails_hotel---sb\",\"hotel-mobile-view\":\"DealDetails_hotel-mobile-view---sb\",\"hotelMobileView\":\"DealDetails_hotel-mobile-view---sb\",\"rtl\":\"DealDetails_rtl---sb\",\"deal-box\":\"DealDetails_deal-box---sb\",\"dealBox\":\"DealDetails_deal-box---sb\",\"deal-box-image-wrapper\":\"DealDetails_deal-box-image-wrapper---sb\",\"dealBoxImageWrapper\":\"DealDetails_deal-box-image-wrapper---sb\",\"deal-box-mobile-view\":\"DealDetails_deal-box-mobile-view---sb\",\"dealBoxMobileView\":\"DealDetails_deal-box-mobile-view---sb\",\"deal-prices-wrapper\":\"DealDetails_deal-prices-wrapper---sb\",\"dealPricesWrapper\":\"DealDetails_deal-prices-wrapper---sb\",\"deal-club-memeber\":\"DealDetails_deal-club-memeber---sb\",\"dealClubMemeber\":\"DealDetails_deal-club-memeber---sb\",\"deal-data\":\"DealDetails_deal-data---sb\",\"dealData\":\"DealDetails_deal-data---sb\",\"deal-data-rtl\":\"DealDetails_deal-data-rtl---sb\",\"dealDataRtl\":\"DealDetails_deal-data-rtl---sb\",\"deal-data-upper\":\"DealDetails_deal-data-upper---sb\",\"dealDataUpper\":\"DealDetails_deal-data-upper---sb\",\"deal-name\":\"DealDetails_deal-name---sb\",\"dealName\":\"DealDetails_deal-name---sb\",\"deal-dates-details\":\"DealDetails_deal-dates-details---sb\",\"dealDatesDetails\":\"DealDetails_deal-dates-details---sb\",\"deal-dates-data\":\"DealDetails_deal-dates-data---sb\",\"dealDatesData\":\"DealDetails_deal-dates-data---sb\",\"deal-dates-title\":\"DealDetails_deal-dates-title---sb\",\"dealDatesTitle\":\"DealDetails_deal-dates-title---sb\",\"description-wrapper\":\"DealDetails_description-wrapper---sb\",\"descriptionWrapper\":\"DealDetails_description-wrapper---sb\",\"description-fade\":\"DealDetails_description-fade---sb\",\"descriptionFade\":\"DealDetails_description-fade---sb\",\"description\":\"DealDetails_description---sb\",\"description-wrapper-border\":\"DealDetails_description-wrapper-border---sb\",\"descriptionWrapperBorder\":\"DealDetails_description-wrapper-border---sb\",\"description-read-more\":\"DealDetails_description-read-more---sb\",\"descriptionReadMore\":\"DealDetails_description-read-more---sb\",\"show\":\"DealDetails_show---sb\",\"deal-price\":\"DealDetails_deal-price---sb\",\"dealPrice\":\"DealDetails_deal-price---sb\",\"deal-price-old\":\"DealDetails_deal-price-old---sb\",\"dealPriceOld\":\"DealDetails_deal-price-old---sb\",\"deal-price-new\":\"DealDetails_deal-price-new---sb\",\"dealPriceNew\":\"DealDetails_deal-price-new---sb\",\"search-box-wrapper\":\"DealDetails_search-box-wrapper---sb\",\"searchBoxWrapper\":\"DealDetails_search-box-wrapper---sb\",\"search-box\":\"DealDetails_search-box---sb\",\"searchBox\":\"DealDetails_search-box---sb\",\"search-box-wrapper-mobile-view\":\"DealDetails_search-box-wrapper-mobile-view---sb\",\"searchBoxWrapperMobileView\":\"DealDetails_search-box-wrapper-mobile-view---sb\",\"deal-search-comment\":\"DealDetails_deal-search-comment---sb\",\"dealSearchComment\":\"DealDetails_deal-search-comment---sb\",\"header-text\":\"DealDetails_header-text---sb\",\"headerText\":\"DealDetails_header-text---sb\",\"deal-details-loader\":\"DealDetails_deal-details-loader---sb\",\"dealDetailsLoader\":\"DealDetails_deal-details-loader---sb\",\"deals-rates-group\":\"DealDetails_deals-rates-group---sb\",\"dealsRatesGroup\":\"DealDetails_deals-rates-group---sb\",\"fadeOut\":\"DealDetails_fadeOut---sb\",\"club-login\":\"DealDetails_club-login---sb\",\"clubLogin\":\"DealDetails_club-login---sb\",\"no-results-message\":\"DealDetails_no-results-message---sb\",\"noResultsMessage\":\"DealDetails_no-results-message---sb\",\"hidden\":\"DealDetails_hidden---sb\",\"visisble\":\"DealDetails_visisble---sb\",\"search-again-button\":\"DealDetails_search-again-button---sb\",\"searchAgainButton\":\"DealDetails_search-again-button---sb\",\"deal-data-mobile-view\":\"DealDetails_deal-data-mobile-view---sb\",\"dealDataMobileView\":\"DealDetails_deal-data-mobile-view---sb\",\"mobile-description\":\"DealDetails_mobile-description---sb\",\"mobileDescription\":\"DealDetails_mobile-description---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/DealDetails/styles.less\n// module id = 1700\n// module chunks = 0","export { default } from \"./RoomDetailsAndAmenities\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomDetailsAndAmenities/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport moment from \"moment\";\r\nimport { Grid, Header, Table } from \"semantic-ui-react\";\r\nimport { daysOfWeek } from \"../../constants/general\";\r\nimport { spliteByWeeks } from \"../../helpers/dateHelpers\";\r\nimport { RawHTML, LineBreaks } from \"../common\";\r\nimport Amenities from \"../../components/common/Amenities\";\r\nimport PriceDisplay from \"../../containers/PriceDisplay\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass RoomDetailsAndAmenities extends Component {\r\n renderCancellationPolicy = () => {\r\n const { room, titles, ShowCancellationPolicy } = this.props;\r\n const cancellationPolicy = `* ${titles.CancellationPolicy}: ${\r\n room.rate.cancellationPolicyDescription\r\n }`;\r\n if (ShowCancellationPolicy) {\r\n return {cancellationPolicy}
;\r\n } else return ;\r\n };\r\n\r\n render() {\r\n const { room, isRtl, titles } = this.props;\r\n const textAlign = isRtl ? \"right\" : \"left\";\r\n const weeksData = spliteByWeeks(\r\n room && room.rate && room.rate.pricePerDayList\r\n );\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {daysOfWeek.map((day, idx) => (\r\n \r\n {titles[day.longKey] || day.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n {weeksData &&\r\n Object.entries(weeksData).map(([week, priceList], idx) => {\r\n const currentWeekNum = Number(week);\r\n let contentIndex = `${titles.Week} ${idx + 1}`;\r\n return (\r\n \r\n \r\n {daysOfWeek.map((day, i) => {\r\n const foundPrice = priceList.find(\r\n ppd =>\r\n moment(ppd.dayDate).day() === i &&\r\n moment(ppd.dayDate).week() === currentWeekNum\r\n );\r\n const content = foundPrice && (\r\n \r\n {convertedPrice => convertedPrice}\r\n \r\n );\r\n const toRender = foundPrice && (\r\n \r\n {content}
\r\n \r\n {moment(foundPrice.dayDate).format(\r\n \"DD/MM/YY\"\r\n )}\r\n \r\n \r\n );\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {convertedPrice =>\r\n `${titles.Total} - ${convertedPrice}`\r\n }\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {titles.TaxIncludedTitle}\r\n
\r\n \r\n \r\n \r\n \r\n {this.renderCancellationPolicy()}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nRoomDetailsAndAmenities.propTypes = {\r\n room: PropTypes.object,\r\n isRtl: PropTypes.bool,\r\n ShowCancellationPolicy: PropTypes.bool,\r\n titles: PropTypes.object\r\n};\r\n\r\nexport default RoomDetailsAndAmenities;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/RoomDetailsAndAmenities/RoomDetailsAndAmenities.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"room-details\":\"RoomDetailsAndAmenities_room-details---sb\",\"roomDetails\":\"RoomDetailsAndAmenities_room-details---sb\",\"rtl\":\"RoomDetailsAndAmenities_rtl---sb\",\"room-name\":\"RoomDetailsAndAmenities_room-name---sb\",\"roomName\":\"RoomDetailsAndAmenities_room-name---sb\",\"room-description\":\"RoomDetailsAndAmenities_room-description---sb\",\"roomDescription\":\"RoomDetailsAndAmenities_room-description---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/RoomDetailsAndAmenities/styles.less\n// module id = 1703\n// module chunks = 0","export { default } from \"./DealThumbNailCustom\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealThumbNailCustom/index.js","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport cx from \"classnames\";\nimport styles from \"./styles.less\";\nimport PriceDisplay from \"../../containers/PriceDisplay\";\nimport { Button } from \"../common\";\n\nclass DealThumbNailCustom extends React.Component {\n render = () => {\n const {\n titles,\n isIE,\n discountClubConfig,\n clubUserLoggedIn,\n isMobileView,\n product\n } = this.props;\n const showClubPrices =\n discountClubConfig && discountClubConfig.Active && !clubUserLoggedIn;\n return (\n \n
\n {product.name}\n
\n
\n \n {titles.DealValidInDates} \n \n {product.startDate + \" - \" + product.endDate}\n
\n
\n
\n {titles.StartingFrom}\n {product.oldPrice > 0 && (\n
\n \n {price => price}\n \n \n )}\n
\n \n {price => price}\n \n \n {titles.ForNight}\n
\n {showClubPrices && (\n
\n
\n {price => price + \" \" + titles.SpecialPriceForClubMemeber}\n \n
\n )}\n
\n
\n );\n };\n}\n\nDealThumbNailCustom.propTypes = {\n titles: PropTypes.object,\n product: PropTypes.object,\n isIE: PropTypes.bool,\n discountClubConfig: PropTypes.object,\n clubUserLoggedIn: PropTypes.bool,\n isMobileView: PropTypes.bool\n};\n\nexport default DealThumbNailCustom;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/DealThumbNailCustom/DealThumbNailCustom.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"DealThumbNailCustom_with-ellipsis---sb\",\"withEllipsis\":\"DealThumbNailCustom_with-ellipsis---sb\",\"deal\":\"DealThumbNailCustom_deal---sb\",\"deal-title\":\"DealThumbNailCustom_deal-title---sb\",\"dealTitle\":\"DealThumbNailCustom_deal-title---sb\",\"ie-is-shit\":\"DealThumbNailCustom_ie-is-shit---sb\",\"ieIsShit\":\"DealThumbNailCustom_ie-is-shit---sb\",\"deal-description\":\"DealThumbNailCustom_deal-description---sb\",\"dealDescription\":\"DealThumbNailCustom_deal-description---sb\",\"deal-dates\":\"DealThumbNailCustom_deal-dates---sb\",\"dealDates\":\"DealThumbNailCustom_deal-dates---sb\",\"deal-dates-title\":\"DealThumbNailCustom_deal-dates-title---sb\",\"dealDatesTitle\":\"DealThumbNailCustom_deal-dates-title---sb\",\"dealWrapper\":\"DealThumbNailCustom_dealWrapper---sb\",\"deal-price\":\"DealThumbNailCustom_deal-price---sb\",\"dealPrice\":\"DealThumbNailCustom_deal-price---sb\",\"deal-price-old\":\"DealThumbNailCustom_deal-price-old---sb\",\"dealPriceOld\":\"DealThumbNailCustom_deal-price-old---sb\",\"deal-price-new\":\"DealThumbNailCustom_deal-price-new---sb\",\"dealPriceNew\":\"DealThumbNailCustom_deal-price-new---sb\",\"deal-price-separator\":\"DealThumbNailCustom_deal-price-separator---sb\",\"dealPriceSeparator\":\"DealThumbNailCustom_deal-price-separator---sb\",\"deal-button\":\"DealThumbNailCustom_deal-button---sb\",\"dealButton\":\"DealThumbNailCustom_deal-button---sb\",\"deal-hotel\":\"DealThumbNailCustom_deal-hotel---sb\",\"dealHotel\":\"DealThumbNailCustom_deal-hotel---sb\",\"deal-club-memeber\":\"DealThumbNailCustom_deal-club-memeber---sb\",\"dealClubMemeber\":\"DealThumbNailCustom_deal-club-memeber---sb\",\"mobile-view\":\"DealThumbNailCustom_mobile-view---sb\",\"mobileView\":\"DealThumbNailCustom_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/DealThumbNailCustom/styles.less\n// module id = 1706\n// module chunks = 0","// removed by extract-text-webpack-plugin\nmodule.exports = {\"with-ellipsis\":\"DealsResults_with-ellipsis---sb\",\"withEllipsis\":\"DealsResults_with-ellipsis---sb\",\"deal\":\"DealsResults_deal---sb\",\"deal-title\":\"DealsResults_deal-title---sb\",\"dealTitle\":\"DealsResults_deal-title---sb\",\"ie-is-shit\":\"DealsResults_ie-is-shit---sb\",\"ieIsShit\":\"DealsResults_ie-is-shit---sb\",\"deal-description\":\"DealsResults_deal-description---sb\",\"dealDescription\":\"DealsResults_deal-description---sb\",\"deal-dates\":\"DealsResults_deal-dates---sb\",\"dealDates\":\"DealsResults_deal-dates---sb\",\"deal-dates-title\":\"DealsResults_deal-dates-title---sb\",\"dealDatesTitle\":\"DealsResults_deal-dates-title---sb\",\"dealWrapper\":\"DealsResults_dealWrapper---sb\",\"deal-price\":\"DealsResults_deal-price---sb\",\"dealPrice\":\"DealsResults_deal-price---sb\",\"deal-price-old\":\"DealsResults_deal-price-old---sb\",\"dealPriceOld\":\"DealsResults_deal-price-old---sb\",\"deal-price-new\":\"DealsResults_deal-price-new---sb\",\"dealPriceNew\":\"DealsResults_deal-price-new---sb\",\"deal-price-separator\":\"DealsResults_deal-price-separator---sb\",\"dealPriceSeparator\":\"DealsResults_deal-price-separator---sb\",\"deal-button\":\"DealsResults_deal-button---sb\",\"dealButton\":\"DealsResults_deal-button---sb\",\"deal-hotel\":\"DealsResults_deal-hotel---sb\",\"dealHotel\":\"DealsResults_deal-hotel---sb\",\"deal-club-memeber\":\"DealsResults_deal-club-memeber---sb\",\"dealClubMemeber\":\"DealsResults_deal-club-memeber---sb\",\"deal-result-wrapper\":\"DealsResults_deal-result-wrapper---sb\",\"dealResultWrapper\":\"DealsResults_deal-result-wrapper---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/containers/DealsResults/styles.less\n// module id = 1707\n// module chunks = 0","export { default } from \"./AddonsContainers\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/AddonsContainer/index.js","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport stringSimilarity from \"string-similarity\";\r\nimport { Addons } from \"../../components\";\r\nimport { isRTL, getGlobalCurrency } from \"../../reducers\";\r\nimport * as addonsActions from \"../../actions/addonsActions\";\r\nimport { addonsContainerTypes, addonsContainerDefaultProps } from \"../../types\";\r\n\r\nexport class AddonsContainer extends Component {\r\n onAddonIncrementClick = (groupId, addonCode, msg) => {\r\n const { actions } = this.props;\r\n actions.onAddonAdd(groupId, addonCode, msg);\r\n };\r\n\r\n onAddonDecrementClick = (groupId, addonCode) => {\r\n const { actions } = this.props;\r\n actions.onAddonRemove(groupId, addonCode);\r\n };\r\n onCancel = groupId => {\r\n const { actions, onCancel } = this.props;\r\n actions.onCancelAddons(groupId);\r\n onCancel();\r\n };\r\n\r\n onConfirm = () => {\r\n const { onConfirm } = this.props;\r\n onConfirm();\r\n };\r\n\r\n render() {\r\n const {\r\n selectedAddonsGroup,\r\n addonsByPaxIndex,\r\n selectedPaxId,\r\n globalCurrency,\r\n isRtl,\r\n titles\r\n } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nAddonsContainer.defaultProps = addonsContainerDefaultProps;\r\n\r\nAddonsContainer.propTypes = addonsContainerTypes;\r\n\r\nfunction mapStateToProps(store) {\r\n const { addonImagesLookupTable } = store;\r\n const globalCurrency = getGlobalCurrency(store);\r\n const state = {\r\n isRtl: isRTL(store),\r\n globalCurrency,\r\n titles: store.titles,\r\n addons: store.addons,\r\n selectedAddonsGroup: store.selectedAddonsGroup,\r\n selectedPaxId: store.selectedPaxId,\r\n addonsByPaxIndex:\r\n store.addons[store.selectedPaxId] &&\r\n store.addons[store.selectedPaxId].map(addon => {\r\n //TODO: this is bad practice to do in mapState, we need a memoized selector\r\n const bestMatch = stringSimilarity.findBestMatch(\r\n addon.id,\r\n Object.keys(addonImagesLookupTable)\r\n ).bestMatch;\r\n const useBestMatch = bestMatch.rating > 0.8;\r\n return {\r\n ...addon,\r\n imageURL: useBestMatch\r\n ? addonImagesLookupTable[bestMatch.target]\r\n : addonImagesLookupTable.default\r\n };\r\n })\r\n };\r\n return state;\r\n}\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n const combinedActions = {\r\n ...addonsActions\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(AddonsContainer);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/AddonsContainer/AddonsContainers.js","var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseForOwn.js\n// module id = 1710\n// module chunks = 0","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseFor.js\n// module id = 1711\n// module chunks = 0","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_createBaseFor.js\n// module id = 1712\n// module chunks = 0","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseTimes.js\n// module id = 1713\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseIsArguments.js\n// module id = 1714\n// module chunks = 0","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_getRawTag.js\n// module id = 1715\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_objectToString.js\n// module id = 1716\n// module chunks = 0","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/stubFalse.js\n// module id = 1717\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseIsTypedArray.js\n// module id = 1718\n// module chunks = 0","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseUnary.js\n// module id = 1719\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_nodeUtil.js\n// module id = 1720\n// module chunks = 0","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseKeys.js\n// module id = 1721\n// module chunks = 0","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_nativeKeys.js\n// module id = 1722\n// module chunks = 0","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_createBaseEach.js\n// module id = 1723\n// module chunks = 0","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_castFunction.js\n// module id = 1724\n// module chunks = 0","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/map.js\n// module id = 1725\n// module chunks = 0","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseMatches.js\n// module id = 1726\n// module chunks = 0","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseIsMatch.js\n// module id = 1727\n// module chunks = 0","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_listCacheClear.js\n// module id = 1728\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_listCacheDelete.js\n// module id = 1729\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_listCacheGet.js\n// module id = 1730\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_listCacheHas.js\n// module id = 1731\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_listCacheSet.js\n// module id = 1732\n// module chunks = 0","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_stackClear.js\n// module id = 1733\n// module chunks = 0","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_stackDelete.js\n// module id = 1734\n// module chunks = 0","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_stackGet.js\n// module id = 1735\n// module chunks = 0","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_stackHas.js\n// module id = 1736\n// module chunks = 0","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_stackSet.js\n// module id = 1737\n// module chunks = 0","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseIsNative.js\n// module id = 1738\n// module chunks = 0","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_isMasked.js\n// module id = 1739\n// module chunks = 0","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_coreJsData.js\n// module id = 1740\n// module chunks = 0","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_getValue.js\n// module id = 1741\n// module chunks = 0","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_mapCacheClear.js\n// module id = 1742\n// module chunks = 0","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_Hash.js\n// module id = 1743\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_hashClear.js\n// module id = 1744\n// module chunks = 0","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_hashDelete.js\n// module id = 1745\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_hashGet.js\n// module id = 1746\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_hashHas.js\n// module id = 1747\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_hashSet.js\n// module id = 1748\n// module chunks = 0","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_mapCacheDelete.js\n// module id = 1749\n// module chunks = 0","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_isKeyable.js\n// module id = 1750\n// module chunks = 0","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_mapCacheGet.js\n// module id = 1751\n// module chunks = 0","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_mapCacheHas.js\n// module id = 1752\n// module chunks = 0","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_mapCacheSet.js\n// module id = 1753\n// module chunks = 0","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseIsEqualDeep.js\n// module id = 1754\n// module chunks = 0","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_SetCache.js\n// module id = 1755\n// module chunks = 0","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_setCacheAdd.js\n// module id = 1756\n// module chunks = 0","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_setCacheHas.js\n// module id = 1757\n// module chunks = 0","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_arraySome.js\n// module id = 1758\n// module chunks = 0","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_cacheHas.js\n// module id = 1759\n// module chunks = 0","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_equalByTag.js\n// module id = 1760\n// module chunks = 0","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_equalObjects.js\n// module id = 1761\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_DataView.js\n// module id = 1762\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_Promise.js\n// module id = 1763\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_Set.js\n// module id = 1764\n// module chunks = 0","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_getMatchData.js\n// module id = 1765\n// module chunks = 0","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseMatchesProperty.js\n// module id = 1766\n// module chunks = 0","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/get.js\n// module id = 1767\n// module chunks = 0","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_stringToPath.js\n// module id = 1768\n// module chunks = 0","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_memoizeCapped.js\n// module id = 1769\n// module chunks = 0","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/memoize.js\n// module id = 1770\n// module chunks = 0","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseToString.js\n// module id = 1771\n// module chunks = 0","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/hasIn.js\n// module id = 1772\n// module chunks = 0","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseHasIn.js\n// module id = 1773\n// module chunks = 0","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_hasPath.js\n// module id = 1774\n// module chunks = 0","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/property.js\n// module id = 1775\n// module chunks = 0","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseProperty.js\n// module id = 1776\n// module chunks = 0","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_basePropertyDeep.js\n// module id = 1777\n// module chunks = 0","var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseMap.js\n// module id = 1778\n// module chunks = 0","var arrayEvery = require('./_arrayEvery'),\n baseEvery = require('./_baseEvery'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = every;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/every.js\n// module id = 1779\n// module chunks = 0","/**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\nfunction arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = arrayEvery;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_arrayEvery.js\n// module id = 1780\n// module chunks = 0","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\nfunction baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n}\n\nmodule.exports = baseEvery;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseEvery.js\n// module id = 1781\n// module chunks = 0","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_isIterateeCall.js\n// module id = 1782\n// module chunks = 0","var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nfunction maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n : undefined;\n}\n\nmodule.exports = maxBy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/maxBy.js\n// module id = 1783\n// module chunks = 0","var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseExtremum.js\n// module id = 1784\n// module chunks = 0","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_baseGt.js\n// module id = 1785\n// module chunks = 0","var baseFlatten = require('./_baseFlatten');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nmodule.exports = flattenDeep;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/flattenDeep.js\n// module id = 1786\n// module chunks = 0","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lodash/_isFlattenable.js\n// module id = 1787\n// module chunks = 0","export { default as ContactUs } from \"./ContactUs\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/ContactUs/index.js","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport cx from \"classnames\";\r\nimport { Grid } from \"semantic-ui-react\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { resetStore } from \"../../actions/resetStoreActions\";\r\nimport {\r\n Header,\r\n ContactUs as ContactUsComponent\r\n} from \"../../components/common\";\r\nimport styles from \"./styles.less\";\r\n\r\nclass ContactUs extends React.Component {\r\n renderHeader = title => {\r\n const { isRtl, isMobileView } = this.props;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n renderContacUsForm = () => {\r\n const {\r\n submitContactUsForm,\r\n selectedOption,\r\n titles,\r\n checkinDate,\r\n checkoutDate,\r\n currentPaxCombination,\r\n contactUsSubmitingStatus,\r\n isMobileView,\r\n lang,\r\n hotelData\r\n } = this.props;\r\n const needToShowForm = contactUsSubmitingStatus\r\n ? !contactUsSubmitingStatus.succeed == true\r\n : true;\r\n\r\n return (\r\n \r\n {({ onSubmit }) =>\r\n needToShowForm ? (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {titles.SendYourRequestAndWeWillReturn}\r\n
\r\n \r\n \r\n ) : (\r\n \r\n )\r\n }\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { titles, isMobileView } = this.props;\r\n return (\r\n \r\n \r\n \r\n {this.renderHeader(titles.ContactUs)}\r\n \r\n {this.renderContacUsForm()}\r\n
\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nContactUs.propTypes = {\r\n titles: PropTypes.object,\r\n isMobileView: PropTypes.bool,\r\n currentPaxCombination: PropTypes.object,\r\n isRtl: PropTypes.bool,\r\n contactUsSubmitingStatus: PropTypes.object,\r\n submitContactUsForm: PropTypes.func,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string,\r\n selectedOption: PropTypes.object,\r\n lang: PropTypes.string,\r\n hotelData: PropTypes.object\r\n};\r\n\r\nconst mapStateToProps = store => {\r\n const state = {\r\n titles: store.titles,\r\n isMobileView: store.isMobileView,\r\n currentPaxCombination: store.currentPaxCombination,\r\n isRtl: store.isRtl,\r\n contactUsSubmitingStatus: store.contactUsSubmitingStatus,\r\n checkinDate: store.checkinDate,\r\n checkoutDate: store.checkoutDate,\r\n selectedOption: store.selectedOption,\r\n lang: store.lang,\r\n hotelData: store.hotelData\r\n };\r\n return state;\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n const combinedActions = {\r\n resetStore\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ContactUs);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/ContactUs/ContactUs.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"contact-us-wrapper\":\"ContactUs_contact-us-wrapper---sb\",\"contactUsWrapper\":\"ContactUs_contact-us-wrapper---sb\",\"contact-us-header\":\"ContactUs_contact-us-header---sb\",\"contactUsHeader\":\"ContactUs_contact-us-header---sb\",\"in-order-to\":\"ContactUs_in-order-to---sb\",\"inOrderTo\":\"ContactUs_in-order-to---sb\",\"options-to-contant\":\"ContactUs_options-to-contant---sb\",\"optionsToContant\":\"ContactUs_options-to-contant---sb\",\"header-text\":\"ContactUs_header-text---sb\",\"headerText\":\"ContactUs_header-text---sb\",\"send-your-request\":\"ContactUs_send-your-request---sb\",\"sendYourRequest\":\"ContactUs_send-your-request---sb\",\"relaxed\":\"ContactUs_relaxed---sb\",\"view-port\":\"ContactUs_view-port---sb\",\"viewPort\":\"ContactUs_view-port---sb\",\"devider\":\"ContactUs_devider---sb\",\"mobile-view\":\"ContactUs_mobile-view---sb\",\"mobileView\":\"ContactUs_mobile-view---sb\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/containers/ContactUs/styles.less\n// module id = 1790\n// module chunks = 0","export { default } from \"./CartContainer\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/CartContainer/index.js","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport * as addonsActions from \"../../actions/addonsActions\";\r\nimport * as generalActions from \"../../actions/generalActions\";\r\nimport { Cart } from \"../../components/Cart\";\r\n// import {\r\n// Cart as MobileCart,\r\n// CartExpander as MobileCartExpander\r\n// } from \"../../components/MobileCart\";\r\n\r\nimport {\r\n isRTL,\r\n getGlobalCurrency,\r\n getGlobalCurrencyCode,\r\n getCartTotalPrices,\r\n getSelectedHotelName,\r\n getSelectedDataForPax\r\n // getSumOfSelectedRates\r\n} from \"../../reducers\";\r\nimport PriceDisplay from \"../PriceDisplay\";\r\n\r\nclass CartContainer extends Component {\r\n convertedRate = (price, currencyCode, currency) => {\r\n return (\r\n \r\n {convertedPrice => convertedPrice}\r\n \r\n );\r\n };\r\n\r\n onAddonDecrementClick = (paxId, addonCode) => {\r\n const { actions } = this.props;\r\n actions.onAddonRemove(paxId, addonCode);\r\n };\r\n\r\n render() {\r\n const {\r\n actions,\r\n paxList,\r\n // sumOfSelectedRates,\r\n selectedDataForPax,\r\n // addons,\r\n // selectedPaxId,\r\n titles,\r\n isRtl,\r\n promoCode,\r\n isPromoCodeValid,\r\n isMobileView,\r\n // cartTotalPrice,\r\n // simpleClubCartTotalPrice,\r\n //new cart\r\n cartTotalPrices,\r\n cartClubTotalPrices,\r\n clubUserLoggedIn,\r\n discountClubConfig,\r\n globalCurrency,\r\n globalCurrencyCode,\r\n selectedCurrency,\r\n checkinDate,\r\n checkoutDate,\r\n propertyName,\r\n propertyType,\r\n // onItemClick,\r\n // onSubmit,\r\n // onEditAddons,\r\n // getInitialHeight,\r\n // redirectFormRef,\r\n isShowCancellationPolicy,\r\n onShowCancellationPolicy,\r\n bookingRatesEnabled,\r\n bookingRates,\r\n placeHolders,\r\n displayPriceWithoutTaxes,\r\n taxesPrecentage\r\n // showCartSubmitBtn,\r\n // isDealMode\r\n } = this.props;\r\n\r\n // const canSubmit = sumOfSelectedRates == paxList.length;\r\n\r\n // const canEditAddons =\r\n // addons[selectedPaxId] && addons[selectedPaxId].length > 0;\r\n\r\n //const canEditAddons = false;\r\n\r\n const items = paxList.map(p => {\r\n const selectedRoom =\r\n selectedDataForPax &&\r\n selectedDataForPax[p.id] &&\r\n selectedDataForPax[p.id].room;\r\n\r\n const selectedRate =\r\n selectedDataForPax &&\r\n selectedDataForPax[p.id] &&\r\n selectedDataForPax[p.id].rate;\r\n\r\n const roomName = selectedRoom && selectedRoom.name;\r\n const planName = selectedRate && selectedRate.planName;\r\n\r\n const selectedAddons =\r\n (selectedDataForPax && selectedDataForPax[p.id].selectedAddons) || [];\r\n\r\n const formattedAddons = selectedAddons.map(addon => {\r\n return {\r\n ...addon,\r\n ...(selectedRoom && {\r\n priceToShow: this.convertedRate(\r\n addon.price,\r\n selectedRoom.currencyCode,\r\n selectedRoom.currency\r\n )\r\n })\r\n };\r\n });\r\n\r\n return {\r\n id: p.id,\r\n pax: p,\r\n name: p.id + 1,\r\n roomId: selectedRoom && selectedRoom.id,\r\n rateId: selectedRate && selectedRate.id,\r\n roomName,\r\n planName,\r\n price: selectedRate && selectedRate.totalPrice,\r\n clubPrice: selectedRate && selectedRate.simpleClubTotalPrice,\r\n currency: selectedRoom && selectedRoom.currency,\r\n currencyCode: selectedRate && selectedRate.currencyCode,\r\n selectedAddons: formattedAddons,\r\n isPackage: !!(selectedRate && selectedRate.isPackage)\r\n };\r\n });\r\n\r\n const toRender = (\r\n \r\n );\r\n return toRender;\r\n }\r\n}\r\n\r\nCartContainer.propTypes = {\r\n isMobileView: PropTypes.bool,\r\n //showCartSubmitBtn: PropTypes.bool,\r\n //selectedPaxId: PropTypes.number,\r\n isRtl: PropTypes.bool,\r\n titles: PropTypes.object,\r\n paxList: PropTypes.array,\r\n // addons: PropTypes.object,\r\n promoCode: PropTypes.string,\r\n isPromoCodeValid: PropTypes.bool,\r\n //cartTotalPrice: PropTypes.number,\r\n selectedDataForPax: PropTypes.object,\r\n //simpleClubCartTotalPrice: PropTypes.number,\r\n bookingRates: PropTypes.object,\r\n\r\n // new cart\r\n cartTotalPrices: PropTypes.object,\r\n cartClubTotalPrices: PropTypes.object,\r\n\r\n clubUserLoggedIn: PropTypes.bool,\r\n discountClubConfig: PropTypes.object,\r\n globalCurrency: PropTypes.string,\r\n globalCurrencyCode: PropTypes.string,\r\n selectedCurrency: PropTypes.string,\r\n checkinDate: PropTypes.string,\r\n checkoutDate: PropTypes.string,\r\n propertyName: PropTypes.string,\r\n propertyType: PropTypes.string,\r\n // sumOfSelectedRates: PropTypes.number,\r\n //onItemClick: PropTypes.func,\r\n // onSubmit: PropTypes.func,\r\n //onEditAddons: PropTypes.func,\r\n //getInitialHeight: PropTypes.func,\r\n //redirectFormRef: PropTypes.func,\r\n bookingRatesEnabled: PropTypes.bool,\r\n isShowCancellationPolicy: PropTypes.bool,\r\n onShowCancellationPolicy: PropTypes.func,\r\n //isDealMode: PropTypes.bool,\r\n actions: PropTypes.object,\r\n placeHolders: PropTypes.array,\r\n displayPriceWithoutTaxes: PropTypes.bool,\r\n taxesPrecentage: PropTypes.number\r\n};\r\n\r\nconst mapStateToProps = store => {\r\n const {\r\n titles,\r\n addons,\r\n paxList,\r\n isMobileView,\r\n selectedPaxId,\r\n clubUserLoggedIn,\r\n discountClubConfig,\r\n selectedCurrency,\r\n promoCode,\r\n isPromoCodeValid,\r\n checkinDate,\r\n checkoutDate,\r\n ShowCancellationPolicy,\r\n showCartSubmitBtn,\r\n isDealMode,\r\n bookingRates,\r\n bookingRatesEnabled,\r\n propertyType,\r\n placeHolders,\r\n displayPriceWithoutTaxes,\r\n taxesPrecentage\r\n } = store;\r\n const isRtl = isRTL(store);\r\n\r\n //new cart\r\n const cartTotalPrices = getCartTotalPrices(store);\r\n const cartClubTotalPrices = getCartTotalPrices(store, true);\r\n\r\n const globalCurrency = getGlobalCurrency(store);\r\n const globalCurrencyCode = getGlobalCurrencyCode(store);\r\n const selectedDataForPax = getSelectedDataForPax(store);\r\n const propertyName = getSelectedHotelName(store);\r\n // const sumOfSelectedRates = getSumOfSelectedRates(store);\r\n return {\r\n isRtl,\r\n addons,\r\n titles,\r\n paxList,\r\n propertyName,\r\n propertyType,\r\n promoCode,\r\n isPromoCodeValid,\r\n isMobileView: isMobileView,\r\n selectedDataForPax,\r\n globalCurrency,\r\n globalCurrencyCode,\r\n selectedCurrency,\r\n selectedPaxId,\r\n cartTotalPrice: cartTotalPrices.totalPrice,\r\n simpleClubCartTotalPrice: cartTotalPrices.clubTotalPrice,\r\n\r\n cartTotalPrices,\r\n cartClubTotalPrices,\r\n\r\n clubUserLoggedIn,\r\n discountClubConfig,\r\n // sumOfSelectedRates,\r\n checkinDate,\r\n checkoutDate,\r\n isShowCancellationPolicy: ShowCancellationPolicy,\r\n showCartSubmitBtn,\r\n isDealMode,\r\n bookingRatesEnabled: bookingRatesEnabled,\r\n bookingRates: bookingRates[0] && bookingRates[0].scores,\r\n placeHolders,\r\n displayPriceWithoutTaxes,\r\n taxesPrecentage\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n const combinedActions = {\r\n ...addonsActions,\r\n ...generalActions\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(CartContainer);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/CartContainer/CartContainer.js","export { default } from \"./Filter\";\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/Filter/index.js","import React from \"react\";\r\nimport InputRange from \"react-input-range\";\r\nimport \"react-input-range/lib/css/index.css\";\r\nimport cx from \"classnames\";\r\nimport { connect } from \"react-redux\";\r\nimport PropTypes from \"prop-types\";\r\nimport { Grid, GridRow, GridColumn } from \"semantic-ui-react\";\r\nimport { bindActionCreators } from \"redux\";\r\nimport { convertPriceToSelectedCurrency } from \"../../helpers/currencyHelpers\";\r\nimport { resetStore } from \"../../actions/resetStoreActions\";\r\nimport {\r\n getPlaceHolders,\r\n clearAnalyticsPlaceHolders,\r\n getAnalyticsPlaceHolders\r\n} from \"../../actions/placeHoldersActions\";\r\nimport * as filterActions from \"../../actions/filterActions\";\r\nimport { isRTL } from \"../../reducers\";\r\nimport styles from \"./styles.less\";\r\nimport { getPriceWithoutTax } from \"../../helpers/priceCalculationHelper\";\r\nimport { getPropertyItemTitle } from \"../../helpers/general-helpers\";\r\n\r\nclass Filter extends React.Component {\r\n state = {\r\n placeHoldersReceivedFromServer: false,\r\n origPriceRange: {\r\n min: 0,\r\n max: 1\r\n },\r\n chosenPriceRange: {\r\n min: 0,\r\n max: 1\r\n },\r\n pageType: {\r\n data: null,\r\n isDeals: false,\r\n isDealsSearch: false,\r\n isRegionalSearch: false,\r\n isRooms: false\r\n },\r\n haveFilters: false,\r\n chosenPriceCurrency: null,\r\n priceWereUpdated: false\r\n };\r\n\r\n componentDidMount() {\r\n this.setFilters();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n const {\r\n rooms,\r\n dealSearchResults,\r\n deals,\r\n regionResults,\r\n selectedCurrencyCode,\r\n currencies\r\n } = this.props;\r\n if (\r\n prevProps.rooms != rooms ||\r\n prevProps.dealSearchResults != dealSearchResults ||\r\n prevProps.deals != deals ||\r\n prevProps.regionResults != regionResults ||\r\n prevProps.selectedCurrencyCode != selectedCurrencyCode ||\r\n prevProps.currencies != currencies\r\n ) {\r\n this.setFilters();\r\n }\r\n }\r\n\r\n setFilters = () => {\r\n const pageType = this.calcPageType();\r\n const currencyData = this.getDataCurrency(pageType);\r\n const priceRange = this.calcPriceRangeRoomResults(pageType, currencyData);\r\n this.setState({\r\n chosenPriceRange: { min: priceRange.min, max: priceRange.max },\r\n origPriceRange: { min: priceRange.min, max: priceRange.max },\r\n chosenPriceCurrency: priceRange && priceRange.currency,\r\n priceWereUpdated: true,\r\n pageType,\r\n currencyData\r\n });\r\n };\r\n\r\n calcPageType = () => {\r\n const {\r\n rooms,\r\n dealSearchResults,\r\n deals,\r\n regionResults,\r\n routing,\r\n selectedHotelId\r\n } = this.props;\r\n let data = null;\r\n let isDeals = false;\r\n let isDealsSearch = false;\r\n let isRegionalSearch = false;\r\n let isRooms = false;\r\n const pathname =\r\n routing &&\r\n routing.location &&\r\n routing.location.pathname &&\r\n routing.location.pathname;\r\n if (pathname && pathname.indexOf(\"/deals/deal\") > -1) {\r\n data = dealSearchResults;\r\n isDealsSearch = true;\r\n } else if (pathname && pathname.indexOf(\"/deals\") > -1) {\r\n data = deals;\r\n isDeals = true;\r\n } else if (selectedHotelId) {\r\n data = rooms;\r\n isRooms = true;\r\n } else {\r\n data = regionResults;\r\n isRegionalSearch = true;\r\n }\r\n const pageType = {\r\n data,\r\n isDeals,\r\n isDealsSearch,\r\n isRegionalSearch,\r\n isRooms\r\n };\r\n return pageType;\r\n };\r\n\r\n checkBoxForFilter = (\r\n data,\r\n paramId,\r\n paramName,\r\n onClickFunction,\r\n isSelected\r\n ) => {\r\n const { isRtl } = this.props;\r\n return (\r\n \r\n );\r\n };\r\n\r\n filterByRoomType = room => {\r\n const { actions, roomFilter } = this.props;\r\n let roomIndex =\r\n roomFilter &&\r\n roomFilter.findIndex(r => r.id == room.id && r.name == room.name);\r\n const updatedRoomFilter = [...roomFilter];\r\n if (roomIndex > -1) {\r\n updatedRoomFilter.splice(roomIndex, 1);\r\n } else {\r\n updatedRoomFilter.push(room);\r\n }\r\n actions.setRoomFilters(updatedRoomFilter);\r\n };\r\n\r\n filterByRegion = region => {\r\n const { actions, regionFilter } = this.props;\r\n let regionIndex =\r\n regionFilter &&\r\n regionFilter.findIndex(\r\n r => r.regionId == region.regionId && r.title == region.title\r\n );\r\n const updatedRegionFilter = [...regionFilter];\r\n if (regionIndex > -1) {\r\n updatedRegionFilter.splice(regionIndex, 1);\r\n } else {\r\n updatedRegionFilter.push(region);\r\n }\r\n actions.setRegionFilters(updatedRegionFilter);\r\n };\r\n\r\n filterByPlan = plan => {\r\n const { actions, planFilter } = this.props;\r\n let planIndex =\r\n planFilter &&\r\n planFilter.findIndex(\r\n p => p.planCode == plan.planCode && p.planName == plan.planName\r\n );\r\n const updatedRoomFilter = [...planFilter];\r\n if (planIndex > -1) {\r\n updatedRoomFilter.splice(planIndex, 1);\r\n } else {\r\n updatedRoomFilter.push(plan);\r\n }\r\n actions.setPlanFilters(updatedRoomFilter);\r\n };\r\n\r\n filterByHotel = hotel => {\r\n const { actions, hotelFilter } = this.props;\r\n let hotelIndex =\r\n hotelFilter &&\r\n hotelFilter.findIndex(\r\n p => p.hotelID == hotel.hotelID && p.hotelName == hotel.hotelName\r\n );\r\n const updatedHotelFilter = [...hotelFilter];\r\n if (hotelIndex > -1) {\r\n updatedHotelFilter.splice(hotelIndex, 1);\r\n } else {\r\n updatedHotelFilter.push(hotel);\r\n }\r\n actions.setHotelFilters(updatedHotelFilter);\r\n };\r\n\r\n calcPriceRangeRoomResults = (pageType, currencyData) => {\r\n const { selectedPaxId, currencies, selectedCurrencyCode } = this.props;\r\n let propName = \"\";\r\n if (pageType.isDealsSearch || pageType.isDeals) {\r\n propName = \"totalPrice\";\r\n } else if (pageType.isRooms) {\r\n propName = \"lowestPrice\";\r\n } else {\r\n propName = \"startFromPrice\";\r\n }\r\n const hasResults =\r\n pageType.isDeals || pageType.isRegionalSearch\r\n ? pageType.data\r\n : pageType.data && pageType.data[selectedPaxId];\r\n const data =\r\n pageType.isDeals || pageType.isRegionalSearch\r\n ? pageType.data\r\n : pageType.data[selectedPaxId];\r\n let maxPrice = null;\r\n let minPrice = null;\r\n if (pageType.isRegionalSearch) {\r\n const hasPrices = hasResults && data;\r\n const firstPrice =\r\n hasPrices && data[0] && data[0].roomResult && data[0].roomResult[0];\r\n maxPrice = firstPrice ? firstPrice[propName] : 0;\r\n minPrice = firstPrice ? firstPrice[propName] : 0;\r\n hasPrices &&\r\n data.forEach(element => {\r\n element &&\r\n element.roomResult.forEach(subElement => {\r\n if (subElement[propName] < minPrice) {\r\n minPrice = subElement[propName];\r\n }\r\n if (subElement[propName] > maxPrice) {\r\n maxPrice = subElement[propName];\r\n }\r\n });\r\n });\r\n } else {\r\n const isSinglePrice = hasResults && data[propName];\r\n maxPrice = hasResults\r\n ? isSinglePrice\r\n ? data[propName]\r\n : data[0][propName]\r\n : 0;\r\n minPrice = hasResults\r\n ? isSinglePrice\r\n ? data[propName]\r\n : data[0][propName]\r\n : 0;\r\n if (!isSinglePrice) {\r\n hasResults &&\r\n data.forEach(element => {\r\n if (element[propName] < minPrice) {\r\n minPrice = element[propName];\r\n }\r\n if (pageType.isDeals || pageType.isDealsSearch) {\r\n if (element[propName] > maxPrice) {\r\n maxPrice = element[propName];\r\n }\r\n } else {\r\n element &&\r\n element.rates &&\r\n element.rates.forEach(rate => {\r\n if (rate.totalPrice > maxPrice) {\r\n maxPrice = rate.totalPrice;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n let minOrig = this.splitPriceToNumberAndCurrency(\r\n convertPriceToSelectedCurrency(\r\n minPrice,\r\n selectedCurrencyCode,\r\n currencyData && currencyData.currencyCode,\r\n currencyData && currencyData.currency,\r\n currencies\r\n )\r\n );\r\n let maxOrig = this.splitPriceToNumberAndCurrency(\r\n convertPriceToSelectedCurrency(\r\n maxPrice,\r\n selectedCurrencyCode,\r\n currencyData && currencyData.currencyCode,\r\n currencyData && currencyData.currency,\r\n currencies\r\n )\r\n );\r\n return {\r\n max: Math.round(maxOrig && maxOrig.priceNumber),\r\n min: Math.round(minOrig && minOrig.priceNumber),\r\n currency: maxOrig && maxOrig.currency\r\n };\r\n };\r\n\r\n getDataCurrency = pageType => {\r\n const haveData = pageType.data && pageType.data[0];\r\n let currencyCode = \"\";\r\n let currency = \"\";\r\n if (pageType.isRegionalSearch) {\r\n currencyCode =\r\n haveData &&\r\n pageType.data[0].roomResult &&\r\n pageType.data[0].roomResult[0] &&\r\n pageType.data[0].roomResult[0].currencyCode;\r\n currency =\r\n haveData &&\r\n pageType.data[0].roomResult &&\r\n pageType.data[0].roomResult[0] &&\r\n pageType.data[0].roomResult[0].currency;\r\n } else if (pageType.isDeals) {\r\n currencyCode =\r\n haveData && pageType.data[0] && pageType.data[0].currencyCode;\r\n currency = haveData && pageType.data[0] && pageType.data[0].currency;\r\n } else {\r\n currencyCode =\r\n haveData && pageType.data[0][0] && pageType.data[0][0].currencyCode;\r\n currency =\r\n haveData && pageType.data[0][0] && pageType.data[0][0].currency;\r\n }\r\n return {\r\n currency,\r\n currencyCode\r\n };\r\n };\r\n\r\n splitPriceToNumberAndCurrency = price => {\r\n let isFirstNumber = false;\r\n let currency = \"\";\r\n let number = \"\";\r\n let isNumber = false;\r\n const priceArray = price && price.split(\"\");\r\n priceArray &&\r\n priceArray.forEach(p => {\r\n isNumber = !isNaN(p * 1);\r\n if (!isNumber && !isFirstNumber) {\r\n currency = currency + p;\r\n } else if (isNumber) {\r\n number = number + p;\r\n isFirstNumber = true;\r\n }\r\n });\r\n return {\r\n currency,\r\n priceNumber: number * 1\r\n };\r\n };\r\n\r\n priceRangeFilter = (/*selectedCurrencyCode*/) => {\r\n const {\r\n chosenPriceRange,\r\n origPriceRange,\r\n chosenPriceCurrency\r\n } = this.state;\r\n const { displayPriceWithoutTaxes, taxesPrecentage } = this.props;\r\n let calculatedMaxPrice = origPriceRange && origPriceRange.max;\r\n let calculatedMinPrice = origPriceRange && origPriceRange.min;\r\n\r\n if (displayPriceWithoutTaxes) {\r\n calculatedMaxPrice = getPriceWithoutTax(\r\n calculatedMaxPrice,\r\n taxesPrecentage\r\n );\r\n calculatedMinPrice = getPriceWithoutTax(\r\n calculatedMinPrice,\r\n taxesPrecentage\r\n );\r\n } else {\r\n // do nothing\r\n }\r\n\r\n return (\r\n \r\n this.addCurrencyToPrice(value, chosenPriceCurrency)\r\n }\r\n value={chosenPriceRange}\r\n onChange={value => this.setState({ chosenPriceRange: value })}\r\n onChangeComplete={value => this.setPriceRanges(value)}\r\n />\r\n );\r\n };\r\n\r\n addCurrencyToPrice = (value, chosenPriceCurrency) =>\r\n `${chosenPriceCurrency}${value}`;\r\n\r\n setPriceRanges = value => {\r\n const { actions, selectedCurrencyCode, currencies } = this.props;\r\n const { currencyData } = this.state;\r\n const priceMin = this.splitPriceToNumberAndCurrency(\r\n convertPriceToSelectedCurrency(\r\n value.min,\r\n currencyData.currencyCode,\r\n selectedCurrencyCode,\r\n currencyData.currency,\r\n currencies\r\n )\r\n );\r\n const priceMax = this.splitPriceToNumberAndCurrency(\r\n convertPriceToSelectedCurrency(\r\n value.max,\r\n currencyData.currencyCode,\r\n selectedCurrencyCode,\r\n currencyData.currency,\r\n currencies\r\n )\r\n );\r\n actions.setMaxPriceRangeFilters(priceMax && priceMax.priceNumber);\r\n actions.setMinPriceRangeFilters(priceMin && priceMin.priceNumber);\r\n };\r\n\r\n getPlansList = (data, haveData, isDeals) => {\r\n const { selectedPaxId, roomFilter } = this.props;\r\n const plansList = [];\r\n if (haveData) {\r\n const selectedRooms = data[selectedPaxId].filter(\r\n r => roomFilter.length === 0 || roomFilter.includes(r)\r\n );\r\n selectedRooms.forEach(element => {\r\n if (isDeals) {\r\n this.checkIfPlanInListAndEditListEccoringley(\r\n plansList,\r\n element,\r\n \"hotelName\"\r\n );\r\n } else {\r\n element &&\r\n element.rates &&\r\n element.rates.forEach(rate => {\r\n this.checkIfPlanInListAndEditListEccoringley(\r\n plansList,\r\n rate,\r\n \"name\"\r\n );\r\n });\r\n }\r\n });\r\n }\r\n return plansList;\r\n };\r\n\r\n getHotelsList = (dataForList, haveData, isDeals) => {\r\n const { selectedPaxId } = this.props;\r\n const hotelsList = [];\r\n const paramName = isDeals ? \"hotelName\" : \"name\";\r\n const paramId = isDeals ? \"hotelId\" : \"hotelID\";\r\n const data = isDeals\r\n ? dataForList[selectedPaxId]\r\n : dataForList[selectedPaxId] && dataForList;\r\n if (haveData) {\r\n if (isDeals) {\r\n if (data && data[paramName] != null) {\r\n this.checkIfHotelInListAndEditListEccoringley(\r\n hotelsList,\r\n data[selectedPaxId],\r\n paramId,\r\n paramName\r\n );\r\n } else {\r\n data &&\r\n data.forEach(element => {\r\n this.checkIfHotelInListAndEditListEccoringley(\r\n hotelsList,\r\n element,\r\n paramId,\r\n paramName\r\n );\r\n });\r\n }\r\n } else {\r\n if (data && data.roomResult && data.roomResult[paramName] != null) {\r\n this.checkIfHotelInListAndEditListEccoringley(\r\n hotelsList,\r\n data[selectedPaxId],\r\n paramId,\r\n paramName\r\n );\r\n } else {\r\n data &&\r\n data.forEach(element => {\r\n element &&\r\n element.roomResult &&\r\n element.roomResult.forEach(hotel => {\r\n let indexHotelInList =\r\n hotelsList &&\r\n hotelsList.findIndex(\r\n p =>\r\n p.hotelID == hotel[paramId] &&\r\n p.hotelName == hotel[paramName]\r\n );\r\n if (indexHotelInList == -1) {\r\n hotelsList.push({\r\n hotelID: hotel[paramId],\r\n hotelName: hotel[paramName]\r\n });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n return hotelsList;\r\n };\r\n\r\n checkIfPlanInListAndEditListEccoringley = (plansList, rate) => {\r\n let indexPlanInList =\r\n plansList &&\r\n plansList.findIndex(\r\n p => p.planName == rate.planName && p.planCode == rate.planCode\r\n );\r\n if (indexPlanInList == -1) {\r\n plansList.push({\r\n planCode: rate.planCode,\r\n planName: rate.planName\r\n });\r\n }\r\n };\r\n\r\n checkIfHotelInListAndEditListEccoringley = (\r\n hotelList,\r\n hotel,\r\n hotelIdProperty,\r\n hotelNameProperty\r\n ) => {\r\n let indexHotelInList =\r\n hotelList &&\r\n hotel &&\r\n hotelList.findIndex(\r\n p =>\r\n p.hotelID == hotel[hotelIdProperty] &&\r\n p[hotelNameProperty] == hotel[hotelNameProperty]\r\n );\r\n if (indexHotelInList == -1 && hotel != null) {\r\n hotelList.push({\r\n hotelID: hotel[hotelIdProperty],\r\n hotelName: hotel[hotelNameProperty]\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n titles,\r\n selectedPaxId,\r\n selectedCurrencyCode,\r\n roomFilter,\r\n planFilter,\r\n regionFilter,\r\n hotelFilter,\r\n routing,\r\n thumbanilDisplay,\r\n showPricePerNightThumb,\r\n displayPriceWithoutTaxes,\r\n propertyType\r\n } = this.props;\r\n const showPlanAndPriceHandlers =\r\n !thumbanilDisplay ||\r\n (thumbanilDisplay &&\r\n routing &&\r\n routing.location.pathname.indexOf(\"hotel/room\") > -1);\r\n const { pageType, origPriceRange } = this.state;\r\n const haveData =\r\n pageType.data && selectedPaxId != null && pageType.data[selectedPaxId];\r\n const plansList =\r\n (pageType.isRooms || pageType.isDealsSearch) &&\r\n this.getPlansList(pageType.data, haveData, pageType.isDealsSearch);\r\n const hotelsList =\r\n (pageType.isDeals || pageType.isRegionalSearch) &&\r\n this.getHotelsList(pageType.data, haveData, pageType.isDeals);\r\n const haveFilters =\r\n (plansList && plansList.length > 1) ||\r\n (hotelsList && hotelsList.length > 1) ||\r\n (origPriceRange.min > 0 && origPriceRange.max > 0) ||\r\n (pageType && pageType.data && pageType.data.length > 1);\r\n return (\r\n haveFilters && (\r\n \r\n \r\n \r\n {titles.FilterBy}\r\n \r\n \r\n {plansList &&\r\n plansList.length > 1 &&\r\n haveData &&\r\n plansList &&\r\n showPlanAndPriceHandlers && (\r\n \r\n \r\n \r\n {titles.FilterByPlan}\r\n
\r\n \r\n {plansList.map(plan =>\r\n this.checkBoxForFilter(\r\n plan,\r\n \"planCode\",\r\n \"planName\",\r\n this.filterByPlan,\r\n planFilter.find(p => p.planCode === plan.planCode) !=\r\n undefined\r\n )\r\n )}\r\n
\r\n \r\n \r\n )}\r\n {hotelsList &&\r\n hotelsList.length > 1 &&\r\n haveData && (\r\n \r\n \r\n \r\n {titles.FilterByHotel}\r\n
\r\n \r\n {hotelsList.map(hotel =>\r\n this.checkBoxForFilter(\r\n hotel,\r\n \"hotelID\",\r\n \"hotelName\",\r\n this.filterByHotel,\r\n hotelFilter.find(h => h.hotelID === hotel.hotelID) !=\r\n undefined\r\n )\r\n )}\r\n
\r\n \r\n \r\n )}\r\n {pageType.isRooms &&\r\n haveData &&\r\n pageType.data[selectedPaxId] instanceof Array && (\r\n \r\n \r\n \r\n {titles.FilterByRoomType}{\" \"}\r\n {getPropertyItemTitle(titles, propertyType)}\r\n
\r\n \r\n {pageType.data[selectedPaxId].map(room =>\r\n this.checkBoxForFilter(\r\n room,\r\n \"id\",\r\n \"name\",\r\n this.filterByRoomType,\r\n roomFilter.includes(room)\r\n )\r\n )}\r\n
\r\n \r\n \r\n )}\r\n {pageType.isRegionalSearch &&\r\n haveData &&\r\n pageType.data &&\r\n pageType.data.length > 1 && (\r\n \r\n \r\n \r\n {titles.FilterByRegion}\r\n
\r\n \r\n {pageType.data.map(region =>\r\n this.checkBoxForFilter(\r\n region,\r\n \"regionId\",\r\n \"title\",\r\n this.filterByRegion,\r\n regionFilter.includes(region)\r\n )\r\n )}\r\n
\r\n \r\n \r\n )}\r\n {!displayPriceWithoutTaxes &&\r\n !showPricePerNightThumb &&\r\n showPlanAndPriceHandlers &&\r\n origPriceRange.max &&\r\n origPriceRange.min &&\r\n origPriceRange.max != origPriceRange.min && (\r\n \r\n \r\n \r\n {titles.FilterByPrice}\r\n
\r\n \r\n {haveData &&\r\n origPriceRange.min > 0 &&\r\n origPriceRange.max > 0 &&\r\n this.priceRangeFilter(selectedCurrencyCode)}\r\n
\r\n \r\n \r\n )}\r\n \r\n )\r\n );\r\n }\r\n}\r\n\r\nFilter.propTypes = {\r\n titles: PropTypes.object,\r\n //isMobileView: PropTypes.bool,\r\n // lang: PropTypes.string,\r\n isRtl: PropTypes.bool,\r\n dealSearchResults: PropTypes.array,\r\n rooms: PropTypes.object,\r\n actions: PropTypes.object,\r\n selectedPaxId: PropTypes.number,\r\n roomFilter: PropTypes.array,\r\n planFilter: PropTypes.array,\r\n regionFilter: PropTypes.array,\r\n hotelFilter: PropTypes.array,\r\n routing: PropTypes.object,\r\n regionResults: PropTypes.array,\r\n deals: PropTypes.array,\r\n currencies: PropTypes.array,\r\n selectedCurrencyCode: PropTypes.string,\r\n selectedHotelId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n thumbanilDisplay: PropTypes.bool,\r\n showPricePerNightThumb: PropTypes.bool,\r\n displayPriceWithoutTaxes: PropTypes.bool,\r\n taxesPrecentage: PropTypes.string,\r\n propertyType: PropTypes.string\r\n};\r\n\r\nconst mapStateToProps = store => {\r\n const state = {\r\n // lang: store.lang,\r\n //isMobileView: store.isMobileView,\r\n isRtl: isRTL(store),\r\n selectedCurrencyCode: store.selectedCurrency,\r\n dealSearchResults: store.dealSearchResults,\r\n titles: store.titles,\r\n selectedPaxId: store.selectedPaxId,\r\n rooms: store.rooms,\r\n roomFilter: store.roomFilter,\r\n planFilter: store.planFilter,\r\n regionFilter: store.regionFilter,\r\n hotelFilter: store.hotelFilter,\r\n actions: store.actions,\r\n routing: store.routing,\r\n regionResults: store.regionResults,\r\n deals: store.deals,\r\n selectedHotelId: store.selectedHotelId,\r\n currencies: store.currencies,\r\n thumbanilDisplay: store.thumbanilDisplay,\r\n showPricePerNightThumb: store.showPricePerNightThumb,\r\n displayPriceWithoutTaxes: store.displayPriceWithoutTaxes,\r\n taxesPrecentage: store.taxesPrecentage,\r\n propertyType: store.propertyType\r\n };\r\n return state;\r\n};\r\n\r\nfunction mapDispatchToProps(dispatch) {\r\n const combinedActions = {\r\n resetStore,\r\n getPlaceHolders,\r\n clearAnalyticsPlaceHolders,\r\n getAnalyticsPlaceHolders,\r\n ...filterActions\r\n };\r\n return {\r\n actions: bindActionCreators(combinedActions, dispatch)\r\n };\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(Filter);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/containers/Filter/Filter.js","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _inputRange = require('./input-range/input-range');\n\nvar _inputRange2 = _interopRequireDefault(_inputRange);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @ignore\n * @typedef {Object} ClientRect\n * @property {number} height\n * @property {number} left\n * @property {number} top\n * @property {number} width\n */\n\n/**\n * @typedef {Object} InputRangeClassNames\n * @property {string} activeTrack\n * @property {string} disabledInputRange\n * @property {string} inputRange\n * @property {string} labelContainer\n * @property {string} maxLabel\n * @property {string} minLabel\n * @property {string} slider\n * @property {string} sliderContainer\n * @property {string} track\n * @property {string} valueLabel\n */\n\n/**\n * @typedef {Function} LabelFormatter\n * @param {number} value\n * @param {string} type\n * @return {string}\n */\n\n/**\n * @ignore\n * @typedef {Object} Point\n * @property {number} x\n * @property {number} y\n */\n\n/**\n * @typedef {Object} Range\n * @property {number} min - Min value\n * @property {number} max - Max value\n */\n\nexports.default = _inputRange2.default;\nmodule.exports = exports['default'];\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/index.js\n// module id = 1795\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _autobindDecorator = require('autobind-decorator');\n\nvar _autobindDecorator2 = _interopRequireDefault(_autobindDecorator);\n\nvar _valueTransformer = require('./value-transformer');\n\nvar valueTransformer = _interopRequireWildcard(_valueTransformer);\n\nvar _defaultClassNames = require('./default-class-names');\n\nvar _defaultClassNames2 = _interopRequireDefault(_defaultClassNames);\n\nvar _label = require('./label');\n\nvar _label2 = _interopRequireDefault(_label);\n\nvar _rangePropType = require('./range-prop-type');\n\nvar _rangePropType2 = _interopRequireDefault(_rangePropType);\n\nvar _valuePropType = require('./value-prop-type');\n\nvar _valuePropType2 = _interopRequireDefault(_valuePropType);\n\nvar _slider = require('./slider');\n\nvar _slider2 = _interopRequireDefault(_slider);\n\nvar _track = require('./track');\n\nvar _track2 = _interopRequireDefault(_track);\n\nvar _utils = require('../utils');\n\nvar _keyCodes = require('./key-codes');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\n/**\n * A React component that allows users to input numeric values within a range\n * by dragging its sliders.\n */\nvar InputRange = (_class = function (_React$Component) {\n _inherits(InputRange, _React$Component);\n\n _createClass(InputRange, null, [{\n key: 'propTypes',\n\n /**\n * @ignore\n * @override\n * @return {Object}\n */\n get: function get() {\n return {\n allowSameValues: _propTypes2.default.bool,\n ariaLabelledby: _propTypes2.default.string,\n ariaControls: _propTypes2.default.string,\n classNames: _propTypes2.default.objectOf(_propTypes2.default.string),\n disabled: _propTypes2.default.bool,\n draggableTrack: _propTypes2.default.bool,\n formatLabel: _propTypes2.default.func,\n maxValue: _rangePropType2.default,\n minValue: _rangePropType2.default,\n name: _propTypes2.default.string,\n onChangeStart: _propTypes2.default.func,\n onChange: _propTypes2.default.func.isRequired,\n onChangeComplete: _propTypes2.default.func,\n step: _propTypes2.default.number,\n value: _valuePropType2.default\n };\n }\n\n /**\n * @ignore\n * @override\n * @return {Object}\n */\n\n }, {\n key: 'defaultProps',\n get: function get() {\n return {\n allowSameValues: false,\n classNames: _defaultClassNames2.default,\n disabled: false,\n maxValue: 10,\n minValue: 0,\n step: 1\n };\n }\n\n /**\n * @param {Object} props\n * @param {boolean} [props.allowSameValues]\n * @param {string} [props.ariaLabelledby]\n * @param {string} [props.ariaControls]\n * @param {InputRangeClassNames} [props.classNames]\n * @param {boolean} [props.disabled = false]\n * @param {Function} [props.formatLabel]\n * @param {number|Range} [props.maxValue = 10]\n * @param {number|Range} [props.minValue = 0]\n * @param {string} [props.name]\n * @param {string} props.onChange\n * @param {Function} [props.onChangeComplete]\n * @param {Function} [props.onChangeStart]\n * @param {number} [props.step = 1]\n * @param {number|Range} props.value\n */\n\n }]);\n\n function InputRange(props) {\n _classCallCheck(this, InputRange);\n\n /**\n * @private\n * @type {?number}\n */\n var _this = _possibleConstructorReturn(this, (InputRange.__proto__ || Object.getPrototypeOf(InputRange)).call(this, props));\n\n _this.startValue = null;\n\n /**\n * @private\n * @type {?Component}\n */\n _this.node = null;\n\n /**\n * @private\n * @type {?Component}\n */\n _this.trackNode = null;\n\n /**\n * @private\n * @type {bool}\n */\n _this.isSliderDragging = false;\n\n /**\n * @private\n * @type {?string}\n */\n _this.lastKeyMoved = null;\n return _this;\n }\n\n /**\n * @ignore\n * @override\n * @return {void}\n */\n\n\n _createClass(InputRange, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeDocumentMouseUpListener();\n this.removeDocumentTouchEndListener();\n }\n\n /**\n * Return the CSS class name of the component\n * @private\n * @return {string}\n */\n\n }, {\n key: 'getComponentClassName',\n value: function getComponentClassName() {\n if (!this.props.disabled) {\n return this.props.classNames.inputRange;\n }\n\n return this.props.classNames.disabledInputRange;\n }\n\n /**\n * Return the bounding rect of the track\n * @private\n * @return {ClientRect}\n */\n\n }, {\n key: 'getTrackClientRect',\n value: function getTrackClientRect() {\n return this.trackNode.getClientRect();\n }\n\n /**\n * Return the slider key closest to a point\n * @private\n * @param {Point} position\n * @return {string}\n */\n\n }, {\n key: 'getKeyByPosition',\n value: function getKeyByPosition(position) {\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n var positions = valueTransformer.getPositionsFromValues(values, this.props.minValue, this.props.maxValue, this.getTrackClientRect());\n\n if (this.isMultiValue()) {\n var distanceToMin = (0, _utils.distanceTo)(position, positions.min);\n var distanceToMax = (0, _utils.distanceTo)(position, positions.max);\n\n if (distanceToMin < distanceToMax) {\n return 'min';\n }\n }\n\n return 'max';\n }\n\n /**\n * Return all the slider keys\n * @private\n * @return {string[]}\n */\n\n }, {\n key: 'getKeys',\n value: function getKeys() {\n if (this.isMultiValue()) {\n return ['min', 'max'];\n }\n\n return ['max'];\n }\n\n /**\n * Return true if the difference between the new and the current value is\n * greater or equal to the step amount of the component\n * @private\n * @param {Range} values\n * @return {boolean}\n */\n\n }, {\n key: 'hasStepDifference',\n value: function hasStepDifference(values) {\n var currentValues = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n\n return (0, _utils.length)(values.min, currentValues.min) >= this.props.step || (0, _utils.length)(values.max, currentValues.max) >= this.props.step;\n }\n\n /**\n * Return true if the component accepts a min and max value\n * @private\n * @return {boolean}\n */\n\n }, {\n key: 'isMultiValue',\n value: function isMultiValue() {\n return (0, _utils.isObject)(this.props.value);\n }\n\n /**\n * Return true if the range is within the max and min value of the component\n * @private\n * @param {Range} values\n * @return {boolean}\n */\n\n }, {\n key: 'isWithinRange',\n value: function isWithinRange(values) {\n if (this.isMultiValue()) {\n return values.min >= this.props.minValue && values.max <= this.props.maxValue && this.props.allowSameValues ? values.min <= values.max : values.min < values.max;\n }\n\n return values.max >= this.props.minValue && values.max <= this.props.maxValue;\n }\n\n /**\n * Return true if the new value should trigger a render\n * @private\n * @param {Range} values\n * @return {boolean}\n */\n\n }, {\n key: 'shouldUpdate',\n value: function shouldUpdate(values) {\n return this.isWithinRange(values) && this.hasStepDifference(values);\n }\n\n /**\n * Update the position of a slider\n * @private\n * @param {string} key\n * @param {Point} position\n * @return {void}\n */\n\n }, {\n key: 'updatePosition',\n value: function updatePosition(key, position) {\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n var positions = valueTransformer.getPositionsFromValues(values, this.props.minValue, this.props.maxValue, this.getTrackClientRect());\n\n positions[key] = position;\n this.lastKeyMoved = key;\n\n this.updatePositions(positions);\n }\n\n /**\n * Update the positions of multiple sliders\n * @private\n * @param {Object} positions\n * @param {Point} positions.min\n * @param {Point} positions.max\n * @return {void}\n */\n\n }, {\n key: 'updatePositions',\n value: function updatePositions(positions) {\n var values = {\n min: valueTransformer.getValueFromPosition(positions.min, this.props.minValue, this.props.maxValue, this.getTrackClientRect()),\n max: valueTransformer.getValueFromPosition(positions.max, this.props.minValue, this.props.maxValue, this.getTrackClientRect())\n };\n\n var transformedValues = {\n min: valueTransformer.getStepValueFromValue(values.min, this.props.step),\n max: valueTransformer.getStepValueFromValue(values.max, this.props.step)\n };\n\n this.updateValues(transformedValues);\n }\n\n /**\n * Update the value of a slider\n * @private\n * @param {string} key\n * @param {number} value\n * @return {void}\n */\n\n }, {\n key: 'updateValue',\n value: function updateValue(key, value) {\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n\n values[key] = value;\n\n this.updateValues(values);\n }\n\n /**\n * Update the values of multiple sliders\n * @private\n * @param {Range|number} values\n * @return {void}\n */\n\n }, {\n key: 'updateValues',\n value: function updateValues(values) {\n if (!this.shouldUpdate(values)) {\n return;\n }\n\n this.props.onChange(this.isMultiValue() ? values : values.max);\n }\n\n /**\n * Increment the value of a slider by key name\n * @private\n * @param {string} key\n * @return {void}\n */\n\n }, {\n key: 'incrementValue',\n value: function incrementValue(key) {\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n var value = values[key] + this.props.step;\n\n this.updateValue(key, value);\n }\n\n /**\n * Decrement the value of a slider by key name\n * @private\n * @param {string} key\n * @return {void}\n */\n\n }, {\n key: 'decrementValue',\n value: function decrementValue(key) {\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n var value = values[key] - this.props.step;\n\n this.updateValue(key, value);\n }\n\n /**\n * Listen to mouseup event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentMouseUpListener',\n value: function addDocumentMouseUpListener() {\n this.removeDocumentMouseUpListener();\n this.node.ownerDocument.addEventListener('mouseup', this.handleMouseUp);\n }\n\n /**\n * Listen to touchend event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentTouchEndListener',\n value: function addDocumentTouchEndListener() {\n this.removeDocumentTouchEndListener();\n this.node.ownerDocument.addEventListener('touchend', this.handleTouchEnd);\n }\n\n /**\n * Stop listening to mouseup event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentMouseUpListener',\n value: function removeDocumentMouseUpListener() {\n this.node.ownerDocument.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n /**\n * Stop listening to touchend event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentTouchEndListener',\n value: function removeDocumentTouchEndListener() {\n this.node.ownerDocument.removeEventListener('touchend', this.handleTouchEnd);\n }\n\n /**\n * Handle any \"mousemove\" event received by the slider\n * @private\n * @param {SyntheticEvent} event\n * @param {string} key\n * @return {void}\n */\n\n }, {\n key: 'handleSliderDrag',\n value: function handleSliderDrag(event, key) {\n var _this2 = this;\n\n if (this.props.disabled) {\n return;\n }\n\n var position = valueTransformer.getPositionFromEvent(event, this.getTrackClientRect());\n this.isSliderDragging = true;\n requestAnimationFrame(function () {\n return _this2.updatePosition(key, position);\n });\n }\n\n /**\n * Handle any \"mousemove\" event received by the track\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleTrackDrag',\n value: function handleTrackDrag(event, prevEvent) {\n if (this.props.disabled || !this.props.draggableTrack || this.isSliderDragging) {\n return;\n }\n\n var _props = this.props,\n maxValue = _props.maxValue,\n minValue = _props.minValue,\n _props$value = _props.value,\n max = _props$value.max,\n min = _props$value.min;\n\n\n var position = valueTransformer.getPositionFromEvent(event, this.getTrackClientRect());\n var value = valueTransformer.getValueFromPosition(position, minValue, maxValue, this.getTrackClientRect());\n var stepValue = valueTransformer.getStepValueFromValue(value, this.props.step);\n\n var prevPosition = valueTransformer.getPositionFromEvent(prevEvent, this.getTrackClientRect());\n var prevValue = valueTransformer.getValueFromPosition(prevPosition, minValue, maxValue, this.getTrackClientRect());\n var prevStepValue = valueTransformer.getStepValueFromValue(prevValue, this.props.step);\n\n var offset = prevStepValue - stepValue;\n\n var transformedValues = {\n min: min - offset,\n max: max - offset\n };\n\n this.updateValues(transformedValues);\n }\n\n /**\n * Handle any \"keydown\" event received by the slider\n * @private\n * @param {SyntheticEvent} event\n * @param {string} key\n * @return {void}\n */\n\n }, {\n key: 'handleSliderKeyDown',\n value: function handleSliderKeyDown(event, key) {\n if (this.props.disabled) {\n return;\n }\n\n switch (event.keyCode) {\n case _keyCodes.LEFT_ARROW:\n case _keyCodes.DOWN_ARROW:\n event.preventDefault();\n this.decrementValue(key);\n break;\n\n case _keyCodes.RIGHT_ARROW:\n case _keyCodes.UP_ARROW:\n event.preventDefault();\n this.incrementValue(key);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Handle any \"mousedown\" event received by the track\n * @private\n * @param {SyntheticEvent} event\n * @param {Point} position\n * @return {void}\n */\n\n }, {\n key: 'handleTrackMouseDown',\n value: function handleTrackMouseDown(event, position) {\n if (this.props.disabled) {\n return;\n }\n\n var _props2 = this.props,\n maxValue = _props2.maxValue,\n minValue = _props2.minValue,\n _props2$value = _props2.value,\n max = _props2$value.max,\n min = _props2$value.min;\n\n\n event.preventDefault();\n\n var value = valueTransformer.getValueFromPosition(position, minValue, maxValue, this.getTrackClientRect());\n var stepValue = valueTransformer.getStepValueFromValue(value, this.props.step);\n\n if (!this.props.draggableTrack || stepValue > max || stepValue < min) {\n this.updatePosition(this.getKeyByPosition(position), position);\n }\n }\n\n /**\n * Handle the start of any mouse/touch event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleInteractionStart',\n value: function handleInteractionStart() {\n if (this.props.onChangeStart) {\n this.props.onChangeStart(this.props.value);\n }\n\n if (this.props.onChangeComplete && !(0, _utils.isDefined)(this.startValue)) {\n this.startValue = this.props.value;\n }\n }\n\n /**\n * Handle the end of any mouse/touch event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleInteractionEnd',\n value: function handleInteractionEnd() {\n if (this.isSliderDragging) {\n this.isSliderDragging = false;\n }\n\n if (!this.props.onChangeComplete || !(0, _utils.isDefined)(this.startValue)) {\n return;\n }\n\n if (this.startValue !== this.props.value) {\n this.props.onChangeComplete(this.props.value);\n }\n\n this.startValue = null;\n }\n\n /**\n * Handle any \"keydown\" event received by the component\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleKeyDown',\n value: function handleKeyDown(event) {\n this.handleInteractionStart(event);\n }\n\n /**\n * Handle any \"keyup\" event received by the component\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleKeyUp',\n value: function handleKeyUp(event) {\n this.handleInteractionEnd(event);\n }\n\n /**\n * Handle any \"mousedown\" event received by the component\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleMouseDown',\n value: function handleMouseDown(event) {\n this.handleInteractionStart(event);\n this.addDocumentMouseUpListener();\n }\n\n /**\n * Handle any \"mouseup\" event received by the component\n * @private\n * @param {SyntheticEvent} event\n */\n\n }, {\n key: 'handleMouseUp',\n value: function handleMouseUp(event) {\n this.handleInteractionEnd(event);\n this.removeDocumentMouseUpListener();\n }\n\n /**\n * Handle any \"touchstart\" event received by the component\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleTouchStart',\n value: function handleTouchStart(event) {\n this.handleInteractionStart(event);\n this.addDocumentTouchEndListener();\n }\n\n /**\n * Handle any \"touchend\" event received by the component\n * @private\n * @param {SyntheticEvent} event\n */\n\n }, {\n key: 'handleTouchEnd',\n value: function handleTouchEnd(event) {\n this.handleInteractionEnd(event);\n this.removeDocumentTouchEndListener();\n }\n\n /**\n * Return JSX of sliders\n * @private\n * @return {JSX.Element}\n */\n\n }, {\n key: 'renderSliders',\n value: function renderSliders() {\n var _this3 = this;\n\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n var percentages = valueTransformer.getPercentagesFromValues(values, this.props.minValue, this.props.maxValue);\n var keys = this.props.allowSameValues && this.lastKeyMoved === 'min' ? this.getKeys().reverse() : this.getKeys();\n\n return keys.map(function (key) {\n var value = values[key];\n var percentage = percentages[key];\n\n var _props3 = _this3.props,\n maxValue = _props3.maxValue,\n minValue = _props3.minValue;\n\n\n if (key === 'min') {\n maxValue = values.max;\n } else {\n minValue = values.min;\n }\n\n var slider = _react2.default.createElement(_slider2.default, {\n ariaLabelledby: _this3.props.ariaLabelledby,\n ariaControls: _this3.props.ariaControls,\n classNames: _this3.props.classNames,\n formatLabel: _this3.props.formatLabel,\n key: key,\n maxValue: maxValue,\n minValue: minValue,\n onSliderDrag: _this3.handleSliderDrag,\n onSliderKeyDown: _this3.handleSliderKeyDown,\n percentage: percentage,\n type: key,\n value: value });\n\n return slider;\n });\n }\n\n /**\n * Return JSX of hidden inputs\n * @private\n * @return {JSX.Element}\n */\n\n }, {\n key: 'renderHiddenInputs',\n value: function renderHiddenInputs() {\n var _this4 = this;\n\n if (!this.props.name) {\n return [];\n }\n\n var isMultiValue = this.isMultiValue();\n var values = valueTransformer.getValueFromProps(this.props, isMultiValue);\n\n return this.getKeys().map(function (key) {\n var value = values[key];\n var name = isMultiValue ? '' + _this4.props.name + (0, _utils.captialize)(key) : _this4.props.name;\n\n return _react2.default.createElement('input', { key: key, type: 'hidden', name: name, value: value });\n });\n }\n\n /**\n * @ignore\n * @override\n * @return {JSX.Element}\n */\n\n }, {\n key: 'render',\n value: function render() {\n var _this5 = this;\n\n var componentClassName = this.getComponentClassName();\n var values = valueTransformer.getValueFromProps(this.props, this.isMultiValue());\n var percentages = valueTransformer.getPercentagesFromValues(values, this.props.minValue, this.props.maxValue);\n\n return _react2.default.createElement(\n 'div',\n {\n 'aria-disabled': this.props.disabled,\n ref: function ref(node) {\n _this5.node = node;\n },\n className: componentClassName,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onTouchStart: this.handleTouchStart },\n _react2.default.createElement(\n _label2.default,\n {\n classNames: this.props.classNames,\n formatLabel: this.props.formatLabel,\n type: 'min' },\n this.props.minValue\n ),\n _react2.default.createElement(\n _track2.default,\n {\n classNames: this.props.classNames,\n draggableTrack: this.props.draggableTrack,\n ref: function ref(trackNode) {\n _this5.trackNode = trackNode;\n },\n percentages: percentages,\n onTrackDrag: this.handleTrackDrag,\n onTrackMouseDown: this.handleTrackMouseDown },\n this.renderSliders()\n ),\n _react2.default.createElement(\n _label2.default,\n {\n classNames: this.props.classNames,\n formatLabel: this.props.formatLabel,\n type: 'max' },\n this.props.maxValue\n ),\n this.renderHiddenInputs()\n );\n }\n }]);\n\n return InputRange;\n}(_react2.default.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleSliderDrag', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleSliderDrag'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTrackDrag', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTrackDrag'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleSliderKeyDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleSliderKeyDown'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTrackMouseDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTrackMouseDown'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleInteractionStart', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleInteractionStart'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleInteractionEnd', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleInteractionEnd'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleKeyDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleKeyDown'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleKeyUp', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleKeyUp'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleMouseDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseDown'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleMouseUp', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseUp'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTouchStart', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTouchStart'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTouchEnd', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTouchEnd'), _class.prototype)), _class);\nexports.default = InputRange;\nmodule.exports = exports['default'];\n//# sourceMappingURL=input-range.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/input-range.js\n// module id = 1796\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.getPercentageFromPosition = getPercentageFromPosition;\nexports.getValueFromPosition = getValueFromPosition;\nexports.getValueFromProps = getValueFromProps;\nexports.getPercentageFromValue = getPercentageFromValue;\nexports.getPercentagesFromValues = getPercentagesFromValues;\nexports.getPositionFromValue = getPositionFromValue;\nexports.getPositionsFromValues = getPositionsFromValues;\nexports.getPositionFromEvent = getPositionFromEvent;\nexports.getStepValueFromValue = getStepValueFromValue;\n\nvar _utils = require('../utils');\n\n/**\n * Convert a point into a percentage value\n * @ignore\n * @param {Point} position\n * @param {ClientRect} clientRect\n * @return {number} Percentage value\n */\nfunction getPercentageFromPosition(position, clientRect) {\n var length = clientRect.width;\n var sizePerc = position.x / length;\n\n return sizePerc || 0;\n}\n\n/**\n * Convert a point into a model value\n * @ignore\n * @param {Point} position\n * @param {number} minValue\n * @param {number} maxValue\n * @param {ClientRect} clientRect\n * @return {number}\n */\nfunction getValueFromPosition(position, minValue, maxValue, clientRect) {\n var sizePerc = getPercentageFromPosition(position, clientRect);\n var valueDiff = maxValue - minValue;\n\n return minValue + valueDiff * sizePerc;\n}\n\n/**\n * Convert props into a range value\n * @ignore\n * @param {Object} props\n * @param {boolean} isMultiValue\n * @return {Range}\n */\nfunction getValueFromProps(props, isMultiValue) {\n if (isMultiValue) {\n return _extends({}, props.value);\n }\n\n return {\n min: props.minValue,\n max: props.value\n };\n}\n\n/**\n * Convert a model value into a percentage value\n * @ignore\n * @param {number} value\n * @param {number} minValue\n * @param {number} maxValue\n * @return {number}\n */\nfunction getPercentageFromValue(value, minValue, maxValue) {\n var validValue = (0, _utils.clamp)(value, minValue, maxValue);\n var valueDiff = maxValue - minValue;\n var valuePerc = (validValue - minValue) / valueDiff;\n\n return valuePerc || 0;\n}\n\n/**\n * Convert model values into percentage values\n * @ignore\n * @param {Range} values\n * @param {number} minValue\n * @param {number} maxValue\n * @return {Range}\n */\nfunction getPercentagesFromValues(values, minValue, maxValue) {\n return {\n min: getPercentageFromValue(values.min, minValue, maxValue),\n max: getPercentageFromValue(values.max, minValue, maxValue)\n };\n}\n\n/**\n * Convert a value into a point\n * @ignore\n * @param {number} value\n * @param {number} minValue\n * @param {number} maxValue\n * @param {ClientRect} clientRect\n * @return {Point} Position\n */\nfunction getPositionFromValue(value, minValue, maxValue, clientRect) {\n var length = clientRect.width;\n var valuePerc = getPercentageFromValue(value, minValue, maxValue);\n var positionValue = valuePerc * length;\n\n return {\n x: positionValue,\n y: 0\n };\n}\n\n/**\n * Convert a range of values into points\n * @ignore\n * @param {Range} values\n * @param {number} minValue\n * @param {number} maxValue\n * @param {ClientRect} clientRect\n * @return {Range}\n */\nfunction getPositionsFromValues(values, minValue, maxValue, clientRect) {\n return {\n min: getPositionFromValue(values.min, minValue, maxValue, clientRect),\n max: getPositionFromValue(values.max, minValue, maxValue, clientRect)\n };\n}\n\n/**\n * Convert an event into a point\n * @ignore\n * @param {Event} event\n * @param {ClientRect} clientRect\n * @return {Point}\n */\nfunction getPositionFromEvent(event, clientRect) {\n var length = clientRect.width;\n\n var _ref = event.touches ? event.touches[0] : event,\n clientX = _ref.clientX;\n\n return {\n x: (0, _utils.clamp)(clientX - clientRect.left, 0, length),\n y: 0\n };\n}\n\n/**\n * Convert a value into a step value\n * @ignore\n * @param {number} value\n * @param {number} valuePerStep\n * @return {number}\n */\nfunction getStepValueFromValue(value, valuePerStep) {\n return Math.round(value / valuePerStep) * valuePerStep;\n}\n//# sourceMappingURL=value-transformer.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/value-transformer.js\n// module id = 1797\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = captialize;\n/**\n * Captialize a string\n * @ignore\n * @param {string} string\n * @return {string}\n */\nfunction captialize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=captialize.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/captialize.js\n// module id = 1798\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = clamp;\n/**\n * Clamp a value between a min and max value\n * @ignore\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @return {number}\n */\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=clamp.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/clamp.js\n// module id = 1799\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = distanceTo;\n/**\n * Calculate the distance between pointA and pointB\n * @ignore\n * @param {Point} pointA\n * @param {Point} pointB\n * @return {number} Distance\n */\nfunction distanceTo(pointA, pointB) {\n var xDiff = Math.pow(pointB.x - pointA.x, 2);\n var yDiff = Math.pow(pointB.y - pointA.y, 2);\n\n return Math.sqrt(xDiff + yDiff);\n}\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=distance-to.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/distance-to.js\n// module id = 1800\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isDefined;\n/**\n * Check if a value is defined\n * @ignore\n * @param {*} value\n * @return {boolean}\n */\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=is-defined.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/is-defined.js\n// module id = 1801\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = isNumber;\n/**\n * Check if a value is a number\n * @ignore\n * @param {*} value\n * @return {boolean}\n */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\nmodule.exports = exports['default'];\n//# sourceMappingURL=is-number.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/is-number.js\n// module id = 1802\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = isObject;\n/**\n * Check if a value is an object\n * @ignore\n * @param {*} value\n * @return {boolean}\n */\nfunction isObject(value) {\n return value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';\n}\nmodule.exports = exports['default'];\n//# sourceMappingURL=is-object.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/is-object.js\n// module id = 1803\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = length;\n/**\n * Calculate the absolute difference between two numbers\n * @ignore\n * @param {number} numA\n * @param {number} numB\n * @return {number}\n */\nfunction length(numA, numB) {\n return Math.abs(numA - numB);\n}\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=length.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/utils/length.js\n// module id = 1804\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Default CSS class names\n * @ignore\n * @type {InputRangeClassNames}\n */\nvar DEFAULT_CLASS_NAMES = {\n activeTrack: 'input-range__track input-range__track--active',\n disabledInputRange: 'input-range input-range--disabled',\n inputRange: 'input-range',\n labelContainer: 'input-range__label-container',\n maxLabel: 'input-range__label input-range__label--max',\n minLabel: 'input-range__label input-range__label--min',\n slider: 'input-range__slider',\n sliderContainer: 'input-range__slider-container',\n track: 'input-range__track input-range__track--background',\n valueLabel: 'input-range__label input-range__label--value'\n};\n\nexports.default = DEFAULT_CLASS_NAMES;\nmodule.exports = exports['default'];\n//# sourceMappingURL=default-class-names.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/default-class-names.js\n// module id = 1805\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = rangePropType;\n\nvar _utils = require('../utils');\n\n/**\n * @ignore\n * @param {Object} props - React component props\n * @return {?Error} Return Error if validation fails\n */\nfunction rangePropType(props) {\n var maxValue = props.maxValue,\n minValue = props.minValue;\n\n\n if (!(0, _utils.isNumber)(minValue) || !(0, _utils.isNumber)(maxValue)) {\n return new Error('\"minValue\" and \"maxValue\" must be a number');\n }\n\n if (minValue >= maxValue) {\n return new Error('\"minValue\" must be smaller than \"maxValue\"');\n }\n}\nmodule.exports = exports['default'];\n//# sourceMappingURL=range-prop-type.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/range-prop-type.js\n// module id = 1806\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = valuePropType;\n\nvar _utils = require('../utils');\n\n/**\n * @ignore\n * @param {Object} props\n * @return {?Error} Return Error if validation fails\n */\nfunction valuePropType(props, propName) {\n var maxValue = props.maxValue,\n minValue = props.minValue;\n\n var value = props[propName];\n\n if (!(0, _utils.isNumber)(value) && (!(0, _utils.isObject)(value) || !(0, _utils.isNumber)(value.min) || !(0, _utils.isNumber)(value.max))) {\n return new Error('\"' + propName + '\" must be a number or a range object');\n }\n\n if ((0, _utils.isNumber)(value) && (value < minValue || value > maxValue)) {\n return new Error('\"' + propName + '\" must be in between \"minValue\" and \"maxValue\"');\n }\n\n if ((0, _utils.isObject)(value) && (value.min < minValue || value.min > maxValue || value.max < minValue || value.max > maxValue)) {\n return new Error('\"' + propName + '\" must be in between \"minValue\" and \"maxValue\"');\n }\n}\nmodule.exports = exports['default'];\n//# sourceMappingURL=value-prop-type.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/value-prop-type.js\n// module id = 1807\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _autobindDecorator = require('autobind-decorator');\n\nvar _autobindDecorator2 = _interopRequireDefault(_autobindDecorator);\n\nvar _label = require('./label');\n\nvar _label2 = _interopRequireDefault(_label);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\n/**\n * @ignore\n */\nvar Slider = (_class = function (_React$Component) {\n _inherits(Slider, _React$Component);\n\n _createClass(Slider, null, [{\n key: 'propTypes',\n\n /**\n * Accepted propTypes of Slider\n * @override\n * @return {Object}\n * @property {Function} ariaLabelledby\n * @property {Function} ariaControls\n * @property {Function} className\n * @property {Function} formatLabel\n * @property {Function} maxValue\n * @property {Function} minValue\n * @property {Function} onSliderDrag\n * @property {Function} onSliderKeyDown\n * @property {Function} percentage\n * @property {Function} type\n * @property {Function} value\n */\n get: function get() {\n return {\n ariaLabelledby: _propTypes2.default.string,\n ariaControls: _propTypes2.default.string,\n classNames: _propTypes2.default.objectOf(_propTypes2.default.string).isRequired,\n formatLabel: _propTypes2.default.func,\n maxValue: _propTypes2.default.number,\n minValue: _propTypes2.default.number,\n onSliderDrag: _propTypes2.default.func.isRequired,\n onSliderKeyDown: _propTypes2.default.func.isRequired,\n percentage: _propTypes2.default.number.isRequired,\n type: _propTypes2.default.string.isRequired,\n value: _propTypes2.default.number.isRequired\n };\n }\n\n /**\n * @param {Object} props\n * @param {string} [props.ariaLabelledby]\n * @param {string} [props.ariaControls]\n * @param {InputRangeClassNames} props.classNames\n * @param {Function} [props.formatLabel]\n * @param {number} [props.maxValue]\n * @param {number} [props.minValue]\n * @param {Function} props.onSliderKeyDown\n * @param {Function} props.onSliderDrag\n * @param {number} props.percentage\n * @param {number} props.type\n * @param {number} props.value\n */\n\n }]);\n\n function Slider(props) {\n _classCallCheck(this, Slider);\n\n /**\n * @private\n * @type {?Component}\n */\n var _this = _possibleConstructorReturn(this, (Slider.__proto__ || Object.getPrototypeOf(Slider)).call(this, props));\n\n _this.node = null;\n return _this;\n }\n\n /**\n * @ignore\n * @override\n * @return {void}\n */\n\n\n _createClass(Slider, [{\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeDocumentMouseMoveListener();\n this.removeDocumentMouseUpListener();\n this.removeDocumentTouchEndListener();\n this.removeDocumentTouchMoveListener();\n }\n\n /**\n * @private\n * @return {Object}\n */\n\n }, {\n key: 'getStyle',\n value: function getStyle() {\n var perc = (this.props.percentage || 0) * 100;\n var style = {\n position: 'absolute',\n left: perc + '%'\n };\n\n return style;\n }\n\n /**\n * Listen to mousemove event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentMouseMoveListener',\n value: function addDocumentMouseMoveListener() {\n this.removeDocumentMouseMoveListener();\n this.node.ownerDocument.addEventListener('mousemove', this.handleMouseMove);\n }\n\n /**\n * Listen to mouseup event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentMouseUpListener',\n value: function addDocumentMouseUpListener() {\n this.removeDocumentMouseUpListener();\n this.node.ownerDocument.addEventListener('mouseup', this.handleMouseUp);\n }\n\n /**\n * Listen to touchmove event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentTouchMoveListener',\n value: function addDocumentTouchMoveListener() {\n this.removeDocumentTouchMoveListener();\n this.node.ownerDocument.addEventListener('touchmove', this.handleTouchMove);\n }\n\n /**\n * Listen to touchend event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentTouchEndListener',\n value: function addDocumentTouchEndListener() {\n this.removeDocumentTouchEndListener();\n this.node.ownerDocument.addEventListener('touchend', this.handleTouchEnd);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentMouseMoveListener',\n value: function removeDocumentMouseMoveListener() {\n this.node.ownerDocument.removeEventListener('mousemove', this.handleMouseMove);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentMouseUpListener',\n value: function removeDocumentMouseUpListener() {\n this.node.ownerDocument.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentTouchMoveListener',\n value: function removeDocumentTouchMoveListener() {\n this.node.ownerDocument.removeEventListener('touchmove', this.handleTouchMove);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentTouchEndListener',\n value: function removeDocumentTouchEndListener() {\n this.node.ownerDocument.removeEventListener('touchend', this.handleTouchEnd);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleMouseDown',\n value: function handleMouseDown() {\n this.addDocumentMouseMoveListener();\n this.addDocumentMouseUpListener();\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleMouseUp',\n value: function handleMouseUp() {\n this.removeDocumentMouseMoveListener();\n this.removeDocumentMouseUpListener();\n }\n\n /**\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleMouseMove',\n value: function handleMouseMove(event) {\n this.props.onSliderDrag(event, this.props.type);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleTouchStart',\n value: function handleTouchStart() {\n this.addDocumentTouchEndListener();\n this.addDocumentTouchMoveListener();\n }\n\n /**\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleTouchMove',\n value: function handleTouchMove(event) {\n this.props.onSliderDrag(event, this.props.type);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleTouchEnd',\n value: function handleTouchEnd() {\n this.removeDocumentTouchMoveListener();\n this.removeDocumentTouchEndListener();\n }\n\n /**\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleKeyDown',\n value: function handleKeyDown(event) {\n this.props.onSliderKeyDown(event, this.props.type);\n }\n\n /**\n * @override\n * @return {JSX.Element}\n */\n\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var style = this.getStyle();\n\n return _react2.default.createElement(\n 'span',\n {\n className: this.props.classNames.sliderContainer,\n ref: function ref(node) {\n _this2.node = node;\n },\n style: style },\n _react2.default.createElement(\n _label2.default,\n {\n classNames: this.props.classNames,\n formatLabel: this.props.formatLabel,\n type: 'value' },\n this.props.value\n ),\n _react2.default.createElement('div', {\n 'aria-labelledby': this.props.ariaLabelledby,\n 'aria-controls': this.props.ariaControls,\n 'aria-valuemax': this.props.maxValue,\n 'aria-valuemin': this.props.minValue,\n 'aria-valuenow': this.props.value,\n className: this.props.classNames.slider,\n draggable: 'false',\n onKeyDown: this.handleKeyDown,\n onMouseDown: this.handleMouseDown,\n onTouchStart: this.handleTouchStart,\n role: 'slider',\n tabIndex: '0' })\n );\n }\n }]);\n\n return Slider;\n}(_react2.default.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleMouseDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseDown'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleMouseUp', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseUp'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleMouseMove', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseMove'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTouchStart', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTouchStart'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTouchMove', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTouchMove'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTouchEnd', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTouchEnd'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleKeyDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleKeyDown'), _class.prototype)), _class);\nexports.default = Slider;\nmodule.exports = exports['default'];\n//# sourceMappingURL=slider.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/slider.js\n// module id = 1808\n// module chunks = 0","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _autobindDecorator = require('autobind-decorator');\n\nvar _autobindDecorator2 = _interopRequireDefault(_autobindDecorator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\n/**\n * @ignore\n */\nvar Track = (_class = function (_React$Component) {\n _inherits(Track, _React$Component);\n\n _createClass(Track, null, [{\n key: 'propTypes',\n\n /**\n * @override\n * @return {Object}\n * @property {Function} children\n * @property {Function} classNames\n * @property {Boolean} draggableTrack\n * @property {Function} onTrackDrag\n * @property {Function} onTrackMouseDown\n * @property {Function} percentages\n */\n get: function get() {\n return {\n children: _propTypes2.default.node.isRequired,\n classNames: _propTypes2.default.objectOf(_propTypes2.default.string).isRequired,\n draggableTrack: _propTypes2.default.bool,\n onTrackDrag: _propTypes2.default.func,\n onTrackMouseDown: _propTypes2.default.func.isRequired,\n percentages: _propTypes2.default.objectOf(_propTypes2.default.number).isRequired\n };\n }\n\n /**\n * @param {Object} props\n * @param {InputRangeClassNames} props.classNames\n * @param {Boolean} props.draggableTrack\n * @param {Function} props.onTrackDrag\n * @param {Function} props.onTrackMouseDown\n * @param {number} props.percentages\n */\n\n }]);\n\n function Track(props) {\n _classCallCheck(this, Track);\n\n /**\n * @private\n * @type {?Component}\n */\n var _this = _possibleConstructorReturn(this, (Track.__proto__ || Object.getPrototypeOf(Track)).call(this, props));\n\n _this.node = null;\n _this.trackDragEvent = null;\n return _this;\n }\n\n /**\n * @private\n * @return {ClientRect}\n */\n\n\n _createClass(Track, [{\n key: 'getClientRect',\n value: function getClientRect() {\n return this.node.getBoundingClientRect();\n }\n\n /**\n * @private\n * @return {Object} CSS styles\n */\n\n }, {\n key: 'getActiveTrackStyle',\n value: function getActiveTrackStyle() {\n var width = (this.props.percentages.max - this.props.percentages.min) * 100 + '%';\n var left = this.props.percentages.min * 100 + '%';\n\n return { left: left, width: width };\n }\n\n /**\n * Listen to mousemove event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentMouseMoveListener',\n value: function addDocumentMouseMoveListener() {\n this.removeDocumentMouseMoveListener();\n this.node.ownerDocument.addEventListener('mousemove', this.handleMouseMove);\n }\n\n /**\n * Listen to mouseup event\n * @private\n * @return {void}\n */\n\n }, {\n key: 'addDocumentMouseUpListener',\n value: function addDocumentMouseUpListener() {\n this.removeDocumentMouseUpListener();\n this.node.ownerDocument.addEventListener('mouseup', this.handleMouseUp);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentMouseMoveListener',\n value: function removeDocumentMouseMoveListener() {\n this.node.ownerDocument.removeEventListener('mousemove', this.handleMouseMove);\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'removeDocumentMouseUpListener',\n value: function removeDocumentMouseUpListener() {\n this.node.ownerDocument.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n /**\n * @private\n * @param {SyntheticEvent} event\n * @return {void}\n */\n\n }, {\n key: 'handleMouseMove',\n value: function handleMouseMove(event) {\n if (!this.props.draggableTrack) {\n return;\n }\n\n if (this.trackDragEvent !== null) {\n this.props.onTrackDrag(event, this.trackDragEvent);\n }\n\n this.trackDragEvent = event;\n }\n\n /**\n * @private\n * @return {void}\n */\n\n }, {\n key: 'handleMouseUp',\n value: function handleMouseUp() {\n if (!this.props.draggableTrack) {\n return;\n }\n\n this.removeDocumentMouseMoveListener();\n this.removeDocumentMouseUpListener();\n this.trackDragEvent = null;\n }\n\n /**\n * @private\n * @param {SyntheticEvent} event - User event\n */\n\n }, {\n key: 'handleMouseDown',\n value: function handleMouseDown(event) {\n var clientX = event.touches ? event.touches[0].clientX : event.clientX;\n var trackClientRect = this.getClientRect();\n var position = {\n x: clientX - trackClientRect.left,\n y: 0\n };\n\n this.props.onTrackMouseDown(event, position);\n\n if (this.props.draggableTrack) {\n this.addDocumentMouseMoveListener();\n this.addDocumentMouseUpListener();\n }\n }\n\n /**\n * @private\n * @param {SyntheticEvent} event - User event\n */\n\n }, {\n key: 'handleTouchStart',\n value: function handleTouchStart(event) {\n event.preventDefault();\n\n this.handleMouseDown(event);\n }\n\n /**\n * @override\n * @return {JSX.Element}\n */\n\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var activeTrackStyle = this.getActiveTrackStyle();\n\n return _react2.default.createElement(\n 'div',\n {\n className: this.props.classNames.track,\n onMouseDown: this.handleMouseDown,\n onTouchStart: this.handleTouchStart,\n ref: function ref(node) {\n _this2.node = node;\n } },\n _react2.default.createElement('div', {\n style: activeTrackStyle,\n className: this.props.classNames.activeTrack }),\n this.props.children\n );\n }\n }]);\n\n return Track;\n}(_react2.default.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleMouseMove', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseMove'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleMouseUp', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseUp'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleMouseDown', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleMouseDown'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'handleTouchStart', [_autobindDecorator2.default], Object.getOwnPropertyDescriptor(_class.prototype, 'handleTouchStart'), _class.prototype)), _class);\nexports.default = Track;\nmodule.exports = exports['default'];\n//# sourceMappingURL=track.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/track.js\n// module id = 1809\n// module chunks = 0","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/** @ignore */\nvar DOWN_ARROW = exports.DOWN_ARROW = 40;\n\n/** @ignore */\nvar LEFT_ARROW = exports.LEFT_ARROW = 37;\n\n/** @ignore */\nvar RIGHT_ARROW = exports.RIGHT_ARROW = 39;\n\n/** @ignore */\nvar UP_ARROW = exports.UP_ARROW = 38;\n//# sourceMappingURL=key-codes.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/react-input-range/lib/js/input-range/key-codes.js\n// module id = 1810\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a