From: Pawel Kowalczyk Date: Mon, 15 Oct 2018 13:32:37 +0000 (+0200) Subject: merge master X-Git-Tag: 1.3.0~62^2~4 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/2cfb56ef5060cbad461062690fad650f15c49731?hp=-c merge master Feature #14277 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- 2cfb56ef5060cbad461062690fad650f15c49731 diff --combined src/store/search-bar/search-bar-actions.ts index 394920a5,f7527852..771cbc89 --- a/src/store/search-bar/search-bar-actions.ts +++ b/src/store/search-bar/search-bar-actions.ts @@@ -10,9 -10,7 +10,10 @@@ import { ServiceRepository } from '~/se import { FilterBuilder } from "~/services/api/filter-builder"; import { ResourceKind } from '~/models/resource'; import { GroupClass } from '~/models/group'; +import { SearchView } from '~/store/search-bar/search-bar-reducer'; +import { navigateToSearchResults, navigateTo } from '~/store/navigation/navigation-action'; +import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions'; + import { SearchBarAdvanceFormData } from '~/models/search-bar'; export const searchBarActions = unionize({ SET_CURRENT_VIEW: ofType(), @@@ -25,17 -23,6 +26,6 @@@ export type SearchBarActions = UnionOf; - export interface SearchBarAdvanceFormData { - type?: GroupContentsResource; - cluster?: string; - project?: string; - inTrash: boolean; - dataFrom: string; - dataTo: string; - saveQuery: boolean; - searchQuery: string; - } - export const SEARCH_BAR_ADVANCE_FORM_NAME = 'searchBarAdvanceFormName'; export const goToView = (currentView: string) => searchBarActions.SET_CURRENT_VIEW(currentView); @@@ -56,7 -43,6 +46,7 @@@ export const saveQuery = (data: SearchB if (data.saveQuery && data.searchQuery) { services.searchService.saveQuery(data.searchQuery); dispatch(searchBarActions.SET_SAVED_QUERIES(services.searchService.getSavedQueries())); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Query has been sucessfully saved', kind: SnackbarKind.SUCCESS })); } }; @@@ -75,24 -61,17 +65,28 @@@ export const openSearchView = () = dispatch(searchBarActions.SET_SAVED_QUERIES(savedSearchQueries)); }; - export const closeSearchView = () => + export const closeSearchView = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { - dispatch(searchBarActions.CLOSE_SEARCH_VIEW()); - dispatch(searchBarActions.SET_CURRENT_VIEW(SearchView.BASIC)); + const isOpen = getState().searchBar.open; + if(isOpen) { + dispatch(searchBarActions.CLOSE_SEARCH_VIEW()); ++ dispatch(searchBarActions.SET_CURRENT_VIEW(SearchView.BASIC)); + } }; + +export const navigateToItem = (uuid: string) => + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + dispatch(searchBarActions.CLOSE_SEARCH_VIEW()); + dispatch(navigateTo(uuid)); + }; + export const searchData = (searchValue: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const currentView = getState().searchBar.currentView; + if (currentView !== SearchView.AUTOCOMPLETE) { + dispatch(searchBarActions.CLOSE_SEARCH_VIEW()); + } dispatch(searchBarActions.SET_SEARCH_VALUE(searchValue)); dispatch(searchBarActions.SET_SEARCH_RESULTS([])); if (searchValue) { @@@ -104,10 -83,9 +98,10 @@@ }); dispatch(searchBarActions.SET_SEARCH_RESULTS(items)); } + dispatch(navigateToSearchResults); }; -const getFilters = (filterName: string, searchValue: string): string => { +export const getFilters = (filterName: string, searchValue: string): string => { return new FilterBuilder() .addIsA("uuid", [ResourceKind.PROJECT, ResourceKind.COLLECTION, ResourceKind.PROCESS]) .addILike(filterName, searchValue, GroupContentsResourcePrefix.COLLECTION) diff --combined src/views-components/search-bar/search-bar-view.tsx index 51062646,d0967712..8e1f84b0 --- a/src/views-components/search-bar/search-bar-view.tsx +++ b/src/views-components/search-bar/search-bar-view.tsx @@@ -21,7 -21,7 +21,7 @@@ import { SearchBarBasicView } from '~/v import { SearchBarAdvancedView } from '~/views-components/search-bar/search-bar-advanced-view'; import { SearchBarAutocompleteView, SearchBarAutocompleteViewDataProps } from '~/views-components/search-bar/search-bar-autocomplete-view'; import { ArvadosTheme } from '~/common/custom-theme'; - import { SearchBarAdvanceFormData } from '~/store/search-bar/search-bar-actions'; + import { SearchBarAdvanceFormData } from '~/models/search-bar'; type CssRules = 'container' | 'containerSearchViewOpened' | 'input' | 'view'; @@@ -66,7 -66,6 +66,7 @@@ interface SearchBarActionProps saveQuery: (data: SearchBarAdvanceFormData) => void; deleteSavedQuery: (id: number) => void; openSearchView: () => void; + navigateTo: (uuid: string) => void; } type SearchBarProps = SearchBarDataProps & SearchBarActionProps & WithStyles; @@@ -75,41 -74,26 +75,41 @@@ interface SearchBarState value: string; } -interface RenderSavedQueriesProps { + + +interface RenderRecentQueriesProps { text: string | JSX.Element; - id: number; - deleteSavedQuery: (id: number) => void; + onSearch: (searchValue: string | JSX.Element) => void; } -interface RenderRecentQueriesProps { +export const RenderRecentQueries = (props: RenderRecentQueriesProps) => { + return + props.onSearch(props.text)} /> + ; +}; + +interface RenderAutocompleteItemsProps { text: string | JSX.Element; + navigateTo: (uuid: string) => void; + uuid: string; } -export const RecentQueriesItem = (props: RenderRecentQueriesProps) => { +export const RenderAutocompleteItems = (props: RenderAutocompleteItemsProps) => { return - + props.navigateTo(props.uuid)} /> ; }; +interface RenderSavedQueriesProps { + text: string | JSX.Element; + id: number; + deleteSavedQuery: (id: number) => void; + onSearch: (searchValue: string | JSX.Element) => void; +} export const RenderSavedQueries = (props: RenderSavedQueriesProps) => { return - + props.onSearch(props.text)} /> props.deleteSavedQuery(props.id)}> @@@ -132,7 -116,7 +132,7 @@@ export const SearchBarView = withStyles render() { const { classes, currentView, openSearchView, closeView, isPopoverOpen } = this.props; - return closeView()}> + return
{ - const { onSetView, loadRecentQueries, savedQueries, deleteSavedQuery, searchValue, searchResults, saveQuery } = this.props; + const { onSetView, loadRecentQueries, savedQueries, deleteSavedQuery, searchValue, searchResults, saveQuery, onSearch, navigateTo } = this.props; switch (currentView) { case SearchView.BASIC: - return ; + return ; case SearchView.ADVANCED: - return ; + return ; case SearchView.AUTOCOMPLETE: return ; default: - return ; + return ; } } diff --combined src/views-components/search-bar/search-bar.tsx index 5c42af20,d6561c59..5208a7d6 --- a/src/views-components/search-bar/search-bar.tsx +++ b/src/views-components/search-bar/search-bar.tsx @@@ -12,11 -12,11 +12,12 @@@ import saveRecentQuery, loadRecentQueries, saveQuery, - openSearchView + openSearchView, - closeSearchView ++ closeSearchView, ++ navigateToItem } from '~/store/search-bar/search-bar-actions'; import { SearchBarView } from '~/views-components/search-bar/search-bar-view'; - import { SearchBarAdvanceFormData } from '~/store/search-bar/search-bar-actions'; - import { closeSearchView, navigateToItem } from '~/store/search-bar/search-bar-actions'; + import { SearchBarAdvanceFormData } from '~/models/search-bar'; const mapStateToProps = ({ searchBar }: RootState) => { return { @@@ -36,8 -36,7 +37,8 @@@ const mapDispatchToProps = (dispatch: D loadRecentQueries: () => dispatch(loadRecentQueries()), saveQuery: (data: SearchBarAdvanceFormData) => dispatch(saveQuery(data)), deleteSavedQuery: (id: number) => dispatch(deleteSavedQuery(id)), - openSearchView: () => dispatch(openSearchView()) + openSearchView: () => dispatch(openSearchView()), + navigateTo: (uuid: string) => dispatch(navigateToItem(uuid)) }); export const SearchBar = connect(mapStateToProps, mapDispatchToProps)(SearchBarView); diff --combined src/views/workbench/workbench.tsx index ade9a4e1,09435d09..788c96ae --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@@ -41,7 -41,12 +41,13 @@@ import { SharedWithMePanel } from '~/vi import { RunProcessPanel } from '~/views/run-process-panel/run-process-panel'; import SplitterLayout from 'react-splitter-layout'; import { WorkflowPanel } from '~/views/workflow-panel/workflow-panel'; +import { SearchResultsPanel } from '~/views/search-results-panel/search-results-panel'; + import { HomeTreePicker } from '~/views-components/projects-tree-picker/home-tree-picker'; + import { SharedTreePicker } from '~/views-components/projects-tree-picker/shared-tree-picker'; + import { FavoritesTreePicker } from '../../views-components/projects-tree-picker/favorites-tree-picker'; + import { ProjectsTreePicker } from '~/views-components/projects-tree-picker/projects-tree-picker'; + import { Chips } from '~/components/chips/chips'; + import { ChipsInput } from '../../components/chips-input/chips-input'; type CssRules = 'root' | 'container' | 'splitter' | 'asidePanel' | 'contentWrapper' | 'content'; @@@ -99,7 -104,6 +105,7 @@@ export const WorkbenchPanel +