@@ -20,6 +20,9 @@ export function Search(props: Props) {
2020 const [ searchBarWrapperElement , setSearchBarWrapperElement ] = useState < HTMLDivElement | null > (
2121 null
2222 ) ;
23+ const [ filtersWrapperDivElement , setFiltersWrapperDivElement ] = useState < HTMLDivElement | null > (
24+ null
25+ ) ;
2326
2427 useEvt (
2528 ctx => {
@@ -38,50 +41,77 @@ export function Search(props: Props) {
3841 [ evtAction , inputElement , searchBarWrapperElement ]
3942 ) ;
4043
41- const { classes , cx } = useStyles ( ) ;
44+ const [ areFiltersOpen , setAreFiltersOpen ] = useState ( false ) ;
4245
43- const [ isFiltersOpen , setIsFiltersOpen ] = useState ( false ) ;
46+ const { classes, cx } = useStyles ( {
47+ "filterWrapperMaxHeight" : areFiltersOpen ? filtersWrapperDivElement ?. scrollHeight ?? 0 : 0
48+ } ) ;
4449
4550 return (
46- < div
47- className = { cx ( classes . root , className ) }
48- ref = { searchBarWrapperElement => setSearchBarWrapperElement ( searchBarWrapperElement ) }
49- >
50- < SearchBar
51- className = { classes . searchBar }
52- label = "Filter by color code (e.g. #c9191e), CSS variable name (e.g. --text-active-red-marianne) or something else (e.g. marianne)..."
53- nativeInputProps = { {
54- "ref" : inputElement => setInputElement ( inputElement ) ,
55- "value" : search ,
56- "onChange" : event => onSearchChange ( event . target . value )
57- } }
58- />
59- < Button
60- className = { classes . filterButton }
61- iconId = { isFiltersOpen ? "ri-arrow-up-s-fill" : "ri-arrow-down-s-fill" }
62- iconPosition = "right"
63- onClick = { ( ) => setIsFiltersOpen ( ! isFiltersOpen ) }
51+ < >
52+ < div
53+ className = { cx ( classes . root , className ) }
54+ ref = { searchBarWrapperElement => setSearchBarWrapperElement ( searchBarWrapperElement ) }
6455 >
65- Filters
66- </ Button >
67- </ div >
56+ < SearchBar
57+ className = { classes . searchBar }
58+ label = "Filter by color code (e.g. #c9191e), CSS variable name (e.g. --text-active-red-marianne) or something else (e.g. marianne)..."
59+ nativeInputProps = { {
60+ "ref" : inputElement => setInputElement ( inputElement ) ,
61+ "value" : search ,
62+ "onChange" : event => onSearchChange ( event . target . value )
63+ } }
64+ />
65+
66+ < Button
67+ className = { classes . filterButton }
68+ iconId = { areFiltersOpen ? "ri-arrow-down-s-fill" : "ri-arrow-up-s-fill" }
69+ iconPosition = "right"
70+ onClick = { ( ) => setAreFiltersOpen ( ! areFiltersOpen ) }
71+ >
72+ Filters
73+ </ Button >
74+ </ div >
75+ < div
76+ ref = { filtersWrapperDivElement =>
77+ setFiltersWrapperDivElement ( filtersWrapperDivElement )
78+ }
79+ className = { classes . filtersWrapper }
80+ >
81+ { /*
82+ <p>Ok</p>
83+ <p>Ok</p>
84+ <p>Ok</p>
85+ <p>Ok</p>
86+ <p>Ok</p>
87+ */ }
88+ </ div >
89+ </ >
6890 ) ;
6991}
7092
71- const useStyles = makeStyles ( { "name" : { Search } } ) ( theme => ( {
72- "root" : {
73- "display" : "flex" ,
74- "paddingTop" : fr . spacing ( "6v" )
75- } ,
76- "searchBar" : {
77- "flex" : 1
78- } ,
79- "filterButton" : {
80- "backgroundColor" : theme . decisions . background . actionLow . blueFrance . default ,
81- "&&&:hover" : {
82- "backgroundColor" : theme . decisions . background . actionLow . blueFrance . hover
93+ const useStyles = makeStyles < { filterWrapperMaxHeight : number } > ( { "name" : { Search } } ) (
94+ ( theme , { filterWrapperMaxHeight } ) => ( {
95+ "root" : {
96+ "display" : "flex" ,
97+ "paddingTop" : fr . spacing ( "6v" )
98+ } ,
99+ "searchBar" : {
100+ "flex" : 1
101+ } ,
102+ "filterButton" : {
103+ "backgroundColor" : theme . decisions . background . actionLow . blueFrance . default ,
104+ "&&&:hover" : {
105+ "backgroundColor" : theme . decisions . background . actionLow . blueFrance . hover
106+ } ,
107+ "color" : theme . decisions . text . actionHigh . blueFrance . default ,
108+ "marginLeft" : fr . spacing ( "4v" ) ,
109+ "display" : "none"
83110 } ,
84- "color" : theme . decisions . text . actionHigh . blueFrance . default ,
85- "marginLeft" : fr . spacing ( "4v" )
86- }
87- } ) ) ;
111+ "filtersWrapper" : {
112+ "transition" : "max-height 0.2s ease-out" ,
113+ "maxHeight" : filterWrapperMaxHeight ,
114+ "overflow" : "hidden"
115+ }
116+ } )
117+ ) ;
0 commit comments