Merge branch 'master' into 14452-my-account
[arvados-workbench2.git] / src / store / navigation / navigation-action.ts
index db8efbfd989291a8dcf66dd8a49f72a2a338c75c..80a7f2136eee707a5c87e320d9b74722a4e1ff20 100644 (file)
 
 import { Dispatch, compose } from 'redux';
 import { push } from "react-router-redux";
-import { RootState } from "../store";
-import { ResourceKind, Resource } from '~/models/resource';
+import { ResourceKind, extractUuidKind } from '~/models/resource';
 import { getCollectionUrl } from "~/models/collection";
 import { getProjectUrl } from "~/models/project";
-import { getResource } from '~/store/resources/resources';
-import { loadDetailsPanel } from '~/store/details-panel/details-panel-action';
-import { loadCollectionPanel } from '~/store/collection-panel/collection-panel-action';
-import { snackbarActions } from '../snackbar/snackbar-actions';
-import { resourceLabel } from "~/common/labels";
-import { loadFavoritePanel } from '../favorite-panel/favorite-panel-action';
-import { openProjectPanel, projectPanelActions } from '~/store/project-panel/project-panel-action';
-import { activateSidePanelTreeItem, initSidePanelTree, SidePanelTreeCategory } from '../side-panel-tree/side-panel-tree-actions';
-import { Routes } from '~/routes/routes';
-import { loadResource } from '../resources/resources-actions';
+import { SidePanelTreeCategory } from '../side-panel-tree/side-panel-tree-actions';
+import { Routes, getProcessUrl, getProcessLogUrl } from '~/routes/routes';
+import { RootState } from '~/store/store';
 import { ServiceRepository } from '~/services/services';
-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';
-
-export const navigateToResource = (uuid: string) =>
-    async (dispatch: Dispatch, getState: () => RootState) => {
-        const resource = getResource(uuid)(getState().resources);
-        if (resource) {
-            dispatch<any>(getResourceNavigationAction(resource));
-        }
-    };
-
-const getResourceNavigationAction = (resource: Resource) => {
-    switch (resource.kind) {
-        case ResourceKind.COLLECTION:
-            return navigateToCollection(resource.uuid);
-        case ResourceKind.PROJECT:
-        case ResourceKind.USER:
-            return navigateToProject(resource.uuid);
-        default:
-            return cannotNavigateToResource(resource);
-    }
-};
 
-export const loadWorkbench = () =>
-    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-        const { auth, router } = getState();
-        const { user } = auth;
-        if (user) {
-            const userResource = await dispatch<any>(loadResource(user.uuid));
-            if (userResource) {
-                dispatch(projectPanelActions.SET_COLUMNS({ columns: projectPanelColumns }));
-                dispatch(favoritePanelActions.SET_COLUMNS({ columns: favoritePanelColumns }));
-                dispatch<any>(initSidePanelTree());
-                if (router.location) {
-                    const match = matchRootRoute(router.location.pathname);
-                    if (match) {
-                        dispatch(navigateToProject(userResource.uuid));
-                    }
-                }
-            } else {
-                dispatch(userIsNotAuthenticated);
-            }
-        } else {
-            dispatch(userIsNotAuthenticated);
+export const navigateTo = (uuid: string) =>
+    async (dispatch: Dispatch) => {
+        const kind = extractUuidKind(uuid);
+        if (kind === ResourceKind.PROJECT || kind === ResourceKind.USER) {
+            dispatch<any>(navigateToProject(uuid));
+        } else if (kind === ResourceKind.COLLECTION) {
+            dispatch<any>(navigateToCollection(uuid));
+        } else if (kind === ResourceKind.CONTAINER_REQUEST) {
+            dispatch<any>(navigateToProcess(uuid));
+        }
+        if (uuid === SidePanelTreeCategory.FAVORITES) {
+            dispatch<any>(navigateToFavorites);
+        } else if (uuid === SidePanelTreeCategory.SHARED_WITH_ME) {
+            dispatch(navigateToSharedWithMe);
+        } else if (uuid === SidePanelTreeCategory.WORKFLOWS) {
+            dispatch(navigateToWorkflows);
+        } else if (uuid === SidePanelTreeCategory.TRASH) {
+            dispatch(navigateToTrash);
         }
     };
 
+export const navigateToRoot = push(Routes.ROOT);
+
 export const navigateToFavorites = push(Routes.FAVORITES);
 
-export const loadFavorites = () =>
-    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
-        dispatch<any>(activateSidePanelTreeItem(SidePanelTreeCategory.FAVORITES));
-        dispatch<any>(loadFavoritePanel());
-    };
+export const navigateToTrash = push(Routes.TRASH);
 
+export const navigateToWorkflows = push(Routes.WORKFLOWS);
 
 export const navigateToProject = compose(push, getProjectUrl);
 
-export const loadProject = (uuid: string) =>
-    (dispatch: Dispatch) => {
-        dispatch<any>(activateSidePanelTreeItem(uuid));
-        dispatch<any>(openProjectPanel(uuid));
-        dispatch(loadDetailsPanel(uuid));
-    };
-
 export const navigateToCollection = compose(push, getCollectionUrl);
 
-export const loadCollection = (uuid: string) =>
-    async (dispatch: Dispatch) => {
-        const collection = await dispatch<any>(loadCollectionPanel(uuid));
-        dispatch<any>(activateSidePanelTreeItem(collection.ownerUuid));
-        dispatch(loadDetailsPanel(uuid));
-    };
+export const navigateToProcess = compose(push, getProcessUrl);
+
+export const navigateToProcessLogs = compose(push, getProcessLogUrl);
+
+export const navigateToRootProject = (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+    const rootProjectUuid = services.authService.getUuid();
+    if (rootProjectUuid) {
+        dispatch(navigateToProject(rootProjectUuid));
+    }
+};
+
+export const navigateToSharedWithMe = push(Routes.SHARED_WITH_ME);
+
+export const navigateToRunProcess = push(Routes.RUN_PROCESS);
+
+export const navigateToSearchResults = push(Routes.SEARCH_RESULTS);
 
-export const cannotNavigateToResource = ({ kind, uuid }: Resource) =>
-    snackbarActions.OPEN_SNACKBAR({
-        message: `${resourceLabel(kind)} identified by ${uuid} cannot be opened.`
-    });
+export const navigateToVirtualMachines = push(Routes.VIRTUAL_MACHINES);
 
-export const resourceIsNotLoaded = (uuid: string) =>
-    snackbarActions.OPEN_SNACKBAR({
-        message: `Resource identified by ${uuid} is not loaded.`
-    });
+export const navigateToRepositories = push(Routes.REPOSITORIES);
 
-export const userIsNotAuthenticated = snackbarActions.OPEN_SNACKBAR({
-    message: 'User is not authenticated'
-});
+export const navigateToSshKeys= push(Routes.SSH_KEYS);
 
-export const couldNotLoadUser = snackbarActions.OPEN_SNACKBAR({
-    message: 'Could not load user'
-});
\ No newline at end of file
+export const navigateToMyAccount = push(Routes.MY_ACCOUNT);