import { useEffect } from "react"; import type { ComboboxItem, ComboboxLikeRenderOptionInput, } from "@mantine/core"; import { Badge, Box, CheckIcon, Group, MultiSelect, Select, rem, } from "@mantine/core"; import { useHitsPerPage, useRefinementList, useSortBy, } from "react-instantsearch"; import { SourceLabelMap } from "@/constants"; const sortItems = [ { value: "paragraph:time:desc", label: "Newest" }, { value: "paragraph:time:asc", label: "Oldest" }, ]; const hitsPerPageItems = [ { value: 20, label: "20", default: true }, { value: 40, label: "40" }, { value: 60, label: "60" }, { value: 100, label: "100" }, ]; export default function Refinement() { const { items, refine } = useRefinementList({ attribute: "source" }); const { currentRefinement, refine: refineSortBy } = useSortBy({ items: sortItems, }); const hitsPerPage = useHitsPerPage({ items: hitsPerPageItems, }); const currentVal = items .filter((item) => item.isRefined) .map((item) => item.value); useEffect(() => { refineSortBy(sortItems[0].value); }, [refineSortBy]); function SelectItem(props: ComboboxLikeRenderOptionInput) { return ( {currentVal.includes(props.option.value) && ( )} {props.option.label} {items.find((item) => item.value === props.option.value)?.count} ); } return ( ({ value: item.value.toString(), label: item.label.toString(), }))} value={hitsPerPage.items .find((item) => item.isRefined) ?.value.toString()} onChange={(value) => value && hitsPerPage.refine(parseInt(value))} label="Hits per page" /> ); }