From: Janicki Artur Date: Mon, 13 Aug 2018 09:25:30 +0000 (+0200) Subject: redirect from empty routing to root project and display list X-Git-Tag: 1.2.0~4^2~1 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/3626497d024cddee09990afd6e08a24debaf5c7b redirect from empty routing to root project and display list Feature #13986 Arvados-DCO-1.1-Signed-off-by: Janicki Artur --- diff --git a/src/components/side-panel/side-panel.tsx b/src/components/side-panel/side-panel.tsx index ec648e11..c7649d4d 100644 --- a/src/components/side-panel/side-panel.tsx +++ b/src/components/side-panel/side-panel.tsx @@ -59,7 +59,7 @@ export interface SidePanelItem { open?: boolean; margin?: boolean; openAble?: boolean; - activeAction?: (dispatch: Dispatch) => void; + activeAction?: (dispatch: Dispatch, uuid?: string) => void; } interface SidePanelDataProps { diff --git a/src/store/navigation/navigation-action.ts b/src/store/navigation/navigation-action.ts index defddada..dc680215 100644 --- a/src/store/navigation/navigation-action.ts +++ b/src/store/navigation/navigation-action.ts @@ -33,12 +33,11 @@ export enum ItemMode { } export const setProjectItem = (itemId: string, itemMode: ItemMode) => - (dispatch: Dispatch, getState: () => RootState) => { + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const { projects, router } = getState(); const treeItem = findTreeItem(projects.items, itemId); if (treeItem) { - const resourceUrl = getResourceUrl(treeItem.data); if (itemMode === ItemMode.ACTIVE || itemMode === ItemMode.BOTH) { @@ -61,6 +60,13 @@ export const setProjectItem = (itemId: string, itemMode: ItemMode) => 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 --git a/src/store/project/project-action.ts b/src/store/project/project-action.ts index 5caf0121..9777dc73 100644 --- a/src/store/project/project-action.ts +++ b/src/store/project/project-action.ts @@ -26,18 +26,19 @@ export const projectActions = unionize({ value: 'payload' }); -export const getProjectList = (parentUuid: string = '') => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { - dispatch(projectActions.PROJECTS_REQUEST(parentUuid)); - return services.projectService.list({ - filters: FilterBuilder - .create() - .addEqual("ownerUuid", parentUuid) - }).then(({ items: projects }) => { - dispatch(projectActions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid })); - dispatch(checkPresenceInFavorites(projects.map(project => project.uuid))); - return projects; - }); -}; +export const getProjectList = (parentUuid: string = '') => + (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + dispatch(projectActions.PROJECTS_REQUEST(parentUuid)); + return services.projectService.list({ + filters: FilterBuilder + .create() + .addEqual("ownerUuid", parentUuid) + }).then(({ items: projects }) => { + dispatch(projectActions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid })); + dispatch(checkPresenceInFavorites(projects.map(project => project.uuid))); + return projects; + }); + }; export const createProject = (project: Partial) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { diff --git a/src/store/side-panel/side-panel-reducer.ts b/src/store/side-panel/side-panel-reducer.ts index cae42ac3..7a27e5ad 100644 --- a/src/store/side-panel/side-panel-reducer.ts +++ b/src/store/side-panel/side-panel-reducer.ts @@ -9,6 +9,9 @@ import { ProjectsIcon, ShareMeIcon, WorkflowIcon, RecentIcon, FavoriteIcon, Tras import { Dispatch } from "redux"; import { push } from "react-router-redux"; import { favoritePanelActions } from "../favorite-panel/favorite-panel-action"; +import { projectPanelActions } from "../project-panel/project-panel-action"; +import { projectActions } from "../project/project-action"; +import { getProjectUrl } from "../../models/project"; export type SidePanelState = SidePanelItem[]; @@ -56,7 +59,13 @@ export const sidePanelData = [ open: false, active: false, margin: true, - openAble: true + openAble: true, + activeAction: (dispatch: Dispatch, uuid: string) => { + dispatch(projectActions.TOGGLE_PROJECT_TREE_ITEM_ACTIVE(uuid)); + dispatch(push(getProjectUrl(uuid))); + dispatch(projectPanelActions.RESET_PAGINATION()); + dispatch(projectPanelActions.REQUEST_ITEMS()); + } }, { id: SidePanelIdentifiers.SHARED_WITH_ME, diff --git 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 index 8c57f47f..c88b1b44 100644 --- 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 @@ -6,14 +6,26 @@ import { reset } from "redux-form"; import { ContextMenuActionSet } from "../context-menu-action-set"; 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 --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index 9c3ba1b1..cf4aca5b 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -174,7 +174,7 @@ export const ProjectPanel = withStyles(styles)( onContextMenu={this.props.onContextMenu} extractKey={(item: ProjectPanelItem) => item.uuid} defaultIcon={ProjectIcon} - defaultMessages={['Your project is empty. Please create a project', 'or create a collection and upload a data.']} /> + defaultMessages={['Your project is empty.', 'Please create a project or create a collection and upload a data.']} /> ; } diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index ce8e2462..356a6706 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -6,7 +6,7 @@ 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, Switch, RouteComponentProps } 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"; @@ -228,6 +228,7 @@ export const Workbench = withStyles(styles)(
+ } /> @@ -362,9 +363,10 @@ export const Workbench = withStyles(styles)( toggleSidePanelActive = (itemId: string) => { this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(itemId)); this.props.dispatch(projectActions.RESET_PROJECT_TREE_ACTIVITY(itemId)); + const panelItem = this.props.sidePanelItems.find(it => it.id === itemId); if (panelItem && panelItem.activeAction) { - panelItem.activeAction(this.props.dispatch); + panelItem.activeAction(this.props.dispatch, this.props.authService.getUuid()); } }