import { Box, TextField, MenuItem, Button, Drawer, FormControl, Select, Typography, Stack, debounce, } from "@mui/material"; import { DatePicker } from "@mui/x-date-pickers/DatePicker"; import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns"; import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; import SearchIcon from "@mui/icons-material/Search"; import RefreshIcon from "@mui/icons-material/Refresh"; import { useSearchParams, useRouter } from "next/navigation"; import { useState, useEffect, useMemo } from "react"; import { ISearchLabel } from "../DataTable/types"; export default function AdvancedSearch({ labels }: { labels: ISearchLabel[] }) { const searchParams = useSearchParams(); const router = useRouter(); const [open, setOpen] = useState(false); const [formValues, setFormValues] = useState>({}); useEffect(() => { const initialParams = Object.fromEntries(searchParams.entries()); setFormValues(initialParams); }, [searchParams]); const updateURL = useMemo( () => debounce((newValues: Record) => { const updatedParams = new URLSearchParams(); Object.entries(newValues).forEach(([key, value]) => { if (value) updatedParams.set(key, value); }); router.push(`?${updatedParams.toString()}`); }, 500), [router], ); const handleFieldChange = (field: string, value: string) => { const updatedValues = { ...formValues, [field]: value }; setFormValues(updatedValues); updateURL(updatedValues); }; const resetForm = () => { setFormValues({}); router.push("?"); }; const toggleDrawer = (open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { if ( event.type === "keydown" && ((event as React.KeyboardEvent).key === "Tab" || (event as React.KeyboardEvent).key === "Shift") ) { return; } setOpen(open); }; return ( Search