import { useTransition } from "react"; import { useSelect } from "downshift"; import { Icon } from "@iconify/react"; import { useNavigate, useSearchParams } from "react-router"; type TimeRange = "day" | "week" | "month" | "year"; const items: { value: TimeRange | "all"; label: string }[] = [ { value: "all", label: "all time" }, { value: "day", label: "today" }, { value: "week", label: "this week" }, { value: "month", label: "this month" }, { value: "year", label: "this year" }, ]; export default function TimeRangeSelect() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const [, startTransition] = useTransition(); const currentRange = (searchParams.get("timeRange") as TimeRange) || "all"; const currentItem = items.find((i) => i.value === currentRange) || items[0]; const { isOpen, getToggleButtonProps, getMenuProps, getItemProps, highlightedIndex, selectedItem } = useSelect({ items, selectedItem: currentItem, itemToString: (item) => item?.label || "", onSelectedItemChange: ({ selectedItem }) => { if (!selectedItem) return; const params = new URLSearchParams(searchParams); params.set("page", "1"); if (selectedItem.value === "all") { params.delete("timeRange"); } else { params.set("timeRange", selectedItem.value); } startTransition(() => { navigate(`?${params.toString()}`, { preventScrollReset: true }); }); }, }); return (