Skip to content

Commit cbc7399

Browse files
authored
Merge pull request #1764 from mertbagt/unified_filter_button
Unified Filter Button
2 parents 96308cb + 71316e2 commit cbc7399

File tree

3 files changed

+42
-8
lines changed

3 files changed

+42
-8
lines changed

components/search/bills/BillSearch.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { SearchErrorBoundary } from "../SearchErrorBoundary"
1818
import { useRouting } from "../useRouting"
1919
import { BillHit } from "./BillHit"
2020
import { useBillRefinements } from "./useBillRefinements"
21-
import { useBillHierarchicalMenu } from "./useBillHierarchicalMenu"
2221
import { SortBy, SortByWithConfigurationItem } from "../SortBy"
2322
import { getServerConfig } from "../common"
2423
import { useBillSort } from "./useBillSort"
@@ -103,7 +102,6 @@ const Layout: FC<
103102
React.PropsWithChildren<{ items: SortByWithConfigurationItem[] }>
104103
> = ({ items }) => {
105104
const refinements = useBillRefinements()
106-
const hierarchicalMenu = useBillHierarchicalMenu()
107105
const status = useSearchStatus()
108106

109107
const { t } = useTranslation("billSearch")
@@ -115,14 +113,12 @@ const Layout: FC<
115113
</Row>
116114
<Row>
117115
<Col xs={3} lg={3}>
118-
{hierarchicalMenu.options}
119116
{refinements.options}
120117
</Col>
121118
<Col className="d-flex flex-column">
122119
<RefinementRow>
123120
<ResultCount className="flex-grow-1 m-1" />
124121
<SortBy items={items} />
125-
{hierarchicalMenu.show}
126122
{refinements.show}
127123
</RefinementRow>
128124
<CurrentRefinements

components/search/bills/useBillRefinements.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,19 @@ export const useBillRefinements = () => {
5656
}
5757
]
5858

59-
return useRefinements({ refinementProps: propsList })
59+
const hierarchicalPropsList = [
60+
{
61+
attribute: "topics.lvl0",
62+
...baseProps
63+
},
64+
{
65+
attribute: "topics.lvl1",
66+
...baseProps
67+
}
68+
]
69+
70+
return useRefinements({
71+
hierarchicalMenuProps: hierarchicalPropsList,
72+
refinementProps: propsList
73+
})
6074
}

components/search/useRefinements.tsx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { useTranslation } from "next-i18next"
22
import { RefinementList, useInstantSearch } from "react-instantsearch"
33
import { faFilter } from "@fortawesome/free-solid-svg-icons"
44
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
5-
import { useCallback, useEffect, useState } from "react"
5+
import { useCallback, useState } from "react"
66
import styled from "styled-components"
77
import { useMediaQuery } from "usehooks-ts"
8-
import { Button, Col, Offcanvas } from "../bootstrap"
8+
import { Button, Offcanvas } from "../bootstrap"
9+
import { MultiselectHierarchicalMenu } from "./HierarchicalMenuWidget"
910
import { SearchContainer } from "./SearchContainer"
1011

1112
export const FilterButton = styled(Button)`
@@ -15,15 +16,18 @@ export const FilterButton = styled(Button)`
1516
padding: 0.25rem 0.5rem 0.25rem 0.5rem;
1617
align-self: flex-start;
1718
`
19+
1820
const useHasRefinements = () => {
1921
const { results } = useInstantSearch()
2022
const refinements = results.getRefinements()
2123
return refinements.length !== 0
2224
}
2325

2426
export const useRefinements = ({
27+
hierarchicalMenuProps,
2528
refinementProps
2629
}: {
30+
hierarchicalMenuProps?: any[]
2731
refinementProps: any[]
2832
}) => {
2933
const inline = useMediaQuery("(min-width: 768px)")
@@ -38,19 +42,39 @@ export const useRefinements = ({
3842
))}
3943
</>
4044
)
45+
46+
let hierarchicalMenu = <></>
47+
48+
if (hierarchicalMenuProps) {
49+
hierarchicalMenu = (
50+
<>
51+
<MultiselectHierarchicalMenu
52+
attributes={[
53+
hierarchicalMenuProps[0].attribute,
54+
hierarchicalMenuProps[1].attribute
55+
]}
56+
/>
57+
</>
58+
)
59+
}
60+
4161
const hasRefinements = useHasRefinements()
4262

4363
const { t } = useTranslation("billSearch")
4464

4565
return {
4666
options: inline ? (
47-
<div>{refinements}</div>
67+
<>
68+
<div>{hierarchicalMenu}</div>
69+
<div>{refinements}</div>
70+
</>
4871
) : (
4972
<Offcanvas show={show} onHide={handleClose}>
5073
<Offcanvas.Header closeButton>
5174
<Offcanvas.Title>{t("filter")}</Offcanvas.Title>
5275
</Offcanvas.Header>
5376
<Offcanvas.Body>
77+
<SearchContainer>{hierarchicalMenu}</SearchContainer>
5478
<SearchContainer>{refinements}</SearchContainer>
5579
</Offcanvas.Body>
5680
</Offcanvas>

0 commit comments

Comments
 (0)