X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/7400998048d63d93ac6eb63895cd4a9e4d728591..a960b30fd5da0619e5029e67712b2a2778e4b591:/src/views-components/search-bar/search-bar-view.tsx diff --git a/src/views-components/search-bar/search-bar-view.tsx b/src/views-components/search-bar/search-bar-view.tsx index 3782f869..54a3f8f7 100644 --- a/src/views-components/search-bar/search-bar-view.tsx +++ b/src/views-components/search-bar/search-bar-view.tsx @@ -31,6 +31,7 @@ import { SearchBarAdvancedViewDataProps, SearchBarAdvancedViewActionProps } from '~/views-components/search-bar/search-bar-advanced-view'; +import { KEY_CODE_DOWN, KEY_CODE_ESC, KEY_CODE_UP, KEY_ENTER } from "~/common/codes"; type CssRules = 'container' | 'containerSearchViewOpened' | 'input' | 'view'; @@ -82,29 +83,58 @@ interface SearchBarViewActionProps { closeView: () => void; openSearchView: () => void; loadRecentQueries: () => string[]; + moveUp: () => void; + moveDown: () => void; } type SearchBarViewProps = SearchBarDataProps & SearchBarActionProps & WithStyles; +const handleKeyDown = (e: React.KeyboardEvent, props: SearchBarViewProps) => { + if (e.keyCode === KEY_CODE_DOWN) { + e.preventDefault(); + if (!props.isPopoverOpen) { + props.openSearchView(); + } else { + props.moveDown(); + } + } else if (e.keyCode === KEY_CODE_UP) { + e.preventDefault(); + props.moveUp(); + } else if (e.keyCode === KEY_CODE_ESC) { + props.closeView(); + } else if (e.keyCode === KEY_ENTER) { + if (props.currentView === SearchView.BASIC) { + e.preventDefault(); + props.onSearch(props.selectedItem.query); + } else if (props.currentView === SearchView.AUTOCOMPLETE) { + if (props.selectedItem.id !== props.searchValue) { + e.preventDefault(); + props.navigateTo(props.selectedItem.id); + } + } + } +}; + export const SearchBarView = withStyles(styles)( (props : SearchBarViewProps) => { - const { classes, isPopoverOpen, closeView, searchValue, openSearchView, onChange, onSubmit } = props; + const { classes, isPopoverOpen } = props; return ( - + -
+ handleKeyDown(e, props)} endAdornment={ - + @@ -121,26 +151,25 @@ export const SearchBarView = withStyles(styles)( ); const getView = (props: SearchBarViewProps) => { - const { onSetView, loadRecentQueries, savedQueries, deleteSavedQuery, searchValue, - searchResults, saveQuery, onSearch, navigateTo, editSavedQuery, tags, currentView } = props; - switch (currentView) { + switch (props.currentView) { case SearchView.AUTOCOMPLETE: return ; + navigateTo={props.navigateTo} + searchResults={props.searchResults} + searchValue={props.searchValue} + selectedItem={props.selectedItem} />; case SearchView.ADVANCED: return ; + closeAdvanceView={props.closeAdvanceView} + tags={props.tags} />; default: return ; + onSetView={props.onSetView} + onSearch={props.onSearch} + loadRecentQueries={props.loadRecentQueries} + savedQueries={props.savedQueries} + deleteSavedQuery={props.deleteSavedQuery} + editSavedQuery={props.editSavedQuery} + selectedItem={props.selectedItem} />; } };