import React, { useEffect, useState } from 'react' import { useTranslation } from 'next-i18next' import cloneDeep from 'lodash.clonedeep' import * as DropdownMenu from '@radix-ui/react-dropdown-menu' import SearchFilter from '~components/SearchFilter' import SearchFilterCheckboxItem from '~components/SearchFilterCheckboxItem' import './index.scss' import { emptyElementState, emptyProficiencyState, emptyRarityState, emptyWeaponSeriesState, } from '~utils/emptyStates' import { elements, proficiencies, rarities, weaponSeries, } from '~utils/stateValues' interface Props { sendFilters: (filters: { [key: string]: number[] }) => void } const WeaponSearchFilterBar = (props: Props) => { const { t } = useTranslation('common') const [rarityMenu, setRarityMenu] = useState(false) const [elementMenu, setElementMenu] = useState(false) const [proficiencyMenu, setProficiencyMenu] = useState(false) const [seriesMenu, setSeriesMenu] = useState(false) const [rarityState, setRarityState] = useState(emptyRarityState) const [elementState, setElementState] = useState(emptyElementState) const [proficiencyState, setProficiencyState] = useState( emptyProficiencyState ) const [seriesState, setSeriesState] = useState( emptyWeaponSeriesState ) function rarityMenuOpened(open: boolean) { if (open) { setRarityMenu(true) setElementMenu(false) setProficiencyMenu(false) setSeriesMenu(false) } else setRarityMenu(false) } function elementMenuOpened(open: boolean) { if (open) { setRarityMenu(false) setElementMenu(true) setProficiencyMenu(false) setSeriesMenu(false) } else setElementMenu(false) } function proficiencyMenuOpened(open: boolean) { if (open) { setRarityMenu(false) setElementMenu(false) setProficiencyMenu(true) setSeriesMenu(false) } else setProficiencyMenu(false) } function seriesMenuOpened(open: boolean) { if (open) { setRarityMenu(false) setElementMenu(false) setProficiencyMenu(false) setSeriesMenu(true) } else setSeriesMenu(false) } function handleRarityChange(checked: boolean, key: string) { let newRarityState = cloneDeep(rarityState) newRarityState[key].checked = checked setRarityState(newRarityState) } function handleElementChange(checked: boolean, key: string) { let newElementState = cloneDeep(elementState) newElementState[key].checked = checked setElementState(newElementState) } function handleProficiencyChange(checked: boolean, key: string) { let newProficiencyState = cloneDeep(proficiencyState) newProficiencyState[key].checked = checked setProficiencyState(newProficiencyState) } function handleSeriesChange(checked: boolean, key: string) { let newSeriesState = cloneDeep(seriesState) newSeriesState[key].checked = checked setSeriesState(newSeriesState) } function sendFilters() { const checkedRarityFilters = Object.values(rarityState) .filter((x) => x.checked) .map((x, i) => x.id) const checkedElementFilters = Object.values(elementState) .filter((x) => x.checked) .map((x, i) => x.id) const checkedProficiencyFilters = Object.values(proficiencyState) .filter((x) => x.checked) .map((x, i) => x.id) const checkedSeriesFilters = Object.values(seriesState) .filter((x) => x.checked) .map((x, i) => x.id) const filters = { rarity: checkedRarityFilters, element: checkedElementFilters, proficiency1: checkedProficiencyFilters, series: checkedSeriesFilters, } props.sendFilters(filters) } useEffect(() => { sendFilters() }, [rarityState, elementState, proficiencyState, seriesState]) return (
x.checked) .filter(Boolean).length } open={rarityMenu} onOpenChange={rarityMenuOpened} > {t('filters.labels.rarity')} {Array.from(Array(rarities.length)).map((x, i) => { return ( {t(`rarities.${rarities[i]}`)} ) })} x.checked) .filter(Boolean).length } open={elementMenu} onOpenChange={elementMenuOpened} > {t('filters.labels.element')} {Array.from(Array(elements.length)).map((x, i) => { return ( {t(`elements.${elements[i]}`)} ) })} x.checked) .filter(Boolean).length } open={proficiencyMenu} onOpenChange={proficiencyMenuOpened} > {t('filters.labels.proficiency')}
{Array.from(Array(proficiencies.length / 2)).map((x, i) => { return ( {t(`proficiencies.${proficiencies[i]}`)} ) })} {Array.from(Array(proficiencies.length / 2)).map((x, i) => { return ( {t( `proficiencies.${ proficiencies[i + proficiencies.length / 2] }` )} ) })}
x.checked) .filter(Boolean).length } open={seriesMenu} onOpenChange={seriesMenuOpened} > {t('filters.labels.series')}
{Array.from(Array(weaponSeries.length / 3)).map((x, i) => { return ( {t(`series.${weaponSeries[i]}`)} ) })} {Array.from(Array(weaponSeries.length / 3)).map((x, i) => { return ( {t(`series.${weaponSeries[i + weaponSeries.length / 3]}`)} ) })} {Array.from(Array(weaponSeries.length / 3)).map((x, i) => { return ( {t( `series.${weaponSeries[i + 2 * (weaponSeries.length / 3)]}` )} ) })}
) } export default WeaponSearchFilterBar