{"version":3,"file":"CzYpf5os.js","sources":["../../../../../brands/vans/components/product/list/Header.vue","../../../../../domains/commerce/composables/useFilters/index.ts","../../../../../domains/commerce/components/product/list/List.vue"],"sourcesContent":["\n\n\n","import type { ProductFilters } from '#root/api/clients/product/data-contracts'\nimport type { FilterItem, FiltersMap, PriceFilter, SearchFilter } from '#types/filters'\n\nexport default (_filters: MaybeRefOrGetter, onChange?: () => void) => {\n const { defaultSort, sorts } = useAppConfig().pages.plp\n const { $gtm, $t } = useNuxtApp()\n\n const region = useRegion()\n const route = useRoute()\n const router = useRouter()\n\n const filtersQuery = ref(JSON.parse(route.query.filters?.toString() || '{}'))\n const filters = computed(() => Object.fromEntries(toValue(_filters)\n .map((item) => [item.code, {\n ...item,\n type: item.layout || 'TileExpanded',\n selected: filtersQuery.value[item.code] || []\n }])) as FiltersMap\n )\n\n // This watch gets triggered both by onFiltersChange\n // and by external changes to the url, such as from links in CMS content\n watch(() => [route.query.filters, route.query.storeFilter], (value, oldValue) => {\n filtersQuery.value = JSON.parse(route.query.filters?.toString() || '{}')\n if (value[0] !== oldValue?.[0] || value[1] !== oldValue?.[1])\n onChange?.()\n })\n\n const sortOptions = sorts[region].map((sort) => ({ value: sort, label: $t.sorts[sort] }))\n const sortState = ref((route.query.sort || defaultSort) as string)\n const storeFilterState = ref(route.query.storeFilter?.toString() || undefined)\n\n const onFiltersChange = () => {\n const filtersEntries = Object.values(filters.value)\n .filter(({ selected }) => selected?.length)\n .map(({ code, selected }) => [code, selected])\n\n filtersQuery.value = { ...filtersQuery.value, ...Object.fromEntries(filtersEntries) }\n\n router.push({\n query: {\n ...route.query,\n filters: Object.keys(filtersQuery.value).length ? JSON.stringify(filtersQuery.value) : undefined,\n sort: sortState.value,\n storeFilter: storeFilterState.value\n }\n })\n }\n\n const isPriceFilter = (filter: FilterItem): filter is PriceFilter => filter.type === 'PriceInput'\n const isSearchFilter = (filter: FilterItem): filter is SearchFilter => filter.type === 'Search'\n\n const filterBy = (code: string) => {\n const filter = filters.value[code]\n const { selected, facetId } = filter\n const previous = filtersQuery.value[code] || []\n\n if (isPriceFilter(filter) || isSearchFilter(filter)) {\n $gtm.push('plpPage.onApplyFilter', code, facetId, selected)\n }\n else if (previous.length < selected.length) {\n const id = selected.filter((item) => !previous.includes(item))[0]\n const { label } = filter.options.find((option) => option.id === id)!\n $gtm.push('plpPage.onApplyFilter', filter.label, facetId, label)\n }\n else {\n const id = previous.filter((item: string) => !selected.includes(item))[0]\n const { label } = filter.options.find((option) => option.id === id)!\n $gtm.push('plpPage.onRemoveFilter', filter.label, facetId, label)\n if (!selected.length) delete filtersQuery.value[code]\n }\n onFiltersChange()\n }\n\n const filterByStore = (storeId?: string) => {\n storeFilterState.value = storeId\n onFiltersChange()\n }\n\n const removeFilter = ({ code, id }) => {\n const filter = filters.value[code]\n const removedId = id || filter.selected\n\n if (isPriceFilter(filter) || isSearchFilter(filter)) {\n $gtm.push('plpPage.onRemoveFilter', code, filter.facetId, removedId)\n }\n else {\n const { label } = filter.options.find((option) => option.id === id)!\n $gtm.push('plpPage.onRemoveFilter', filter.label, filter.facetId, label)\n }\n\n filtersQuery.value[code] = filter.type === 'PriceInput'\n ? []\n : filtersQuery.value[code]?.filter((item: string) => item !== id)\n\n if (!filtersQuery.value[code].length) delete filtersQuery.value[code]\n onFiltersChange()\n }\n\n const clearFilters = () => {\n const selectedFilters = Object.values(filters.value).filter((item) => item.selected?.length)\n const category = selectedFilters?.length === 1 ? selectedFilters[0].label : 'All'\n\n $gtm.push('plpPage.onClearFilters', category)\n filtersQuery.value = {}\n onFiltersChange()\n }\n\n const sortBy = () => {\n $gtm.push('plpPage.onSort', sortOptions.find(({ value }) => value === sortState.value)?.label)\n onFiltersChange()\n }\n\n onActivated(() => {\n // Clear leftover filters in the keep-alive cache when navigating back to the same PLP with a filter-less URL (e.g. breadcrumbs)\n if (!route.query.filters && Object.values(filters.value).some((item) => item.selected?.length))\n clearFilters()\n\n // update sort and storefilter based on querystring\n sortState.value = (route.query.sort || defaultSort) as string\n storeFilterState.value = route.query.storeFilter?.toString() || undefined\n })\n\n return {\n clearFilters,\n filterBy,\n filterByStore,\n filters,\n filtersQuery,\n removeFilter,\n sortBy,\n sortOptions,\n sortState,\n storeFilterState\n }\n}\n","\n\n\n"],"names":["props","__props","PanelFilters","createPanel","$t","$viewport","useNuxtApp","header","useHeaderStore","filtersShown","_useModel","total","computed","_a","onFiltersToggle","useFilters","_filters","onChange","defaultSort","sorts","useAppConfig","$gtm","region","useRegion","route","useRoute","router","useRouter","filtersQuery","ref","filters","toValue","item","watch","value","oldValue","sortOptions","sort","sortState","storeFilterState","_b","onFiltersChange","filtersEntries","selected","code","isPriceFilter","filter","isSearchFilter","filterBy","facetId","previous","id","label","option","filterByStore","storeId","removeFilter","removedId","clearFilters","selectedFilters","category","sortBy","onActivated","emit","__emit","brandClasses","eagerLoadedCards","grid","hydrationMode","pickupFilterAboveList","productsPerPage","scrollToElementOptions","$feature","scrollToElement","stickyState","useSticky","showFocusedProduct","pattern","convertPatternToRegex","currency","breadcrumbs","colsLg","products","cols","nextPageSize","hasFilters","gridRef","lazyLoadRefs","productsToRender","renderedProducts","headerPLP","useElementBounding","headerPLPHeight","gridTop","filtersTop","pxToRem","loadMore","lazyLoadChunk","entries","isIntersecting","boundingClientRect","useIntersectionObserver","selectAndSortBy","selectAndFilterBy"],"mappings":"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"}