import { Badge, Box, Button, Checkbox, Divider, Fade, FormControlLabel, IconButton, Menu, Typography, } from "@mui/material"; import { useState } from "react"; import { theme } from "../../theme"; import { GOVERNANCE_ACTION_FILTERS } from "../../consts/filters"; import { GOVERNANCE_ACTION_STATUS_FILTERS } from "../../consts/status-filters"; import { useSearchParams } from "react-router-dom"; import { fadedPurple } from "../../consts/colors"; import { useTranslation } from "../../contexts/I18nContext"; import { IconCheveronDown, IconCheveronUp, } from "@intersect.mbo/intersectmbo.org-icons-set"; export default function FiltersComponent() { const [isHovered, setIsHovered] = useState(false); const [filterParams, setFilterParams] = useSearchParams(); const { t } = useTranslation(); const [anchorEl, setAnchorEl] = useState(null); const open = Boolean(anchorEl); const { palette: { badgeColors: { grey }, }, } = theme; const handleTypeChange = (value: string) => { const newParams = new URLSearchParams(filterParams); const currentTypesStr = newParams.get("type") || ""; const currentTypes = currentTypesStr ? currentTypesStr.split(",") : []; if (currentTypes.includes(value)) { const updatedTypes = currentTypes.filter((type) => type !== value); if (updatedTypes.length === 0) { newParams.delete("type"); } else { newParams.set("type", updatedTypes.join(",")); } } else { const updatedTypes = [...currentTypes, value]; newParams.set("type", updatedTypes.join(",")); } setFilterParams(newParams); }; const handleStatusChange = (value: string) => { const newParams = new URLSearchParams(filterParams); const currentStatusStr = newParams.get("status") || ""; const currentStatuses = currentStatusStr ? currentStatusStr.split(",") : []; if (currentStatuses.includes(value)) { const updatedStatuses = currentStatuses.filter( (status) => status !== value ); if (updatedStatuses.length === 0) { newParams.delete("status"); } else { newParams.set("status", updatedStatuses.join(",")); } } else { const updatedStatuses = [...currentStatuses, value]; newParams.set("status", updatedStatuses.join(",")); } setFilterParams(newParams); }; const isTypeChecked = (value: string) => { const currentTypesStr = filterParams.get("type") || ""; return currentTypesStr ? currentTypesStr.split(",").includes(value) : false; }; const isStatusChecked = (value: string) => { const currentStatusStr = filterParams.get("status") || ""; return currentStatusStr ? currentStatusStr.split(",").includes(value) : false; }; const clearFilters = () => { const newParams = new URLSearchParams(filterParams); newParams.delete("type"); newParams.delete("status"); setFilterParams(newParams); }; const getActiveFilterCount = () => { const typeFilters = filterParams.get("type")?.split(",") || []; const statusFilters = filterParams.get("status")?.split(",") || []; return typeFilters.length + statusFilters.length; }; const handleShowOptions = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; return ( {t("outcome.governanceActionType")} {GOVERNANCE_ACTION_FILTERS.map((option, index) => ( handleTypeChange(option.value)} > { e.stopPropagation(); handleTypeChange(option.value); }} onClick={(e) => e.stopPropagation()} name={option.value} /> } label={option.label} onClick={(e) => e.stopPropagation()} /> ))} {t("outcome.status.fullTitle")} {GOVERNANCE_ACTION_STATUS_FILTERS.map((option, index) => ( handleStatusChange(option.value)} > { e.stopPropagation(); handleStatusChange(option.value); }} onClick={(e) => e.stopPropagation()} name={option.value} /> } label={option.label} onClick={(e) => e.stopPropagation()} /> ))} ); }