forked from 1Hive/gardens-ui
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathFilterBar.js
More file actions
95 lines (88 loc) · 2.97 KB
/
FilterBar.js
File metadata and controls
95 lines (88 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import React, { useState, useRef, useCallback } from 'react'
import { DropDown, GU, useLayout, useTheme } from '@tecommons/ui'
import PropTypes from 'prop-types'
import TextFilter from './TextFilter'
import DropdownFilter from './DropdownFilter'
const FilterBar = React.memo(
({
proposalsSize = 0,
proposalExecutionStatusFilter,
proposalStatusFilter,
proposalTextFilter,
proposalTypeFilter,
handleExecutionStatusFilterChange,
handleProposalStatusFilterChange,
handleTextFilterChange,
handleProposalTypeFilterChange,
}) => {
const [textFieldVisible, setTextFieldVisible] = useState(false)
const textFilterOpener = useRef(null)
const { layoutName } = useLayout()
const theme = useTheme()
const compactMode = layoutName === 'small'
const handlerTextFilterClick = useCallback(() => {
setTextFieldVisible(true)
}, [setTextFieldVisible])
const statusFilterDisabled = proposalExecutionStatusFilter === 1
return (
<div
css={`
display: flex;
align-items: center;
flex-wrap: wrap;
${compactMode && `margin-top: ${1.5 * GU}px;`}
${compactMode && `margin-left: -${1.5 * GU}px;`}
`}
>
<DropDown
header="Type"
placeholder="All"
selected={proposalTypeFilter}
onChange={handleProposalTypeFilterChange}
items={['All', 'Funding', 'Signaling']}
css={`
${compactMode && `margin-left: ${1.5 * GU}px;`}
${compactMode && `margin-bottom: ${1.5 * GU}px;`}
`}
/>
<DropDown
header="Status"
placeholder="All"
selected={proposalExecutionStatusFilter}
onChange={handleExecutionStatusFilterChange}
items={['All', 'Open', 'Closed', 'Removed']}
css={`
margin-left: ${1.5 * GU}px;
${compactMode && `margin-bottom: ${1.5 * GU}px;`}
`}
/>
{!statusFilterDisabled && (
<DropdownFilter
proposalsSize={proposalsSize}
proposalStatusFilter={proposalStatusFilter}
handleProposalStatusFilterChange={handleProposalStatusFilterChange}
/>
)}
<TextFilter
textFilter={proposalTextFilter}
updateTextFilter={handleTextFilterChange}
placeholder="Search by name"
visible={textFieldVisible}
setVisible={setTextFieldVisible}
openerRef={textFilterOpener}
onClick={handlerTextFilterClick}
/>
</div>
)
}
)
FilterBar.propTypes = {
proposalsSize: PropTypes.number,
proposalExecutionStatusFilter: PropTypes.number.isRequired,
proposalStatusFilter: PropTypes.number.isRequired,
proposalTextFilter: PropTypes.string.isRequired,
handleExecutionStatusFilterChange: PropTypes.func.isRequired,
handleProposalStatusFilterChange: PropTypes.func.isRequired,
handleTextFilterChange: PropTypes.func.isRequired,
}
export default FilterBar