{ "version": 3, "sources": ["../../../node_modules/cookies-js/dist/cookies.js", "../javascripts/utils/maps.ts", "../javascripts/helpers/query-filter.ts", "../javascripts/actions/retailer.ts", "../javascripts/models/list.ts", "../javascripts/selectors/list.ts", "../javascripts/utils/reselectors.ts", "../javascripts/utils/location.ts", "../javascripts/utils/market.ts", "../javascripts/utils/promises.ts"], "sourcesContent": ["/*\r\n * Cookies.js - 1.2.3\r\n * https://github.com/ScottHamper/Cookies\r\n *\r\n * This is free and unencumbered software released into the public domain.\r\n */\r\n(function (global, undefined) {\r\n 'use strict';\r\n\r\n var factory = function (window) {\r\n if (typeof window.document !== 'object') {\r\n throw new Error('Cookies.js requires a `window` with a `document` object');\r\n }\r\n\r\n var Cookies = function (key, value, options) {\r\n return arguments.length === 1 ?\r\n Cookies.get(key) : Cookies.set(key, value, options);\r\n };\r\n\r\n // Allows for setter injection in unit tests\r\n Cookies._document = window.document;\r\n\r\n // Used to ensure cookie keys do not collide with\r\n // built-in `Object` properties\r\n Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :)\r\n \r\n Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC');\r\n\r\n Cookies.defaults = {\r\n path: '/',\r\n secure: false\r\n };\r\n\r\n Cookies.get = function (key) {\r\n if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) {\r\n Cookies._renewCache();\r\n }\r\n \r\n var value = Cookies._cache[Cookies._cacheKeyPrefix + key];\r\n\r\n return value === undefined ? undefined : decodeURIComponent(value);\r\n };\r\n\r\n Cookies.set = function (key, value, options) {\r\n options = Cookies._getExtendedOptions(options);\r\n options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires);\r\n\r\n Cookies._document.cookie = Cookies._generateCookieString(key, value, options);\r\n\r\n return Cookies;\r\n };\r\n\r\n Cookies.expire = function (key, options) {\r\n return Cookies.set(key, undefined, options);\r\n };\r\n\r\n Cookies._getExtendedOptions = function (options) {\r\n return {\r\n path: options && options.path || Cookies.defaults.path,\r\n domain: options && options.domain || Cookies.defaults.domain,\r\n expires: options && options.expires || Cookies.defaults.expires,\r\n secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure\r\n };\r\n };\r\n\r\n Cookies._isValidDate = function (date) {\r\n return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());\r\n };\r\n\r\n Cookies._getExpiresDate = function (expires, now) {\r\n now = now || new Date();\r\n\r\n if (typeof expires === 'number') {\r\n expires = expires === Infinity ?\r\n Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000);\r\n } else if (typeof expires === 'string') {\r\n expires = new Date(expires);\r\n }\r\n\r\n if (expires && !Cookies._isValidDate(expires)) {\r\n throw new Error('`expires` parameter cannot be converted to a valid Date instance');\r\n }\r\n\r\n return expires;\r\n };\r\n\r\n Cookies._generateCookieString = function (key, value, options) {\r\n key = key.replace(/[^#$&+\\^`|]/g, encodeURIComponent);\r\n key = key.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\r\n value = (value + '').replace(/[^!#$&-+\\--:<-\\[\\]-~]/g, encodeURIComponent);\r\n options = options || {};\r\n\r\n var cookieString = key + '=' + value;\r\n cookieString += options.path ? ';path=' + options.path : '';\r\n cookieString += options.domain ? ';domain=' + options.domain : '';\r\n cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : '';\r\n cookieString += options.secure ? ';secure' : '';\r\n\r\n return cookieString;\r\n };\r\n\r\n Cookies._getCacheFromString = function (documentCookie) {\r\n var cookieCache = {};\r\n var cookiesArray = documentCookie ? documentCookie.split('; ') : [];\r\n\r\n for (var i = 0; i < cookiesArray.length; i++) {\r\n var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]);\r\n\r\n if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) {\r\n cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value;\r\n }\r\n }\r\n\r\n return cookieCache;\r\n };\r\n\r\n Cookies._getKeyValuePairFromCookieString = function (cookieString) {\r\n // \"=\" is a valid character in a cookie value according to RFC6265, so cannot `split('=')`\r\n var separatorIndex = cookieString.indexOf('=');\r\n\r\n // IE omits the \"=\" when the cookie value is an empty string\r\n separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex;\r\n\r\n var key = cookieString.substr(0, separatorIndex);\r\n var decodedKey;\r\n try {\r\n decodedKey = decodeURIComponent(key);\r\n } catch (e) {\r\n if (console && typeof console.error === 'function') {\r\n console.error('Could not decode cookie with key \"' + key + '\"', e);\r\n }\r\n }\r\n \r\n return {\r\n key: decodedKey,\r\n value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed\r\n };\r\n };\r\n\r\n Cookies._renewCache = function () {\r\n Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie);\r\n Cookies._cachedDocumentCookie = Cookies._document.cookie;\r\n };\r\n\r\n Cookies._areEnabled = function () {\r\n var testKey = 'cookies.js';\r\n var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1';\r\n Cookies.expire(testKey);\r\n return areEnabled;\r\n };\r\n\r\n Cookies.enabled = Cookies._areEnabled();\r\n\r\n return Cookies;\r\n };\r\n var cookiesExport = (global && typeof global.document === 'object') ? factory(global) : factory;\r\n\r\n // AMD support\r\n if (typeof define === 'function' && define.amd) {\r\n define(function () { return cookiesExport; });\r\n // CommonJS/Node.js support\r\n } else if (typeof exports === 'object') {\r\n // Support Node.js specific `module.exports` (which can be a function)\r\n if (typeof module === 'object' && typeof module.exports === 'object') {\r\n exports = module.exports = cookiesExport;\r\n }\r\n // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function)\r\n exports.Cookies = cookiesExport;\r\n } else {\r\n global.Cookies = cookiesExport;\r\n }\r\n})(typeof window === 'undefined' ? this : window);", "import { getMarket } from '../i18n';\n\nconst TILE_SIZE = 256;\n\nfunction bound(value: number, opt_min: number | null, opt_max: number | null) {\n if (opt_min !== null) value = Math.max(value, opt_min);\n if (opt_max !== null) value = Math.min(value, opt_max);\n return value;\n}\n\nfunction degreesToRadians(deg: number) {\n return deg * (Math.PI / 180);\n}\n\nfunction radiansToDegrees(rad: number) {\n return rad / (Math.PI / 180);\n}\n\nclass MercatorProjection {\n pixelOrigin_ = new google.maps.Point(TILE_SIZE / 2, TILE_SIZE / 2);\n pixelsPerLonDegree_ = TILE_SIZE / 360;\n pixelsPerLonRadian_ = TILE_SIZE / (2 * Math.PI);\n\n fromLatLngToPoint(latLng: LatLng, opt_point?: google.maps.Point) {\n const point = opt_point || new google.maps.Point(0, 0);\n const origin = this.pixelOrigin_;\n\n point.x = origin.x + latLng.lng() * this.pixelsPerLonDegree_;\n\n const siny = bound(Math.sin(degreesToRadians(latLng.lat())), -0.9999, 0.9999);\n point.y = origin.y + 0.5 * Math.log((1 + siny) / (1 - siny)) * -this.pixelsPerLonRadian_;\n return point;\n }\n\n fromPointToLatLng(point: google.maps.Point) {\n const origin = this.pixelOrigin_;\n const lng = (point.x - origin.x) / this.pixelsPerLonDegree_;\n const latRadians = (point.y - origin.y) / -this.pixelsPerLonRadian_;\n const lat = radiansToDegrees(2 * Math.atan(Math.exp(latRadians)) - Math.PI / 2);\n return new google.maps.LatLng(lat, lng);\n }\n}\n\ninterface LatLng {\n lng: () => number;\n lat: () => number;\n}\n\nexport const getPixelRadius = (map: google.maps.Map, marker: google.maps.Circle) => {\n if (!map) throw 'Missing maps';\n const zoom = map.getZoom();\n const center = map.getCenter();\n if (zoom === undefined || center === undefined) throw 'Error google maps';\n const tiles = 1 << zoom;\n const moved = google.maps.geometry.spherical.computeOffset(center, 10000, 90);\n const projection = new MercatorProjection();\n const initCoord = projection.fromLatLngToPoint(center);\n const endCoord = projection.fromLatLngToPoint(moved);\n const initPoint = new google.maps.Point(initCoord.x * tiles, initCoord.y * tiles);\n const endPoint = new google.maps.Point(endCoord.x * tiles, endCoord.y * tiles);\n const pixelsPerMeter = Math.abs(initPoint.x - endPoint.x) / 10000.0;\n const totalPixelSize = Math.ceil(marker.getRadius() * pixelsPerMeter);\n\n return totalPixelSize;\n};\n\nexport const getLocationSetSE = () => [\n {\n lat: 59.33,\n lng: 18.07,\n city: 'Stockholm',\n name: 'Stockholm',\n radius: 50,\n },\n {\n lat: 57.71,\n lng: 11.97,\n city: 'G\u00F6teborg',\n name: 'G\u00F6teborg',\n radius: 50,\n },\n {\n lat: 56.05,\n lng: 12.69,\n city: 'Helsingborg',\n name: 'Helsingborg',\n radius: 50,\n },\n {\n lat: 57.78,\n lng: 14.16,\n city: 'J\u00F6nk\u00F6ping',\n name: 'J\u00F6nk\u00F6ping',\n radius: 50,\n },\n {\n lat: 55.6,\n lng: 13,\n city: 'Malm\u00F6',\n name: 'Malm\u00F6',\n radius: 50,\n },\n {\n lat: 59.28,\n lng: 15.21,\n city: '\u00D6rebro',\n name: '\u00D6rebro',\n radius: 50,\n },\n {\n lat: 58.58,\n lng: 16.19,\n city: 'Norrk\u00F6ping',\n name: 'Norrk\u00F6ping',\n radius: 50,\n },\n {\n lat: 58.41,\n lng: 15.62,\n city: 'Link\u00F6ping',\n name: 'Link\u00F6ping',\n radius: 50,\n },\n {\n lat: 59.86,\n lng: 17.64,\n city: 'Uppsala',\n name: 'Uppsala',\n radius: 50,\n },\n {\n lat: 59.61,\n lng: 16.54,\n city: 'V\u00E4ster\u00E5s',\n name: 'V\u00E4ster\u00E5s',\n radius: 50,\n },\n {\n lat: 56.67,\n lng: 12.85,\n city: 'Halmstad',\n name: 'Halmstad',\n radius: 50,\n },\n {\n lat: 56.87,\n lng: 14.81,\n city: 'V\u00E4xj\u00F6',\n name: 'V\u00E4xj\u00F6',\n radius: 50,\n },\n {\n lat: 59.37,\n lng: 16.51,\n city: 'Eskilstuna',\n name: 'Eskilstuna',\n radius: 50,\n },\n {\n lat: 56.66,\n lng: 16.36,\n city: 'Kalmar',\n name: 'Kalmar',\n radius: 50,\n },\n {\n lat: 56.16,\n lng: 15.58,\n city: 'Karlskrona',\n name: 'Karlskrona',\n radius: 50,\n },\n {\n lat: 59.38,\n lng: 13.49,\n city: 'Karlstad',\n name: 'Karlstad',\n radius: 50,\n },\n {\n lat: 56.03,\n lng: 14.18,\n city: 'Kristianstad',\n name: 'Kristianstad',\n radius: 50,\n },\n {\n lat: 62.39,\n lng: 17.31,\n city: 'Sundsvall',\n name: 'Sundsvall',\n radius: 50,\n },\n {\n lat: 63.83,\n lng: 20.25,\n city: 'Ume\u00E5',\n name: 'Ume\u00E5',\n radius: 50,\n },\n {\n lat: 57.1,\n lng: 12.25,\n city: 'Varberg',\n name: 'Varberg',\n radius: 50,\n },\n {\n lat: 57.72,\n lng: 12.93,\n city: 'Bor\u00E5s',\n name: 'Bor\u00E5s',\n radius: 50,\n },\n {\n lat: 56.9,\n lng: 12.49,\n city: 'Falkenberg',\n name: 'Falkenberg',\n radius: 50,\n },\n {\n lat: 60.67,\n lng: 17.14,\n city: 'G\u00E4vle',\n name: 'G\u00E4vle',\n radius: 50,\n },\n {\n lat: 65.58,\n lng: 22.14,\n city: 'Lule\u00E5',\n name: 'Lule\u00E5',\n radius: 50,\n },\n {\n lat: 55.7,\n lng: 13.19,\n city: 'Lund',\n name: 'Lund',\n radius: 50,\n },\n {\n lat: 57.04,\n lng: 16.44,\n city: 'M\u00F6nster\u00E5s',\n name: 'M\u00F6nster\u00E5s',\n radius: 50,\n },\n {\n lat: 58.35,\n lng: 11.93,\n city: 'Uddevalla',\n name: 'Uddevalla',\n radius: 50,\n },\n {\n lat: 57.76,\n lng: 16.64,\n city: 'V\u00E4stervik',\n name: 'V\u00E4stervik',\n radius: 50,\n },\n {\n lat: 55.43,\n lng: 13.83,\n city: 'Ystad',\n name: 'Ystad',\n radius: 50,\n },\n {\n lat: 63.17,\n lng: 14.64,\n city: '\u00D6stersund',\n name: '\u00D6stersund',\n radius: 50,\n },\n {\n lat: 60.49,\n lng: 15.42,\n city: 'Borl\u00E4nge',\n name: 'Borl\u00E4nge',\n radius: 50,\n },\n {\n lat: 67.85,\n lng: 20.22,\n city: 'Kiruna',\n name: 'Kiruna',\n radius: 50,\n },\n {\n lat: 58.75,\n lng: 17.01,\n city: 'Nyk\u00F6ping',\n name: 'Nyk\u00F6ping',\n radius: 50,\n },\n {\n lat: 57.26,\n lng: 16.45,\n city: 'Oskarshamn',\n name: 'Oskarshamn',\n radius: 50,\n },\n {\n lat: 59.61,\n lng: 17.72,\n city: 'Sigtuna',\n name: 'Sigtuna',\n radius: 50,\n },\n {\n lat: 64.75,\n lng: 20.95,\n city: 'Skellefte\u00E5',\n name: 'Skellefte\u00E5',\n radius: 50,\n },\n {\n lat: 58.39,\n lng: 13.84,\n city: 'Sk\u00F6vde',\n name: 'Sk\u00F6vde',\n radius: 50,\n },\n {\n lat: 58.28,\n lng: 12.29,\n city: 'Trollh\u00E4ttan',\n name: 'Trollh\u00E4ttan',\n radius: 50,\n },\n {\n lat: 57.93,\n lng: 12.53,\n city: 'Alings\u00E5s',\n name: 'Alings\u00E5s',\n radius: 50,\n },\n {\n lat: 56.42,\n lng: 12.85,\n city: 'B\u00E5stad',\n name: 'B\u00E5stad',\n radius: 50,\n },\n];\n\nexport const getLocationSetNO = () => [\n {\n lat: 59.91,\n lng: 10.75,\n city: 'Oslo',\n name: 'Oslo',\n radius: 100,\n },\n {\n lat: 60.39,\n lng: 5.32,\n city: 'Bergen',\n name: 'Bergen',\n radius: 100,\n },\n {\n lat: 63.43,\n lng: 10.4,\n city: 'Trondheim',\n name: 'Trondheim',\n radius: 100,\n },\n {\n lat: 58.97,\n lng: 5.73,\n city: 'Stavanger',\n name: 'Stavanger',\n radius: 100,\n },\n {\n lat: 58.16,\n lng: 8.0,\n city: 'Kristiansand',\n name: 'Kristiansand',\n radius: 100,\n },\n {\n lat: 59.21,\n lng: 10.95,\n city: 'Fredrikstad',\n name: 'Fredrikstad',\n radius: 100,\n },\n {\n lat: 59.74,\n lng: 10.2,\n city: 'Drammen',\n name: 'Drammen',\n radius: 100,\n },\n {\n lat: 59.2,\n lng: 9.6,\n city: 'Skien',\n name: 'Skien',\n radius: 100,\n },\n {\n lat: 69.65,\n lng: 18.96,\n city: 'Troms\u00F8',\n name: 'Troms\u00F8',\n radius: 100,\n },\n {\n lat: 62.47,\n lng: 6.15,\n city: '\u00C5lesund',\n name: '\u00C5lesund',\n radius: 100,\n },\n {\n lat: 59.43,\n lng: 10.66,\n city: 'Moss',\n name: 'Moss',\n radius: 100,\n },\n {\n lat: 59.14,\n lng: 9.66,\n city: 'Porsgrunn',\n name: 'Porsgrunn',\n radius: 100,\n },\n {\n lat: 67.28,\n lng: 14.4,\n city: 'Bod\u00F8',\n name: 'Bod\u00F8',\n radius: 100,\n },\n {\n lat: 58.46,\n lng: 8.77,\n city: 'Arendal',\n name: 'Arendal',\n radius: 100,\n },\n {\n lat: 60.79,\n lng: 11.07,\n city: 'Hamar',\n name: 'Hamar',\n radius: 100,\n },\n {\n lat: 59.05,\n lng: 10.03,\n city: 'Larvik',\n name: 'Larvik',\n radius: 100,\n },\n {\n lat: 59.12,\n lng: 11.38,\n city: 'Halden',\n name: 'Halden',\n radius: 100,\n },\n {\n lat: 61.11,\n lng: 10.47,\n city: 'Lillehammer',\n name: 'Lillehammer',\n radius: 100,\n },\n {\n lat: 62.73,\n lng: 7.16,\n city: 'Molde',\n name: 'Molde',\n radius: 100,\n },\n {\n lat: 59.67,\n lng: 9.65,\n city: 'Kongsberg',\n name: 'Kongsberg',\n radius: 100,\n },\n {\n lat: 68.8,\n lng: 16.54,\n city: 'Harstad',\n name: 'Harstad',\n radius: 100,\n },\n {\n lat: 60.8,\n lng: 10.7,\n city: 'Gj\u00F8vik',\n name: 'Gj\u00F8vik',\n radius: 100,\n },\n {\n lat: 59.28,\n lng: 11.11,\n city: 'Sarpsborg',\n name: 'Sarpsborg',\n radius: 100,\n },\n {\n lat: 59.13,\n lng: 10.22,\n city: 'Sandefjord',\n name: 'Sandefjord',\n radius: 100,\n },\n {\n lat: 63.11,\n lng: 7.73,\n city: 'Kristiansund',\n name: 'Kristiansund',\n radius: 100,\n },\n {\n lat: 69.64,\n lng: 19.01,\n city: 'Tromsdalen',\n name: 'Tromsdalen',\n radius: 100,\n },\n {\n lat: 68.44,\n lng: 17.42,\n city: 'Narvik',\n name: 'Narvik',\n radius: 100,\n },\n {\n lat: 64.01,\n lng: 11.49,\n city: 'Steinkjer',\n name: 'Steinkjer',\n radius: 100,\n },\n {\n lat: 59.41,\n lng: 5.27,\n city: 'Haugesund',\n name: 'Haugesund',\n radius: 100,\n },\n {\n lat: 69.97,\n lng: 23.27,\n city: 'Alta',\n name: 'Alta',\n radius: 100,\n },\n];\n\nexport const getLocationSet = () =>\n getMarket().marketCode === 'NO' ? getLocationSetNO() : getLocationSetSE();\n", "\uFEFFimport type { WaykeLocation, WaykeQueryLocation } from '../@types/WaykeLocation';\nimport { getMarket } from '../i18n';\nimport { getLocationSet } from '../utils/maps';\nimport { slugify } from './urls';\n\nconst toRepresentation = (queryString: string) =>\n typeof Buffer !== 'undefined' ? Buffer.from(queryString).toString('base64') : btoa(queryString);\n\nconst fromRepresentation = (raw: string) =>\n typeof Buffer !== 'undefined' ? Buffer.from(raw, 'base64').toString() : atob(raw);\n\nexport const queryString = (name: string, url?: string) => {\n if (!process.env.SSR) {\n url = url || window.location.search;\n name = name.replace(/([\\\\[\\]])/g, '\\\\$1');\n const re = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);\n const results = re.exec(url);\n\n return !results || !results[2] ? null : results[2].replace(/\\+/g, ' ');\n }\n\n return null;\n};\n\nexport const queryFilterExport = (qf: string) => toRepresentation(qf);\nexport const queryFilterImport = (raw: string | null) =>\n new QueryFilter(raw ? fromRepresentation(raw) : null); // eslint-disable-line no-use-before-define\n\nconst QS_NAME = 'qf';\nconst VALID_QUERY_URL_PROP_ORDER = {\n manufacturer: 1,\n modelSeries: 2,\n modelYear: 3,\n spatial: 4,\n gearboxType: 5,\n fuelType: 6,\n fuelTypes: 7,\n engineBaseType: 8,\n color: 9,\n chassis: 10,\n drivingWheel: 11,\n branches: 12,\n};\n\ntype VALID_QUERY_URL_PROP_ORDER_KEY = keyof typeof VALID_QUERY_URL_PROP_ORDER;\n\nconst isPropValidForQueryURL = (propName: VALID_QUERY_URL_PROP_ORDER_KEY, values: string) => {\n if (!VALID_QUERY_URL_PROP_ORDER[propName]) return false;\n\n if (!values || values.length > 1) return false;\n\n return true;\n};\n\nconst fixLocationFilterName = (displayName: string) => {\n return displayName.replace(/, (Sverige|Norge)/g, '');\n};\n\nconst isPropValidSpatial = (propName: string) =>\n getLocationSet()\n .map((x) => slugify(x.name))\n .some(\n (x) =>\n decodeURIComponent(x) === slugify(decodeURIComponent(propName)) ||\n `${slugify(propName)}`.startsWith(`${x}-`),\n );\n\nconst toPropValidSpatial = (propName: string) =>\n getLocationSet()\n .map((x) => slugify(x.name))\n .find(\n (x) =>\n decodeURIComponent(x) === slugify(decodeURIComponent(propName)) ||\n `${slugify(propName)}`.startsWith(`${x}-`),\n );\n\nclass QueryFilter {\n query = '';\n params: { [key: string]: any } = {};\n exclusions: { [key: string]: any } = {};\n\n static OperationalParams = ['hits', 'offset', 'sort'];\n\n constructor(raw?: string | null) {\n if (raw) {\n raw\n .replace(/^[\\?|&]|&$/g, '')\n .split('&')\n .forEach((keyValue) => {\n const pair = keyValue.split('=');\n if (pair.length === 2) {\n if (pair[0] === 'query' || pair[0] === 'q') {\n this.query = pair[1].replace(/[\\*|\\:]+/g, '');\n } else if (pair[1].includes('exclude:') || pair[1].includes('exclude%3A')) {\n this.internalExclude(\n pair[0],\n decodeURIComponent(pair[1].replace('exclude:', '').replace('exclude%3A', '')),\n );\n } else {\n this.addPair(pair);\n }\n }\n });\n }\n }\n\n addPair(pair: any[]) {\n try {\n this.internalAdd(pair[0], decodeURIComponent(pair[1]));\n } catch (err) {\n const isUriError = err instanceof URIError;\n if (isUriError) {\n // eslint-disable-next-line\n console.error(`Could not decode decode pair ${pair[0]}:${pair[1]}. Error: ${err}`);\n } else {\n throw err;\n }\n }\n }\n\n isEmpty() {\n return (\n !this.query &&\n Object.keys(this.params).length === 0 &&\n Object.keys(this.exclusions).length === 0\n );\n }\n equals(queryFilter: QueryFilter) {\n return this.toString() === queryFilter.toString();\n }\n isSame(queryFilter: QueryFilter, stripOperational = true) {\n const ignoreParams = stripOperational ? QueryFilter.OperationalParams : [];\n return queryFilter && this.normalize(ignoreParams) === queryFilter.normalize(ignoreParams);\n }\n\n normalize(ignoreParams: string[] = []) {\n const buffer = [this.getQuery().toLowerCase()];\n Object.keys(this.params)\n .sort()\n .forEach((key) => {\n if (ignoreParams && !ignoreParams.includes(key)) {\n buffer.push(\n `${key.toLowerCase()}${(this.params[key] as string[])\n .sort()\n .map((p) => encodeURIComponent(p))\n .join('')\n .toLowerCase()}`,\n );\n }\n });\n\n Object.keys(this.exclusions)\n .sort()\n .forEach((key) => {\n if (ignoreParams && !ignoreParams.includes(key)) {\n buffer.push(\n `${key.toLowerCase()}exclude:${(this.exclusions[key] as string[])\n .sort()\n .map((p) => encodeURIComponent(p))\n .join('')\n .toLowerCase()}`,\n );\n }\n });\n\n return buffer.join('');\n }\n\n removeDefaultSortOption() {\n const self = new QueryFilter(this.toString());\n if (self.hasDefaultSort()) {\n return self.remove('sort');\n }\n return self;\n }\n\n addQueryFilter(queryFilter: QueryFilter) {\n const self = new QueryFilter(this.toString());\n\n Object.keys(queryFilter.params).forEach((param) =>\n queryFilter.get(param).forEach((value) => {\n if (!self.contains(param, value)) {\n self.internalAdd(param, value);\n }\n }),\n );\n return self;\n }\n\n setQuery(query: string) {\n const self = new QueryFilter(this.toString());\n\n self.query = encodeURIComponent(query);\n return self;\n }\n removeQuery() {\n const self = new QueryFilter(this.toString());\n\n self.query = '';\n return self;\n }\n hasQuery() {\n return !!this.query;\n }\n getQuery() {\n return decodeURIComponent(this.query);\n }\n\n internalAdd(prop: string, value: any) {\n if (this.contains(prop, value)) {\n return this;\n }\n\n if (!this.params[prop]) {\n this.params[prop] = [];\n }\n\n this.params[prop].push(encodeURIComponent(value));\n }\n\n internalExclude(prop: string, value: any) {\n if (this.excludes(prop, value)) {\n return this;\n }\n\n if (!this.exclusions[prop]) {\n this.exclusions[prop] = [];\n }\n\n this.exclusions[prop].push(encodeURIComponent(value));\n }\n\n add(prop: string, value: any) {\n const self = new QueryFilter(this.toString());\n\n if (self.contains(prop, value)) {\n return self;\n }\n\n if (!self.params[prop]) {\n self.params[prop] = [];\n }\n\n if (self.excludes(prop, value)) {\n if (self.exclusions[prop].length) {\n self.exclusions[prop].splice(self.exclusions[prop].indexOf(encodeURIComponent(value)), 1);\n } else {\n delete self.exclusions[prop];\n }\n }\n\n self.params[prop].push(encodeURIComponent(value));\n return self;\n }\n\n set(prop: string, values: any[]) {\n const self = new QueryFilter(this.toString());\n self.params[prop] = [];\n values.forEach((val) => this.internalAdd(prop, val));\n return self;\n }\n\n setExclusion(prop: string, values: any[]) {\n const self = new QueryFilter(this.toString());\n self.exclusions[prop] = [];\n values.forEach((val) => this.internalExclude(prop, val));\n return self;\n }\n\n exclude(prop: string, value: any) {\n const self = new QueryFilter(this.toString());\n\n if (self.excludes(prop, value)) {\n return self;\n }\n\n if (!self.exclusions[prop]) {\n self.exclusions[prop] = [];\n }\n\n if (self.contains(prop, value)) {\n if (self.params[prop].length) {\n self.params[prop].splice(self.params[prop].indexOf(encodeURIComponent(value)), 1);\n } else {\n delete self.params[prop];\n }\n }\n\n self.exclusions[prop].push(encodeURIComponent(value));\n return self;\n }\n\n remove(prop: string, value: any = null) {\n const self = new QueryFilter(this.toString());\n if (value) {\n if (!self.params[prop] && !self.exclusions[prop]) {\n return self;\n }\n const paramsFilters = Object.hasOwn(self.params, prop)\n ? (self.params[prop] as string[]).map((f) => decodeURIComponent(f))\n : [];\n\n const exclusionsFilters = Object.hasOwn(self.exclusions, prop)\n ? (self.exclusions[prop] as string[]).map((f) => decodeURIComponent(f))\n : [];\n const filter = decodeURIComponent(value);\n\n if (paramsFilters.indexOf(filter) >= 0) {\n self.params[prop].splice(paramsFilters.indexOf(filter), 1);\n }\n\n if (exclusionsFilters.indexOf(filter) >= 0) {\n self.exclusions[prop].splice(exclusionsFilters.indexOf(filter), 1);\n }\n } else {\n delete self.params[prop];\n delete self.exclusions[prop];\n }\n return self;\n }\n\n removeAll(props: string[]) {\n const self = new QueryFilter(this.toString());\n\n props.forEach((prop) => {\n delete self.params[prop];\n delete self.exclusions[prop];\n });\n\n return self;\n }\n\n has(prop: string) {\n return Object.keys(this.params).includes(prop);\n }\n hasExclusion(prop: string) {\n return Object.keys(this.exclusions).includes(prop);\n }\n contains(prop: string, value: any) {\n return (this.params[prop] || []).includes(encodeURIComponent(value));\n }\n excludes(prop: string, value: any) {\n return (this.exclusions[prop] || []).includes(encodeURIComponent(value));\n }\n get(prop: string) {\n return ((this.params[prop] || []) as string[]).map((v) => decodeURIComponent(v));\n }\n exclusion(prop: string) {\n return ((this.exclusions[prop] || []) as string[]).map((v) => decodeURIComponent(v));\n }\n getKeys() {\n return Object.keys(this.params)\n .map((p) => p.replace('.min', '').replace('.max', ''))\n .filter((p, index, self) => self.indexOf(p) === index);\n }\n hasFilters() {\n return Object.keys(this.params).length + Object.keys(this.exclusions).length > 0;\n }\n getFilters() {\n return this.toString(false);\n }\n numberOfFilters() {\n const filterCount = (filter: { [key: string]: any }) =>\n Object.keys(filter).reduce((aggregation, next) => {\n aggregation = filter[next].length + aggregation;\n return aggregation;\n }, 0);\n\n return filterCount(this.params) + filterCount(this.exclusions);\n }\n\n addRange(prop: string, min?: number | null, max?: number | null) {\n const self = new QueryFilter(this.toString());\n\n if (min !== null && min !== undefined) {\n self.params[`${prop}.min`] = [min];\n }\n if (max !== null && max !== undefined) {\n self.params[`${prop}.max`] = [max];\n }\n\n return self;\n }\n removeRange(prop: string) {\n const self = new QueryFilter(this.toString());\n\n delete self.params[prop];\n delete self.params[`${prop}.min`];\n delete self.params[`${prop}.max`];\n\n return self;\n }\n hasRange(prop: string) {\n return this.hasRangeMin(prop) || this.hasRangeMax(prop);\n }\n hasRangeMin(prop: string) {\n return this.has(`${prop}.min`);\n }\n hasRangeMax(prop: string) {\n return this.has(`${prop}.max`);\n }\n getRange(prop: string) {\n return {\n min: this.getRangeMin(prop),\n max: this.getRangeMax(prop),\n };\n }\n getRangeMin(prop: string) {\n return (this.get(`${prop}.min`) || []).pop();\n }\n getRangeMax(prop: string) {\n return (this.get(`${prop}.max`) || []).pop();\n }\n\n addSpatial(spatial: WaykeLocation) {\n if (!spatial || !spatial.radius || !spatial.lat || !spatial.lng) {\n return this;\n }\n\n const self = new QueryFilter(this.toString());\n\n self.params['position.location'] = [spatial.radius];\n if (spatial.name) {\n self.params['position.name'] = [encodeURIComponent(fixLocationFilterName(spatial.name))];\n }\n self.params.lat = [spatial.lat];\n self.params.lon = [spatial.lng];\n\n return self;\n }\n getSpatial(): WaykeQueryLocation | null {\n return this.hasSpatial()\n ? {\n distance: Number.parseInt(this.params['position.location'][0] as string, 10),\n name: decodeURIComponent(this.params['position.name'][0]),\n lat: Number.parseFloat(this.params.lat[0] as string),\n lng: Number.parseFloat(this.params.lon[0] as string),\n }\n : null;\n }\n getSpatialName() {\n return decodeURIComponent(this.params['position.name'][0]);\n }\n getSpatialDistance() {\n return this.params['position.location'][0];\n }\n hasSpatial() {\n return this.has('position.location');\n }\n removeSpatial() {\n const self = new QueryFilter(this.toString());\n\n delete self.params['position.location'];\n delete self.params['position.name'];\n delete self.params.lat;\n delete self.params.lon;\n\n return self;\n }\n setPaginationSize = (offset: number) => {\n const self = new QueryFilter(this.toString());\n\n self.internalAdd('hits', `${offset}`);\n\n return self;\n };\n hasPagination() {\n return this.has('offset');\n }\n\n hasDefaultSort() {\n return this.has('sort') && this.get('sort')?.[0] === 'itemSortDesc';\n }\n\n removePagination() {\n return this.removeAll(['page', 'hits', 'offset']);\n }\n\n static create(queryFilterString?: string) {\n return new QueryFilter(queryFilterString);\n }\n\n static merge(queryFilter1: QueryFilter, queryFilter2: QueryFilter) {\n const str = `${queryFilter1 ? queryFilter1.toString(queryFilter1.hasQuery()) : ''}&${\n queryFilter2 ? queryFilter2.toString(!queryFilter1.hasQuery()) : ''\n }`;\n return new QueryFilter(str.replace(/^&|&$/g, ''));\n }\n\n static byQuery(query: string) {\n const qf = new QueryFilter();\n qf.query = encodeURIComponent(query);\n\n return qf;\n }\n\n static byProperty(prop: string, value: any) {\n const qf = new QueryFilter();\n qf.internalAdd(prop, value);\n\n return qf;\n }\n\n static fromRepresentation(raw: string | null) {\n return queryFilterImport(raw);\n }\n\n static fromQueryString(url?: string) {\n if (!process.env.SSR) {\n let raw = (window || {}).location ? queryString(QS_NAME) : null;\n if (url) {\n raw = queryString(QS_NAME, url);\n }\n if (raw) return queryFilterImport(raw);\n }\n\n return new QueryFilter();\n }\n\n toString(includeQuery = true) {\n const buffer: string[] = [];\n\n if (this.hasQuery() && includeQuery) {\n buffer.push(`q=${this.query}`);\n }\n\n Object.keys(this.params)\n .sort((a, b) => a.localeCompare(b))\n .forEach((param) =>\n (this.params[param] as any[])\n .sort((a, b) => a.localeCompare(b))\n .forEach((value) => buffer.push(`${param}=${value}`)),\n );\n Object.keys(this.exclusions)\n .sort((a, b) => a.localeCompare(b))\n .forEach((exclusion) =>\n (this.exclusions[exclusion] as any[])\n .sort((a, b) => a.localeCompare(b))\n .forEach((value) => buffer.push(`${exclusion}=exclude:${value}`)),\n );\n\n return buffer.join('&');\n }\n\n toQueryString() {\n if (this.hasQuery() || this.hasFilters()) {\n return `?${QS_NAME}=${queryFilterExport(this.toString())}`;\n }\n\n return '';\n }\n\n toQueryURL() {\n const self = new QueryFilter(this.toString());\n let clean = self.removeRange('modelYear').removeSpatial();\n const forceQueryFilter =\n clean.hasQuery() ||\n Object.keys(clean.params).filter(\n (key) => !isPropValidForQueryURL(key as VALID_QUERY_URL_PROP_ORDER_KEY, clean.params[key]),\n ).length > 0 ||\n Object.keys(self.exclusions).length > 0;\n if (forceQueryFilter) return this.toQueryString();\n\n if (\n self.hasSpatial() &&\n isPropValidSpatial(self.getSpatialName()) &&\n (getMarket().marketCode === 'NO'\n ? self.getSpatialDistance() === '100'\n : self.getSpatialDistance() === '50')\n ) {\n clean = clean.add('spatial', toPropValidSpatial(self.getSpatialName()));\n } else if (self.hasSpatial()) {\n return this.toQueryString();\n }\n\n if (\n self.hasRange('modelYear') &&\n self.getRangeMin('modelYear') === self.getRangeMax('modelYear')\n ) {\n clean = clean.add('modelYear', self.getRangeMin('modelYear'));\n } else if (self.hasRange('modelYear')) {\n return this.toQueryString();\n }\n\n const urlParams = Object.keys(clean.params)\n .sort(\n (a, b) =>\n VALID_QUERY_URL_PROP_ORDER[a as VALID_QUERY_URL_PROP_ORDER_KEY] -\n VALID_QUERY_URL_PROP_ORDER[b as VALID_QUERY_URL_PROP_ORDER_KEY],\n )\n .map((key) => slugify(decodeURIComponent(clean.params[key].pop())));\n\n const urlExclusions = Object.keys(clean.exclusions)\n .sort(\n (a, b) =>\n VALID_QUERY_URL_PROP_ORDER[a as VALID_QUERY_URL_PROP_ORDER_KEY] -\n VALID_QUERY_URL_PROP_ORDER[b as VALID_QUERY_URL_PROP_ORDER_KEY],\n )\n .map((key) => slugify(decodeURIComponent(clean.exclusions[key].pop())));\n\n const url = urlParams.concat(urlExclusions).join('/');\n\n return `/${url}`;\n }\n\n toSearchQuery() {\n return toRepresentation(`q=*${this.hasFilters() ? `&${this.toString(false)}` : ''}`);\n }\n\n toQueryStringFilter() {\n return toRepresentation(this.toString());\n }\n}\n\nexport default QueryFilter;\n", "import type { Dispatch as ReduxDispatch } from '@reduxjs/toolkit';\nimport Cookies from 'cookies-js';\n\nimport type { ElasticSearchResponse } from '../@types/ElasticSearchResponse';\nimport type { Retailer } from '../@types/Retailer';\nimport type { Vehicle } from '../@types/Vehicle';\nimport type { BaseAction } from '../@types/actions';\nimport * as http from '../Http';\nimport { buildGetRequest } from '../Http/requestTemplates';\nimport type QueryFilter from '../helpers/query-filter';\nimport type { RootState } from '../reducers';\nimport requestCache from '../utils/request-cache';\n\nexport const REQ_RETAILER_LIST = 'REQ/RETAILER_LIST';\nexport const RCV_RETAILER_LIST = 'RCV/RETAILER_LIST';\ntype REQ_RETAILER_LIST_TYPE = BaseAction;\ntype RCV_RETAILER_LIST_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n};\n\nexport const REQ_RETAILER = 'REQ/RETAILER';\nexport const RCV_RETAILER = 'RCV/RETAILER';\ntype REQ_RETAILER_TYPE = BaseAction;\ntype RCV_RETAILER_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n};\n\nexport const REQ_RETAILER_SEARCH = 'REQ/RETAILER_SEARCH';\nexport const RCV_RETAILER_SEARCH = 'RCV/RETAILER_SEARCH';\ntype REQ_RETAILER_SEARCH_TYPE = BaseAction & {\n queryFilter: string;\n};\ntype RCV_RETAILER_SEARCH_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n queryFilter: string;\n};\n\nexport const REQ_RETAILER_VEHICLE_SEARCH = 'REQ/RETAILER_VEHICLE_SEARCH';\nexport const RCV_RETAILER_VEHICLE_SEARCH = 'RCV/RETAILER_VEHICLE_SEARCH';\ntype REQ_RETAILER_VEHICLE_SEARCH_TYPE = BaseAction & {\n branchId: string;\n};\ntype RCV_RETAILER_VEHICLE_SEARCH_TYPE = BaseAction & {\n response: ElasticSearchResponse;\n};\n\nexport const REQ_CLEAR_RETAILER = 'REQ/CLEAR_RETAILER';\ntype REQ_CLEAR_RETAILER_TYPE = BaseAction;\n\nexport const REQUEST_FAILED = 'RETAILER/REQUEST_FAILED';\ntype REQUEST_FAILED_TYPE = BaseAction & {\n action:\n | typeof REQ_RETAILER_LIST\n | typeof REQ_RETAILER\n | typeof REQ_RETAILER_SEARCH\n | typeof REQ_RETAILER_VEHICLE_SEARCH;\n};\n\nexport const COOKIE_CENTRAL_STORAGE = 'wayke-central-storage';\n\nexport type RETAILER_ACTION =\n | REQ_RETAILER_LIST_TYPE\n | RCV_RETAILER_LIST_TYPE\n | REQ_RETAILER_TYPE\n | RCV_RETAILER_TYPE\n | REQ_RETAILER_SEARCH_TYPE\n | RCV_RETAILER_SEARCH_TYPE\n | REQ_RETAILER_VEHICLE_SEARCH_TYPE\n | RCV_RETAILER_VEHICLE_SEARCH_TYPE\n | REQ_CLEAR_RETAILER_TYPE\n | REQUEST_FAILED_TYPE;\n\ntype Dispatch = ReduxDispatch;\n\nexport const all = () => async (dispatch: Dispatch, getState: () => RootState) => {\n if (requestCache.isPending(REQ_RETAILER_LIST)) {\n return;\n }\n\n const { geo } = getState();\n const url = geo?.location\n ? `/api/retailers?filter=${btoa(`q=*&lat=${geo.location.lat}&lon=${geo.location.lng}`)}`\n : '/api/retailers';\n\n requestCache.isPending(REQ_RETAILER_LIST, true);\n\n try {\n dispatch({ type: REQ_RETAILER_LIST });\n\n const response = await http.json>(url, buildGetRequest());\n http.validateResponse(response);\n dispatch({\n type: RCV_RETAILER_LIST,\n response: response.response,\n });\n } catch (_e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_RETAILER_LIST });\n }\n requestCache.isPending(REQ_RETAILER_LIST, false);\n};\n\nexport const find = (slugOrId: string) => async (dispatch: Dispatch) => {\n if (requestCache.isPending(REQ_RETAILER)) {\n return;\n }\n\n requestCache.isPending(REQ_RETAILER, true);\n\n try {\n dispatch({ type: REQ_RETAILER });\n\n const response = await http.json>(\n `/api/retailers/${slugOrId}`,\n buildGetRequest(),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_RETAILER,\n response: response.response,\n });\n } catch (_e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_RETAILER });\n }\n requestCache.isPending(REQ_RETAILER, false);\n};\n\nexport const findAndSetCookie = (id: string) => (dispatch: Dispatch) => {\n Cookies.set(COOKIE_CENTRAL_STORAGE, id);\n find(id)(dispatch);\n};\n\nexport const vehicleSearch = (retailer: Retailer, filter: string) => async (dispatch: Dispatch) => {\n if (requestCache.isPending(REQ_RETAILER_VEHICLE_SEARCH)) {\n return;\n }\n requestCache.isPending(REQ_RETAILER_VEHICLE_SEARCH, true);\n\n const f = filter\n ? `&${filter\n .replace(/retailerId=[^&]+/g, '')\n .replace(/^&|&$/g, '')\n .replace('&&', '&')}`\n : '';\n\n try {\n dispatch({ type: REQ_RETAILER_VEHICLE_SEARCH, branchId: retailer.id });\n\n const response = await http.json>(\n `/api/search?branchId=${retailer.id}${f}`,\n buildGetRequest(),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_RETAILER_VEHICLE_SEARCH,\n response: response.response,\n });\n } catch (_e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_RETAILER_VEHICLE_SEARCH });\n }\n requestCache.isPending(REQ_RETAILER_VEHICLE_SEARCH, false);\n};\n\nconst getFilterQueryString = (queryFilter: QueryFilter) => {\n if (queryFilter.isEmpty()) return '';\n\n return `?filter=${queryFilter.toQueryStringFilter()}`;\n};\n\nexport const retailerSearch = (queryFilter: QueryFilter) => async (dispatch: Dispatch) => {\n requestCache.isPending(REQ_RETAILER_SEARCH, true);\n\n try {\n dispatch({ type: REQ_RETAILER_SEARCH, queryFilter: queryFilter.toString() });\n\n const response = await http.json>(\n `/api/retailers${getFilterQueryString(queryFilter)}`,\n buildGetRequest(),\n );\n http.validateResponse(response);\n dispatch({\n type: RCV_RETAILER_SEARCH,\n response: response.response,\n queryFilter: queryFilter.toString(),\n });\n } catch (_e) {\n dispatch({ type: REQUEST_FAILED, action: REQ_RETAILER_SEARCH });\n }\n requestCache.isPending(REQ_RETAILER_SEARCH, false);\n};\n\nexport const clear = () => (dispatch: Dispatch) => dispatch({ type: REQ_CLEAR_RETAILER });\n", "import type { ListPage, WaykeList } from '../@types/List';\n\nexport interface ParsedList {\n id: string;\n title: string;\n description: string;\n updatedAt: string;\n createdAt: string;\n image: string | null;\n smallImage: string | null;\n relatedContent: ListPage[] | null;\n slug: string;\n queryFilter: string;\n}\n\nclass List {\n static parse = ({\n id,\n title,\n description,\n updatedAt,\n createdAt,\n featuredImage,\n cardImage,\n relatedContent,\n slug,\n queryFilter,\n }: WaykeList): ParsedList => {\n const _featuredImage = featuredImage && featuredImage.file ? featuredImage.file.url : null;\n\n const _cardImage = cardImage && cardImage.file ? cardImage.file.url : null;\n\n return {\n id,\n title,\n description,\n updatedAt,\n createdAt,\n image: _featuredImage,\n smallImage: _cardImage,\n relatedContent,\n slug,\n queryFilter,\n };\n };\n}\n\nexport default List;\n", "import { createSelector } from '@reduxjs/toolkit';\n\nimport { queryString } from '../helpers/query-filter';\nimport List from '../models/list';\nimport type { RootState } from '../reducers';\n\nexport const getList = createSelector(\n (state: RootState) => state.list.documentList,\n (documentList) => {\n if (!documentList) {\n return [];\n }\n\n return documentList.documents.filter((d) => !!d).map(List.parse);\n },\n);\n\nexport const getCurrentListPage = (state: RootState, slug: string) => {\n const list = getList(state);\n if (list) {\n const index = slug.indexOf('?');\n let formattedSlug = slug;\n if (index > -1) {\n formattedSlug = slug.slice(0, index);\n }\n const page = list.find((x) => x.slug === formattedSlug);\n return page ? page : null;\n }\n return null;\n};\n\nexport const isListPage = (state: RootState, slug: string) => !!getCurrentListPage(state, slug);\n\nexport const getCurrentListPageQueryFilter = (state: RootState, slug: string) => {\n const page = getCurrentListPage(state, slug);\n if (page) {\n const qf = queryString('qf', `https//:www.wayke.se/sok?${page.queryFilter}`);\n return qf;\n }\n return null;\n};\n\nexport const getCurrentListPageFromQueryUrl = (state: RootState) => {\n if (!process.env.SSR) {\n const url = window.location.search;\n const re = /[?&]list(=([^&#]*)|&|#|$)/;\n const results = re.exec(url);\n\n const res = !results || !results[2] ? null : results[2].replace(/\\+/g, ' ');\n if (res) return getCurrentListPage(state, res);\n }\n return null;\n};\n\nexport const getListItemHitCount = createSelector(\n (state: RootState) => state.list.hits,\n (_: RootState, id?: string) => id,\n (hits, id) => {\n if (!id) return null;\n const count = hits?.[id];\n return count !== undefined && !Number.isNaN(count) ? count : null;\n },\n);\n\nexport const getListById = (state: RootState, id: string) => {\n const list = getList(state);\n const match = list.find((x) => x.id === id);\n return match ? match : null;\n};\n", "import { createSelector } from '@reduxjs/toolkit';\nimport Cookies from 'cookies-js';\nimport i18next from 'i18next';\nimport { responseStatus } from '../shared/statuses';\n\nimport { COOKIE_CENTRAL_STORAGE } from '../actions/retailer';\n\nimport type {\n SubscriptionAdvertisement,\n SubscriptionSearchItem,\n SubscriptionSearchListItem,\n} from '../@types/AdvertismentSubscription';\nimport type { Facet, Filter, Page, SortOption } from '../@types/ElasticSearchResponse';\nimport type { ElasticVehicle } from '../@types/ElasticVehicle';\nimport type { Faq } from '../@types/Faq';\nimport type { Branding } from '../@types/branding';\nimport type Item from '../@types/item';\nimport QueryFilter from '../helpers/query-filter';\nimport { slugify } from '../helpers/urls';\nimport type { ParsedList } from '../models/list';\nimport type { RootState } from '../reducers';\nimport { getList } from '../selectors/list';\nimport { getDistance } from './location';\nimport { getLocationSet } from './maps';\nimport { getHiddenFilters } from './market';\n\nconst MANUFACTURER_PACKAGE_CATEGORY = 'Manufacture packaging';\n\nexport const getVehicleLookupResult = (state: RootState) => state.vehicles.current;\n\nexport const getQueryFilter = createSelector(\n (state: RootState) => state.search.queryFilter || '',\n (queryFilter): QueryFilter => new QueryFilter(queryFilter),\n);\n\nconst getFacetStructure = (): { [key: string]: FacetListId | undefined } => ({\n location: {\n sortOrder: 0,\n displayName: i18next.t('filter.map', { ns: 'search' }),\n },\n manufacturer: {\n sortOrder: 1,\n displayName: i18next.t('filter.manufacturer', { ns: 'search' }),\n },\n modelSeries: {\n sortOrder: 2,\n displayName: i18next.t('filter.model', { ns: 'search' }),\n },\n modelYear: {\n sortOrder: 3,\n isRangeFacet: true,\n valueFormat: false,\n displayName: i18next.t('filter.modelYear.displayName', { ns: 'search' }),\n prefix: i18next.t('filter.modelYear.prefix', { ns: 'search' }),\n suffix: '',\n histogram: true,\n rangeStep: 1,\n },\n price: {\n sortOrder: 4,\n isRangeFacet: true,\n valueFormat: true,\n displayName: i18next.t('filter.price.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.price.unit', { ns: 'search' }),\n histogram: true,\n rangeStep: 10000,\n disabled: false,\n },\n leasingPrice: {\n sortOrder: 5,\n isRangeFacet: true,\n valueFormat: true,\n displayName: i18next.t('filter.leasingPrice.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.leasingPrice.unit', { ns: 'search' }),\n histogram: true,\n rangeStep: 500,\n disabled: true,\n },\n businessLeasingPrice: {\n sortOrder: 6,\n isRangeFacet: true,\n valueFormat: true,\n displayName: i18next.t('filter.businessLeasingPrice.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.businessLeasingPrice.unit', { ns: 'search' }),\n histogram: true,\n rangeStep: 500,\n disabled: true,\n },\n gearboxType: {\n sortOrder: 7,\n displayName: i18next.t('filter.gearbox', { ns: 'search' }),\n },\n mileage: {\n sortOrder: 8,\n isRangeFacet: true,\n valueFormat: true,\n displayName: i18next.t('filter.odometer.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.odometer.unitScandinavianMile', { ns: 'search', count: 2 }),\n suffixSingular: i18next.t('filter.odometer.unitScandinavianMile', { ns: 'search', count: 1 }),\n histogram: true,\n rangeStep: 100,\n },\n odometerValueAsKm: {\n sortOrder: 9,\n isRangeFacet: true,\n valueFormat: true,\n displayName: i18next.t('filter.odometer.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.odometer.unitKilometer', { ns: 'search', count: 2 }),\n suffixSingular: i18next.t('filter.odometer.unitKilometer', { ns: 'search', count: 1 }),\n histogram: true,\n rangeStep: 1000,\n },\n\n fuelTypes: {\n sortOrder: 10,\n displayName: i18next.t('filter.fuelType', { ns: 'search' }),\n },\n engineBaseType: {\n sortOrder: 11,\n displayName: i18next.t('filter.engineBaseType', { ns: 'search' }),\n },\n fuelType: {\n sortOrder: 12,\n displayName: i18next.t('filter.fuelType', { ns: 'search' }),\n },\n enginePower: {\n sortOrder: 13,\n isRangeFacet: true,\n valueFormat: false,\n displayName: i18next.t('filter.enginePower.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.enginePower.unit', { ns: 'search' }),\n histogram: true,\n rangeStep: 25,\n },\n 'enhancedProperties.electricalRangeWLTP.value': {\n sortOrder: 14,\n displayName: i18next.t('filter.electricalRange.displayName', { ns: 'search' }),\n isRangeFacet: true,\n valueFormat: true,\n suffix: i18next.t('filter.electricalRange.unit', { ns: 'search' }),\n prefix: i18next.t('filter.electricalRange.displayName', { ns: 'search' }),\n histogram: true,\n rangeStep: 10,\n },\n chassis: {\n sortOrder: 15,\n displayName: i18next.t('filter.chassis', { ns: 'search' }),\n },\n drivingWheel: {\n sortOrder: 16,\n displayName: i18next.t('filter.drivingWheel', { ns: 'search' }),\n },\n 'properties.segment': {\n sortOrder: 17,\n displayName: i18next.t('filter.segment', { ns: 'search' }),\n },\n color: {\n sortOrder: 18,\n displayName: i18next.t('filter.color', { ns: 'search' }),\n },\n 'properties.seats': {\n sortOrder: 19,\n isRangeFacet: true,\n valueFormat: false,\n displayName: i18next.t('filter.seats.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.seats.unit', { ns: 'search', count: 2 }),\n suffixSingular: i18next.t('filter.seats.unit', { ns: 'search', count: 1 }),\n histogram: false,\n rangeStep: 1,\n },\n environmentClass: {\n sortOrder: 20,\n displayName: i18next.t('filter.environmentClass', { ns: 'search' }),\n },\n branches: {\n sortOrder: 21,\n displayName: i18next.t('filter.branches', { ns: 'search' }),\n isExcludeProhibited: true,\n },\n 'properties.co2': {\n sortOrder: 22,\n isRangeFacet: true,\n valueFormat: true,\n displayName: i18next.t('filter.co2.displayName', { ns: 'search' }),\n prefix: '',\n suffix: i18next.t('filter.co2.unit', { ns: 'search' }),\n histogram: true,\n rangeStep: 10,\n },\n inventoryStatus: {\n sortOrder: 23,\n displayName: i18next.t('filter.inventoryStatus.displayName', { ns: 'search' }),\n },\n});\n\ninterface FacetListId {\n sortOrder: number;\n displayName: string;\n isRangeFacet?: boolean;\n valueFormat?: boolean;\n prefix?: string;\n title?: string | null;\n suffix?: string;\n histogram?: boolean;\n rangeStep?: number;\n disabled?: boolean;\n suffixSingular?: string;\n prefixChar?: string;\n suffixChar?: string;\n isExcludeProhibited?: boolean;\n isLocationFacet?: boolean;\n selectionCount?: number;\n min?: number;\n max?: number;\n range?: {\n min: number;\n max: number;\n };\n contextual?: {\n filters?: Filter[];\n };\n hidden?: boolean;\n}\n\nexport type CombinedFacet = Facet & FacetListId;\n\nconst translateFacetFilters = (facets: Facet[]) =>\n facets.map((x) => ({\n ...x,\n filters: x.filters?.map((y) => ({\n ...y,\n translatedDisplayName:\n x.id === 'inventoryStatus'\n ? i18next.t(`filter.inventoryStatus.options.${y.displayName}`, { ns: 'search' })\n : y.displayName,\n })),\n }));\n\nconst facetsAggregator = (_facets: Facet[], _list: Facet[], queryFilter: QueryFilter) => {\n const facets = translateFacetFilters(_facets);\n const list = translateFacetFilters(_list);\n\n const result: CombinedFacet[] = [];\n const position = queryFilter.getSpatial();\n const hiddenFilters = getHiddenFilters();\n const facetStructure = getFacetStructure();\n const loc = {\n ...(facetStructure.location as FacetListId),\n id: 'location',\n isRangeFacet: false,\n isLocationFacet: true,\n selectionCount: queryFilter.hasSpatial() ? 1 : 0,\n title: queryFilter.hasSpatial() ? `${position?.name} +${position?.distance}km` : null,\n filters: [\n ...[\n queryFilter.hasSpatial()\n ? { ...position, title: position?.name, displayName: position?.name, selected: true }\n : null,\n ],\n ...getLocationSet()\n .filter((y) => y.name !== position?.name)\n .map((x) => ({\n displayName: x.name,\n distance: 100,\n lat: x.lat,\n lng: x.lng,\n name: x.name,\n selected: false,\n title: x.name,\n })),\n ].filter((p) => !!p) as unknown as Filter[],\n };\n\n result[loc.sortOrder] = loc;\n\n for (let i = 0; i < list.length; i++) {\n const facet = facetStructure[list[i].id];\n const latest = facets.find((f) => f.id === list[i].id);\n\n if (!facet) {\n continue;\n }\n\n const hidden = hiddenFilters.includes(list[i].id);\n\n if (facet.isRangeFacet) {\n const filterMin =\n list[i].filters && list[i].filters.length ? list[i].filters[0].displayName : '0';\n const filterMax =\n list[i].filters && list[i].filters.length\n ? list[i].filters[list[i].filters.length - 1].displayName\n : '0';\n const min = queryFilter.hasRangeMin(list[i].id)\n ? queryFilter.getRangeMin(list[i].id)\n : filterMin;\n const max = queryFilter.hasRangeMax(list[i].id)\n ? queryFilter.getRangeMax(list[i].id)\n : filterMax;\n let prefixChar = min?.replace(/^([\\+<>\\-])[\\.,0-9]+$/, '$1');\n let suffixChar = max?.replace(/^[\\.,0-9]+([\\+<>\\-])$/, '$1');\n const baseMinNum = Number.parseInt(filterMin.replace(/[^\\.,0-9]/g, ''), 10);\n const baseMaxNum = Number.parseInt(filterMax.replace(/^\\.,0-9]/g, ''), 10);\n const minNum = Number.parseInt((min !== undefined ? min : '').replace(/[^\\.,0-9]/g, ''), 10);\n const maxNum = Number.parseInt((max !== undefined ? max : '').replace(/[^\\.,0-9]/g, ''), 10);\n\n if (prefixChar === min) {\n prefixChar = '';\n }\n if (suffixChar === max) {\n suffixChar = '';\n }\n\n let disabled = false;\n if (\n list[i].id === 'leasingPrice' &&\n !queryFilter.hasRange('leasingPrice') &&\n !queryFilter.has('leasing')\n ) {\n disabled = true;\n }\n if (\n list[i].id === 'businessLeasingPrice' &&\n !queryFilter.hasRange('businessLeasingPrice') &&\n !queryFilter.has('businessLeasing')\n ) {\n disabled = true;\n }\n if (\n list[i].id === 'price' &&\n (queryFilter.hasRange('leasingPrice') ||\n queryFilter.has('leasing') ||\n queryFilter.hasRange('businessLeasingPrice') ||\n queryFilter.has('businessLeasing'))\n ) {\n disabled = true;\n }\n\n let rangeTitle: string | null = null;\n if (minNum !== baseMinNum || maxNum !== baseMaxNum) {\n rangeTitle = `${facet.prefix ? `${facet.prefix} ` : ''}${prefixChar}${minNum}-${maxNum}${suffixChar}${\n facet.suffix ? ` ${facet.suffix}` : ''\n }`;\n }\n result[facet.sortOrder] = {\n ...list[i],\n contextual: {\n filters: latest?.filters,\n },\n sortOrder: facet.sortOrder,\n isRangeFacet: true,\n isLocationFacet: false,\n displayName: facet.displayName,\n title: rangeTitle,\n valueFormat: facet.valueFormat,\n histogram: facet.histogram,\n rangeStep: facet.rangeStep,\n selectionCount: queryFilter.hasRange(list[i].id) ? 1 : 0,\n prefix: facet.prefix && `${facet.prefix} `,\n suffixSingular: facet.suffixSingular,\n prefixChar,\n suffix: facet.suffix && ` ${facet.suffix}`,\n suffixChar,\n min: baseMinNum,\n max: baseMaxNum,\n range: { min: minNum, max: maxNum },\n disabled,\n hidden,\n };\n } else {\n let selectionCount = 0;\n let title: string | null = null;\n const filters: Filter[] = [];\n\n for (let j = 0; j < (list[i].filters || []).length; j++) {\n const filter = (latest?.filters || []).find(\n (f) => f.displayName === list[i].filters[j].displayName,\n );\n let next: Filter | null = null;\n if (filter) {\n next = { ...filter };\n } else {\n next = {\n ...list[i].filters[j],\n selected: false,\n count: queryFilter.isEmpty() ? list[i].filters[j].count : 0,\n };\n }\n if (filter && filter.selected) {\n title = selectionCount === 0 ? filter.displayName : title;\n selectionCount += 1;\n }\n filters.push(next);\n }\n\n (latest?.filters || [])\n .filter((x) => x.selected && !filters.find((z) => z.displayName === x.displayName))\n .forEach((y) => {\n title = selectionCount === 0 ? y.displayName : title;\n selectionCount += 1;\n filters.push({ ...y, selected: true, count: 0 });\n });\n result[facet.sortOrder] = {\n ...list[i],\n contextual: {\n filters: latest?.filters,\n },\n isRangeFacet: false,\n sortOrder: facet.sortOrder,\n isLocationFacet: false,\n filters: filters\n ?.sort((a, b) => {\n if (a.selected && !b.selected) {\n return -1;\n }\n if (b.selected && !a.selected) {\n return 1;\n }\n\n return b.count - a.count;\n })\n .map((f) => (selectionCount > 0 ? f : { ...f, selected: false })),\n displayName: facet.displayName,\n selectionCount,\n title: selectionCount > 1 ? `${title} +${selectionCount - 1}` : title,\n isExcludeProhibited: facet.isExcludeProhibited,\n hidden,\n };\n }\n }\n\n return result.filter((r) => !r.disabled);\n};\n\nconst emptyFacets: Facet[] = [];\nconst emptyFacetList: Facet[] = [];\n\nexport const getFacetList = createSelector(\n (state: RootState) => state.search.facets || emptyFacets,\n (state: RootState) => state.search.facetList || emptyFacetList,\n getQueryFilter,\n facetsAggregator,\n);\nconst getQueryURLFacetValues = (pathStartsWith: string) => {\n if (window.location.pathname.substr(0, pathStartsWith.length) !== pathStartsWith) return [];\n\n const queryURL = window.location.pathname.substr(pathStartsWith.length);\n return queryURL\n .replace(/^\\/|\\/$/g, '')\n .split('/')\n .filter((q) => !!q);\n};\n\nexport const getQueryFilterFromQueryURL = createSelector(\n getFacetList,\n (_: RootState, pathStartsWith: string) =>\n process.env.SSR ? [] : getQueryURLFacetValues(pathStartsWith),\n (facets, queryURLValues) => {\n const _queryURLValues = [...queryURLValues];\n if (_queryURLValues.length === 0) return null;\n let queryFilter = new QueryFilter();\n facets.forEach((facet) =>\n facet?.filters?.forEach((filter) => {\n const index = filter.displayName\n ? _queryURLValues.indexOf(slugify(filter.displayName))\n : -1;\n if (index > -1) {\n if (!facet.isRangeFacet) {\n queryFilter = queryFilter.add(facet.id, filter.displayName);\n }\n /** Removes matched queryUrlFacetValue\n * Example: sok/mini will both match manufacturer MINI and modelSeries Mini causing zero results\n * because no car has manufacture MINI and modelSeries Mini.\n * ModelSeries mini is related to manufacturer Ausin (Old and before BMW bought Austin)\n **/\n _queryURLValues.splice(index, 1);\n }\n }),\n );\n\n if (queryFilter.isEmpty()) return null;\n\n return queryFilter;\n },\n);\n\nexport const getActiveFacet = createSelector(\n (state: RootState) => state.filters.facet,\n getFacetList,\n (current, facets) => (current ? (facets || []).find((f) => f && f.id === current.id) : null),\n);\n\nexport const getFacetSelections = createSelector(\n getFacetList,\n getQueryFilter,\n (facets, queryFilter) => {\n const facetStructure = getFacetStructure();\n return (facets || [])\n .map(\n (facet): CombinedFacet => ({\n ...facet,\n filters: (facet.filters || []).filter(\n (filter) =>\n (filter.selected &&\n (queryFilter.contains(facet.id, filter.displayName) || facet.isLocationFacet)) ||\n queryFilter.hasRange(facet.id),\n ),\n }),\n )\n .filter((facet) => facet.filters.length > 0)\n .sort(\n (a, b) => (facetStructure[a.id]?.sortOrder || 0) - (facetStructure[b.id]?.sortOrder || 0),\n );\n },\n);\n\nexport const getExcludingFacetSelections = createSelector(\n getFacetList,\n getQueryFilter,\n (facets, queryFilter) => {\n const facetStructure = getFacetStructure();\n return (facets || [])\n .map(\n (facet): CombinedFacet => ({\n ...facet,\n filters: (facet.filters || []).filter(\n (filter) => filter.selected && queryFilter.excludes(facet.id, filter.displayName),\n ),\n }),\n )\n .filter((facet) => facet.filters.length > 0)\n .sort(\n (a, b) => (facetStructure[a.id]?.sortOrder || 0) - (facetStructure[b.id]?.sortOrder || 0),\n );\n },\n);\n\nconst emptySearchResultSet: ElasticVehicle[] = [];\n\nexport const getSearchResultSet = createSelector(\n (state: RootState) => state.search.documentList,\n (documentList) => (documentList ? documentList.documents : emptySearchResultSet),\n);\n\nconst emptySearchSorting: SortOption[] = [];\n\nexport const getSearchSorting = createSelector(\n (state: RootState) => state.search.documentList,\n (documentList) => (documentList ? documentList.sortOptions : emptySearchSorting),\n);\n\nexport const getSearchHitCount = createSelector(\n (state: RootState) => state.search.queryFilter,\n (state: RootState) => state.search.documentList,\n (state: RootState) => state.search.hitCount,\n (queryFilter, documentList, hitCount) => {\n if (queryFilter && documentList) {\n return documentList.numberOfHits;\n }\n\n return hitCount;\n },\n);\n\nconst emptySearchPages: Page[] = [];\n\nexport const getSearchPages = createSelector(\n (state: RootState) => state.search.documentList,\n (documentList) =>\n documentList && documentList.pagination ? documentList.pagination.pages : emptySearchPages,\n);\n\nexport const getSearchDocument = createSelector(\n (state: RootState) => state.item.current,\n (documentList) =>\n documentList && documentList.documents && documentList.documents.length === 1\n ? documentList.documents[0]\n : null,\n);\n\nexport const getLinkCloudForAdvertisement = createSelector(\n (state: RootState) => state.item.facets,\n getSearchDocument,\n (facets, item) => {\n if (!facets || !item) return [];\n\n const facet = facets.find((f) => f.id === 'modelSeries');\n if (!facet || !facet.filters) return [];\n\n return facet.filters\n .filter((f) => f.count > 0)\n .map((f) => ({\n target: `/sok/${slugify(item.manufacturer)}/${slugify(f.displayName)}`,\n name: f.displayName,\n count: f.count,\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n },\n);\n\nconst emptySortOptions: SortOption[] = [];\n\nexport const getRetailersSorting = createSelector(\n (state: RootState) => state.retailers.documentList,\n (documentList) => (documentList ? documentList.sortOptions : emptySortOptions),\n);\n\nconst emptyPagniationPages: Page[] = [];\n\nexport const getRetailersPages = createSelector(\n (state: RootState) => state.retailers.documentList,\n (documentList) =>\n documentList && documentList.pagination ? documentList.pagination.pages : emptyPagniationPages,\n);\n\nexport const getRetailerDocument = createSelector(\n (state: RootState) => state.retailers.single,\n (documentList) =>\n documentList && documentList.documents && documentList.documents.length === 1\n ? documentList.documents[0]\n : null,\n);\n\nexport const isRetailerUsingFreespee = createSelector(\n (state: RootState) => state.retailers.single,\n (documentList) =>\n documentList &&\n documentList.documents &&\n documentList.documents.length === 1 &&\n documentList.documents[0].telephoneNumberGenerationSettings &&\n documentList.documents[0].telephoneNumberGenerationSettings.active,\n);\n\nexport const getRetailerSearch = createSelector(\n (state: RootState) => state.retailers.searchDocuments,\n (documentList) => (documentList && documentList.documents ? documentList.documents : []),\n);\n\nexport const getRetailerSearchPages = createSelector(\n (state: RootState) => state.retailers.searchDocuments,\n (documentList) => (documentList && documentList.pagination ? documentList.pagination.pages : []),\n);\n\nexport const getMedia = createSelector(\n (state: RootState) => state.media.connected,\n (_: RootState, ref: { id: string }) => ref.id,\n (connectedMedia, refId) => {\n if (!connectedMedia || !refId) return [];\n\n if (!connectedMedia[refId]) return [];\n\n return connectedMedia?.[refId]\n ?.filter((m) => m.files && m.files.length > 0)\n .sort((a, b) => a.sortOrder - b.sortOrder)\n .map((m) => m.files[0].url);\n },\n);\n\nexport const getSearchHistory = createSelector(\n (state: RootState) => state.history.list,\n (history) => history || [],\n);\n\nexport const getSearchSubscriptions = createSelector(\n (state: RootState) => state.subscriptions.search.list,\n (subscriptions) => (subscriptions || []).filter((s) => !s.referenceId),\n);\n\nconst getSearchSubscriptionsFull = (state: RootState) => state.subscriptions.search.list;\n\ntype SearchSubscriptionsListWithCategory = SubscriptionSearchItem & {\n list?: ParsedList | null;\n};\n\nexport const getSearchSubscriptionsListWithCategory = createSelector(\n (state: RootState) => state.subscriptions.search.list,\n getList,\n (subscriptions, list): SearchSubscriptionsListWithCategory[] => {\n return subscriptions.map((item) => {\n if (item.referenceId) {\n const match = list.find((x) => x.id === item.referenceId);\n return {\n ...item,\n image: match ? match.smallImage : null,\n list: match ? match : null,\n };\n }\n return item;\n });\n },\n);\n\nexport const getSearchSubscriptionsListWithCategoryNewHits = (state: RootState) => {\n const list = getSearchSubscriptionsListWithCategory(state);\n return list.reduce((sum, next) => sum + (next?.numberOfHits || 0), 0);\n};\n\nexport const getLastSearchSubscription = (state: RootState) => {\n const subscriptions = getSearchSubscriptions(state);\n if (subscriptions.length) return subscriptions[subscriptions.length - 1];\n return null;\n};\n\nexport const getSearchSubscription = (state: RootState, id?: string | null) => {\n if (!id) return null;\n const subscriptions = getSearchSubscriptions(state);\n const match = subscriptions.find((x) => x.id === id);\n return match ? match : null;\n};\n\nexport const getPrenumerationSubscriptions = createSelector(\n (state: RootState) => state.subscriptions.search.list,\n getList,\n (subscriptions, list): SubscriptionSearchListItem[] => {\n return (subscriptions || [])\n .filter((s) => !!s.referenceId)\n .map((item) => {\n const match = list.find((x) => x.id === item.referenceId);\n return {\n ...item,\n image: match ? match.image : null,\n list: match ? match : null,\n };\n });\n },\n);\n\nexport const getPrenumerationSubscriptionByReferenceId = (state: RootState, id?: string) => {\n if (!id) return null;\n\n const subscriptions = getSearchSubscriptionsFull(state);\n const match = subscriptions.find((x) => x.referenceId === id);\n return match ? match : null;\n};\n\nexport const isAdvertiesementSubscriptionsSynced = (state: RootState) =>\n state.subscriptions.advertisement.synced;\n\nexport const getAdvertisementSubscriptions = (state: RootState) =>\n state.subscriptions.advertisement.list;\n\nexport const getAdvertisementSubscription = createSelector(\n (state: RootState) => state.subscriptions.advertisement.list,\n (_: RootState, item?: ElasticVehicle | Item | null) => item,\n (subscriptions, item) => {\n if (!item || subscriptions.length === 0) {\n return null;\n }\n\n return subscriptions.find((s) => s.advertisementId === item.id);\n },\n);\n\nexport const getSharedNamespaceAdvertisements = (state: RootState) =>\n state.sharedUserContent.sharedNamespaceAdvertisements;\n\nconst emptyGuid = '00000000-0000-0000-0000-000000000000';\nexport type ComboSubscription = Omit & {\n namespace?: {\n name: string;\n id: string;\n };\n};\n\nconst NamespaceFilter = (a: ComboSubscription, id: string) => {\n if (a.id === emptyGuid) {\n return true;\n }\n return !!a.namespace && a.namespace.id === id;\n};\n\nconst namespacePreMap = (a: SubscriptionAdvertisement): ComboSubscription => {\n if (!a.namespace) {\n return {\n ...a,\n namespace: {\n name: i18next.t('unknown', { ns: 'validation' }),\n id: emptyGuid,\n },\n };\n }\n return a;\n};\n\nexport const getAdvertisementsForNamespace = createSelector(\n (state: RootState) => state.subscriptions.advertisement.list,\n (_: RootState, id: string) => id,\n (list, id) => list.map(namespacePreMap).filter((a) => NamespaceFilter(a, id)),\n);\n\nexport const getAdvertisementNamespaceFromAdvertisements = (state: RootState, id: string) =>\n state.subscriptions.advertisement.list\n .map(namespacePreMap)\n .filter((a) => NamespaceFilter(a, id))\n .map((a) => a.namespace)\n .pop();\n\nexport const getAdvertisementNamespace = (state: RootState, id: string) =>\n state.subscriptions.namespaces.list.filter((a) => a.id === id).pop();\n\nexport const getSharedAdvertisementNamespace = (state: RootState, id: string) =>\n state.sharedUserContent.sharedNamespaceAdvertisements\n .filter((a) => !!a.namespace && a.namespace.id === id)\n .map((a) => a.namespace)\n .pop();\n\nexport const getSettings = (state: RootState) => state.settings.current;\n\nconst emptyBrandingsList: Branding[] = [];\n\nexport const shouldFetchBrandings = createSelector(\n (state: RootState) => state.brandings.list || emptyBrandingsList,\n (brandings) => brandings.length === 0,\n);\n\nexport const getCreditCheckApiIdentifier = createSelector(\n (state: RootState) => state.brandings.list || [],\n (state: RootState) =>\n state.item.current && state.item.current.documents && state.item.current.documents.length === 1\n ? state.item.current.documents[0]\n : null,\n (brandings, item) => {\n if (!item || !item.financialOptions || !item.financialOptions.length) {\n return null;\n }\n\n const branding = brandings.find(\n (b) => b.name === item.financialOptions[0].financialInstitution,\n );\n\n if (branding && branding.creditCheckApiIdentifier) {\n return branding.creditCheckApiIdentifier;\n }\n return null;\n },\n);\n\nconst empty: Branding[] = [];\nexport const getManufacturerPackagings = createSelector(\n (state: RootState) => state.brandings.list || empty,\n (packagings) => packagings.filter((p) => p.category.includes(MANUFACTURER_PACKAGE_CATEGORY)),\n);\n\nexport const getItemManufacturerPackagings = createSelector(\n (state: RootState) =>\n (state.brandings.list || []).filter((b) => b.category.includes(MANUFACTURER_PACKAGE_CATEGORY)),\n (_: RootState, item: Item) => item,\n (packagings, item) => {\n if (!item || !item.hasManufacturerPackaging) {\n return [];\n }\n\n return packagings.filter((p) => p.identifier === item.manufacturer);\n },\n);\n\nexport const getFilterManufacturerPackaging = createSelector(\n getQueryFilter,\n getManufacturerPackagings,\n (qF, brandingList) => {\n const manufacturers = qF.get('manufacturer');\n if (manufacturers && manufacturers.length === 1 && !qF.has('hasManufacturerPackaging')) {\n const mP = brandingList.find((x) => x.identifier === manufacturers[0]);\n return mP ? mP : null;\n }\n\n return null;\n },\n);\n\nexport const getItemResellerPackagings = createSelector(\n (state: RootState) =>\n state.retailers.single && state.retailers.single.documents.length === 1\n ? state.retailers.single.documents[0]\n : null,\n (_: RootState, item: Item | null) => item,\n (retailer, item) => {\n if (!retailer) {\n return [];\n }\n\n const identifiers =\n item && item.resellerPackagingOptions\n ? item.resellerPackagingOptions.map((rpo) => rpo.id)\n : [];\n return (retailer.resellerPackagingOptions || []).filter((rpo) => identifiers.includes(rpo.id));\n },\n);\n\nexport const isErrorPage = createSelector(\n (state: RootState) => state.routing.isErrorPage,\n (state: RootState) => state.search.notFound,\n (state: RootState) => state.contentpages.responseStatus === responseStatus.FAILED,\n (state: RootState, slug?: string) =>\n state.faq.categories && slug && !state.faq.categories.find((c) => c.slug === slug),\n (state: RootState) => state.item.notFound,\n (\n errorFromServer,\n isMissingSearchDocument,\n isMissingContentPage,\n isMissingFaqPage,\n isMissingSearchDocumentItem,\n ) =>\n !!(\n errorFromServer ||\n isMissingSearchDocument ||\n isMissingContentPage ||\n isMissingFaqPage ||\n isMissingSearchDocumentItem\n ),\n);\n\nconst emptyFaqList: Faq[] = [];\n\nexport const getFAQs = createSelector(\n (state: RootState) => state.faq.list,\n (list) => list || emptyFaqList,\n);\n\nexport const getContentModules = createSelector(\n (state: RootState) => state.contentmodules.documentList,\n (documentList) => {\n const list =\n documentList && documentList.documents && documentList.documents.length\n ? documentList.documents\n : [];\n return list.sort((a, b) => a.sortOrder - b.sortOrder);\n },\n);\n\nexport const getUploadedMedia = (state: RootState) => state.media.uploads;\n\nexport const getPipeMessage = (state: RootState) => state.events.lastPipeMessage;\n\nexport const getSafetyAddonsConversation = createSelector(\n (state: RootState) => state.safetyAddons.list,\n (list) =>\n list && list.documentList && list.documentList.documents ? list.documentList.documents : null,\n);\n\nconst getCentralStorageId = () => {\n if (!process.env.SSR) {\n return Cookies.get(COOKIE_CENTRAL_STORAGE);\n }\n\n return null;\n};\n\nconst getCentralStorageRetailers = createSelector(getSearchDocument, (item) =>\n item &&\n item.branches &&\n item.branches.length &&\n item.branches[0].connectedBranches &&\n item.branches[0].connectedBranches.length\n ? item.branches[0].connectedBranches\n : null,\n);\n\nexport interface GetGeoLocation {\n lat: number;\n lng: number;\n}\n\nexport const getGeoLocation = createSelector(\n (state: RootState) => state.geo.location,\n (location): GetGeoLocation | null => {\n if (location && location.lat && location.lng) {\n return {\n lat: location.lat,\n lng: location.lng,\n };\n }\n return null;\n },\n);\n\nexport const getLocation = createSelector(\n getQueryFilter,\n getGeoLocation,\n (queryFilter, geoLocation) => {\n if (queryFilter.hasSpatial()) {\n return queryFilter.getSpatial();\n } else if (geoLocation) {\n return geoLocation;\n }\n return null;\n },\n);\n\nexport const getSelectedCentralStorageRetailer = createSelector(\n getCentralStorageRetailers,\n getQueryFilter,\n getLocation,\n (branches, qF, loc) => {\n let branch = null;\n if (branches && branches.length) {\n if (qF.has('branches') && !!qF.get('branches').length) {\n for (let x = 0; x < qF.get('branches').length; x++) {\n for (let y = 0; y < branches.length; y++) {\n if (branches[y].name === qF.get('branches')[x]) {\n branch = branches[y];\n if (!process.env.SSR) {\n Cookies.set(COOKIE_CENTRAL_STORAGE, branch.id);\n }\n break;\n }\n }\n if (branch) {\n break;\n }\n }\n }\n\n const centralStorageId = getCentralStorageId();\n if (!branch && centralStorageId) {\n branch = branches.find((x) => x.id === centralStorageId);\n }\n\n if (!branch) {\n const uL = qF.hasSpatial() ? qF.getSpatial() : undefined;\n if (uL) {\n //If location exist\n branch = branches\n .sort(\n (a, b) =>\n getDistance(uL?.lat, uL?.lng, b.position.location.lat, b.position.location.lon) -\n getDistance(uL?.lat, uL?.lng, a.position.location.lat, a.position.location.lon),\n )\n .slice(0)\n .pop();\n } else if (loc) {\n branch = branches\n .sort(\n (a, b) =>\n getDistance(loc.lat, loc.lng, b.position.location.lat, b.position.location.lon) -\n getDistance(loc.lat, loc.lng, a.position.location.lat, a.position.location.lon),\n )\n .slice(0)\n .pop();\n } else {\n branch = branches[0];\n }\n }\n }\n return branch;\n },\n);\n", "import type { SearchLocation, WaykeLocation } from '../@types/WaykeLocation';\n\ninterface LocalStoragePosition {\n position?: WaykeLocation;\n list?: SearchLocation[];\n date?: Date;\n}\n\nconst localStorageKey = 'wayke-locations';\nexport const getPosition = (): WaykeLocation | null => {\n try {\n const s = localStorage.getItem(localStorageKey);\n if (!s) return null;\n const locations = JSON.parse(s) as LocalStoragePosition;\n if (\n !locations.date ||\n new Date(locations.date).valueOf() + 24 * 60 * 60 * 1000 < new Date().valueOf()\n ) {\n localStorage.removeItem(localStorageKey);\n return null;\n }\n return {\n ...locations.position,\n lat: Number.parseFloat(locations.position?.lat?.toString() || '0'),\n lng: Number.parseFloat(locations.position?.lng.toString() || '0'),\n } as WaykeLocation;\n } catch (_e) {\n return null;\n }\n};\n\nexport const setPosition = (position: WaykeLocation | null): WaykeLocation | null => {\n try {\n const locations = JSON.parse(localStorage.getItem(localStorageKey) || '{}');\n locations.position = position;\n locations.date = new Date();\n\n localStorage.setItem(localStorageKey, JSON.stringify(locations));\n\n return locations.position;\n } catch (_e) {\n return position;\n }\n};\n\nconst deg2rad = (deg: number) => deg * (Math.PI / 180);\n\nexport const getDistance = (lat1: number, lon1: number, lat2: number, lon2: number) => {\n const R = 6371;\n const dLat = deg2rad(lat2 - lat1);\n const dLon = deg2rad(lon2 - lon1);\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n};\n", "import { nb, sv } from 'date-fns/locale';\nimport { useTranslation } from 'react-i18next';\nimport type { ElasticOdometerReading } from '../@types/ElasticVehicle';\nimport { numberSeparator } from '../helpers/formats';\nimport { getMarket } from '../i18n';\n\nconst hiddenFiltersPerMarket: Record = {\n NO: ['mileage', 'fuelType'],\n SE: ['odometerValueAsKm', 'fuelType'],\n};\n\nexport const getStaticMarketPath = () => (getMarket().marketCode === 'NO' ? 'drive' : 'wayke');\n\nexport const getDateFnsLocale = () => (getMarket().marketCode === 'NO' ? nb : sv);\n\nexport const getAutomotiveAssociationName = () => (getMarket().marketCode === 'NO' ? 'nbf' : 'mrf');\n\nexport const getConvertedMileageValue = (mileage: number) =>\n getMarket().marketCode === 'NO' ? mileage * 10 : mileage;\n\nexport const getConvertedMileage = (mileage: number) => {\n const { t } = useTranslation(['glossary']);\n const market = getMarket().marketCode;\n const calculatedMilage = market === 'NO' ? mileage * 10 : mileage;\n\n return `${numberSeparator(calculatedMilage)} ${t('mileageUnit', {\n ns: 'glossary',\n count: mileage,\n }).toLowerCase()}`;\n};\n\n// Return correct odometer value and unit based on market\nexport const getMarketOdometer = (odometerReading: ElasticOdometerReading) => {\n const { t } = useTranslation(['glossary']);\n const market = getMarket().marketCode;\n let marketOdometer = odometerReading.value;\n\n if (market === 'NO' && odometerReading.unit === 'mil') {\n marketOdometer = odometerReading.value * 10;\n } else if (market === 'SE' && odometerReading.unit === 'km') {\n marketOdometer = odometerReading.value / 10;\n }\n\n return `${numberSeparator(marketOdometer)} ${t('mileageUnit', {\n ns: 'glossary',\n count: 2,\n }).toLowerCase()}`;\n};\n\nexport const getHiddenFilters = () => hiddenFiltersPerMarket[getMarket().marketCode] ?? [];\n", "const done = (fn: () => void) => setTimeout(fn, 0);\n\nexport interface CancelablePromiseRejection {\n isCancelled?: boolean;\n}\n\nconst cancelable = (promise: Promise) => {\n let isCancelled = false;\n\n const wrapper = new Promise((resolve, reject) =>\n promise\n .then((value) => (isCancelled ? reject({ isCancelled }) : resolve(value)))\n .catch((error) => reject({ isCancelled, status: error.response?.status })),\n );\n\n return { promise: wrapper, cancel: () => (isCancelled = true) };\n};\n\nexport { done, cancelable };\n"], "mappings": "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AQ,EACV,EACA,CACE,IAAK,KACL,IAAK,GACL,KAAM,WACN,KAAM,WACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,gBACN,KAAM,gBACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,eACN,KAAM,eACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,UACN,KAAM,UACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,iBACN,KAAM,iBACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,WACN,KAAM,WACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,cACN,KAAM,cACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,aACN,KAAM,aACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,SACN,KAAM,SACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,aACN,KAAM,aACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,WACN,KAAM,WACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,eACN,KAAM,eACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,UACN,KAAM,UACN,OAAQ,EACV,EACA,CACE,IAAK,KACL,IAAK,MACL,KAAM,UACN,KAAM,UACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,WACN,KAAM,WACN,OAAQ,EACV,EACA,CACE,IAAK,KACL,IAAK,MACL,KAAM,aACN,KAAM,aACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,WACN,KAAM,WACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,WACN,KAAM,WACN,OAAQ,EACV,EACA,CACE,IAAK,KACL,IAAK,MACL,KAAM,OACN,KAAM,OACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,kBACN,KAAM,kBACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,eACN,KAAM,eACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,QACN,KAAM,QACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,eACN,KAAM,eACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,cACN,KAAM,cACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,SACN,KAAM,SACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,cACN,KAAM,cACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,aACN,KAAM,aACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,UACN,KAAM,UACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,gBACN,KAAM,gBACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,iBACN,KAAM,iBACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,cACN,KAAM,cACN,OAAQ,EACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,EACV,CACF,EAEaC,GAAmB,IAAM,CACpC,CACE,IAAK,MACL,IAAK,MACL,KAAM,OACN,KAAM,OACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,SACN,KAAM,SACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,EACL,KAAM,eACN,KAAM,eACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,cACN,KAAM,cACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,UACN,KAAM,UACN,OAAQ,GACV,EACA,CACE,IAAK,KACL,IAAK,IACL,KAAM,QACN,KAAM,QACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,aACN,KAAM,aACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,OACN,KAAM,OACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,UACN,KAAM,UACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,UACN,KAAM,UACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,QACN,KAAM,QACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,SACN,KAAM,SACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,SACN,KAAM,SACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,cACN,KAAM,cACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,QACN,KAAM,QACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,KACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,KACL,IAAK,MACL,KAAM,UACN,KAAM,UACN,OAAQ,GACV,EACA,CACE,IAAK,KACL,IAAK,KACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,MACL,IAAK,MACL,KAAM,YACN,KAAM,YACN,OAAQ,GACV,EACA,CACE,IAAK,MACL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", "names": ["require_cookies", "__commonJSMin", "exports", "module", "global", "undefined", "factory", "window", "Cookies", "key", "value", "options", "date", "expires", "now", "cookieString", "documentCookie", "cookieCache", "cookiesArray", "i", "cookieKvp", "separatorIndex", "decodedKey", "e", "testKey", "areEnabled", "cookiesExport", "TILE_SIZE", "bound", "value", "opt_min", "opt_max", "degreesToRadians", "deg", "radiansToDegrees", "rad", "MercatorProjection", "latLng", "opt_point", "point", "origin", "siny", "lng", "latRadians", "lat", "getPixelRadius", "map", "marker", "zoom", "center", "tiles", "moved", "projection", "initCoord", "endCoord", "initPoint", "endPoint", "pixelsPerMeter", "getLocationSetSE", "getLocationSetNO", "getLocationSet", "getMarket", "toRepresentation", "queryString", "fromRepresentation", "raw", "name", "url", "results", "queryFilterExport", "qf", "queryFilterImport", "QueryFilter", "QS_NAME", "VALID_QUERY_URL_PROP_ORDER", "isPropValidForQueryURL", "propName", "values", "fixLocationFilterName", "displayName", "isPropValidSpatial", "getLocationSet", "x", "slugify", "toPropValidSpatial", "_QueryFilter", "keyValue", "pair", "err", "queryFilter", "stripOperational", "ignoreParams", "buffer", "key", "p", "self", "param", "value", "query", "prop", "val", "paramsFilters", "f", "exclusionsFilters", "filter", "props", "v", "index", "filterCount", "aggregation", "next", "min", "max", "spatial", "offset", "queryFilterString", "queryFilter1", "queryFilter2", "str", "includeQuery", "a", "b", "exclusion", "clean", "getMarket", "urlParams", "urlExclusions", "query_filter_default", "import_cookies_js", "REQ_RETAILER_LIST", "RCV_RETAILER_LIST", "REQ_RETAILER", "RCV_RETAILER", "REQ_RETAILER_SEARCH", "RCV_RETAILER_SEARCH", "REQ_RETAILER_VEHICLE_SEARCH", "RCV_RETAILER_VEHICLE_SEARCH", "REQ_CLEAR_RETAILER", "REQUEST_FAILED", "COOKIE_CENTRAL_STORAGE", "all", "dispatch", "getState", "request_cache_default", "geo", "url", "response", "json", "buildGetRequest", "validateResponse", "find", "slugOrId", "findAndSetCookie", "id", "Cookies", "vehicleSearch", "retailer", "filter", "f", "getFilterQueryString", "queryFilter", "retailerSearch", "clear", "List", "id", "title", "description", "updatedAt", "createdAt", "featuredImage", "cardImage", "relatedContent", "slug", "queryFilter", "_featuredImage", "_cardImage", "list_default", "getList", "createSelector", "state", "documentList", "d", "list_default", "getCurrentListPage", "slug", "list", "index", "formattedSlug", "page", "x", "isListPage", "getCurrentListPageQueryFilter", "queryString", "getCurrentListPageFromQueryUrl", "url", "results", "res", "getListItemHitCount", "_", "id", "hits", "count", "getListById", "match", "reselectors_exports", "__export", "getActiveFacet", "getAdvertisementNamespace", "getAdvertisementNamespaceFromAdvertisements", "getAdvertisementSubscription", "getAdvertisementSubscriptions", "getAdvertisementsForNamespace", "getContentModules", "getCreditCheckApiIdentifier", "getExcludingFacetSelections", "getFAQs", "getFacetList", "getFacetSelections", "getFilterManufacturerPackaging", "getGeoLocation", "getItemManufacturerPackagings", "getItemResellerPackagings", "getLastSearchSubscription", "getLinkCloudForAdvertisement", "getLocation", "getManufacturerPackagings", "getMedia", "getPipeMessage", "getPrenumerationSubscriptionByReferenceId", "getPrenumerationSubscriptions", "getQueryFilter", "getQueryFilterFromQueryURL", "getRetailerDocument", "getRetailerSearch", "getRetailerSearchPages", "getRetailersPages", "getRetailersSorting", "getSafetyAddonsConversation", "getSearchDocument", "getSearchHistory", "getSearchHitCount", "getSearchPages", "getSearchResultSet", "getSearchSorting", "getSearchSubscription", "getSearchSubscriptions", "getSearchSubscriptionsListWithCategory", "getSearchSubscriptionsListWithCategoryNewHits", "getSelectedCentralStorageRetailer", "getSettings", "getSharedAdvertisementNamespace", "getSharedNamespaceAdvertisements", "getUploadedMedia", "getVehicleLookupResult", "isAdvertiesementSubscriptionsSynced", "isErrorPage", "isRetailerUsingFreespee", "shouldFetchBrandings", "import_cookies_js", "location_exports", "__export", "getDistance", "getPosition", "setPosition", "localStorageKey", "s", "locations", "position", "deg2rad", "deg", "lat1", "lon1", "lat2", "lon2", "dLat", "dLon", "a", "hiddenFiltersPerMarket", "getStaticMarketPath", "getMarket", "getDateFnsLocale", "nb", "sv", "getAutomotiveAssociationName", "getConvertedMileageValue", "mileage", "getConvertedMileage", "useTranslation", "calculatedMilage", "numberSeparator", "getMarketOdometer", "odometerReading", "market", "marketOdometer", "getHiddenFilters", "MANUFACTURER_PACKAGE_CATEGORY", "getVehicleLookupResult", "state", "getQueryFilter", "createSelector", "queryFilter", "query_filter_default", "getFacetStructure", "instance", "translateFacetFilters", "facets", "x", "y", "facetsAggregator", "_facets", "_list", "list", "result", "position", "hiddenFilters", "getHiddenFilters", "facetStructure", "loc", "getLocationSet", "p", "i", "facet", "latest", "f", "hidden", "filterMin", "filterMax", "min", "max", "prefixChar", "suffixChar", "baseMinNum", "baseMaxNum", "minNum", "maxNum", "disabled", "rangeTitle", "selectionCount", "title", "filters", "j", "filter", "next", "z", "a", "b", "r", "emptyFacets", "emptyFacetList", "getFacetList", "getQueryURLFacetValues", "pathStartsWith", "q", "getQueryFilterFromQueryURL", "_", "queryURLValues", "_queryURLValues", "index", "slugify", "getActiveFacet", "current", "getFacetSelections", "getExcludingFacetSelections", "emptySearchResultSet", "getSearchResultSet", "documentList", "emptySearchSorting", "getSearchSorting", "getSearchHitCount", "hitCount", "emptySearchPages", "getSearchPages", "getSearchDocument", "getLinkCloudForAdvertisement", "item", "emptySortOptions", "getRetailersSorting", "emptyPagniationPages", "getRetailersPages", "getRetailerDocument", "isRetailerUsingFreespee", "getRetailerSearch", "getRetailerSearchPages", "getMedia", "ref", "connectedMedia", "refId", "m", "getSearchHistory", "history", "getSearchSubscriptions", "subscriptions", "s", "getSearchSubscriptionsFull", "getSearchSubscriptionsListWithCategory", "getList", "match", "getSearchSubscriptionsListWithCategoryNewHits", "sum", "getLastSearchSubscription", "getSearchSubscription", "id", "getPrenumerationSubscriptions", "getPrenumerationSubscriptionByReferenceId", "isAdvertiesementSubscriptionsSynced", "getAdvertisementSubscriptions", "getAdvertisementSubscription", "getSharedNamespaceAdvertisements", "emptyGuid", "NamespaceFilter", "namespacePreMap", "getAdvertisementsForNamespace", "getAdvertisementNamespaceFromAdvertisements", "getAdvertisementNamespace", "getSharedAdvertisementNamespace", "getSettings", "emptyBrandingsList", "shouldFetchBrandings", "brandings", "getCreditCheckApiIdentifier", "branding", "empty", "getManufacturerPackagings", "packagings", "getItemManufacturerPackagings", "getFilterManufacturerPackaging", "qF", "brandingList", "manufacturers", "mP", "getItemResellerPackagings", "retailer", "identifiers", "rpo", "isErrorPage", "responseStatus", "slug", "c", "errorFromServer", "isMissingSearchDocument", "isMissingContentPage", "isMissingFaqPage", "isMissingSearchDocumentItem", "emptyFaqList", "getFAQs", "getContentModules", "getUploadedMedia", "getPipeMessage", "getSafetyAddonsConversation", "getCentralStorageId", "Cookies", "COOKIE_CENTRAL_STORAGE", "getCentralStorageRetailers", "getGeoLocation", "location", "getLocation", "geoLocation", "getSelectedCentralStorageRetailer", "branches", "branch", "centralStorageId", "uL", "getDistance", "done", "fn", "cancelable", "promise", "isCancelled", "resolve", "reject", "value", "error"] }