From 0bccdc26e91d7c8e28156924f3ae8860ba13935c Mon Sep 17 00:00:00 2001 From: Chen-I Lim Date: Thu, 8 Oct 2020 20:24:34 -0700 Subject: [PATCH] Search in TableComponent as well --- src/client/components/boardComponent.tsx | 5 +--- src/client/components/tableComponent.tsx | 33 ++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/client/components/boardComponent.tsx b/src/client/components/boardComponent.tsx index c6f41de65..89acd61e7 100644 --- a/src/client/components/boardComponent.tsx +++ b/src/client/components/boardComponent.tsx @@ -35,10 +35,7 @@ class BoardComponent extends React.Component { constructor(props: Props) { super(props) - this.state = { - isHoverOnCover: false, - isSearching: false - } + this.state = { isHoverOnCover: false, isSearching: !!this.props.boardTree?.getSearchText() } } componentDidUpdate(prevPros: Props, prevState: State) { diff --git a/src/client/components/tableComponent.tsx b/src/client/components/tableComponent.tsx index a7328af42..5177099ad 100644 --- a/src/client/components/tableComponent.tsx +++ b/src/client/components/tableComponent.tsx @@ -23,16 +23,24 @@ type Props = { type State = { isHoverOnCover: boolean + isSearching: boolean } class TableComponent extends React.Component { private draggedHeaderTemplate: IPropertyTemplate private cardIdToRowMap = new Map>() private cardIdToFocusOnRender: string + private searchFieldRef = React.createRef() constructor(props: Props) { super(props) - this.state = { isHoverOnCover: false } + this.state = { isHoverOnCover: false, isSearching: !!this.props.boardTree?.getSearchText() } + } + + componentDidUpdate(prevPros: Props, prevState: State) { + if (this.state.isSearching && !prevState.isSearching) { + this.searchFieldRef.current.focus() + } } render() { @@ -83,7 +91,15 @@ class TableComponent extends React.Component {
{ this.propertiesClicked(e) }}>Properties
{ this.filterClicked(e) }}>Filter
{ this.sortClicked(e) }}>Sort
-
Search
+ {this.state.isSearching + ? { this.searchChanged(text) }} + onKeyDown={(e) => { this.onSearchKeyDown(e) }}> + :
{ this.setState({ ...this.state, isSearching: true }) }}>Search
+ }
this.optionsClicked(e)}>
{ this.addCard(true) }}>New
@@ -401,6 +417,19 @@ class TableComponent extends React.Component { const destIndex = template ? board.cardProperties.indexOf(template) : 0 await mutator.changePropertyTemplateOrder(board, draggedHeaderTemplate, destIndex) } + + onSearchKeyDown(e: React.KeyboardEvent) { + if (e.keyCode === 27) { // ESC: Clear search + this.searchFieldRef.current.text = "" + this.setState({ ...this.state, isSearching: false }) + this.props.pageController.setSearchText(undefined) + e.preventDefault() + } + } + + searchChanged(text?: string) { + this.props.pageController.setSearchText(text) + } } export { TableComponent }