{"version":3,"file":"static/chunks/2116.496e985b02464370.js","mappings":"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","sources":["webpack://_N_E/./node_modules/ramda/es/internal/_isNumber.js","webpack://_N_E/./node_modules/ramda/es/range.js","webpack://_N_E/./utils/FilterHelpers.js"],"sourcesContent":["export default function _isNumber(x) {\n return Object.prototype.toString.call(x) === '[object Number]';\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _isNumber from \"./internal/_isNumber.js\";\n/**\n * Returns a list of numbers from `from` (inclusive) to `to` (exclusive).\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Number -> Number -> [Number]\n * @param {Number} from The first number in the list.\n * @param {Number} to One more than the last number in the list.\n * @return {Array} The list of numbers in the set `[a, b)`.\n * @example\n *\n * R.range(1, 5); //=> [1, 2, 3, 4]\n * R.range(50, 53); //=> [50, 51, 52]\n */\n\nvar range =\n/*#__PURE__*/\n_curry2(function range(from, to) {\n if (!(_isNumber(from) && _isNumber(to))) {\n throw new TypeError('Both arguments to range must be numbers');\n }\n\n var result = [];\n var n = from;\n\n while (n < to) {\n result.push(n);\n n += 1;\n }\n\n return result;\n});\n\nexport default range;","import * as R from 'ramda';\nimport i18n from '../i18n';\nimport { snakeToCamel } from './CaseConverters';\n\nexport const getTrackingValue = (type, filter) => {\n if (!filter) {\n return '';\n }\n\n if (typeof filter === 'string') {\n return filter;\n }\n\n if (type === 'range') {\n return filter.join('-');\n } else {\n return filter.join(',');\n }\n};\n\nexport const mapFilter = (filter, isProjectPage) => {\n const { name, range } = filter;\n let label = i18n.t('object.attributes.' + snakeToCamel(name));\n let entryFloorLabel = i18n.t('object.attributes.entryFloor');\n\n if (range) {\n range[0] = Number(range[0]) || 0;\n range[1] = Number(range[1]) || 0;\n }\n\n let type, value, widget, modifiers;\n\n switch (name) {\n case 'rooms':\n case 'floor':\n const optionCount = range[1] - range[0];\n\n if (optionCount < 1) {\n widget = null;\n value = [];\n } else if (optionCount < 6) {\n type = 'select';\n value = [];\n widget = {\n component: 'FormWidgetOptions',\n props: {\n modifiers: ['Horizontal'],\n options: R.range(range[0], range[1] + 1).map((x) => ({\n label: x === 0 ? entryFloorLabel : x,\n value: x,\n })),\n },\n };\n } else {\n type = 'range';\n value = [Math.floor(range[0]), Math.ceil(range[1])];\n widget = {\n component: 'FormWidgetSlider',\n props: {\n minStartLabel: entryFloorLabel,\n min: Math.floor(range[0]),\n max: Math.ceil(range[1]),\n },\n };\n }\n\n break;\n\n case 'living_space':\n case 'price':\n case 'fee_monthly':\n type = 'range';\n value = [Math.floor(range[0]), Math.ceil(range[1])];\n if (value[1] - value[0] > 1) {\n widget = {\n component: 'FormWidgetSlider',\n props: {\n min: Math.floor(range[0]),\n max: Math.ceil(range[1]),\n },\n };\n\n if (name === 'living_space') {\n modifiers = ['FullWidthSm'];\n widget.props.unit = 'm2';\n } else if (name === 'fee_monthly') {\n widget.props.unit = 'kr/mån';\n }\n } else {\n widget = null;\n value = [];\n }\n\n break;\n\n case 'status':\n type = 'select';\n modifiers = ['FullWidthSm'];\n value = filter.value || [];\n\n let options;\n if (filter.variant === 'project') {\n options = [\n {\n label: i18n.t('project.status.forSale'),\n value: 'for-sale',\n modifiers: [],\n },\n {\n label: i18n.t('project.status.upcoming'),\n value: 'upcoming',\n modifiers: [],\n },\n {\n label: i18n.t('project.status.sold'),\n value: 'sold',\n modifiers: [],\n },\n ];\n\n label = i18n.t('object.attributes.statusProjects');\n } else {\n options = [\n // {\n // label: i18n.t('object.status.forSale'),\n // value: 'for-sale',\n // modifiers: [],\n // },\n {\n label: i18n.t('object.status.reservedInListObjects'),\n value: 'reserved',\n modifiers: [],\n },\n {\n label: i18n.t('object.status.hasBalcony'),\n value: 'has-balcony',\n modifiers: [],\n },\n {\n label: i18n.t('object.status.hasPatio'),\n value: 'has-patio',\n modifiers: [],\n },\n ];\n\n if (isProjectPage) {\n options.push({\n label: i18n.t('object.status.soldInListObjects'),\n value: 'sold',\n modifiers: [],\n })\n }\n // label = i18n.t('object.attributes.statusObjects');\n label = '';\n }\n widget = {\n component: 'FormWidgetOptions',\n props: {\n modifiers: ['Vertical', 'HorizontalSm'],\n options: options,\n },\n };\n break;\n\n case 'municipality_slug':\n case 'county_slug':\n type = 'select';\n value = [];\n break;\n\n default:\n return false;\n }\n\n return {\n name,\n label,\n modifiers,\n value,\n type,\n widget,\n };\n};\n\nexport function mapApiResponseToProject(apiObject) {\n const {\n area,\n municipality,\n mainProject,\n listData,\n dataAttributes,\n url,\n saleStatus,\n } = apiObject;\n\n return {\n link: { href: url },\n card: {\n image: listData.image,\n },\n shortFacts: {\n area,\n municipality,\n mainProject,\n ...dataAttributes,\n name: listData.title,\n status: saleStatus.uiLabel,\n statusSlug: saleStatus.slug,\n },\n };\n}\n\nexport function mapApiResponseToEstateObject(apiObject) {\n const {\n rooms,\n price,\n livingSpace,\n floor,\n feeMonthly,\n operatingCost,\n } = apiObject.dataAttributes;\n\n const {\n housingType,\n saleStatus,\n objectName,\n projectTitle,\n area,\n } = apiObject;\n\n const obj = {\n renditions: {\n thumb: {\n src: '/static/core/assets/img/planskiss-placeholder.png',\n width: 275,\n height: 250,\n alt: '',\n },\n },\n rooms,\n livingSpace,\n floor,\n feeMonthly,\n operatingCost,\n housingType,\n price,\n saleStatus,\n objectName,\n projectTitle,\n area,\n url: apiObject.url,\n };\n\n if (\n apiObject.listData.image &&\n apiObject.listData.image.renditions.square700\n ) {\n obj.renditions.thumb.src =\n apiObject.listData.image.renditions.square700.src;\n }\n\n return obj;\n}\n"],"names":["_isNumber","x","Object","prototype","toString","call","from","to","TypeError","result","n","push","getTrackingValue","type","filter","join","mapFilter","isProjectPage","value","widget","modifiers","name","range","label","i18n","snakeToCamel","entryFloorLabel","Number","optionCount","component","props","options","R","map","Math","floor","ceil","minStartLabel","min","max","unit","variant","mapApiResponseToProject","apiObject","area","municipality","mainProject","listData","dataAttributes","url","saleStatus","link","href","card","image","shortFacts","title","status","uiLabel","statusSlug","slug","mapApiResponseToEstateObject","rooms","price","obj","renditions","thumb","src","width","height","alt","livingSpace","feeMonthly","operatingCost","housingType","objectName","projectTitle","square700"],"sourceRoot":""}