X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/b6ac7fe88d347582d39fffa002e300af222c578f..e868a45a2a187dca9812c5e6e201503f3e427e08:/src/store/workbench/workbench-actions.ts diff --git a/src/store/workbench/workbench-actions.ts b/src/store/workbench/workbench-actions.ts index 3aa59802..3142b633 100644 --- a/src/store/workbench/workbench-actions.ts +++ b/src/store/workbench/workbench-actions.ts @@ -31,7 +31,10 @@ import { setProcessBreadcrumbs, setSharedWithMeBreadcrumbs, setSidePanelBreadcrumbs, - setTrashBreadcrumbs + setTrashBreadcrumbs, + setUsersBreadcrumbs, + setMyAccountBreadcrumbs, + setUserProfileBreadcrumbs, } from 'store/breadcrumbs/breadcrumbs-actions'; import { navigateTo, navigateToRootProject } from 'store/navigation/navigation-action'; import { MoveToFormDialogData } from 'store/move-to-dialog/move-to-dialog'; @@ -49,16 +52,14 @@ 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 'store/process-logs-panel/process-logs-panel-actions'; import { loadProcessPanel } from 'store/process-panel/process-panel-actions'; import { loadSharedWithMePanel, sharedWithMePanelActions } from 'store/shared-with-me-panel/shared-with-me-panel-actions'; import { CopyFormDialogData } from 'store/copy-dialog/copy-dialog'; -import { loadWorkflowPanel, workflowPanelActions } from 'store/workflow-panel/workflow-panel-actions'; +import { workflowPanelActions } from 'store/workflow-panel/workflow-panel-actions'; import { loadSshKeysPanel } from 'store/auth/auth-action-ssh'; -import { loadMyAccountPanel } from 'store/my-account/my-account-panel-actions'; import { loadLinkAccountPanel, linkAccountPanelActions } from 'store/link-account-panel/link-account-panel-actions'; import { loadSiteManagerPanel } from 'store/auth/auth-action-session'; import { workflowPanelColumns } from 'views/workflow-panel/workflow-panel-view'; @@ -80,17 +81,16 @@ import { loadVirtualMachinesPanel } from 'store/virtual-machines/virtual-machine import { loadRepositoriesPanel } from 'store/repositories/repositories-actions'; import { loadKeepServicesPanel } from 'store/keep-services/keep-services-actions'; import { loadUsersPanel, userBindedActions } from 'store/users/users-actions'; +import * as userProfilePanelActions from 'store/user-profile/user-profile-actions'; import { linkPanelActions, loadLinkPanel } from 'store/link-panel/link-panel-actions'; -import { computeNodesActions, loadComputeNodesPanel } from 'store/compute-nodes/compute-nodes-actions'; import { linkPanelColumns } from 'views/link-panel/link-panel-root'; import { userPanelColumns } from 'views/user-panel/user-panel'; -import { computeNodePanelColumns } from 'views/compute-node-panel/compute-node-panel-root'; import { loadApiClientAuthorizationsPanel, apiClientAuthorizationsActions } from 'store/api-client-authorizations/api-client-authorizations-actions'; import { apiClientAuthorizationPanelColumns } from 'views/api-client-authorization-panel/api-client-authorization-panel-root'; import * as groupPanelActions from 'store/groups-panel/groups-panel-actions'; import { groupsPanelColumns } from 'views/groups-panel/groups-panel'; import * as groupDetailsPanelActions from 'store/group-details-panel/group-details-panel-actions'; -import { groupDetailsPanelColumns } from 'views/group-details-panel/group-details-panel'; +import { groupDetailsMembersPanelColumns, groupDetailsPermissionsPanelColumns } from 'views/group-details-panel/group-details-panel'; import { DataTableFetchMode } from "components/data-table/data-table"; import { loadPublicFavoritePanel, publicFavoritePanelActions } from 'store/public-favorites-panel/public-favorites-action'; import { publicFavoritePanelColumns } from 'views/public-favorites-panel/public-favorites-panel'; @@ -100,8 +100,8 @@ import { subprocessPanelActions } from 'store/subprocess-panel/subprocess-panel- import { subprocessPanelColumns } from 'views/subprocess-panel/subprocess-panel-root'; import { loadAllProcessesPanel, allProcessesPanelActions } from '../all-processes-panel/all-processes-panel-action'; import { allProcessesPanelColumns } from 'views/all-processes-panel/all-processes-panel'; -import { collectionPanelFilesAction } from '../collection-panel/collection-panel-files/collection-panel-files-actions'; -import { createTree } from 'models/tree'; +import { AdminMenuIcon } from 'components/icon/icon'; +import { userProfileGroupsColumns } from 'views/user-profile-panel/user-profile-panel-root'; export const WORKBENCH_LOADING_SCREEN = 'workbenchLoadingScreen'; @@ -138,9 +138,10 @@ export const loadWorkbench = () => dispatch(searchResultsPanelActions.SET_COLUMNS({ columns: searchResultsPanelColumns })); dispatch(userBindedActions.SET_COLUMNS({ columns: userPanelColumns })); dispatch(groupPanelActions.GroupsPanelActions.SET_COLUMNS({ columns: groupsPanelColumns })); - dispatch(groupDetailsPanelActions.GroupDetailsPanelActions.SET_COLUMNS({ columns: groupDetailsPanelColumns })); + dispatch(groupDetailsPanelActions.GroupMembersPanelActions.SET_COLUMNS({ columns: groupDetailsMembersPanelColumns })); + dispatch(groupDetailsPanelActions.GroupPermissionsPanelActions.SET_COLUMNS({ columns: groupDetailsPermissionsPanelColumns })); + dispatch(userProfilePanelActions.UserProfileGroupsActions.SET_COLUMNS({ columns: userProfileGroupsColumns })); dispatch(linkPanelActions.SET_COLUMNS({ columns: linkPanelColumns })); - dispatch(computeNodesActions.SET_COLUMNS({ columns: computeNodePanelColumns })); dispatch(apiClientAuthorizationsActions.SET_COLUMNS({ columns: apiClientAuthorizationPanelColumns })); dispatch(collectionsContentAddressActions.SET_COLUMNS({ columns: collectionContentAddressPanelColumns })); dispatch(subprocessPanelActions.SET_COLUMNS({ columns: subprocessPanelColumns })); @@ -196,35 +197,34 @@ export const loadProject = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const userUuid = getUserUuid(getState()); dispatch(setIsProjectPanelTrashed(false)); - if (userUuid) { - if (extractUuidKind(uuid) === ResourceKind.USER && userUuid !== uuid) { - // Load another users home projects - dispatch(finishLoadingProject(uuid)); - } else if (userUuid !== uuid) { - const match = await loadGroupContentsResource({ uuid, userUuid, services }); - match({ - OWNED: async project => { - await dispatch(activateSidePanelTreeItem(uuid)); - dispatch(setSidePanelBreadcrumbs(uuid)); - dispatch(finishLoadingProject(project)); - }, - SHARED: project => { - dispatch(setSharedWithMeBreadcrumbs(uuid)); - dispatch(activateSidePanelTreeItem(uuid)); - dispatch(finishLoadingProject(project)); - }, - TRASHED: project => { - dispatch(setTrashBreadcrumbs(uuid)); - dispatch(setIsProjectPanelTrashed(true)); - dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.TRASH)); - dispatch(finishLoadingProject(project)); - } - }); - } else { - await dispatch(activateSidePanelTreeItem(userUuid)); - dispatch(setSidePanelBreadcrumbs(userUuid)); - dispatch(finishLoadingProject(userUuid)); - } + if (!userUuid) { + return; + } + if (extractUuidKind(uuid) === ResourceKind.USER && userUuid !== uuid) { + // Load another users home projects + dispatch(finishLoadingProject(uuid)); + } else if (userUuid !== uuid) { + await dispatch(finishLoadingProject(uuid)); + const match = await loadGroupContentsResource({ uuid, userUuid, services }); + match({ + OWNED: async () => { + await dispatch(activateSidePanelTreeItem(uuid)); + dispatch(setSidePanelBreadcrumbs(uuid)); + }, + SHARED: async () => { + await dispatch(activateSidePanelTreeItem(uuid)); + dispatch(setSharedWithMeBreadcrumbs(uuid)); + }, + TRASHED: async () => { + await dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.TRASH)); + dispatch(setTrashBreadcrumbs(uuid)); + dispatch(setIsProjectPanelTrashed(true)); + } + }); + } else { + await dispatch(finishLoadingProject(userUuid)); + await dispatch(activateSidePanelTreeItem(userUuid)); + dispatch(setSidePanelBreadcrumbs(userUuid)); } }); @@ -274,13 +274,25 @@ export const updateProject = (data: projectUpdateActions.ProjectUpdateFormDialog } }; +export const updateGroup = (data: projectUpdateActions.ProjectUpdateFormDialogData) => + async (dispatch: Dispatch) => { + const updatedGroup = await dispatch(groupPanelActions.updateGroup(data)); + if (updatedGroup) { + dispatch(snackbarActions.OPEN_SNACKBAR({ + message: "Group has been successfully updated.", + hideDuration: 2000, + kind: SnackbarKind.SUCCESS + })); + await dispatch(loadSidePanelTreeProjects(updatedGroup.ownerUuid)); + dispatch(reloadProjectMatchingUuid([updatedGroup.ownerUuid, updatedGroup.uuid])); + } + }; + export const loadCollection = (uuid: string) => handleFirstTimeLoad( async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { const userUuid = getUserUuid(getState()); if (userUuid) { - // Clear collection files panel - dispatch(collectionPanelFilesAction.SET_COLLECTION_FILES({ files: createTree() })); const match = await loadGroupContentsResource({ uuid, userUuid, services }); match({ OWNED: async collection => { @@ -405,15 +417,6 @@ export const copyProcess = (data: CopyFormDialogData) => } }; -export const loadProcessLog = (uuid: string) => - handleFirstTimeLoad( - async (dispatch: Dispatch) => { - const process = await dispatch(processesActions.loadProcess(uuid)); - dispatch(setProcessBreadcrumbs(uuid)); - dispatch(initProcessLogsPanel(uuid)); - await dispatch(activateSidePanelTreeItem(process.containerRequest.ownerUuid)); - }); - export const resourceIsNotLoaded = (uuid: string) => snackbarActions.OPEN_SNACKBAR({ message: `Resource identified by ${uuid} is not loaded.`, @@ -450,12 +453,6 @@ export const loadRunProcess = handleFirstTimeLoad( } ); -export const loadWorkflow = handleFirstTimeLoad(async (dispatch: Dispatch) => { - dispatch(activateSidePanelTreeItem(SidePanelTreeCategory.WORKFLOWS)); - await dispatch(loadWorkflowPanel()); - dispatch(setSidePanelBreadcrumbs(SidePanelTreeCategory.WORKFLOWS)); -}); - export const loadPublicFavorites = () => handleFirstTimeLoad( (dispatch: Dispatch) => { @@ -480,6 +477,12 @@ export const loadVirtualMachines = handleFirstTimeLoad( dispatch(setBreadcrumbs([{ label: 'Virtual Machines' }])); }); +export const loadVirtualMachinesAdmin = handleFirstTimeLoad( + async (dispatch: Dispatch) => { + await dispatch(loadVirtualMachinesPanel()); + dispatch(setBreadcrumbs([{ label: 'Virtual Machines Admin', icon: AdminMenuIcon }])); + }); + export const loadRepositories = handleFirstTimeLoad( async (dispatch: Dispatch) => { await dispatch(loadRepositoriesPanel()); @@ -496,10 +499,18 @@ export const loadSiteManager = handleFirstTimeLoad( await dispatch(loadSiteManagerPanel()); }); -export const loadMyAccount = handleFirstTimeLoad( - (dispatch: Dispatch) => { - dispatch(loadMyAccountPanel()); - }); +export const loadUserProfile = (userUuid?: string) => + handleFirstTimeLoad( + (dispatch: Dispatch) => { + if (userUuid) { + dispatch(setUserProfileBreadcrumbs(userUuid)); + dispatch(userProfilePanelActions.loadUserProfilePanel(userUuid)); + } else { + dispatch(setMyAccountBreadcrumbs()); + dispatch(userProfilePanelActions.loadUserProfilePanel()); + } + } + ); export const loadLinkAccount = handleFirstTimeLoad( (dispatch: Dispatch) => { @@ -514,12 +525,7 @@ export const loadKeepServices = handleFirstTimeLoad( export const loadUsers = handleFirstTimeLoad( async (dispatch: Dispatch) => { await dispatch(loadUsersPanel()); - dispatch(setBreadcrumbs([{ label: 'Users' }])); - }); - -export const loadComputeNodes = handleFirstTimeLoad( - async (dispatch: Dispatch) => { - await dispatch(loadComputeNodesPanel()); + dispatch(setUsersBreadcrumbs()); }); export const loadApiClientAuthorizations = handleFirstTimeLoad(