{"version":3,"file":"filter.store-S2G813FH.js","sources":["../../../../SPAs/POCViteVue/src/store/filter.store.ts"],"sourcesContent":["import { nextTick, reactive } from \"vue\";\r\nimport { defineStore } from \"pinia\";\r\nimport { getBaseEndpoint, baseApiEndpoint } from \"@/config/config\";\r\nimport { FilterOptionsResponseModel } from \"@/services/campayacore-api.service\";\r\n\r\nlet BASE_API = getBaseEndpoint(process.env.NODE_ENV);\r\n\r\n// so that the price calculator works\r\nif (window.location.host === \"localhost:7030\") {\r\n BASE_API = baseApiEndpoint.staging;\r\n}\r\n\r\nexport interface Facilities {\r\n name: string;\r\n value: boolean;\r\n}\r\n\r\nexport interface FilterObject {\r\n adults?: number | undefined;\r\n areaId?: number | undefined;\r\n areaName?: string | undefined;\r\n bathrooms?: number | undefined;\r\n bedrooms?: (number|undefined)[] | undefined;\r\n beds?: number[] | undefined;\r\n bedsFrom?: number | undefined;\r\n bedsTo?: number | undefined;\r\n children?: number | undefined;\r\n infants?: number | undefined;\r\n dateRange?: Date[] | undefined;\r\n distanceToWater?: any | undefined;\r\n facilities?: any | undefined;\r\n flexibleDates?: boolean | undefined;\r\n fromBedrooms?: number | undefined;\r\n fromDate?: Date | undefined;\r\n fromPrice?: number | undefined;\r\n hasActiveFilters: boolean;\r\n houseType?: any | undefined;\r\n kidsFacilities?: string[] | undefined;\r\n otherFacilities?: string[] | undefined;\r\n outdoorFacilities?: string[] | undefined;\r\n payLater?: boolean | undefined;\r\n petsAllowed?: boolean | undefined;\r\n pets?: number | undefined;\r\n priceRange?: (number|undefined)[];\r\n propertyType?: number | undefined;\r\n rooms?: string | undefined;\r\n smokingAllowed?: boolean | undefined;\r\n sortMethod?: number | undefined;\r\n themeId?: number | undefined;\r\n toBedrooms?: number | undefined;\r\n toDate?: Date | undefined;\r\n toPrice?: number | undefined;\r\n mapLoadCounter?: number;\r\n mapZoom?: number;\r\n mapCenter?: any;\r\n hasLastMinuteSearchAvailability?: boolean | undefined;\r\n boostHasLastMinuteSearchAvailability?: boolean | undefined;\r\n privateOwner?: boolean;\r\n flexibleCancellation?: boolean;\r\n filterOptions?: FilterOptionsResponseModel,\r\n isUserZoom?: boolean;\r\n}\r\n\r\nexport const defaultFilterObject: FilterObject = {\r\n mapLoadCounter: 0,\r\n mapCenter: { lng: 0, lat: 40 },\r\n mapZoom: 1,\r\n isUserZoom: false,\r\n hasActiveFilters: false,\r\n areaId: 25,\r\n adults: undefined,\r\n areaName: undefined,\r\n bathrooms: undefined,\r\n beds: [0, 12],\r\n bedsFrom: undefined,\r\n bedsTo: undefined,\r\n bedrooms: [1, undefined],\r\n fromBedrooms: undefined,\r\n toBedrooms: undefined,\r\n children: undefined,\r\n infants: undefined,\r\n dateRange: [new Date(), new Date()],\r\n toDate: undefined,\r\n fromDate: undefined,\r\n distanceToWater: { text: \"Alle\", value: undefined },\r\n facilities: {\r\n ac: undefined,\r\n barbecue: undefined,\r\n coffeeMachine: undefined,\r\n dishwasher: undefined,\r\n fireplace: undefined,\r\n hotTub: undefined,\r\n internet: undefined,\r\n outdoorSpa: undefined,\r\n indoorPool: undefined,\r\n sauna: undefined,\r\n spa: undefined,\r\n tv: undefined,\r\n washingMachine: undefined,\r\n wheelchairFriendly: undefined,\r\n evChargingStation: undefined,\r\n outdoorPool: undefined,\r\n germanChannels: undefined,\r\n dryer: undefined,\r\n scandinavianChannels: undefined,\r\n chromeCast: undefined\r\n },\r\n houseType: {\r\n value: undefined,\r\n },\r\n kidsFacilities: undefined,\r\n outdoorFacilities: undefined,\r\n otherFacilities: undefined,\r\n payLater: undefined,\r\n priceRange: [0, undefined],\r\n fromPrice: undefined,\r\n toPrice: undefined,\r\n propertyType: undefined,\r\n themeId: undefined,\r\n sortMethod: 1,\r\n smokingAllowed: undefined,\r\n petsAllowed: undefined,\r\n pets: undefined,\r\n hasLastMinuteSearchAvailability: undefined,\r\n boostHasLastMinuteSearchAvailability: undefined,\r\n privateOwner: undefined,\r\n flexibleCancellation: undefined,\r\n filterOptions: undefined\r\n};\r\n\r\nexport const useFilterStore= defineStore(\r\n \"filter\",\r\n () => {\r\n // state properties\r\n const filterObject: FilterObject = reactive(\r\n structuredClone(defaultFilterObject)\r\n );\r\n\r\n // actions\r\n /**\r\n * Method for updating the filters based on the url\r\n */\r\n const updateFiltersFromUrl = () => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const paramsObj: any = {};\r\n\r\n urlParams.forEach((value, key) => {\r\n paramsObj[key] = value;\r\n });\r\n\r\n if (paramsObj.areaId) filterObject.areaId = Number(paramsObj.areaId);\r\n if (paramsObj.areaName) filterObject.areaName = paramsObj.areaName;\r\n\r\n filterObject.adults = paramsObj.adults ? Number(paramsObj.adults) : 0;\r\n filterObject.children = paramsObj.children ? Number(paramsObj.children) : 0;\r\n filterObject.pets = paramsObj.pets ? Number(paramsObj.pets) : 0;\r\n\r\n if (paramsObj.petsAllowed === 'true') filterObject.petsAllowed = true;\r\n if (paramsObj.petsAllowed === 'false') filterObject.petsAllowed = false;\r\n if (paramsObj.pets && Number(paramsObj.pets) > 0) filterObject.petsAllowed = true;\r\n if (!paramsObj.petsAllowed && !paramsObj.pets) filterObject.petsAllowed = undefined;\r\n\r\n if (paramsObj.themeId) setFiltersByThemeId(Number(paramsObj.themeId));\r\n\r\n filterObject.fromDate = paramsObj.fromDate ? new Date(paramsObj.fromDate) : undefined;\r\n filterObject.toDate = paramsObj.toDate ? new Date(paramsObj.toDate) : undefined;\r\n };\r\n\r\n /**\r\n * Method for clearing the filters\r\n */\r\n const clearFilters = () => {\r\n filterObject.hasActiveFilters = false;\r\n filterObject.priceRange = [0, 24500];\r\n filterObject.bedrooms = [0, 20];\r\n filterObject.rooms = \"Alle\";\r\n filterObject.distanceToWater.text = \"Alle\";\r\n filterObject.distanceToWater.value = undefined;\r\n filterObject.facilities = structuredClone(defaultFilterObject.facilities);\r\n filterObject.smokingAllowed = undefined;\r\n filterObject.petsAllowed = undefined;\r\n filterObject.payLater = undefined;\r\n filterObject.themeId = undefined;\r\n filterObject.hasLastMinuteSearchAvailability = undefined;\r\n filterObject.boostHasLastMinuteSearchAvailability = undefined;\r\n filterObject.privateOwner = undefined;\r\n filterObject.flexibleCancellation = undefined;\r\n\r\n // remove filters from url\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const paramsObj: any = {};\r\n\r\n urlParams.forEach((value, key) => {\r\n paramsObj[key] = value;\r\n });\r\n\r\n const searchParams = new URLSearchParams()\r\n if (paramsObj.areaId) searchParams.append(\"areaId\", paramsObj.areaId)\r\n if (paramsObj.areaName) searchParams.append(\"areaName\", paramsObj.areaName)\r\n if (paramsObj.themeId) searchParams.append(\"themeId\", paramsObj.themeId)\r\n if (paramsObj.adults) searchParams.append(\"adults\", paramsObj.adults)\r\n if (paramsObj.children) searchParams.append(\"children\", paramsObj.children)\r\n if (paramsObj.infants) searchParams.append(\"infants\", paramsObj.infants)\r\n if (paramsObj.pets) searchParams.append(\"pets\", paramsObj.pets)\r\n if (paramsObj.fromDate) searchParams.append(\"fromDate\", paramsObj.fromDate)\r\n if (paramsObj.toDate) searchParams.append(\"toDate\", paramsObj.toDate)\r\n\r\n window.history.replaceState({}, \"\", \"/search?\" + searchParams.toString())\r\n };\r\n\r\n const setFiltersByThemeId = (themeId: number | undefined) => {\r\n let shouldDeleteThemeFromParams = true\r\n\r\n filterObject.hasActiveFilters = true\r\n\r\n // TODO: Uncomment setPropertyTrue when implemented\r\n switch (themeId) {\r\n case 336:\r\n filterObject.facilities.indoorPool = true;\r\n filterObject.facilities.outdoorPool = true;\r\n updateStringUrlSearchParams(\"indoorPool\");\r\n updateStringUrlSearchParams(\"outdoorPool\");\r\n break;\r\n case 337:\r\n case 342:\r\n filterObject.facilities.indoorPool = true;\r\n filterObject.facilities.outdoorPool = true;\r\n // setPropertyTrue(212); // sommerhus\r\n updateStringUrlSearchParams(\"indoorPool\");\r\n updateStringUrlSearchParams(\"outdoorPool\");\r\n updateStringUrlSearchParams(\"propertyType\", false);\r\n break;\r\n case 338:\r\n case 340:\r\n case 343:\r\n filterObject.petsAllowed = true;\r\n updateStringUrlSearchParams(\"petsAllowed\", false);\r\n break;\r\n case 334:\r\n case 335:\r\n filterObject.facilities.wheelchairFriendly = true;\r\n updateStringUrlSearchParams(\"wheelchairFriendly\");\r\n break;\r\n case 339:\r\n case 344: // Billig ferie\r\n filterObject.sortMethod = 2;\r\n updateStringUrlSearchParams(\"sortMethod\", false);\r\n break;\r\n case 341: // Billig sommmerhuse\r\n filterObject.sortMethod = 2;\r\n //setPropertyTrue(212); // sommerhus\r\n updateStringUrlSearchParams(\"propertyType\", false);\r\n updateStringUrlSearchParams(\"sortMethod\", false);\r\n break;\r\n case 114: // Luksussommerhuse\r\n case 166: // Luxus\r\n case 49: // Luxury\r\n filterObject.sortMethod = 3;\r\n updateStringUrlSearchParams(\"sortMethod\", false);\r\n break;\r\n case 121: // Skiferie i skihytte\r\n case 173: // Skigebiete\r\n case 248: // Skidstugor\r\n case 82: // Skiing\r\n filterObject.themeId = 82;\r\n filterObject.hasActiveFilters = hasActiveFilters();\r\n shouldDeleteThemeFromParams = false;\r\n break;\r\n default:\r\n filterObject.themeId = themeId;\r\n filterObject.hasActiveFilters = hasActiveFilters();\r\n shouldDeleteThemeFromParams = false;\r\n break;\r\n }\r\n\r\n if (shouldDeleteThemeFromParams) {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n urlParams.delete(\"themeId\");\r\n filterObject.themeId = undefined;\r\n window.history.replaceState({}, \"\", \"/search?\" + urlParams.toString());\r\n }\r\n };\r\n\r\n const updateStringUrlSearchParams = (paramEntry: string, isFacility = true) => {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n\r\n const existingValue = urlSearchParams.get(paramEntry);\r\n\r\n if (!isFacility) {\r\n if (filterObject[paramEntry as keyof FilterObject] == defaultFilterObject[paramEntry as keyof FilterObject]) {\r\n urlSearchParams.delete(paramEntry);\r\n } else {\r\n urlSearchParams.set(paramEntry, filterObject[paramEntry as keyof FilterObject]);\r\n }\r\n }\r\n\r\n if (\r\n existingValue !== null &&\r\n filterObject.facilities[paramEntry] === false &&\r\n isFacility\r\n ) {\r\n urlSearchParams.delete(paramEntry);\r\n } else if (isFacility) {\r\n urlSearchParams.set(paramEntry, filterObject.facilities[paramEntry]);\r\n }\r\n\r\n const newUrl = `${window.location.origin}${\r\n window.location.pathname\r\n }?${urlSearchParams.toString()}`;\r\n\r\n window.history.pushState({ path: newUrl }, \"\", newUrl);\r\n };\r\n\r\n\r\n\r\n const setPropertyTrue = (propertyTypeId: number) => {\r\n filterObject.houseType.value = propertyTypeId;\r\n filterObject.propertyType = propertyTypeId;\r\n };\r\n\r\n\r\n\r\n const toggleFacility = (filter: string, onValue: any) => {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n\r\n if (filterObject.facilities[filter] == onValue) {\r\n filterObject.facilities[filter] = undefined;\r\n urlSearchParams.delete(filter);\r\n } else {\r\n filterObject.facilities[filter] = onValue;\r\n urlSearchParams.set(filter, onValue);\r\n }\r\n\r\n return urlSearchParams;\r\n };\r\n\r\n\r\n\r\n const toggleFilter = (filter: string, onValue: any) => {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n if (filterObject[filter] == onValue) {\r\n filterObject[filter] = undefined;\r\n urlSearchParams.delete(filter);\r\n } else {\r\n filterObject[filter] = onValue;\r\n urlSearchParams.set(filter, onValue);\r\n }\r\n\r\n return urlSearchParams;\r\n };\r\n\r\n const toggleFilterOrFacility = (filter: string, onValue: any) => {\r\n if (filter == 'pool') {\r\n\r\n if (!filterObject.facilities.indoorPool && !filterObject.facilities.outdoorPool) {\r\n toggleFilterOrFacility('indoorPool', onValue);\r\n toggleFilterOrFacility('outdoorPool', onValue);\r\n return\r\n }\r\n\r\n if (filterObject.facilities.indoorPool) {\r\n toggleFilterOrFacility('indoorPool', onValue);\r\n }\r\n if (filterObject.facilities.outdoorPool) {\r\n toggleFilterOrFacility('outdoorPool', onValue);\r\n }\r\n return\r\n }\r\n\r\n let urlSearchParams;\r\n if (filter in filterObject.facilities) {\r\n urlSearchParams = toggleFacility(filter, onValue);\r\n } else {\r\n urlSearchParams = toggleFilter(filter, onValue);\r\n }\r\n\r\n const newUrl = `${window.location.origin}${\r\n window.location.pathname\r\n }?${urlSearchParams.toString()}`;\r\n\r\n window.history.pushState({ path: newUrl }, \"\", newUrl);\r\n };\r\n\r\n const setFacilityFilter = (filter: string, value: boolean) => {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n\r\n if (value == false) {\r\n filterObject.facilities[filter] = undefined;\r\n urlSearchParams.delete(filter);\r\n } else {\r\n filterObject.facilities[filter] = value;\r\n urlSearchParams.set(filter, 'true');\r\n }\r\n\r\n const newUrl = `${window.location.origin}${\r\n window.location.pathname\r\n }?${urlSearchParams.toString()}`;\r\n\r\n window.history.pushState({ path: newUrl }, \"\", newUrl);\r\n }\r\n\r\n const hasActiveFilters = () => {\r\n filterObject.hasActiveFilters =\r\n filterObject.bathrooms ||\r\n filterObject.fromBedrooms != defaultFilterObject.fromBedrooms ||\r\n filterObject.toBedrooms != defaultFilterObject.toBedrooms ||\r\n filterObject.bedrooms ||\r\n filterObject.distanceToWater.value ||\r\n filterObject.petsAllowed ||\r\n filterObject.smokingAllowed ||\r\n filterObject.payLater ||\r\n filterObject.kidsFacilities ||\r\n filterObject.outdoorFacilities ||\r\n filterObject.otherFacilities ||\r\n filterObject.propertyType ||\r\n filterObject.fromPrice!= defaultFilterObject.fromPrice ||\r\n filterObject.toPrice != defaultFilterObject.toPrice ||\r\n filterObject.privateOwner ||\r\n filterObject.flexibleCancellation ||\r\n Object.values(filterObject.facilities).some(x => x);\r\n\r\n return filterObject.hasActiveFilters;\r\n };\r\n\r\n /**\r\n * Updates the search params and store based on the key and value and sends an emit to parent component that handles the search execution\r\n * @param key {string} - The key of the search param\r\n * @param value The value to update with - string, numbers and/or objects and arrays\r\n */\r\n const updateUrlParamAndDoSearch = (key: keyof FilterObject | 'lastMinute', value: any) => {\r\n const baseUrl = window.location.href.split('?')[0];\r\n const params = new URLSearchParams(window.location.search)\r\n\r\n\r\n // if anything but priceRange and beds\r\n if (key !== 'distanceToWater' && key !== 'priceRange' && key !== 'bedrooms' && key !== 'dateRange' && key !== 'lastMinute') {\r\n if (value === undefined) {\r\n params.delete(key);\r\n } else {\r\n params.set(key, value);\r\n }\r\n filterObject[key] = value\r\n\r\n window.history.replaceState({}, '', `${baseUrl}?${params.toString()}`)\r\n hasActiveFilters();\r\n return true;\r\n }\r\n\r\n\r\n if (key === 'priceRange') {\r\n if (value[0] == undefined || value[0] == 0) {\r\n params.delete('fromPrice')\r\n } else {\r\n params.set('fromPrice', value[0])\r\n }\r\n if (value[1] == undefined || value[1] == 20000) {\r\n params.delete('toPrice')\r\n } else {\r\n params.set('toPrice', value[1])\r\n }\r\n filterObject.priceRange = value\r\n filterObject.fromPrice = value[0]\r\n filterObject.toPrice = value[1]\r\n\r\n window.history.replaceState({}, '', `${baseUrl}?${params.toString()}`)\r\n hasActiveFilters();\r\n return true;\r\n }\r\n\r\n if (key === 'dateRange') {\r\n if (value[0] == undefined) {\r\n params.delete('fromDate')\r\n } else {\r\n params.set('fromDate', value[0])\r\n }\r\n if (value[1] == undefined) {\r\n params.delete('toDate')\r\n } else {\r\n params.set('toDate', value[1])\r\n }\r\n filterObject.dateRange = value\r\n filterObject.fromDate = value[0]\r\n filterObject.toDate = value[1]\r\n\r\n window.history.replaceState({}, '', `${baseUrl}?${params.toString()}`)\r\n hasActiveFilters();\r\n return true;\r\n }\r\n\r\n if (key === 'bedrooms') {\r\n if (value[0] == undefined) {\r\n params.delete('fromBedrooms')\r\n } else {\r\n params.set('fromBedrooms', value[0])\r\n }\r\n if (value[1] == undefined) {\r\n params.delete('toBedrooms')\r\n } else {\r\n params.set('toBedrooms', value[1])\r\n }\r\n filterObject.bedrooms = value\r\n filterObject.fromBedrooms = value[0]\r\n filterObject.toBedrooms = value[1]\r\n\r\n window.history.replaceState({}, '', `${baseUrl}?${params.toString()}`)\r\n hasActiveFilters();\r\n return true;\r\n }\r\n\r\n\r\n if (key === 'distanceToWater') {\r\n if (value == undefined || (typeof value === 'object' && value.value == undefined)) {\r\n params.delete(\"distanceToWater\")\r\n } else {\r\n params.set('distanceToWater', value)\r\n }\r\n if (typeof value === 'object') {\r\n filterObject.distanceToWater = value\r\n } else {\r\n filterObject.distanceToWater.value = value // value = { text: '1000m', value: 1000 }\r\n }\r\n\r\n window.history.replaceState({}, '', `${baseUrl}?${params.toString()}`)\r\n\r\n //updateFiltersInStore()\r\n hasActiveFilters();\r\n return true;\r\n }\r\n\r\n if (key === 'lastMinute') {\r\n if (value === undefined) {\r\n params.delete(key);\r\n } else {\r\n params.set('lastMinute', value)\r\n }\r\n filterObject.hasLastMinuteSearchAvailability = value\r\n window.history.replaceState({}, '', `${baseUrl}?${params.toString()}`)\r\n hasActiveFilters();\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return {\r\n filterObject,\r\n clearFilters,\r\n setFiltersByThemeId,\r\n updateStringUrlSearchParams,\r\n setPropertyTrue,\r\n hasActiveFilters,\r\n updateFiltersFromUrl,\r\n toggleFilterOrFacility,\r\n updateUrlParamAndDoSearch,\r\n setFacilityFilter\r\n };\r\n },\r\n { persist: false }\r\n);\r\n"],"names":["defaultFilterObject","useFilterStore","defineStore","filterObject","reactive","updateFiltersFromUrl","urlParams","paramsObj","value","key","setFiltersByThemeId","clearFilters","searchParams","themeId","shouldDeleteThemeFromParams","updateStringUrlSearchParams","hasActiveFilters","paramEntry","isFacility","urlSearchParams","existingValue","newUrl","setPropertyTrue","propertyTypeId","toggleFacility","filter","onValue","toggleFilter","toggleFilterOrFacility","setFacilityFilter","x","baseUrl","params"],"mappings":"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"}