@@ -18,50 +18,79 @@ import ComparePopover from './ComparePopover';
18
18
19
19
export interface DisplayFilterProps {
20
20
label : string ;
21
- showAll ?: boolean ;
22
- onChange : ( ) => void ;
21
+ onChange : ( filterName : string ) => void ;
23
22
value : boolean ;
24
- showCancel ?: boolean ;
25
23
showCompare ?: boolean ;
26
24
isChild ?: boolean ;
27
- cancelFilter ?: ( e : any ) => void ;
25
+ showRemoveButton ?: boolean ;
26
+ removeFilter ?: ( e : any ) => void ;
27
+ addFilter ?: ( value : string ) => void ;
28
28
}
29
29
30
- export function DisplayFilter ( { label, onChange, value, showCancel, showAll, showCompare, cancelFilter,
30
+ export function DisplayFilter ( {
31
+ label,
32
+ onChange,
33
+ value,
34
+ showCompare,
35
+ removeFilter,
36
+ addFilter,
37
+ showRemoveButton
31
38
} : DisplayFilterProps ) {
32
- const [ show , setShow ] = useState < boolean > ( false ) ;
39
+ const [ show , setShow ] = useState < boolean > ( true ) ;
40
+ const [ showAllChildren , setShowAllChildren ] = useState < boolean > ( true ) ;
33
41
const [ open , setOpen ] = useState < boolean > ( false ) ;
34
- const [ children , setChildren ] = useState < { name : string ; value : string } [ ] > ( [ {
35
- value : '' ,
36
- name : 'as of now'
37
- } ] ) ;
42
+ const [ children , setChildren ] = useState < { name : string ; value : string } [ ] > ( [
43
+ {
44
+ value : '' ,
45
+ name : 'as of now'
46
+ }
47
+ ] ) ;
38
48
39
49
const filterClicked = ( ) => {
40
- setShow ( ! show ) ;
41
- onChange ( ) ;
50
+ if ( children . length > 1 ) {
51
+ children . map ( ( item ) => onChange ( item . value ) ) ;
52
+ setShowAllChildren ( ! showAllChildren ) ;
53
+ setShow ( ! showAllChildren ) ;
54
+ } else {
55
+ onChange ( label ) ;
56
+ setShow ( ! show ) ;
57
+ }
42
58
} ;
43
59
44
60
const onToggle = ( e : React . SyntheticEvent ) => {
45
61
e . stopPropagation ( ) ;
46
62
setOpen ( ! open ) ;
47
63
} ;
48
64
65
+ // control the show indication from outside when value changes (toggle all button)
49
66
useEffect ( ( ) => {
50
67
setShow ( value ) ;
68
+ if ( value ) {
69
+ setShowAllChildren ( value ) ;
70
+ }
51
71
} , [ value ] ) ;
52
72
73
+ // when show changes from outside
74
+ useEffect ( ( ) => {
75
+ if ( children . length > 1 ) {
76
+ setShowAllChildren ( show ) ;
77
+ }
78
+ } , [ show ] ) ;
79
+
53
80
const search = ( { name, value } : { name : string ; value : string } ) => {
54
- console . log ( 'value ' , value ) ;
55
- console . log ( 'name ' , name ) ;
56
81
// has results -
57
82
// add the tag to the children list.
58
- const newChildren = [ ...children || [ ] , { name, value} ] ;
83
+ const newChildren = [ ...( children || [ ] ) , { name, value } ] ;
59
84
setChildren ( newChildren ) ;
85
+ addFilter && addFilter ( value ) ;
86
+ setOpen ( true ) ;
87
+
60
88
// empty - toggle on no results
61
89
} ;
62
90
63
- const removeChildFilter = ( e : any ) => {
64
- console . log ( 'e' , e ) ;
91
+ const removeChildFilter = ( filterToRemove : string ) => {
92
+ const newChildren = children . filter ( ( item ) => item . name !== filterToRemove ) ;
93
+ setChildren ( newChildren ) ;
65
94
} ;
66
95
67
96
return (
@@ -125,8 +154,8 @@ export function DisplayFilter({ label, onChange, value, showCancel, showAll, sho
125
154
</ Box >
126
155
127
156
< Stack direction = { 'row' } gap = { 1 } >
128
- { ! ! cancelFilter && (
129
- < IconButton onClick = { ( ) => cancelFilter ( label ) } sx = { { padding : 0 } } >
157
+ { showRemoveButton && (
158
+ < IconButton onClick = { ( ) => removeFilter && removeFilter ( label ) } sx = { { padding : 0 } } >
130
159
< CancelIcon
131
160
id = { 'cancel' }
132
161
sx = { {
@@ -140,7 +169,7 @@ export function DisplayFilter({ label, onChange, value, showCancel, showAll, sho
140
169
</ IconButton >
141
170
) }
142
171
143
- { showCompare && < ComparePopover search = { search } /> }
172
+ { showCompare && < ComparePopover search = { search } /> }
144
173
145
174
< IconButton
146
175
sx = { { padding : 0 , height : '20px' , width : '21.08px' } }
@@ -152,21 +181,20 @@ export function DisplayFilter({ label, onChange, value, showCancel, showAll, sho
152
181
</ Box >
153
182
</ Stack >
154
183
155
- { /*annotations */ }
156
184
{ children ?. length > 1 && (
157
185
< Collapse in = { open } timeout = "auto" unmountOnExit >
158
186
< List component = "div" disablePadding >
159
187
< Box paddingLeft = { 2 } >
160
- { children ?. map ( ( item ) => (
188
+ { children ?. map ( ( item , index ) => (
161
189
< Tooltip title = { item ?. name } >
162
190
< div >
163
191
< DisplayFilter
192
+ showRemoveButton = { index > 0 }
164
193
isChild
165
- value = { ! ! showAll }
194
+ value = { showAllChildren }
166
195
label = { item ?. name }
167
- onChange = { ( ) => console . log ( 'changed' ) }
168
- showCancel
169
- cancelFilter = { removeChildFilter }
196
+ onChange = { ( ) => onChange ( item . name ) }
197
+ removeFilter = { removeChildFilter }
170
198
/>
171
199
</ div >
172
200
</ Tooltip >
0 commit comments