From: Daniel Kos Date: Mon, 13 Aug 2018 17:48:41 +0000 (+0200) Subject: refs #master Merge branch 'origin/master' into 14007-ts-paths X-Git-Tag: 1.2.0~3^2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/876e5e2f31a218255845977489ea70aacc0211cd refs #master Merge branch 'origin/master' into 14007-ts-paths # Conflicts: # src/components/data-explorer/data-explorer.test.tsx # src/components/data-explorer/data-explorer.tsx # src/store/navigation/navigation-action.ts # src/views-components/context-menu/action-sets/root-project-action-set.ts # src/views-components/details-panel/empty-details.tsx # src/views/favorite-panel/favorite-panel.tsx # src/views/project-panel/project-panel.tsx # src/views/workbench/workbench.test.tsx # src/views/workbench/workbench.tsx Arvados-DCO-1.1-Signed-off-by: Daniel Kos --- 876e5e2f31a218255845977489ea70aacc0211cd diff --cc src/components/data-explorer/data-explorer.tsx index eaa3464b,7acc1a83..2811bd4d --- a/src/components/data-explorer/data-explorer.tsx +++ b/src/components/data-explorer/data-explorer.tsx @@@ -10,9 -10,11 +10,11 @@@ import { DataTable, DataColumns } from import { DataColumn } from "../data-table/data-column"; import { DataTableFilterItem } from '../data-table-filters/data-table-filters'; import { SearchInput } from '../search-input/search-input'; -import { ArvadosTheme } from "../../common/custom-theme"; +import { ArvadosTheme } from "~/common/custom-theme"; + import { DefaultView } from '../default-view/default-view'; + import { IconType } from '../icon/icon'; - type CssRules = "searchBox" | "toolbar"; + type CssRules = 'searchBox' | "toolbar" | 'defaultRoot' | 'defaultMessage' | 'defaultIcon'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ searchBox: { diff --cc src/store/navigation/navigation-action.ts index e50bce0a,dc680215..79d24471 --- a/src/store/navigation/navigation-action.ts +++ b/src/store/navigation/navigation-action.ts @@@ -60,6 -59,14 +59,13 @@@ export const setProjectItem = (itemId: dispatch(projectPanelActions.RESET_PAGINATION()); dispatch(projectPanelActions.REQUEST_ITEMS()); })); - + } else { + const uuid = services.authService.getUuid(); + if (itemId === uuid) { + dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(uuid)); + dispatch(projectPanelActions.RESET_PAGINATION()); + dispatch(projectPanelActions.REQUEST_ITEMS()); + } } }; diff --cc src/views-components/context-menu/action-sets/root-project-action-set.ts index 556ba5db,c88b1b44..fb380fc4 --- a/src/views-components/context-menu/action-sets/root-project-action-set.ts +++ b/src/views-components/context-menu/action-sets/root-project-action-set.ts @@@ -5,15 -5,27 +5,28 @@@ import { reset } from "redux-form"; import { ContextMenuActionSet } from "../context-menu-action-set"; -import { projectActions } from "../../../store/project/project-action"; +import { projectActions } from "~/store/project/project-action"; +import { NewProjectIcon } from "~/components/icon/icon"; + import { collectionCreateActions } from "../../../store/collections/creator/collection-creator-action"; import { PROJECT_CREATE_DIALOG } from "../../dialog-create/dialog-project-create"; + import { COLLECTION_CREATE_DIALOG } from "../../dialog-create/dialog-collection-create"; + import { NewProjectIcon, CollectionIcon } from "../../../components/icon/icon"; - export const rootProjectActionSet: ContextMenuActionSet = [[{ - icon: NewProjectIcon, - name: "New project", - execute: (dispatch, resource) => { - dispatch(reset(PROJECT_CREATE_DIALOG)); - dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: resource.uuid })); + export const rootProjectActionSet: ContextMenuActionSet = [[ + { + icon: NewProjectIcon, + name: "New project", + execute: (dispatch, resource) => { + dispatch(reset(PROJECT_CREATE_DIALOG)); + dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: resource.uuid })); + } + }, + { + icon: CollectionIcon, + name: "New Collection", + execute: (dispatch, resource) => { + dispatch(reset(COLLECTION_CREATE_DIALOG)); + dispatch(collectionCreateActions.OPEN_COLLECTION_CREATOR({ ownerUuid: resource.uuid })); + } } - }]]; + ]]; diff --cc src/views-components/details-panel/empty-details.tsx index ccaa561f,47cb4030..76778d72 --- a/src/views-components/details-panel/empty-details.tsx +++ b/src/views-components/details-panel/empty-details.tsx @@@ -3,44 -3,10 +3,10 @@@ // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; - import { DefaultIcon, IconType, ProjectsIcon } from '~/components/icon/icon'; -import { DefaultIcon, ProjectsIcon } from '../../components/icon/icon'; -import { EmptyResource } from '../../models/empty'; ++import { DefaultIcon, ProjectsIcon } from '~/components/icon/icon'; +import { EmptyResource } from '~/models/empty'; import { DetailsData } from "./details-data"; - import Typography from "@material-ui/core/Typography"; - import { StyleRulesCallback, WithStyles, withStyles } from "@material-ui/core/styles"; - import { ArvadosTheme } from "~/common/custom-theme"; - import Icon from "@material-ui/core/Icon/Icon"; - - type CssRules = 'container' | 'icon'; - - const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ - container: { - textAlign: 'center' - }, - icon: { - color: theme.palette.grey["500"], - fontSize: '72px' - } - }); - - export interface EmptyStateDataProps { - message: string; - icon: IconType; - details?: string; - children?: React.ReactNode; - } - - type EmptyStateProps = EmptyStateDataProps & WithStyles; - - const EmptyState = withStyles(styles)( - ({ classes, details, message, children, icon: Icon }: EmptyStateProps) => - - - {message} - {details && {details}} - {children && {children}} - - ); -import { DefaultView } from '../../components/default-view/default-view'; ++import { DefaultView } from '~/components/default-view/default-view'; export class EmptyDetails extends DetailsData { getIcon(className?: string) { diff --cc src/views/favorite-panel/favorite-panel.tsx index 899ef3a0,a48395d4..618f0aba --- a/src/views/favorite-panel/favorite-panel.tsx +++ b/src/views/favorite-panel/favorite-panel.tsx @@@ -5,19 -5,20 +5,20 @@@ import * as React from 'react'; import { FavoritePanelItem } from './favorite-panel-item'; import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; -import { DataExplorer } from "../../views-components/data-explorer/data-explorer"; +import { DataExplorer } from "~/views-components/data-explorer/data-explorer"; import { DispatchProp, connect } from 'react-redux'; -import { DataColumns } from '../../components/data-table/data-table'; +import { DataColumns } from '~/components/data-table/data-table'; import { RouteComponentProps } from 'react-router'; -import { RootState } from '../../store/store'; -import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; -import { ContainerRequestState } from '../../models/container-request'; -import { SortDirection } from '../../components/data-table/data-column'; -import { ResourceKind } from '../../models/resource'; -import { resourceLabel } from '../../common/labels'; -import { ArvadosTheme } from '../../common/custom-theme'; -import { renderName, renderStatus, renderType, renderOwner, renderFileSize, renderDate } from '../../views-components/data-explorer/renderers'; -import { FAVORITE_PANEL_ID } from "../../store/favorite-panel/favorite-panel-action"; -import { FavoriteIcon } from '../../components/icon/icon'; +import { RootState } from '~/store/store'; +import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters'; +import { ContainerRequestState } from '~/models/container-request'; +import { SortDirection } from '~/components/data-table/data-column'; +import { ResourceKind } from '~/models/resource'; +import { resourceLabel } from '~/common/labels'; +import { ArvadosTheme } from '~/common/custom-theme'; +import { renderName, renderStatus, renderType, renderOwner, renderFileSize, renderDate } from '~/views-components/data-explorer/renderers'; +import { FAVORITE_PANEL_ID } from "~/store/favorite-panel/favorite-panel-action"; ++import { FavoriteIcon } from '~/components/icon/icon'; type CssRules = "toolbar" | "button"; diff --cc src/views/project-panel/project-panel.tsx index fccd93ef,cf4aca5b..e9179a11 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@@ -5,23 -5,29 +5,29 @@@ import * as React from 'react'; import { ProjectPanelItem } from './project-panel-item'; import { Button, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; -import { DataExplorer } from "../../views-components/data-explorer/data-explorer"; +import { DataExplorer } from "~/views-components/data-explorer/data-explorer"; import { DispatchProp, connect } from 'react-redux'; -import { DataColumns } from '../../components/data-table/data-table'; +import { DataColumns } from '~/components/data-table/data-table'; import { RouteComponentProps } from 'react-router'; -import { RootState } from '../../store/store'; -import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; -import { ContainerRequestState } from '../../models/container-request'; -import { SortDirection } from '../../components/data-table/data-column'; -import { ResourceKind } from '../../models/resource'; -import { resourceLabel } from '../../common/labels'; -import { ArvadosTheme } from '../../common/custom-theme'; -import { renderName, renderStatus, renderType, renderOwner, renderFileSize, renderDate } from '../../views-components/data-explorer/renderers'; -import { restoreBranch } from '../../store/navigation/navigation-action'; -import { ProjectIcon } from '../../components/icon/icon'; +import { RootState } from '~/store/store'; +import { DataTableFilterItem } from '~/components/data-table-filters/data-table-filters'; +import { ContainerRequestState } from '~/models/container-request'; +import { SortDirection } from '~/components/data-table/data-column'; +import { ResourceKind } from '~/models/resource'; +import { resourceLabel } from '~/common/labels'; +import { ArvadosTheme } from '~/common/custom-theme'; +import { renderName, renderStatus, renderType, renderOwner, renderFileSize, renderDate } from '~/views-components/data-explorer/renderers'; +import { restoreBranch } from '~/store/navigation/navigation-action'; ++import { ProjectIcon } from '~/components/icon/icon'; - type CssRules = "toolbar" | "button"; + type CssRules = 'root' | "toolbar" | "button"; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ + root: { + position: 'relative', + width: '100%', + height: '100%' + }, toolbar: { paddingBottom: theme.spacing.unit * 3, textAlign: "right" diff --cc src/views/workbench/workbench.test.tsx index 3587283e,588b6d9b..d03e1172 --- a/src/views/workbench/workbench.test.tsx +++ b/src/views/workbench/workbench.test.tsx @@@ -17,8 -19,10 +17,9 @@@ const history = createBrowserHistory() it('renders without crashing', () => { const div = document.createElement('div'); - const store = configureStore(createBrowserHistory(), createServices("/arvados/v1")); + const services = createServices("/arvados/v1"); ++ services.authService.getUuid = jest.fn().mockReturnValueOnce('test'); + const store = configureStore(createBrowserHistory(), services); ReactDOM.render( diff --cc src/views/workbench/workbench.tsx index a7f14aad,356a6706..a0be3729 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@@ -6,49 -6,49 +6,49 @@@ import * as React from 'react' import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import { connect, DispatchProp } from "react-redux"; - import { Route, RouteComponentProps, Switch } from "react-router"; -import { Route, Switch, RouteComponentProps, Redirect } from "react-router"; -import { login, logout } from "../../store/auth/auth-action"; -import { User } from "../../models/user"; -import { RootState } from "../../store/store"; -import { MainAppBar, MainAppBarActionProps, MainAppBarMenuItem } from '../../views-components/main-app-bar/main-app-bar'; -import { Breadcrumb } from '../../components/breadcrumbs/breadcrumbs'; ++import { Route, RouteComponentProps, Switch, Redirect } from "react-router"; +import { login, logout } from "~/store/auth/auth-action"; +import { User } from "~/models/user"; +import { RootState } from "~/store/store"; +import { MainAppBar, MainAppBarActionProps, MainAppBarMenuItem } from '~/views-components/main-app-bar/main-app-bar'; +import { Breadcrumb } from '~/components/breadcrumbs/breadcrumbs'; import { push } from 'react-router-redux'; import { reset } from 'redux-form'; -import { ProjectTree } from '../../views-components/project-tree/project-tree'; -import { TreeItem } from "../../components/tree/tree"; -import { getTreePath } from '../../store/project/project-reducer'; -import { sidePanelActions } from '../../store/side-panel/side-panel-action'; -import { SidePanel, SidePanelItem } from '../../components/side-panel/side-panel'; -import { ItemMode, setProjectItem } from "../../store/navigation/navigation-action"; -import { projectActions } from "../../store/project/project-action"; -import { collectionCreateActions } from '../../store/collections/creator/collection-creator-action'; -import { ProjectPanel } from "../project-panel/project-panel"; -import { DetailsPanel } from '../../views-components/details-panel/details-panel'; -import { ArvadosTheme } from '../../common/custom-theme'; -import { CreateProjectDialog } from "../../views-components/create-project-dialog/create-project-dialog"; +import { ProjectTree } from '~/views-components/project-tree/project-tree'; +import { TreeItem } from "~/components/tree/tree"; +import { getTreePath } from '~/store/project/project-reducer'; +import { sidePanelActions } from '~/store/side-panel/side-panel-action'; +import { SidePanel, SidePanelItem } from '~/components/side-panel/side-panel'; +import { ItemMode, setProjectItem } from "~/store/navigation/navigation-action"; +import { projectActions } from "~/store/project/project-action"; +import { collectionCreateActions } from '~/store/collections/creator/collection-creator-action'; +import { ProjectPanel } from "~/views/project-panel/project-panel"; +import { DetailsPanel } from '~/views-components/details-panel/details-panel'; +import { ArvadosTheme } from '~/common/custom-theme'; +import { CreateProjectDialog } from "~/views-components/create-project-dialog/create-project-dialog"; -import { detailsPanelActions, loadDetails } from "../../store/details-panel/details-panel-action"; -import { contextMenuActions } from "../../store/context-menu/context-menu-actions"; -import { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; -import { ProjectResource } from '../../models/project'; -import { ResourceKind } from '../../models/resource'; -import { ContextMenu, ContextMenuKind } from "../../views-components/context-menu/context-menu"; +import { detailsPanelActions, loadDetails } from "~/store/details-panel/details-panel-action"; +import { contextMenuActions } from "~/store/context-menu/context-menu-actions"; +import { SidePanelIdentifiers } from '~/store/side-panel/side-panel-reducer'; +import { ProjectResource } from '~/models/project'; +import { ResourceKind } from '~/models/resource'; +import { ContextMenu, ContextMenuKind } from "~/views-components/context-menu/context-menu"; import { FavoritePanel } from "../favorite-panel/favorite-panel"; -import { CurrentTokenDialog } from '../../views-components/current-token-dialog/current-token-dialog'; -import { Snackbar } from '../../views-components/snackbar/snackbar'; -import { favoritePanelActions } from '../../store/favorite-panel/favorite-panel-action'; -import { CreateCollectionDialog } from '../../views-components/create-collection-dialog/create-collection-dialog'; +import { CurrentTokenDialog } from '~/views-components/current-token-dialog/current-token-dialog'; +import { Snackbar } from '~/views-components/snackbar/snackbar'; +import { favoritePanelActions } from '~/store/favorite-panel/favorite-panel-action'; +import { CreateCollectionDialog } from '~/views-components/create-collection-dialog/create-collection-dialog'; import { CollectionPanel } from '../collection-panel/collection-panel'; -import { loadCollection, loadCollectionTags } from '../../store/collection-panel/collection-panel-action'; -import { getCollectionUrl } from '../../models/collection'; -import { UpdateCollectionDialog } from '../../views-components/update-collection-dialog/update-collection-dialog.'; -import { AuthService } from "../../services/auth-service/auth-service"; -import { RenameFileDialog } from '../../views-components/rename-file-dialog/rename-file-dialog'; -import { FileRemoveDialog } from '../../views-components/file-remove-dialog/file-remove-dialog'; -import { MultipleFilesRemoveDialog } from '../../views-components/file-remove-dialog/multiple-files-remove-dialog'; -import { DialogCollectionCreateWithSelectedFile } from '../../views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected'; -import { COLLECTION_CREATE_DIALOG } from '../../views-components/dialog-create/dialog-collection-create'; -import { PROJECT_CREATE_DIALOG } from '../../views-components/dialog-create/dialog-project-create'; +import { loadCollection, loadCollectionTags } from '~/store/collection-panel/collection-panel-action'; +import { getCollectionUrl } from '~/models/collection'; +import { UpdateCollectionDialog } from '~/views-components/update-collection-dialog/update-collection-dialog.'; +import { AuthService } from "~/services/auth-service/auth-service"; +import { RenameFileDialog } from '~/views-components/rename-file-dialog/rename-file-dialog'; +import { FileRemoveDialog } from '~/views-components/file-remove-dialog/file-remove-dialog'; +import { MultipleFilesRemoveDialog } from '~/views-components/file-remove-dialog/multiple-files-remove-dialog'; +import { DialogCollectionCreateWithSelectedFile } from '~/views-components/create-collection-dialog-with-selected/create-collection-dialog-with-selected'; +import { COLLECTION_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-collection-create'; +import { PROJECT_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-project-create'; const DRAWER_WITDH = 240; const APP_BAR_HEIGHT = 100;