X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/89c3c647797787377f4d950b38d320ee3b28e92c..7335a6a0b9a54bfacc94f2d8c9e57827fc77553f:/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 ec1c8b83..6251308d 100644 --- a/src/views-components/search-bar/search-bar-view.tsx +++ b/src/views-components/search-bar/search-bar-view.tsx @@ -11,7 +11,6 @@ import { WithStyles, Tooltip, InputAdornment, Input, - ClickAwayListener } from '@material-ui/core'; import SearchIcon from '@material-ui/icons/Search'; import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; @@ -41,12 +40,14 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => { container: { position: 'relative', width: '100%', - borderRadius: theme.spacing.unit / 2 + borderRadius: theme.spacing.unit / 2, + zIndex: theme.zIndex.modal, }, containerSearchViewOpened: { position: 'relative', width: '100%', - borderRadius: `${theme.spacing.unit / 2}px ${theme.spacing.unit / 2}px 0 0` + borderRadius: `${theme.spacing.unit / 2}px ${theme.spacing.unit / 2}px 0 0`, + zIndex: theme.zIndex.modal, }, input: { border: 'none', @@ -86,6 +87,7 @@ interface SearchBarViewActionProps { loadRecentQueries: () => string[]; moveUp: () => void; moveDown: () => void; + setAdvancedDataFromSearchValue: (search: string) => void; } type SearchBarViewProps = SearchBarDataProps & SearchBarActionProps & WithStyles; @@ -94,6 +96,7 @@ const handleKeyDown = (e: React.KeyboardEvent, props: SearchBarViewProps) => { if (e.keyCode === KEY_CODE_DOWN) { e.preventDefault(); if (!props.isPopoverOpen) { + props.onSetView(SearchView.AUTOCOMPLETE); props.openSearchView(); } else { props.moveDown(); @@ -117,11 +120,39 @@ const handleKeyDown = (e: React.KeyboardEvent, props: SearchBarViewProps) => { } }; +const handleInputClick = (e: React.MouseEvent, props: SearchBarViewProps) => { + if (props.searchValue) { + props.onSetView(SearchView.AUTOCOMPLETE); + props.openSearchView(); + } else { + props.closeView(); + } +}; + +const handleDropdownClick = (e: React.MouseEvent, props: SearchBarViewProps) => { + e.stopPropagation(); + if (props.isPopoverOpen) { + if (props.currentView === SearchView.ADVANCED) { + props.closeView(); + } else { + props.setAdvancedDataFromSearchValue(props.searchValue); + props.onSetView(SearchView.ADVANCED); + } + } else { + props.setAdvancedDataFromSearchValue(props.searchValue); + props.onSetView(SearchView.ADVANCED); + } +}; + export const SearchBarView = withStyles(styles)( - (props : SearchBarViewProps) => { + (props: SearchBarViewProps) => { const { classes, isPopoverOpen } = props; return ( - + <> + + {isPopoverOpen && + } +
handleInputClick(e, props)} onKeyDown={e => handleKeyDown(e, props)} startAdornment={ @@ -145,7 +176,7 @@ export const SearchBarView = withStyles(styles)( endAdornment={ - props.onSetView(SearchView.ADVANCED)}> + handleDropdownClick(e, props)}> @@ -153,10 +184,10 @@ export const SearchBarView = withStyles(styles)( } />
- {isPopoverOpen && getView({...props})} + {isPopoverOpen && getView({ ...props })}
-
+ ); } ); @@ -172,7 +203,8 @@ const getView = (props: SearchBarViewProps) => { case SearchView.ADVANCED: return ; + tags={props.tags} + saveQuery={props.saveQuery} />; default: return { selectedItem={props.selectedItem} />; } }; + +const Backdrop = withStyles<'backdrop'>(theme => ({ + backdrop: { + position: 'fixed', + top: 0, + right: 0, + bottom: 0, + left: 0, + zIndex: theme.zIndex.modal + } +}))( + ({ classes, ...props }: WithStyles<'backdrop'> & React.HTMLProps) => +
);