diff --git a/packages/theme/pages/Category.vue b/packages/theme/pages/Category.vue index c3793e3d0..633c3ee00 100644 --- a/packages/theme/pages/Category.vue +++ b/packages/theme/pages/Category.vue @@ -4,6 +4,7 @@ class="breadcrumbs desktop-only" :breadcrumbs="breadcrumbs" /> +
@@ -499,12 +513,6 @@ export default defineComponent({ isInCart, } = useAddToCart(); - const selectedFilters = ref(Object.fromEntries( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - (magentoConfig.facets.available) - .map((curr) => [curr, (curr === 'price' ? '' : [])]), - )); - const products = computed(() => facetGetters.getProducts(result.value)); const categoryTree = computed(() => categoryGetters.getCategoryTree( @@ -514,10 +522,8 @@ export default defineComponent({ )); const breadcrumbs = computed(() => facetGetters.getBreadcrumbs(result.value)); - const sortBy = computed(() => facetGetters.getSortOptions(result.value)); const facets = computed(() => facetGetters.getGrouped(result.value, magentoConfig.facets.available)); - const pagination = computed(() => facetGetters.getPagination(result.value)); const activeCategory = computed(() => { @@ -557,13 +563,16 @@ export default defineComponent({ const isFilterSelected = (facet, option) => { if (facet.id === 'price') { - return selectedFilters.value[facet.id]; + return selectedFilters.value[facet.id] || ''; } + return (selectedFilters.value[facet.id] || []).includes(option.value); }; + /* eslint-disable */ const selectFilter = (facet, option) => { if (facet.id === 'price') { + // eslint-disable-next-line selectedFilters.value[facet.id] = option.value; return; } @@ -575,17 +584,16 @@ export default defineComponent({ if (selectedFilters.value[facet.id].find((f) => f === option.value)) { selectedFilters.value[facet.id] = selectedFilters.value[ facet.id - ]?.filter((f) => f !== option.value); - + ]?.filter((f) => f !== option.value); return; } selectedFilters.value[facet.id].push(option.value); }; + /* eslint-enable */ const applyFilters = (filters) => { toggleFilterSidebar(); - if (filters) { selectedFilters.value = filters; } @@ -612,8 +620,29 @@ export default defineComponent({ }); }; + const getSelectedFilterValues = () => { + let selectedFilterValues = Object.fromEntries( + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + (magentoConfig.facets.available) + .map((curr) => [curr, (curr === 'price' ? '' : [])]), + ); + const filters = uiHelpers.getFacetsFromURL().filters; + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + Object.keys(filters).forEach((filter) => { + if (filter === 'price') { + selectedFilterValues[filter] = filters[filter][0]; + } else { + selectedFilterValues[filter] = filters[filter]; + } + }); + return selectedFilterValues; + } + const isProductsLoading = ref(false); const isCategoriesLoading = ref(false); + const selectedFilters = ref(getSelectedFilterValues()); + onSSR(async () => { isProductsLoading.value = true; isCategoriesLoading.value = true; @@ -625,22 +654,7 @@ export default defineComponent({ isCategoriesLoading.value = false; if (routeData?.value) { - if (facets.value && facets.value.length > 0) { - selectedFilters.value = facets.value?.reduce( - (prev, curr) => (curr.id === 'price' - ? { - ...prev, - [curr.id]: curr.options.find((o) => o.selected)?.value, - } - : { - ...prev, - [curr.id]: curr.options - ?.filter((o) => o.selected) - ?.map((o) => o.value), - }), - {}, - ); - } + selectedFilters.value = getSelectedFilterValues(); await searchCategoryProduct(); isProductsLoading.value = false;