{"version":3,"sources":["components/ProjectObjectTypeOverview.js"],"names":["_toConsumableArray","arr","Array","isArray","i","arr2","length","from","Vue","component","data","mode","selectedPhaseId","selectedPhaseObjectTypes","accordionOpen","allObjectTypes","activeFilters","minPrice","maxPrice","objectTypes","phases","livingSurface","plotArea","parkingOptions","gardenPosition","bedrooms","hideSoldObjectTypes","activeStatusFilters","defaultMinPrice","defaultMaxPrice","overviewData","jsonOverviewData","mapAreas","plotTypesList","statusFilters","hoverVisible","headerText","showFilters","accordionInitialized","isiPad","testVoorDeploy","body","currentPhase","current","filters","formatCurrency","input","toLocaleString","style","currency","minimumFractionDigits","created","_this","this","Phases","forEach","phase","ObjectTypes","objectType","Phase","Name","push","window","localStorage","getItem","mounted","_this2","document","getElementsByTagName","hasOwnProperty","NboId","initializeOverviewView","navigator","userAgent","indexOf","location","hash","getFiltersFromHash","newFilters","getPhaseIdFromHash","onpopstate","addEventListener","innerWidth","setFilterVisibility","nextTick","fAccordion","computed","filteredObjectTypes","filterObjectTypes","noResultsObjectTypes","getNoResultObjectTypes","filterGroups","priceRange","getFilterPriceRange","getObjectTypesOptions","map","phaseFilter","getlivingSurfaceFilterSteps","getPlotAreaFilterSteps","getParkingFilterOptions","getGardenFilterOptions","getBedroomFilterOptions","hasActiveFilters","JSON","stringify","watch","id","_this3","detailMap","querySelectorAll","find","getObjectTypesByPhaseId","classList","remove","initializeDetailView","add","handler","updateHashUrl","deep","newMode","methods","initAccordion","accordions","accordion","setHeaderText","_this4","HeaderStatus","_this5","mapOverview","querySelector","mapOverviewImage","initializeMap","imagesLoaded","removeHilightAreasByObjectTypeNboId","_this6","allMaps","allMapImage","mapImage","dataset","detailImagePhaseId","x","detailMapPhaseId","toggleDetailMapView","stickyElements","Stickyfill","imageMapResize","$","maphilight","fill","fillColor","fillOpacity","stroke","strokeColor","strokeOpacity","strokeWidth","fade","alwaysOn","neverOn","groupBy","wrapClass","shadow","shadowX","shadowY","shadowRadius","shadowColor","shadowOpacity","shadowPosition","shadowFrom","overlay","setSelectedPhaseId","redirectToPhaseOrObjectType","url","arguments","undefined","target","contains","href","hightLightActualPlot","goToDetailView","e","plot","selectedPhase","filter","_this7","selectedPlotId","plotsToHighlight","Plots","Status","objectData","trigger","_loop","highlightListItem","hilightAreasByObjectTypeNboId","_this8","area","isActiveFilter","includes","status","hilightAreasByObjectTypeOnFilter","filterActive","s","index","splice","p","getPlotColor","setMode","_this9","setItem","set","hoveredPlot","overview","getAttribute","phaseList","_loop2","before","element","parent","parentNode","insertBefore","togglePhase","triggerHover","showPopUp","Coordinates","Tooltip","qtip","content","text","classes","position","container","effect","api","pos","viewport","animate","duration","easing","queue","my","at","adjust","screen","y","show","event","ready","hide","removeData","mouseover","removeMapHilights","mouseleave","PriceFrom","reduce","a","b","hashItems","replace","split","phaseName","iType","aKeyValues","decodeURIComponent","aFilterTypes","parseFloat","getJsonFilterVals","sHash","sPrevArrFilter","parse","oActiveFilterKeys","Object","keys","filterType","v","aFilterVals","encodeURIComponent","iFilter","sHashUrl","history","pushState","replaceState","pathname","_this10","type","filterValue","PlotsForSale","PlotsInOption","CustomPriceLabel","ObjectType","LivingSurface","plots","PlotArea","PlotParking","PlotGarden","PlotBedrooms","_this11","sort","objectTypesToShow","closestSmaller","closestLarger","some","reverse","objectTypesByPrice","lowest","highest","average","Math","floor","uniqueLivingSurfaceValues","Set","minLivingSurface","min","apply","maxLivingSurface","ceil","max","livingSurfaceFilterSteps","livingSurfaceDifference","createInterval","plotAreasPerObjectType","concat","uniquePlotAreaValues","minPlotArea","maxPlotArea","plotAreaFilterSteps","areaDifference","priceDifference","plotGardenPerObjectType","uniqueGardenOptionsValues","plotParkingPerObjectType","uniqueParkingOptionsValues","plotBedroomsPerObjectType","interval","array","newValue","hasFilterResults","results","clearFilter","clearAllFilters"],"mappings":"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","file":"../../components/ProjectObjectTypeOverview.js","sourcesContent":["Vue.component('projectObjectTypeOverview', {\r\n data() {\r\n return {\r\n mode: 'map',\r\n selectedPhaseId: null,\r\n selectedPhaseObjectTypes: null,\r\n accordionOpen: false,\r\n\r\n allObjectTypes: [],\r\n activeFilters: {\r\n minPrice: 0,\r\n maxPrice: 0,\r\n objectTypes: [],\r\n phases: [],\r\n livingSurface: null,\r\n plotArea: null,\r\n parkingOptions: [],\r\n gardenPosition: [],\r\n bedrooms: null,\r\n hideSoldObjectTypes: false,\r\n },\r\n activeStatusFilters: [],\r\n defaultMinPrice: null,\r\n defaultMaxPrice: null,\r\n\r\n overviewData: jsonOverviewData,\r\n\r\n mapAreas: null,\r\n plotTypesList: null,\r\n statusFilters: null,\r\n\r\n hoverVisible: false,\r\n headerText: '',\r\n\r\n showFilters: false,\r\n accordionInitialized: false,\r\n\r\n isiPad: false,\r\n testVoorDeploy: true,\r\n body: null,\r\n\r\n currentPhase: null,\r\n current: null\r\n\r\n }\r\n },\r\n filters: {\r\n //move to app.js\r\n formatCurrency(input) {\r\n return input.toLocaleString(\"nl-NL\", { style: 'currency', currency: 'EUR', minimumFractionDigits: 0 });\r\n }\r\n },\r\n created() {\r\n // Get all objectTypes for all phases - used for listview filtering\r\n this.overviewData.Phases.forEach((phase) => {\r\n phase.ObjectTypes.forEach((objectType) => {\r\n\r\n // Add Phase Name to ObjectType so we have a reference\r\n objectType.Phase = phase.Name;\r\n\r\n this.allObjectTypes.push(objectType);\r\n });\r\n });\r\n\r\n // Check if mode is set in the localStorage\r\n if (window.localStorage.getItem('mode')) {\r\n this.mode = window.localStorage.getItem('mode');\r\n }\r\n },\r\n mounted() {\r\n this.body = document.getElementsByTagName(\"BODY\")[0];\r\n if (this.overviewData.hasOwnProperty('Phases') && this.overviewData.Phases.length) {\r\n // If there is only one phase, select it and skip phase overview\r\n if (this.overviewData.Phases.length === 1) {\r\n this.selectedPhaseId = this.overviewData.Phases[0].NboId;\r\n } else if (this.mode === 'map') {\r\n this.initializeOverviewView();\r\n }\r\n\r\n }\r\n this.isiPad = navigator.userAgent.indexOf('iPad') != -1\r\n // Load data from HashUrl\r\n if (window.location.hash !== '') {\r\n if ((window.location.hash).indexOf('#mode=map') < 0) {\r\n this.mode = 'list';\r\n this.activeFilters = this.getFiltersFromHash();\r\n } else {\r\n this.activeFilters = this.newFilters();\r\n this.selectedPhaseId = this.getPhaseIdFromHash();\r\n }\r\n } else {\r\n this.activeFilters = this.newFilters();\r\n }\r\n\r\n window.onpopstate = () => {\r\n this.activeFilters = this.getFiltersFromHash();\r\n }\r\n\r\n window.addEventListener('resize', () => {\r\n if (window.innerWidth > 765) {\r\n this.setFilterVisibility();\r\n }\r\n\r\n });\r\n\r\n if (window.innerWidth < 765) {\r\n this.mode = 'list';\r\n } else {\r\n Vue.nextTick(() => {\r\n fAccordion();\r\n });\r\n }\r\n\r\n },\r\n computed: {\r\n filteredObjectTypes() {\r\n return this.filterObjectTypes(this.allObjectTypes);\r\n },\r\n\r\n /**\r\n * ObjetTypes to show when there are no filter results\r\n */\r\n noResultsObjectTypes() {\r\n return this.getNoResultObjectTypes(this.allObjectTypes)\r\n },\r\n\r\n /**\r\n * Computed that creates the available filter types/values\r\n */\r\n filterGroups() {\r\n return {\r\n priceRange: this.getFilterPriceRange(),\r\n objectTypes: this.getObjectTypesOptions(),\r\n phases: this.overviewData.Phases.map((phase) => {\r\n let phaseFilter = {};\r\n phaseFilter.Name = phase.Name;\r\n phaseFilter.NboId = phase.NboId;\r\n return phaseFilter;\r\n }),\r\n livingSurface: this.getlivingSurfaceFilterSteps(),\r\n plotArea: this.getPlotAreaFilterSteps(),\r\n parkingOptions: this.getParkingFilterOptions(),\r\n gardenPosition: this.getGardenFilterOptions(),\r\n bedrooms: this.getBedroomFilterOptions(),\r\n }\r\n },\r\n hasActiveFilters() {\r\n return JSON.stringify(this.activeFilters) !== JSON.stringify(this.newFilters());\r\n }\r\n },\r\n watch: {\r\n /**\r\n * Get the objectTypes when selectedPhaseId changes\r\n */\r\n selectedPhaseId(id) {\r\n const detailMap = document.querySelectorAll('.js-objectdetail-type-map');\r\n\r\n // Clear any active Phase filter first\r\n this.activeFilters.phases = [];\r\n\r\n if (this.selectedPhaseId != null) {\r\n // Set phase filter\r\n this.activeFilters.phases.push(this.overviewData.Phases.find((phase) => phase.NboId === id).Name)\r\n // Get the objectTypes for selected phase\r\n this.selectedPhaseObjectTypes = this.getObjectTypesByPhaseId(id);\r\n\r\n Vue.nextTick(() => {\r\n detailMap.forEach((map) => {\r\n map.classList.remove('hide');\r\n });\r\n this.initializeDetailView();\r\n });\r\n } else {\r\n detailMap.forEach((map) => {\r\n map.classList.add('hide');\r\n });\r\n }\r\n },\r\n // Execute when activeFilters changes\r\n activeFilters: {\r\n handler: function () {\r\n this.updateHashUrl();\r\n },\r\n deep: true\r\n },\r\n mode(newMode) {\r\n if (newMode === 'list') {\r\n if (window.innerWidth > 765) {\r\n this.showFilters = true;\r\n }\r\n }\r\n\r\n this.updateHashUrl();\r\n }\r\n },\r\n methods: {\r\n initAccordion() {\r\n const accordions = querySelectorAll('js-accordion-filter');\r\n accordions.forEach((accordion) => {\r\n fAccordion();\r\n });\r\n },\r\n setHeaderText() {\r\n if (this.selectedPhaseId !== null) {\r\n this.overviewData.Phases.forEach((phase) => {\r\n if (phase.NboId === this.selectedPhaseId) {\r\n this.headerText = phase.HeaderStatus;\r\n }\r\n });\r\n } else {\r\n this.headerText = this.overviewData.HeaderStatus;\r\n }\r\n },\r\n initializeOverviewView() {\r\n Vue.nextTick(() => {\r\n const mapOverview = document.querySelector('.js-objecttype-map-overview');\r\n const mapOverviewImage = document.querySelector('.js-objecttype-map-image-overview');\r\n // this.mapAreas = document.querySelectorAll('.objectdetail-map__area-overview');\r\n\r\n window.addEventListener('resize', () => {\r\n this.initializeMap(mapOverview, mapOverviewImage, false);\r\n });\r\n\r\n imagesLoaded(mapOverview, () => {\r\n this.initializeMap(mapOverview, mapOverviewImage);\r\n });\r\n\r\n this.setHeaderText();\r\n this.removeHilightAreasByObjectTypeNboId();\r\n });\r\n },\r\n initializeDetailView() {\r\n const allMaps = document.querySelectorAll('.js-objecttype-map');\r\n const allMapImage = document.querySelectorAll('.js-objecttype-map-image');\r\n\r\n let map = null;\r\n let mapImage = null;\r\n\r\n for(let i = 0; i < allMaps.length; i+=1) {\r\n if(allMaps[i].dataset.detailImagePhaseId === this.selectedPhaseId) {\r\n map = allMaps[i];\r\n break;\r\n }\r\n }\r\n\r\n for(let x = 0; x < allMapImage.length; x+=1) {\r\n if(allMapImage[x].dataset.detailMapPhaseId === this.selectedPhaseId) {\r\n mapImage = allMapImage[x];\r\n break;\r\n }\r\n }\r\n\r\n this.plotTypesList = document.querySelectorAll('.js-plot-type-item');\r\n this.statusFilters = document.querySelectorAll('.js-map-filter');\r\n\r\n this.toggleDetailMapView();\r\n\r\n window.addEventListener('resize', () => {\r\n this.initializeMap(map, mapImage, false);\r\n });\r\n\r\n imagesLoaded(map, () => {\r\n if (map !== null) {\r\n this.initializeMap(map, mapImage);\r\n }\r\n });\r\n\r\n Vue.nextTick(() => {\r\n if (document.querySelectorAll('.pos-sticky') !== null && document.querySelectorAll('.pos-sticky').length) {\r\n var stickyElements = document.querySelectorAll('.pos-sticky');\r\n Stickyfill.add(stickyElements);\r\n // stickybits(stickyElements);\r\n\r\n }\r\n });\r\n\r\n // fAccordion();\r\n this.setHeaderText();\r\n },\r\n initializeMap(map, mapImage) {\r\n\r\n\r\n if (map !== null && this.mode === 'map') {\r\n imageMapResize(map);\r\n\r\n $(mapImage).maphilight({\r\n fill: true,\r\n fillColor: '0be900',\r\n fillOpacity: 0.3,\r\n stroke: true,\r\n strokeColor: '002a5c',\r\n strokeOpacity: 1,\r\n strokeWidth: 1,\r\n fade: true,\r\n alwaysOn: false,\r\n neverOn: false,\r\n groupBy: false,\r\n wrapClass: true,\r\n shadow: true,\r\n shadowX: 0,\r\n shadowY: 0,\r\n shadowRadius: 6,\r\n shadowColor: '000000',\r\n shadowOpacity: 0.8,\r\n shadowPosition: 'outside',\r\n shadowFrom: false,\r\n overlay: false,\r\n });\r\n }\r\n },\r\n /**\r\n * @param {string} id - The NboId of a phase\r\n */\r\n setSelectedPhaseId(id) {\r\n this.selectedPhaseId = id;\r\n },\r\n /**\r\n * @param {string} id - The NboId of a phase\r\n * @param {string} url - The redirect Url (if not filled it is null)\r\n * When it is filled redirect to that url\r\n * When empty, proceed normal path (set selectedPhaseId)\r\n */\r\n redirectToPhaseOrObjectType(id, url = null, e) {\r\n const target = document.querySelector(`[data-phase-id=\"${id}\"]`);\r\n\r\n if(window.innerWidth > 700 && window.innerWidth < 1367 && this.body.classList.contains('touch-device')) {\r\n if(target === this.currentPhase || this.currentPhase === null) {\r\n if(target.classList.contains('clicked')) {\r\n if(url !== null && url.length > 0) {\r\n window.location.href = url;\r\n } else {\r\n this.setSelectedPhaseId(id);\r\n }\r\n target.classList.remove('clicked');\r\n } else {\r\n this.hightLightActualPlot(id);\r\n target.classList.add('clicked');\r\n }\r\n } else {\r\n this.currentPhase.classList.remove('clicked');\r\n target.classList.add('clicked');\r\n this.hightLightActualPlot(id);\r\n }\r\n\r\n } else {\r\n if(url !== null && url.length > 0) {\r\n window.location.href = url;\r\n } else {\r\n this.setSelectedPhaseId(id);\r\n }\r\n }\r\n\r\n this.currentPhase = target;\r\n\r\n },\r\n goToDetailView(url, id, e, plot = null) {\r\n //als de target niet gelijk is aan de huidige dan moet je bij de huidige de clicked er vanaf halen\r\n const target = document.querySelector(`[data-id=\"${id}\"]`);\r\n\r\n\r\n if(window.innerWidth > 700 && window.innerWidth < 1367 && this.body.classList.contains('touch-device')) {\r\n if(target === this.current || this.current === null) {\r\n if(target.classList.contains('clicked')) {\r\n window.location.href = url;\r\n target.classList.remove('clicked');\r\n } else {\r\n target.classList.add('clicked');\r\n this.hightLightActualPlot(id, plot);\r\n }\r\n } else {\r\n this.current.classList.remove('clicked');\r\n target.classList.add('clicked');\r\n this.hightLightActualPlot(id, plot);\r\n }\r\n } else {\r\n window.location.href = url;\r\n }\r\n\r\n this.current = target;\r\n },\r\n /**\r\n * Gets the ObjectTypes of a Phase by NboId and selects the phase\r\n * @param {string} id - The NboId of a phase\r\n */\r\n getObjectTypesByPhaseId(id) {\r\n const selectedPhase = this.overviewData.Phases.filter((phase) => {\r\n return phase.NboId === id;\r\n });\r\n\r\n return selectedPhase[0].ObjectTypes;\r\n },\r\n hightLightActualPlot(id, plot = null) {\r\n var selectedPlotId = plot !== null ? plot.NboId : -1;\r\n\r\n if (this.selectedPhaseId !== null) {\r\n const objectType = this.selectedPhaseObjectTypes.filter((objectType) => {\r\n return objectType.NboId === id;\r\n });\r\n\r\n if (this.activeFilters.hideSoldObjectTypes && objectType.length) {\r\n let plotsToHighlight = objectType[0].Plots.filter((plot) => {\r\n return plot.Status !== 'IsSold';\r\n });\r\n\r\n if (plotsToHighlight.length > 0) {\r\n plotsToHighlight.forEach((plot) => {\r\n let objectData = $(`#area-${plot.NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = true;\r\n objectData.fillOpacity = plot.NboId === selectedPlotId ? 0.6 : 0.3;\r\n $(`#area-${plot.NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n });\r\n }\r\n\r\n if (plot !== null) {\r\n if (plot.Status === 'IsSold') {\r\n if (this.activeStatusFilters.length > 0) {\r\n for (let i = 0; i < this.activeStatusFilters.length; i += 1) {\r\n objectType[0].Plots.forEach((plot) => {\r\n if (plot.Status !== this.activeStatusFilters[i]) {\r\n let objectData = $(`#area-${plot.NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = false;\r\n objectData.neverOn = true;\r\n objectData.fillOpacity = plot.NboId === selectedPlotId ? 0.6 : 0.3;\r\n $(`#area-${plot.NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n } else {\r\n return;\r\n }\r\n });\r\n }\r\n } else {\r\n objectType[0].Plots.forEach((plot) => {\r\n let objectData = $(`#area-${plot.NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = false;\r\n objectData.neverOn = true;\r\n objectData.fillOpacity = plot.NboId === selectedPlotId ? 0.6 : 0.3;\r\n $(`#area-${plot.NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n });\r\n }\r\n }\r\n }\r\n } else {\r\n if (objectType[0] !== undefined) {\r\n objectType[0].Plots.forEach((plot) => {\r\n let objectData = $(`#area-${plot.NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = true;\r\n objectData.fillOpacity = plot.NboId === selectedPlotId ? 0.6 : 0.3;\r\n $(`#area-${plot.NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n });\r\n }\r\n\r\n }\r\n\r\n if (objectType[0] !== undefined) {\r\n this.highlightListItem(objectType[0].NboId, plot);\r\n }\r\n } else {\r\n if (window.innerWidth > 765) {\r\n this.overviewData.Phases.forEach((phase) => {\r\n if (phase.NboId === id) {\r\n let objectData = $(`#area-${phase.NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = true;\r\n objectData.fillOpacity = plot.NboId === selectedPlotId ? 0.6 : 0.3;\r\n $(`#area-${phase.NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n }\r\n });\r\n }\r\n }\r\n },\r\n /**\r\n * Highlight all the plot areas on the map that belong to a specific objectType\r\n * @param {string} id - The NboId of an ObjectType\r\n */\r\n hilightAreasByObjectTypeNboId(id, plot = null) {\r\n if (window.innerWidth > 700 && !this.body.classList.contains('touch-device')) {\r\n this.hightLightActualPlot(id, plot);\r\n }\r\n },\r\n removeHilightAreasByObjectTypeNboId(objectType = null) {\r\n const mapAreas = document.querySelectorAll('.objectdetail-map__area');\r\n\r\n if (this.activeStatusFilters.length > 0) {\r\n\r\n mapAreas.forEach((area) => {\r\n let isActiveFilter = this.activeStatusFilters.includes(area.dataset.status);\r\n\r\n if(!isActiveFilter) {\r\n let objectData = $(area).data('maphilight') || {};\r\n objectData.alwaysOn = false;\r\n objectData.fillOpacity = 0.3;\r\n $(area).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n }\r\n });\r\n } else {\r\n mapAreas.forEach((area) => {\r\n let objectData = $(area).data('maphilight') || {};\r\n objectData.alwaysOn = false;\r\n objectData.fillOpacity = 0.3;\r\n $(area).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n });\r\n }\r\n },\r\n hilightAreasByObjectTypeOnFilter(status) {\r\n let filterActive = false;\r\n for (let s = 0; s < this.statusFilters.length; s += 1) {\r\n if (this.statusFilters[s].dataset.status === status) {\r\n if (this.statusFilters[s].classList.contains('is-active')) {\r\n this.statusFilters[s].classList.remove('is-active');\r\n filterActive = false;\r\n let index = this.activeStatusFilters.indexOf(status);\r\n this.activeStatusFilters.splice(index, 1);\r\n\r\n } else {\r\n this.statusFilters[s].classList.add('is-active');\r\n filterActive = true;\r\n\r\n this.activeStatusFilters.push(status);\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.selectedPhaseObjectTypes.length; i += 1) {\r\n let objectType = this.selectedPhaseObjectTypes[i];\r\n\r\n for (let p = 0; p < objectType.Plots.length; p += 1) {\r\n if (objectType.Plots[p].Status === status) {\r\n if (filterActive) {\r\n let objectData = $(`#area-${objectType.Plots[p].NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = true;\r\n objectData.fillOpacity = 0.3;\r\n $(`#area-${objectType.Plots[p].NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n } else {\r\n let objectData = $(`#area-${objectType.Plots[p].NboId}`).data('maphilight') || {};\r\n objectData.alwaysOn = false;\r\n objectData.fillOpacity = 0.3;\r\n $(`#area-${objectType.Plots[p].NboId}`).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n }\r\n }\r\n }\r\n }\r\n },\r\n // Todo: replace to app.js\r\n getPlotColor(plot) {\r\n switch (plot.Status) {\r\n case \"IsSoonForSale\":\r\n return \"4184dd\";\r\n case \"IsForSale\":\r\n return \"4DFF9A\";\r\n case \"IsSold\":\r\n return \"FF4D5E\";\r\n case \"IsInOption\":\r\n return \"FFAC4D\";\r\n default:\r\n return \"4DFF9A\";\r\n }\r\n },\r\n /**\r\n *\r\n * @param {string} mode\r\n */\r\n setMode(mode) {\r\n this.mode = mode;\r\n\r\n window.localStorage.setItem('mode', mode);\r\n\r\n this.overviewData.Phases.forEach(phase => {\r\n Vue.set(phase, 'Tooltip', false);\r\n });\r\n\r\n if (window.innerWidth > 765) {\r\n this.showFilters = true;\r\n }\r\n\r\n Vue.nextTick(() => {\r\n if (this.mode === 'list' && this.showFilters === true) {\r\n fAccordion();\r\n this.accordionInitialized = true;\r\n }\r\n if (this.mode === 'map') {\r\n if (this.selectedPhaseId !== null) {\r\n this.initializeDetailView();\r\n } else {\r\n this.initializeOverviewView();\r\n }\r\n }\r\n });\r\n\r\n },\r\n highlightListItem(NboId, hoveredPlot = null, overview = false) {\r\n if (overview === false) {\r\n for (let i = 0; i < this.plotTypesList.length; i += 1) {\r\n if (this.plotTypesList[i].getAttribute('data-id') === NboId) {\r\n if (hoveredPlot !== null && hoveredPlot !== undefined) {\r\n if (hoveredPlot.Status === 'IsSold' && this.activeFilters.hideSoldObjectTypes) {\r\n this.plotTypesList[i].classList.remove('hover');\r\n return;\r\n } else {\r\n if (!this.plotTypesList[i].classList.contains('hover')) {\r\n this.plotTypesList[i].classList.add('hover');\r\n } else {\r\n this.plotTypesList[i].classList.remove('hover');\r\n }\r\n }\r\n\r\n } else {\r\n if (!this.plotTypesList[i].classList.contains('hover')) {\r\n this.plotTypesList[i].classList.add('hover');\r\n } else {\r\n this.plotTypesList[i].classList.remove('hover');\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const phaseList = document.querySelectorAll('.js-phase-card');\r\n for (let i = 0; i < phaseList.length; i += 1) {\r\n if (phaseList[i].getAttribute('data-phase-id') === NboId) {\r\n if (!phaseList[i].classList.contains('hover')) {\r\n phaseList[i].classList.add('hover');\r\n } else {\r\n phaseList[i].classList.remove('hover');\r\n }\r\n phaseList[i].addEventListener('mouseleave', () => {\r\n phaseList[i].classList.remove('hover');\r\n });\r\n phaseList[i].addEventListener('mouseenter', () => {\r\n phaseList[i].classList.add('hover');\r\n });\r\n\r\n }\r\n }\r\n }\r\n },\r\n toggleDetailMapView() {\r\n if (window.innerWidth < 765 && this.selectedPhaseId !== null) {\r\n let before = document.querySelector('.js-plot-type-item');\r\n let element = document.querySelector('.js-objectdetail-type-map');\r\n let parent = before.parentNode;\r\n\r\n parent.insertBefore(element, before);\r\n }\r\n },\r\n togglePhase(phase, triggerHover = false, showPopUp = false) {\r\n if (phase.Coordinates !== \"\" && !phase.Tooltip && window.innerWidth > 765) {\r\n $(`#area-${phase.NboId}`).qtip({\r\n content: {\r\n text: $(`.tooltiptext-${phase.NboId}`),\r\n // button: $(`.tooltip-delete-${plot.PlotNr}`)\r\n },\r\n style: {\r\n classes: `objectdetail-map-tooltip-${phase.NboId} objectdetail-map__qTip objectdetail-map__qTip--overview`\r\n },\r\n position: {\r\n container: $('.js-objectdetail-map'),\r\n effect: function (api, pos, viewport) {\r\n $(this).animate(pos, {\r\n duration: 0,\r\n easing: 'linear',\r\n queue: false,\r\n viewport: true,\r\n });\r\n },\r\n my: 'bottom center',\r\n at: 'top center',\r\n adjust: {\r\n screen: true,\r\n x: 0,\r\n y: 0\r\n },\r\n },\r\n show: {\r\n event: 'mouseover',\r\n ready: true\r\n },\r\n hide: {\r\n event: 'click mouseleave'\r\n }\r\n })\r\n //remove data for other qtip\r\n .removeData('qtip');\r\n\r\n //set plot so it won't create one if it already exist\r\n Vue.set(phase, 'Tooltip', true);\r\n $(`#area-${phase.NboId}`).qtip('toggle', true);\r\n } else {\r\n $(`.objectdetail-map-tooltip-${phase.NboId}`).qtip('toggle', true);\r\n // $(`#area-${phase.NboId}`).mouseover();\r\n }\r\n\r\n if (triggerHover) {\r\n if (showPopUp) {\r\n $(`#area-${phase.NboId}`).mouseover();\r\n this.hoverVisible = true;\r\n } else {\r\n this.removeMapHilights();\r\n this.hoverVisible = false;\r\n $(`#area-${phase.NboId}`).mouseleave();\r\n }\r\n }\r\n },\r\n\r\n removeMapHilights() {\r\n const mapAreas = document.querySelectorAll('.objectdetail-map__area');\r\n mapAreas.forEach((area) => {\r\n let objectData = $(area).data('maphilight') || {};\r\n objectData.alwaysOn = false;\r\n $(area).data('maphilight', objectData).trigger('alwaysOn.maphilight');\r\n });\r\n },\r\n\r\n newFilters() {\r\n return {\r\n minPrice: this.defaultMinPrice || this.allObjectTypes.filter(objectType => objectType.PriceFrom >= 0).reduce((a, b) => (a.PriceFrom < b.PriceFrom) ? a : b).PriceFrom,\r\n maxPrice: this.defaultMaxPrice || this.allObjectTypes.reduce((a, b) => (a.PriceFrom > b.PriceFrom) ? a : b).PriceFrom, // We are filtering PriceFrom not PriceUntil, so getting the highest PriceFrom here\r\n objectTypes: [],\r\n phases: [],\r\n livingSurface: null,\r\n plotArea: null,\r\n parkingOptions: [],\r\n gardenPosition: [],\r\n bedrooms: null,\r\n hideSoldObjectTypes: false,\r\n }\r\n },\r\n\r\n getPhaseIdFromHash() {\r\n let hashItems = window.location.hash.replace('#', '').split('&');\r\n let phaseName;\r\n\r\n for (let iType = 0; iType < hashItems.length; iType += 1) {\r\n const aKeyValues = hashItems[iType].split('=');\r\n if (aKeyValues[0] === 'phase') {\r\n phaseName = decodeURIComponent(aKeyValues[1]);\r\n }\r\n }\r\n\r\n if (phaseName) {\r\n return this.overviewData.Phases.filter((phase) => phase.Name === phaseName)[0].NboId;\r\n }\r\n return this.selectedPhaseId;\r\n },\r\n\r\n getFiltersFromHash() {\r\n let filters = this.newFilters();\r\n const aFilterTypes = window.location.hash.replace('#', '').split('&');\r\n\r\n for (let iType = 0; iType < aFilterTypes.length; iType += 1) {\r\n const aKeyValues = decodeURIComponent(aFilterTypes[iType]).split('=');\r\n\r\n if (Array.isArray(filters[aKeyValues[0]])) {\r\n filters[aKeyValues[0]] = aKeyValues[1].split(';');\r\n } else {\r\n switch (aKeyValues[0]) {\r\n case 'minPrice':\r\n case 'maxPrice':\r\n case 'livingSurface':\r\n case 'bedrooms':\r\n case 'plotArea':\r\n filters[aKeyValues[0]] = parseFloat(aKeyValues[1]);\r\n break;\r\n case 'hideSoldObjectTypes':\r\n filters[aKeyValues[0]] = (aKeyValues[1] === 'true');\r\n break;\r\n default:\r\n filters[aKeyValues[0]] = aKeyValues[1];\r\n }\r\n }\r\n }\r\n\r\n return filters;\r\n },\r\n\r\n getJsonFilterVals() {\r\n let sHash = '';\r\n let sPrevArrFilter = '';\r\n const activeFilters = JSON.parse(JSON.stringify(this.activeFilters));\r\n const oActiveFilterKeys = Object.keys(activeFilters);\r\n\r\n oActiveFilterKeys.forEach((filterType) => {\r\n if (Array.isArray(activeFilters[filterType])) {\r\n activeFilters[filterType] = activeFilters[filterType].filter((v, i) => activeFilters[filterType].indexOf(v) === i);\r\n\r\n if (activeFilters[filterType].length > 0) {\r\n const aFilterVals = activeFilters[filterType];\r\n\r\n if (sHash === '') {\r\n sHash = `${filterType}=${encodeURIComponent(activeFilters[filterType][0])}`;\r\n } else if ((sHash !== '') && (sPrevArrFilter !== filterType)) {\r\n sHash += `&${filterType}=${encodeURIComponent(activeFilters[filterType][0])}`;\r\n }\r\n\r\n for (let iFilter = 0; iFilter < aFilterVals.length; iFilter += 1) {\r\n if (iFilter > 0) {\r\n sHash += `;${encodeURIComponent(aFilterVals[iFilter])}`;\r\n }\r\n }\r\n sPrevArrFilter = filterType;\r\n }\r\n } else if (activeFilters[filterType] !== null) {\r\n if (sHash !== '') {\r\n sHash += '&';\r\n }\r\n\r\n sHash += `${filterType}=${encodeURIComponent(activeFilters[filterType])}`;\r\n }\r\n });\r\n\r\n return sHash;\r\n },\r\n\r\n updateHashUrl() {\r\n if (this.mode === 'list') {\r\n if (this.hasActiveFilters) {\r\n const sHashUrl = `#${this.getJsonFilterVals()}`;\r\n if (window.location.hash !== sHashUrl) {\r\n if (sHashUrl !== '#') {\r\n window.history.pushState(this.activeFilters, 'deeplink', sHashUrl)\r\n } else {\r\n window.history.replaceState(this.activeFilters, 'initialState', window.location.pathname);\r\n }\r\n }\r\n } else {\r\n window.history.pushState(this.activeFilters, 'deeplink', window.location.pathname)\r\n }\r\n } else {\r\n let sHashUrl = `#mode=${this.mode}`;\r\n if (this.activeFilters.phases.length) {\r\n sHashUrl += `&phase=${this.activeFilters.phases[0]}`;\r\n }\r\n window.history.pushState(this.activeFilters, 'deeplink', sHashUrl)\r\n }\r\n },\r\n\r\n /**\r\n * Filter the objectTypes with activeFilters\r\n * @param {array} objectTypes\r\n * @param {string} type - Used for checking if there are results if the user WOULD check a filter, used by hasFilterResults()\r\n * @param {*} filterValue - Used for checking if there are results if the user WOULD check a filter used by hasFilterResults()\r\n */\r\n filterObjectTypes(objectTypes, type = null, filterValue = null) {\r\n let filteredObjectTypes = objectTypes;\r\n // Sold Objects Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n if (type === 'HideSold') {\r\n return filterValue ? (objectType.PlotsForSale > 0 || objectType.PlotsInOption > 0) : (objectType.PlotsForSale >= 0 || objectType.PlotsInOption >= 0);\r\n } else {\r\n return this.activeFilters.hideSoldObjectTypes ? (objectType.PlotsForSale > 0 || objectType.PlotsInOption > 0) : (objectType.PlotsForSale >= 0 || objectType.PlotsInOption >= 0);\r\n }\r\n });\r\n\r\n // Price Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n if (type === 'MinPrice') {\r\n return ((objectType.PriceFrom >= filterValue && objectType.PriceFrom <= this.activeFilters.maxPrice) || objectType.CustomPriceLabel !== '');\r\n } else if (type === 'MaxPrice') {\r\n return ((objectType.PriceFrom >= this.activeFilters.minPrice && objectType.PriceFrom <= filterValue) || objectType.CustomPriceLabel !== '');\r\n } else {\r\n return ((objectType.PriceFrom >= this.activeFilters.minPrice && objectType.PriceFrom <= this.activeFilters.maxPrice) || objectType.CustomPriceLabel !== '');\r\n }\r\n });\r\n\r\n // Phase Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n if (type === 'Type') {\r\n return objectType.ObjectType === filterValue;\r\n } else if (this.activeFilters.objectTypes.length > 0) {\r\n return this.activeFilters.objectTypes.includes(objectType.ObjectType);\r\n }\r\n return filteredObjectTypes;\r\n });\r\n\r\n // Phase Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n if (type === 'Phase') {\r\n return objectType.Phase === filterValue;\r\n } else if (this.activeFilters.phases.length > 0) {\r\n return this.activeFilters.phases.includes(objectType.Phase);\r\n }\r\n return filteredObjectTypes;\r\n });\r\n\r\n // LivingSurface Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n if (type === 'LivingSurface') {\r\n return objectType.LivingSurface >= filterValue;\r\n } else {\r\n return objectType.LivingSurface >= this.activeFilters.livingSurface;\r\n }\r\n });\r\n\r\n // PlotArea Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n let plots = objectType.Plots.filter((plot) => {\r\n if (type === 'PlotArea') {\r\n return plot.PlotArea >= filterValue;\r\n } else {\r\n return plot.PlotArea >= this.activeFilters.plotArea;\r\n }\r\n });\r\n return plots.length\r\n });\r\n\r\n // Parking Filter\r\n filteredObjectTypes = filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n let plots = objectType.Plots.filter((plot) => {\r\n if (type === 'ParkingOptions') {\r\n return plot.PlotParking === filterValue;\r\n } else if (this.activeFilters.parkingOptions.length > 0) {\r\n return this.activeFilters.parkingOptions.includes(plot.PlotParking);\r\n } else {\r\n return true;\r\n }\r\n });\r\n\r\n return plots.length\r\n });\r\n\r\n // GardenPosition Filter\r\n filteredObjectTypes = filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n let plots = objectType.Plots.filter((plot) => {\r\n if (type === 'GardenPosition') {\r\n return plot.PlotGarden === filterValue;\r\n } else if (this.activeFilters.gardenPosition.length > 0) {\r\n return this.activeFilters.gardenPosition.includes(plot.PlotGarden);\r\n } else {\r\n return true;\r\n }\r\n });\r\n\r\n return plots.length\r\n });\r\n\r\n // Bedroom Filter\r\n filteredObjectTypes = filteredObjectTypes.filter((objectType) => {\r\n let plots = objectType.Plots.filter((plot) => {\r\n if (type === 'Bedrooms') {\r\n return plot.PlotBedrooms >= filterValue;\r\n } else {\r\n return plot.PlotBedrooms >= this.activeFilters.bedrooms;\r\n }\r\n });\r\n return plots.length\r\n });\r\n\r\n return filteredObjectTypes;\r\n\r\n },\r\n\r\n /**\r\n *\r\n * @param {array} objectTypes\r\n */\r\n getNoResultObjectTypes(objectTypes) {\r\n if (this.filteredObjectTypes.length === 0) {\r\n // Sort on PriceFrom\r\n let noResultsObjectTypes = objectTypes.sort((a, b) => a.PriceFrom - b.PriceFrom);\r\n let objectTypesToShow = [];\r\n\r\n if (this.activeFilters.objectTypes.length) {\r\n // Get ObjectTypes of the same type and where Plots are for Sale\r\n objectTypesToShow = noResultsObjectTypes.filter((objectType) => {\r\n if (this.activeFilters.objectTypes.includes(objectType.ObjectType) && objectType.PlotsForSale > 0){\r\n return objectType;\r\n }\r\n });\r\n\r\n // If there are no ObjectTypes for Sale, get the objectTypes where there are PlotsInOption\r\n if (!objectTypesToShow.length) {\r\n objectTypesToShow = noResultsObjectTypes.filter((objectType) => {\r\n return this.activeFilters.objectTypes.includes(objectType.ObjectType) && objectType.PlotsInOption > 0;\r\n });\r\n }\r\n } else {\r\n let closestSmaller;\r\n let closestLarger;\r\n noResultsObjectTypes.filter((objectType => objectType.PlotsForSale > 0)).some((objectType) => {\r\n if (objectType.PriceFrom >= this.activeFilters.minPrice) {\r\n return true;\r\n }\r\n closestSmaller = objectType;\r\n });\r\n\r\n noResultsObjectTypes.filter((objectType => objectType.PlotsForSale > 0)).reverse().some((objectType) => {\r\n if (objectType.PriceFrom <= this.activeFilters.maxPrice) {\r\n return true;\r\n }\r\n closestLarger = objectType;\r\n });\r\n\r\n if (typeof closestSmaller !== 'undefined') {\r\n objectTypesToShow.push(closestSmaller);\r\n }\r\n\r\n if (typeof closestLarger !== 'undefined') {\r\n objectTypesToShow.push(closestLarger);\r\n }\r\n\r\n // Return closest Min and closest Max\r\n return objectTypesToShow;\r\n }\r\n\r\n if (objectTypesToShow.length && this.activeFilters.objectTypes.length) {\r\n // If there is a price filter active\r\n if (this.activeFilters.minPrice !== this.defaultMinPrice ||\r\n this.activeFilters.maxPrice !== this.defaultMaxPrice) {\r\n return objectTypesToShow;\r\n } else {\r\n let objectTypesByPrice = [];\r\n\r\n // ObjectTypes are already sorted by price\r\n const lowest = objectTypesToShow[0];\r\n const highest = objectTypesToShow[objectTypesToShow.length - 1];\r\n const average = objectTypesToShow[Math.floor(objectTypesToShow.length / 2)];\r\n\r\n objectTypesByPrice.push(lowest, average, highest);\r\n\r\n return objectTypesByPrice\r\n }\r\n }\r\n }\r\n\r\n return [];\r\n },\r\n\r\n /**\r\n * Return LivingSurface filter values based on difference between min/max\r\n */\r\n getlivingSurfaceFilterSteps() {\r\n const uniqueLivingSurfaceValues = [...new Set(this.allObjectTypes.map(objectType => objectType.LivingSurface))];\r\n const minLivingSurface = Math.floor(Math.min(...uniqueLivingSurfaceValues) / 10) * 10;\r\n const maxLivingSurface = Math.ceil(Math.max(...uniqueLivingSurfaceValues) / 10) * 10 - 10;\r\n\r\n let livingSurfaceFilterSteps = [];\r\n let livingSurfaceDifference = maxLivingSurface - minLivingSurface;\r\n\r\n livingSurfaceFilterSteps.push(minLivingSurface);\r\n\r\n if (livingSurfaceDifference < 10) {\r\n livingSurfaceFilterSteps = [];\r\n } else if (livingSurfaceDifference >= 10 && livingSurfaceDifference < 25) {\r\n livingSurfaceFilterSteps = this.createInterval(minLivingSurface, maxLivingSurface, 5, livingSurfaceFilterSteps);\r\n } else if (livingSurfaceDifference >= 25 && livingSurfaceDifference < 50) {\r\n livingSurfaceFilterSteps = this.createInterval(minLivingSurface, maxLivingSurface, 10, livingSurfaceFilterSteps);\r\n } else {\r\n livingSurfaceFilterSteps = this.createInterval(minLivingSurface, maxLivingSurface, 20, livingSurfaceFilterSteps);\r\n }\r\n\r\n return livingSurfaceFilterSteps.sort((a, b) => a - b);\r\n },\r\n\r\n\r\n /**\r\n * Return PlotArea filter values based on difference between min/max\r\n */\r\n getPlotAreaFilterSteps() {\r\n let plotAreasPerObjectType = []\r\n\r\n // Get the plotArea for each plot in ObjectType\r\n this.allObjectTypes.forEach((objectType) => {\r\n plotAreasPerObjectType = plotAreasPerObjectType.concat([...new Set(objectType.Plots.map(plot => plot.PlotArea))]);\r\n });\r\n\r\n const uniquePlotAreaValues = [...new Set(plotAreasPerObjectType)];\r\n const minPlotArea = Math.floor(Math.min(...uniquePlotAreaValues) / 10) * 10;\r\n const maxPlotArea = Math.ceil(Math.max(...uniquePlotAreaValues) / 10) * 10;\r\n\r\n let plotAreaFilterSteps = [];\r\n let areaDifference = maxPlotArea - minPlotArea;\r\n\r\n plotAreaFilterSteps.push(minPlotArea);\r\n\r\n if (areaDifference < 25) {\r\n plotAreaFilterSteps = [];\r\n } else if (areaDifference >= 25 && areaDifference < 50) {\r\n plotAreaFilterSteps = this.createInterval(minPlotArea, maxPlotArea, 5, plotAreaFilterSteps);\r\n } else if (areaDifference >= 50 && areaDifference < 100) {\r\n plotAreaFilterSteps = this.createInterval(minPlotArea, maxPlotArea, 10, plotAreaFilterSteps);\r\n } else if (areaDifference >= 100 && areaDifference < 200) {\r\n plotAreaFilterSteps = this.createInterval(minPlotArea, maxPlotArea, 20, plotAreaFilterSteps);\r\n } else {\r\n plotAreaFilterSteps = this.createInterval(minPlotArea, maxPlotArea, 50, plotAreaFilterSteps);\r\n }\r\n\r\n return plotAreaFilterSteps.sort((a, b) => a - b);\r\n },\r\n\r\n getFilterPriceRange() {\r\n const minPrice = Math.floor(this.allObjectTypes.filter(objectType => objectType.PriceFrom >= 0 && (!objectType.CustomPriceLabel || objectType.CustomPriceLabel.length === 0)).reduce((a, b) => (a.PriceFrom < b.PriceFrom) ? a : b).PriceFrom / 5000) * 5000;\r\n const maxPrice = Math.ceil(this.allObjectTypes.reduce((a, b) => (a.PriceFrom > b.PriceFrom) ? a : b).PriceFrom / 5000) * 5000;\r\n\r\n let priceRange = [];\r\n let priceDifference = maxPrice - minPrice;\r\n priceRange.push(minPrice);\r\n\r\n if (priceDifference < 100000) {\r\n priceRange = this.createInterval(minPrice, maxPrice + 10000, 10000, priceRange);\r\n } else if (priceDifference >= 100000 && priceDifference < 200000) {\r\n priceRange = this.createInterval(minPrice, maxPrice + 20000, 20000, priceRange);\r\n } else if (priceDifference >= 200000 && priceDifference < 300000) {\r\n priceRange = this.createInterval(minPrice, maxPrice + 25000, 25000, priceRange);\r\n } else {\r\n priceRange = this.createInterval(minPrice, maxPrice + 50000, 50000, priceRange);\r\n }\r\n\r\n this.defaultMinPrice = minPrice;\r\n this.defaultMaxPrice = Math.max(...priceRange);\r\n\r\n return priceRange;\r\n },\r\n\r\n getObjectTypesOptions() {\r\n return [...new Set(this.allObjectTypes.map((objectType) => objectType.ObjectType))];\r\n },\r\n\r\n getGardenFilterOptions() {\r\n let plotGardenPerObjectType = [];\r\n\r\n // Get the PlotGarden for each plot in ObjectType\r\n this.allObjectTypes.forEach((objectType) => {\r\n plotGardenPerObjectType = plotGardenPerObjectType.concat([...new Set(objectType.Plots.map(plot => plot.PlotGarden))]);\r\n });\r\n\r\n const uniqueGardenOptionsValues = [...new Set(plotGardenPerObjectType)].sort();\r\n return uniqueGardenOptionsValues;\r\n },\r\n\r\n getParkingFilterOptions() {\r\n let plotParkingPerObjectType = [];\r\n\r\n // Get the plotArea for each plot in ObjectType\r\n this.allObjectTypes.forEach((objectType) => {\r\n plotParkingPerObjectType = plotParkingPerObjectType.concat([...new Set(objectType.Plots.map(plot => plot.PlotParking))]);\r\n });\r\n\r\n const uniqueParkingOptionsValues = [...new Set(plotParkingPerObjectType)];\r\n return uniqueParkingOptionsValues;\r\n },\r\n\r\n getBedroomFilterOptions() {\r\n let plotBedroomsPerObjectType = [];\r\n\r\n // Get the plotArea for each plot in ObjectType\r\n this.allObjectTypes.forEach((objectType) => {\r\n plotBedroomsPerObjectType = plotBedroomsPerObjectType.concat([...new Set(objectType.Plots.map(plot => plot.PlotBedrooms))]);\r\n });\r\n\r\n const uniqueParkingOptionsValues = [...new Set(plotBedroomsPerObjectType)].sort();\r\n return uniqueParkingOptionsValues;\r\n },\r\n\r\n /**\r\n * Creates a new array with an interval between steps till it reaches the max value\r\n * @param {number} min - Min Value\r\n * @param {number} max - Max Value\r\n * @param {number} interval - Steps\r\n * @param {Array} array\r\n */\r\n createInterval(min, max, interval, array) {\r\n let newValue = min + interval;\r\n while (newValue < max) {\r\n array.push(newValue);\r\n newValue = newValue + interval;\r\n }\r\n return array;\r\n },\r\n\r\n /**\r\n * Called for each filter option to check if it would give results\r\n * @param {string} type\r\n * @param {*} filterValue\r\n */\r\n hasFilterResults(type, filterValue) {\r\n const results = this.filterObjectTypes(this.allObjectTypes, type, filterValue);\r\n if (!results.length) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n clearFilter(type, index) {\r\n switch (type) {\r\n case 'price':\r\n this.activeFilters.minPrice = this.defaultMinPrice;\r\n this.activeFilters.maxPrice = this.defaultMaxPrice;\r\n break;\r\n case 'type':\r\n this.activeFilters.objectTypes.splice(index, 1);\r\n break;\r\n case 'phase':\r\n this.activeFilters.phases.splice(index, 1);\r\n break;\r\n case 'livingSurface':\r\n this.activeFilters.livingSurface = null;\r\n break;\r\n case 'plotArea':\r\n this.activeFilters.plotArea = null;\r\n break;\r\n case 'parking':\r\n this.activeFilters.parkingOptions.splice(index, 1);\r\n break;\r\n case 'garden':\r\n this.activeFilters.gardenPosition.splice(index, 1);\r\n break;\r\n case 'bedrooms':\r\n this.activeFilters.bedrooms = null;\r\n break;\r\n case 'hideSold':\r\n this.activeFilters.hideSoldObjectTypes = !this.activeFilters.hideSoldObjectTypes;\r\n break;\r\n }\r\n },\r\n\r\n clearAllFilters() {\r\n this.activeFilters = this.newFilters();\r\n },\r\n\r\n /**\r\n * Opens or closes the filters on mobile\r\n */\r\n setFilterVisibility(showFilters) {\r\n if (window.innerWidth < 765) {\r\n this.showFilters = !showFilters;\r\n if (this.showFilters === true && !this.accordionInitialized) {\r\n fAccordion();\r\n this.accordionInitialized = true;\r\n }\r\n } else {\r\n this.showFilters = true;\r\n }\r\n }\r\n }\r\n});\r\n"]}