Skip to content

Commit dec763b

Browse files
committed
undelete files - possibly used by testimony search
1 parent 59e35dd commit dec763b

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useHierarchicalMenu } from "../useHierarchicalMenu"
2+
3+
export const useBillHierarchicalMenu = () => {
4+
const baseProps = { limit: 500, searchable: true }
5+
const propsList = [
6+
{
7+
attribute: "topics.lvl0",
8+
...baseProps
9+
},
10+
{
11+
attribute: "topics.lvl1",
12+
...baseProps
13+
}
14+
]
15+
16+
return useHierarchicalMenu({ hierarchicalMenuProps: propsList })
17+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { useTranslation } from "next-i18next"
2+
import { useInstantSearch } from "react-instantsearch"
3+
import { faFilter } from "@fortawesome/free-solid-svg-icons"
4+
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
5+
import { useCallback, useState } from "react"
6+
import styled from "styled-components"
7+
import { useMediaQuery } from "usehooks-ts"
8+
import { Button, Offcanvas } from "../bootstrap"
9+
import { SearchContainer } from "./SearchContainer"
10+
import { MultiselectHierarchicalMenu } from "./HierarchicalMenuWidget"
11+
export const FilterButton = styled(Button)`
12+
font-size: 1rem;
13+
line-height: 1rem;
14+
min-height: 2rem;
15+
padding: 0.25rem 0.5rem 0.25rem 0.5rem;
16+
align-self: flex-start;
17+
`
18+
const useHasRefinements = () => {
19+
const { results } = useInstantSearch()
20+
const refinements = results.getRefinements()
21+
return refinements.length !== 0
22+
}
23+
24+
export const useHierarchicalMenu = ({
25+
hierarchicalMenuProps
26+
}: {
27+
hierarchicalMenuProps: any[]
28+
}) => {
29+
const inline = useMediaQuery("(min-width: 768px)")
30+
const [show, setShow] = useState(false)
31+
const handleClose = useCallback(() => setShow(false), [])
32+
const handleOpen = useCallback(() => setShow(true), [])
33+
34+
const hierarchicalMenu = (
35+
<>
36+
<MultiselectHierarchicalMenu
37+
attributes={[
38+
hierarchicalMenuProps[0].attribute,
39+
hierarchicalMenuProps[1].attribute
40+
]}
41+
/>
42+
</>
43+
)
44+
const hasRefinements = useHasRefinements()
45+
46+
const { t } = useTranslation("billSearch")
47+
48+
return {
49+
options: inline ? (
50+
<div>{hierarchicalMenu}</div>
51+
) : (
52+
<Offcanvas show={show} onHide={handleClose}>
53+
<Offcanvas.Header closeButton>
54+
<Offcanvas.Title>{t("topics")}</Offcanvas.Title>
55+
</Offcanvas.Header>
56+
<Offcanvas.Body>
57+
<SearchContainer>{hierarchicalMenu}</SearchContainer>
58+
</Offcanvas.Body>
59+
</Offcanvas>
60+
),
61+
show: inline ? null : (
62+
<FilterButton
63+
variant="secondary"
64+
active={show}
65+
onClick={handleOpen}
66+
className={hasRefinements ? "ais-FilterButton-has-refinements" : ""}
67+
>
68+
<FontAwesomeIcon icon={faFilter} /> {t("topics")}
69+
</FilterButton>
70+
)
71+
}
72+
}

0 commit comments

Comments
 (0)