X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/7a8fafa13f5f94945cf0a4c5965db273f3435823..5fdf4adc6981e60169966e549e37c5611d7d420b:/src/store/workbench/workbench-actions.ts?ds=sidebyside diff --git a/src/store/workbench/workbench-actions.ts b/src/store/workbench/workbench-actions.ts index 7077f414..22b7b483 100644 --- a/src/store/workbench/workbench-actions.ts +++ b/src/store/workbench/workbench-actions.ts @@ -9,13 +9,13 @@ import { loadCollectionPanel } from '~/store/collection-panel/collection-panel-a import { snackbarActions } from '../snackbar/snackbar-actions'; import { loadFavoritePanel } from '../favorite-panel/favorite-panel-action'; import { openProjectPanel, projectPanelActions } from '~/store/project-panel/project-panel-action'; -import { activateSidePanelTreeItem, initSidePanelTree, SidePanelTreeCategory, loadSidePanelTreeProjects } from '../side-panel-tree/side-panel-tree-actions'; +import { activateSidePanelTreeItem, initSidePanelTree, SidePanelTreeCategory, loadSidePanelTreeProjects, getSidePanelTreeNodeAncestorsIds } from '../side-panel-tree/side-panel-tree-actions'; import { loadResource, updateResources } from '../resources/resources-actions'; import { favoritePanelActions } from '~/store/favorite-panel/favorite-panel-action'; import { projectPanelColumns } from '~/views/project-panel/project-panel'; import { favoritePanelColumns } from '~/views/favorite-panel/favorite-panel'; import { matchRootRoute } from '~/routes/routes'; -import { setCollectionBreadcrumbs, setProjectBreadcrumbs, setSidePanelBreadcrumbs, setProcessBreadcrumbs } from '../breadcrumbs/breadcrumbs-actions'; +import { setCollectionBreadcrumbs, setProjectBreadcrumbs, setSidePanelBreadcrumbs, setProcessBreadcrumbs, setSharedWithMeBreadcrumbs } from '../breadcrumbs/breadcrumbs-actions'; import { navigateToProject } from '../navigation/navigation-action'; import { MoveToFormDialogData } from '~/store/move-to-dialog/move-to-dialog'; import { ServiceRepository } from '~/services/services'; @@ -29,11 +29,17 @@ import * as collectionCopyActions from '~/store/collections/collection-copy-acti import * as collectionUpdateActions from '~/store/collections/collection-update-actions'; import * as collectionMoveActions from '~/store/collections/collection-move-actions'; import * as processesActions from '../processes/processes-actions'; +import * as processMoveActions from '~/store/processes/process-move-actions'; +import * as processUpdateActions from '~/store/processes/process-update-actions'; +import * as processCopyActions from '~/store/processes/process-copy-actions'; import { trashPanelColumns } from "~/views/trash-panel/trash-panel"; import { loadTrashPanel, trashPanelActions } from "~/store/trash-panel/trash-panel-action"; import { initProcessLogsPanel } from '../process-logs-panel/process-logs-panel-actions'; import { loadProcessPanel } from '~/store/process-panel/process-panel-actions'; +import { sharedWithMePanelActions } from '~/store/shared-with-me-panel/shared-with-me-panel-actions'; +import { loadSharedWithMePanel } from '../shared-with-me-panel/shared-with-me-panel-actions'; +import { CopyFormDialogData } from '~/store/copy-dialog/copy-dialog'; export const loadWorkbench = () => async (dispatch: Dispatch, getState: () => RootState) => { @@ -45,6 +51,7 @@ export const loadWorkbench = () => dispatch(projectPanelActions.SET_COLUMNS({ columns: projectPanelColumns })); dispatch(favoritePanelActions.SET_COLUMNS({ columns: favoritePanelColumns })); dispatch(trashPanelActions.SET_COLUMNS({ columns: trashPanelColumns })); + dispatch(sharedWithMePanelActions.SET_COLUMNS({ columns: projectPanelColumns })); dispatch(initSidePanelTree()); if (router.location) { const match = matchRootRoute(router.location.pathname); @@ -75,10 +82,16 @@ export const loadTrash = () => }; export const loadProject = (uuid: string) => - async (dispatch: Dispatch) => { - await dispatch(activateSidePanelTreeItem(uuid)); - dispatch(setProjectBreadcrumbs(uuid)); - dispatch(openProjectPanel(uuid)); + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + dispatch(openProjectPanel(uuid)); + await dispatch(activateSidePanelTreeItem(uuid)); + const ancestors = getSidePanelTreeNodeAncestorsIds(uuid)(getState().treePicker); + if (ancestors.find(uuid => uuid === services.authService.getUuid())) { + dispatch(setProjectBreadcrumbs(uuid)); + } else { + dispatch(setSharedWithMeBreadcrumbs(uuid)); + dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.SHARED_WITH_ME)); + } dispatch(loadDetailsPanel(uuid)); }; @@ -160,7 +173,7 @@ export const updateCollection = (data: collectionUpdateActions.CollectionUpdateF } }; -export const copyCollection = (data: collectionCopyActions.CollectionCopyFormDialogData) => +export const copyCollection = (data: CopyFormDialogData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { try { const collection = await dispatch(collectionCopyActions.copyCollection(data)); @@ -191,15 +204,56 @@ export const loadProcess = (uuid: string) => await dispatch(activateSidePanelTreeItem(process.containerRequest.ownerUuid)); dispatch(setProcessBreadcrumbs(uuid)); dispatch(loadDetailsPanel(uuid)); - + + }; + +export const updateProcess = (data: processUpdateActions.ProcessUpdateFormDialogData) => + async (dispatch: Dispatch) => { + try { + const process = await dispatch(processUpdateActions.updateProcess(data)); + if (process) { + dispatch(snackbarActions.OPEN_SNACKBAR({ + message: "Process has been successfully updated.", + hideDuration: 2000 + })); + dispatch(updateResources([process])); + dispatch(reloadProjectMatchingUuid([process.ownerUuid])); + } + } catch (e) { + dispatch(snackbarActions.OPEN_SNACKBAR({ message: e.message, hideDuration: 2000 })); + } + }; + +export const moveProcess = (data: MoveToFormDialogData) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + try { + const process = await dispatch(processMoveActions.moveProcess(data)); + dispatch(updateResources([process])); + dispatch(reloadProjectMatchingUuid([process.ownerUuid])); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Process has been moved.', hideDuration: 2000 })); + } catch (e) { + dispatch(snackbarActions.OPEN_SNACKBAR({ message: e.message, hideDuration: 2000 })); + } + }; + +export const copyProcess = (data: CopyFormDialogData) => + async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + try { + const process = await dispatch(processCopyActions.copyProcess(data)); + dispatch(updateResources([process])); + dispatch(reloadProjectMatchingUuid([process.ownerUuid])); + dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Process has been copied.', hideDuration: 2000 })); + } catch (e) { + dispatch(snackbarActions.OPEN_SNACKBAR({ message: e.message, hideDuration: 2000 })); + } }; export const loadProcessLog = (uuid: string) => async (dispatch: Dispatch) => { const process = await dispatch(processesActions.loadProcess(uuid)); - await dispatch(activateSidePanelTreeItem(process.containerRequest.ownerUuid)); dispatch(setProcessBreadcrumbs(uuid)); dispatch(initProcessLogsPanel(uuid)); + await dispatch(activateSidePanelTreeItem(process.containerRequest.ownerUuid)); }; export const resourceIsNotLoaded = (uuid: string) => @@ -222,3 +276,9 @@ export const reloadProjectMatchingUuid = (matchingUuids: string[]) => dispatch(loadProject(currentProjectPanelUuid)); } }; + +export const loadSharedWithMe = (dispatch: Dispatch) => { + dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.SHARED_WITH_ME)); + dispatch(loadSharedWithMePanel()); + dispatch(setSidePanelBreadcrumbs(SidePanelTreeCategory.SHARED_WITH_ME)); +};