import React, { useEffect, useState } from 'react' import { useTranslation } from 'next-i18next' import classNames from 'classnames' import equals from 'fast-deep-equal' import FilterModal from '~components/FilterModal' import RaidDropdown from '~components/RaidDropdown' import Select from '~components/common/Select' import SelectItem from '~components/common/SelectItem' import Button from '~components/common/Button' import { defaultFilterset } from '~utils/defaultFilters' import FilterIcon from '~public/icons/Filter.svg' import './index.scss' import { getCookie } from 'cookies-next' interface Props { children: React.ReactNode scrolled: boolean element?: number raidSlug?: string recency?: number onFilter: (filters: FilterSet) => void } const FilterBar = (props: Props) => { // Set up translation const { t } = useTranslation('common') const [recencyOpen, setRecencyOpen] = useState(false) const [elementOpen, setElementOpen] = useState(false) const [filterModalOpen, setFilterModalOpen] = useState(false) const [advancedFilters, setAdvancedFilters] = useState({}) const [matchesDefaultFilters, setMatchesDefaultFilters] = useState(false) // Set up classes object for showing shadow on scroll const classes = classNames({ FilterBar: true, shadow: props.scrolled, }) const filterButtonClasses = classNames({ Filter: true, FiltersActive: !matchesDefaultFilters, }) useEffect(() => { // Fetch user's advanced filters const filtersCookie = getCookie('filters') if (filtersCookie) setAdvancedFilters(JSON.parse(filtersCookie as string)) else setAdvancedFilters(defaultFilterset) }, []) useEffect(() => { setMatchesDefaultFilters(equals(advancedFilters, defaultFilterset)) }, [advancedFilters, defaultFilterset]) function openElementSelect() { setElementOpen(!elementOpen) } function openRecencySelect() { setRecencyOpen(!recencyOpen) } function elementSelectChanged(value: string) { const elementValue = parseInt(value) props.onFilter({ element: elementValue, ...advancedFilters }) } function recencySelectChanged(value: string) { const recencyValue = parseInt(value) props.onFilter({ recency: recencyValue, ...advancedFilters }) } function raidSelectChanged(slug?: string) { props.onFilter({ raidSlug: slug, ...advancedFilters }) } function handleAdvancedFiltersChanged(filters: FilterSet) { setAdvancedFilters(filters) props.onFilter(filters) } function onSelectChange(name: 'element' | 'recency') { setElementOpen(name === 'element' ? !elementOpen : false) setRecencyOpen(name === 'recency' ? !recencyOpen : false) } return ( <>
{props.children}
) } export default FilterBar