import {buildShopParamsGET, findQueryParamsValue, PriceRange} from "../../libs/utils"; import DropdownSection from "../dropdown-component/dropdown-section"; import ShopCategories from "../shop-categories/shop-categories"; import ShopAmountRange from "../shop-amount-range/shop-amount-range"; import ShopFilters from "../shop-filters/shop-filters"; import ShopSearch from "../shop-search/shop-search"; import {useEffect, useState} from "react"; import {useRouter} from "next/router"; import {isEqual} from "radash"; export function ShopAside({sections = [], queries = [], filters = []}) { const [filterMap, setFilterMap] = useState(null); const [filtersSelected, setFiltersSelected] = useState(findQueryParamsValue(queries, 'filters') || []); const [priceRange, setPriceRange] = useState(findQueryParamsValue(queries, 'facets') as PriceRange); const [hasFilters, setHasFilters] = useState(false); const router = useRouter(); const validFilters = () => { const list = []; if (filterMap) { Array.from(filterMap).reduce((array: number[], map: [number, Map]) => { Array.from(map[1].entries()).forEach((value: [number, boolean]) => array.push(value[0])); return array; }, list); } router.push(`${router.pathname}${buildShopParamsGET( findQueryParamsValue(queries, 'sort'), findQueryParamsValue(queries, 'page'), priceRange, findQueryParamsValue(queries, 'cat'), list, findQueryParamsValue(queries, 'search'), )}`); } useEffect(() => { if (!findQueryParamsValue(queries, 'filters')) { setFilterMap(new Map()); setFiltersSelected([]); } else { setFiltersSelected(findQueryParamsValue(queries, 'filters') || []); } if (!findQueryParamsValue(queries, 'facets')) { setPriceRange(null); } }, [queries]); useEffect(() => { setHasFilters((!isEqual(filterMap, null) && filterMap.size !== 0) || !isEqual(priceRange, null)); }, [filterMap]); const updatePriceRange = (range: PriceRange) => { setPriceRange(range); } const updateFilterMap = (map: Map>) => { setFilterMap(map); } const resetFilters = () => { router.push(`${router.pathname}${buildShopParamsGET( findQueryParamsValue(queries, 'sort'), findQueryParamsValue(queries, 'page'), null, findQueryParamsValue(queries, 'cat'), null, findQueryParamsValue(queries, 'search'), )}`); } return ( <>
{hasFilters && (
)} updatePriceRange(value)} />
>) => updateFilterMap(map)} />
); } export default ShopAside;