1- import  { 
2-   Button , 
3-   InputGroup , 
4-   Toolbar , 
5-   ToolbarContent , 
6-   ToolbarItem , 
7-   Tooltip , 
8-   ValidatedOptions 
9- }  from  '@patternfly/react-core' ; 
1+ import  {  Button ,  Toolbar ,  ToolbarContent ,  ToolbarItem ,  Tooltip  }  from  '@patternfly/react-core' ; 
102import  {  CompressIcon ,  ExpandIcon  }  from  '@patternfly/react-icons' ; 
113import  *  as  _  from  'lodash' ; 
124import  *  as  React  from  'react' ; 
135import  {  useTranslation  }  from  'react-i18next' ; 
14- import  {  Filter ,   FilterDefinition ,  Filters ,   FilterValue ,   findFromFilters  }  from  '../../model/filters' ; 
6+ import  {  FilterDefinition ,  Filters  }  from  '../../model/filters' ; 
157import  {  QuickFilter  }  from  '../../model/quick-filters' ; 
168import  {  autoCompleteCache  }  from  '../../utils/autocomplete-cache' ; 
17- import  {  findFilter  }  from  '../../utils/filter-definitions' ; 
18- import  {  Indicator ,  swapFilterDefinition  }  from  '../../utils/filters-helper' ; 
199import  {  localStorageShowFiltersKey ,  useLocalStorage  }  from  '../../utils/local-storage-hook' ; 
2010import  {  QueryOptionsDropdown ,  QueryOptionsProps  }  from  '../dropdowns/query-options-dropdown' ; 
2111import  './filters-toolbar.css' ; 
22- import  AutocompleteFilter  from  './filters/autocomplete-filter' ; 
23- import  CompareFilter ,  {  FilterCompare  }  from  './filters/compare-filter' ; 
24- import  {  FilterHints  }  from  './filters/filter-hints' ; 
12+ import  {  FilterSearchInput  }  from  './filters/filter-search-input' ; 
2513import  {  FiltersChips  }  from  './filters/filters-chips' ; 
26- import  FiltersDropdown  from  './filters/filters-dropdown' ; 
2714import  {  QuickFilters  }  from  './filters/quick-filters' ; 
28- import  TextFilter  from  './filters/text-filter' ; 
2915import  {  LinksOverflow  }  from  './links-overflow' ; 
3016
3117export  interface  FiltersToolbarProps  { 
@@ -58,12 +44,8 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
5844  ...props 
5945} )  =>  { 
6046  const  {  t }  =  useTranslation ( 'plugin__netobserv-plugin' ) ; 
61-   const  [ indicator ,  setIndicator ]  =  React . useState < Indicator > ( ValidatedOptions . default ) ; 
6247  const  [ message ,  setMessage ]  =  React . useState < string  |  undefined > ( ) ; 
63-   const  [ selectedFilter ,  setSelectedFilter ]  =  React . useState < FilterDefinition  |  null > ( 
64-     findFilter ( filterDefinitions ,  'src_namespace' )  ||  filterDefinitions . length  ? filterDefinitions [ 0 ]  : null 
65-   ) ; 
66-   const  [ selectedCompare ,  setSelectedCompare ]  =  React . useState < FilterCompare > ( FilterCompare . equal ) ; 
48+ 
6749  const  [ showFilters ,  setShowFilters ]  =  useLocalStorage < boolean > ( localStorageShowFiltersKey ,  true ) ; 
6850
6951  // reset and delay message state to trigger tooltip properly 
@@ -81,83 +63,7 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
8163    [ skipTipsDelay ] 
8264  ) ; 
8365
84-   const  setFiltersList  =  React . useCallback ( 
85-     ( list : Filter [ ] )  =>  { 
86-       setFilters ( {  ...filters ! ,  list : list  } ) ; 
87-     } , 
88-     [ setFilters ,  filters ] 
89-   ) ; 
90- 
91-   const  addFilter  =  React . useCallback ( 
92-     ( filterValue : FilterValue )  =>  { 
93-       if  ( selectedFilter  ===  null )  { 
94-         console . error ( 'addFilter called with' ,  selectedFilter ) ; 
95-         return  false ; 
96-       } 
97-       const  def  = 
98-         filters ?. match  !==  'any'  ? swapFilterDefinition ( filterDefinitions ,  selectedFilter ,  'src' )  : selectedFilter ; 
99-       const  newFilters  =  _ . cloneDeep ( filters ?. list )  ||  [ ] ; 
100-       const  not  =  selectedCompare  ===  FilterCompare . notEqual ; 
101-       const  moreThan  =  selectedCompare  ===  FilterCompare . moreThanOrEqual ; 
102-       const  found  =  findFromFilters ( newFilters ,  {  def,  not,  moreThan } ) ; 
103-       if  ( found )  { 
104-         if  ( found . values . map ( value  =>  value . v ) . includes ( filterValue . v ) )  { 
105-           setMessageWithDelay ( t ( 'Filter already exists' ) ) ; 
106-           setIndicator ( ValidatedOptions . error ) ; 
107-           return  false ; 
108-         }  else  { 
109-           found . values . push ( filterValue ) ; 
110-         } 
111-       }  else  { 
112-         newFilters . push ( {  def,  not,  moreThan,  values : [ filterValue ]  } ) ; 
113-       } 
114-       setFiltersList ( newFilters ) ; 
115-       return  true ; 
116-     } , 
117-     // eslint-disable-next-line react-hooks/exhaustive-deps 
118-     [ 
119-       filterDefinitions , 
120-       filters ?. list , 
121-       filters ?. match , 
122-       selectedCompare , 
123-       selectedFilter , 
124-       setFiltersList , 
125-       setMessageWithDelay 
126-     ] 
127-   ) ; 
128- 
129-   const  getFilterControl  =  React . useCallback ( ( )  =>  { 
130-     if  ( selectedFilter  ===  null )  { 
131-       return  < > </ > ; 
132-     } 
133- 
134-     const  commonProps  =  { 
135-       filterDefinition : selectedFilter , 
136-       addFilter : addFilter , 
137-       setMessageWithDelay : setMessageWithDelay , 
138-       indicator : indicator , 
139-       setIndicator : setIndicator 
140-     } ; 
141-     switch  ( selectedFilter . component )  { 
142-       case  'text' :
143-       case  'number' :
144-         return  ( 
145-           < TextFilter 
146-             { ...commonProps } 
147-             allowEmpty = { selectedCompare  !==  FilterCompare . moreThanOrEqual } 
148-             regexp = { selectedFilter . component  ===  'number'  ? / \D / g  : undefined } 
149-           /> 
150-         ) ; 
151-       case  'autocomplete' :
152-         return  < AutocompleteFilter  { ...commonProps }  /> ; 
153-     } 
154-   } ,  [ selectedFilter ,  addFilter ,  setMessageWithDelay ,  indicator ,  selectedCompare ] ) ; 
155- 
15666  const  getFilterToolbar  =  React . useCallback ( ( )  =>  { 
157-     if  ( selectedFilter  ===  null )  { 
158-       return  < > </ > ; 
159-     } 
160- 
16167    return  ( 
16268      < ToolbarItem  className = "flex-start" > 
16369        < Tooltip 
@@ -169,26 +75,16 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
16975          enableFlip = { false } 
17076          position = { 'top' } 
17177        > 
172-           < div > 
173-             < InputGroup > 
174-               < FiltersDropdown 
175-                 filterDefinitions = { filterDefinitions } 
176-                 selectedFilter = { selectedFilter } 
177-                 setSelectedFilter = { setSelectedFilter } 
178-               /> 
179-               < CompareFilter 
180-                 value = { selectedCompare } 
181-                 setValue = { setSelectedCompare } 
182-                 component = { selectedFilter . component } 
183-               /> 
184-               { getFilterControl ( ) } 
185-             </ InputGroup > 
186-             < FilterHints  def = { selectedFilter }  /> 
187-           </ div > 
78+           < FilterSearchInput 
79+             filterDefinitions = { filterDefinitions } 
80+             filters = { filters } 
81+             setFilters = { setFilters } 
82+             setMessage = { setMessageWithDelay } 
83+           /> 
18884        </ Tooltip > 
18985      </ ToolbarItem > 
19086    ) ; 
191-   } ,  [ filterDefinitions ,  getFilterControl ,  message ,  selectedCompare ,   selectedFilter ] ) ; 
87+   } ,  [ filterDefinitions ,  filters ,  message ,  setFilters ,   setMessageWithDelay ] ) ; 
19288
19389  const  isForced  =  ! _ . isEmpty ( forcedFilters ) ; 
19490  const  filtersOrForced  =  isForced  ? forcedFilters  : filters ; 
@@ -210,7 +106,11 @@ export const FiltersToolbar: React.FC<FiltersToolbarProps> = ({
210106        </ ToolbarItem > 
211107        { ! isForced  &&  quickFilters . length  >  0  &&  ( 
212108          < ToolbarItem  className = "flex-start" > 
213-             < QuickFilters  quickFilters = { quickFilters }  activeFilters = { filters ?. list  ||  [ ] }  setFilters = { setFiltersList }  /> 
109+             < QuickFilters 
110+               quickFilters = { quickFilters } 
111+               activeFilters = { filters ?. list  ||  [ ] } 
112+               setFilters = { list  =>  setFilters ( {  ...filters ! ,  list } ) } 
113+             /> 
214114          </ ToolbarItem > 
215115        ) } 
216116        { ! isForced  &&  getFilterToolbar ( ) } 
0 commit comments