From ff26deedd74b35c434a85d5d60caa278189f0966 Mon Sep 17 00:00:00 2001 From: Timur Valiev Date: Mon, 20 Jan 2020 10:16:10 -0800 Subject: [PATCH] Add default search term in Searchable Summary: Add a way to provide default search term; similar to default filters Reviewed By: mweststrate Differential Revision: D19449561 fbshipit-source-id: 6845ae5d2e058fe68974ac7aa8fd7b45814c2002 --- src/ui/components/searchable/Searchable.tsx | 38 ++++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/ui/components/searchable/Searchable.tsx b/src/ui/components/searchable/Searchable.tsx index d0544f3d1..304163112 100644 --- a/src/ui/components/searchable/Searchable.tsx +++ b/src/ui/components/searchable/Searchable.tsx @@ -113,6 +113,7 @@ type Props = { columns?: TableColumns; onFilterChange: (filters: Array) => void; defaultFilters: Array; + defaultSearchTerm: string; allowRegexSearch: boolean; allowBodySearch: boolean; }; @@ -148,7 +149,7 @@ const Searchable = ( state: State = { filters: this.props.defaultFilters || [], focusedToken: -1, - searchTerm: '', + searchTerm: this.props.defaultSearchTerm ?? '', hasFocus: false, regexEnabled: false, bodySearchEnabled: false, @@ -235,20 +236,31 @@ const Searchable = ( if (this.props.onFilterChange != null) { this.props.onFilterChange(this.state.filters); } - } else if (prevProps.defaultFilters !== this.props.defaultFilters) { - const mergedFilters = [...this.state.filters]; - this.props.defaultFilters.forEach((defaultFilter: Filter) => { - const filterIndex = mergedFilters.findIndex( - (f: Filter) => f.key === defaultFilter.key, - ); - if (filterIndex > -1) { - mergedFilters[filterIndex] = defaultFilter; - } else { - mergedFilters.push(defaultFilter); - } - }); + } else { + let mergedFilters = this.state.filters; + if (prevProps.defaultFilters !== this.props.defaultFilters) { + mergedFilters = [...this.state.filters]; + this.props.defaultFilters.forEach((defaultFilter: Filter) => { + const filterIndex = mergedFilters.findIndex( + (f: Filter) => f.key === defaultFilter.key, + ); + if (filterIndex > -1) { + mergedFilters[filterIndex] = defaultFilter; + } else { + mergedFilters.push(defaultFilter); + } + }); + } + let newSearchTerm = this.state.searchTerm; + if ( + prevProps.defaultSearchTerm !== this.props.defaultSearchTerm || + prevProps.defaultFilters !== this.props.defaultFilters + ) { + newSearchTerm = this.props.defaultSearchTerm; + } this.setState({ filters: mergedFilters, + searchTerm: newSearchTerm, }); } }