@@ -40,6 +40,7 @@ import { FilterHints } from './filter-hints';
4040import FiltersDropdown from './filters-dropdown' ;
4141import { getFilterFullName , Indicator } from './filters-helper' ;
4242import TextFilter from './text-filter' ;
43+ import { LOCAL_STORAGE_SHOW_FILTERS_KEY , useLocalStorage } from '../../utils/local-storage-hook' ;
4344import './filters-toolbar.css' ;
4445
4546export interface FiltersToolbarProps {
@@ -72,6 +73,7 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
7273 const [ indicator , setIndicator ] = React . useState < Indicator > ( ValidatedOptions . default ) ;
7374 const [ message , setMessage ] = React . useState < string | undefined > ( ) ;
7475 const [ selectedFilter , setSelectedFilter ] = React . useState < FilterDefinition > ( findFilter ( t , 'namespace' ) ! ) ;
76+ const [ showFilters , setShowFilters ] = useLocalStorage < boolean > ( LOCAL_STORAGE_SHOW_FILTERS_KEY , true ) ;
7577
7678 // reset and delay message state to trigger tooltip properly
7779 const setMessageWithDelay = React . useCallback (
@@ -125,10 +127,10 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
125127 }
126128 } , [ selectedFilter , addFilter , indicator , setIndicator , setMessageWithDelay ] ) ;
127129
130+ const defaultFilters = quickFilters . filter ( qf => qf . default ) . flatMap ( qf => qf . filters ) ;
128131 const getFiltersChips = React . useCallback ( ( ) => {
129132 const isForced = ! _ . isEmpty ( forcedFilters ) ;
130133 const chipFilters = isForced ? forcedFilters : filters ;
131- const defaultFilters = quickFilters . filter ( qf => qf . default ) . flatMap ( qf => qf . filters ) ;
132134
133135 if ( _ . isEmpty ( chipFilters ) && _ . isEmpty ( defaultFilters ) ) {
134136 return null ;
@@ -240,7 +242,15 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
240242 ) }
241243 </ ToolbarGroup >
242244 ) ;
243- } , [ clearFilters , filters , forcedFilters , quickFilters , push , setFilters , resetFilters , t ] ) ;
245+ } , [ clearFilters , filters , forcedFilters , defaultFilters , push , setFilters , resetFilters , t ] ) ;
246+
247+ const countActiveFilters = ( forcedFilters || filters || [ ] ) . reduce ( ( prev , cur ) => prev + cur . values . length , 0 ) ;
248+ let showHideText : string | undefined ;
249+ if ( countActiveFilters > 0 ) {
250+ showHideText = showFilters ? t ( 'Hide filters' ) : t ( 'Show {{count}} filters' , { count : countActiveFilters } ) ;
251+ } else if ( defaultFilters . length > 0 ) {
252+ showHideText = showFilters ? t ( 'Hide filters' ) : t ( 'Show filters' ) ;
253+ }
244254
245255 return (
246256 < Toolbar data-test = { id } id = { id } >
@@ -274,6 +284,19 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
274284 </ Tooltip >
275285 </ ToolbarItem >
276286 ) }
287+ { showHideText && (
288+ < ToolbarItem className = "flex-start" >
289+ < Button
290+ data-test = "show-filters-button"
291+ id = "show-filters-button"
292+ variant = "link"
293+ className = "overflow-button"
294+ onClick = { ( ) => setShowFilters ( ! showFilters ) }
295+ >
296+ { showHideText }
297+ </ Button >
298+ </ ToolbarItem >
299+ ) }
277300 { ! _ . isEmpty ( props . menuContent ) && (
278301 < ToolbarItem className = "flex-start" >
279302 < OverflowMenu breakpoint = "2xl" >
@@ -288,7 +311,7 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
288311 </ OverflowMenu >
289312 </ ToolbarItem >
290313 ) }
291- { getFiltersChips ( ) }
314+ { showFilters && getFiltersChips ( ) }
292315 </ ToolbarContent >
293316 </ Toolbar >
294317 ) ;
0 commit comments