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;