X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2508b089d2369bf57811f9f96c14c2ee22dd664f..2037dc353ddfc0ae182189f69159ef00e637fba9:/services/workbench2/src/store/virtual-machines/virtual-machines-actions.ts diff --git a/services/workbench2/src/store/virtual-machines/virtual-machines-actions.ts b/services/workbench2/src/store/virtual-machines/virtual-machines-actions.ts index bd07efb640..12172e7fe3 100644 --- a/services/workbench2/src/store/virtual-machines/virtual-machines-actions.ts +++ b/services/workbench2/src/store/virtual-machines/virtual-machines-actions.ts @@ -19,6 +19,7 @@ import { deleteResources, updateResources } from 'store/resources/resources-acti import { Participant } from "views-components/sharing-dialog/participant-select"; import { initialize, reset } from "redux-form"; import { getUserDisplayName, UserResource } from "models/user"; +import { progressIndicatorActions } from 'store/progress-indicator/progress-indicator-actions'; export const virtualMachinesActions = unionize({ SET_REQUESTED_DATE: ofType(), @@ -72,50 +73,61 @@ const loadRequestedDate = () => export const loadVirtualMachinesAdminData = () => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { - dispatch(loadRequestedDate()); - - const virtualMachines = await services.virtualMachineService.list(); - dispatch(updateResources(virtualMachines.items)); - dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines)); - - - const logins = await services.permissionService.list({ - filters: new FilterBuilder() - .addIn('head_uuid', virtualMachines.items.map(item => item.uuid)) - .addEqual('name', PermissionLevel.CAN_LOGIN) - .getFilters(), - limit: 1000 - }); - dispatch(updateResources(logins.items)); - dispatch(virtualMachinesActions.SET_LINKS(logins)); - - const users = await services.userService.list({ - filters: new FilterBuilder() - .addIn('uuid', logins.items.map(item => item.tailUuid)) - .getFilters(), - count: "none", // Necessary for federated queries - limit: 1000 - }); - dispatch(updateResources(users.items)); - - const getAllLogins = await services.virtualMachineService.getAllLogins(); - dispatch(virtualMachinesActions.SET_LOGINS(getAllLogins)); + try { + dispatch(progressIndicatorActions.START_WORKING("virtual-machines-admin")); + dispatch(loadRequestedDate()); + + const virtualMachines = await services.virtualMachineService.list(); + dispatch(updateResources(virtualMachines.items)); + dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines)); + + + const logins = await services.permissionService.list({ + filters: new FilterBuilder() + .addIn('head_uuid', virtualMachines.items.map(item => item.uuid)) + .addEqual('name', PermissionLevel.CAN_LOGIN) + .getFilters(), + limit: 1000 + }); + dispatch(updateResources(logins.items)); + dispatch(virtualMachinesActions.SET_LINKS(logins)); + + const users = await services.userService.list({ + filters: new FilterBuilder() + .addIn('uuid', logins.items.map(item => item.tailUuid)) + .getFilters(), + count: "none", // Necessary for federated queries + limit: 1000 + }); + dispatch(updateResources(users.items)); + + const getAllLogins = await services.virtualMachineService.getAllLogins(); + dispatch(virtualMachinesActions.SET_LOGINS(getAllLogins)); + } finally { + dispatch(progressIndicatorActions.STOP_WORKING("virtual-machines-admin")); + } }; export const loadVirtualMachinesUserData = () => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { - dispatch(loadRequestedDate()); - const user = getState().auth.user; - const virtualMachines = await services.virtualMachineService.list(); - const virtualMachinesUuids = virtualMachines.items.map(it => it.uuid); - const links = await services.linkService.list({ - filters: new FilterBuilder() - .addIn("head_uuid", virtualMachinesUuids) - .addEqual("tail_uuid", user?.uuid) - .getFilters() - }); - dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines)); - dispatch(virtualMachinesActions.SET_LINKS(links)); + try { + dispatch(progressIndicatorActions.START_WORKING("virtual-machines-user")); + + dispatch(loadRequestedDate()); + const user = getState().auth.user; + const virtualMachines = await services.virtualMachineService.list(); + const virtualMachinesUuids = virtualMachines.items.map(it => it.uuid); + const links = await services.linkService.list({ + filters: new FilterBuilder() + .addIn("head_uuid", virtualMachinesUuids) + .addEqual("tail_uuid", user?.uuid) + .getFilters() + }); + dispatch(virtualMachinesActions.SET_VIRTUAL_MACHINES(virtualMachines)); + dispatch(virtualMachinesActions.SET_LINKS(links)); + } finally { + dispatch(progressIndicatorActions.STOP_WORKING("virtual-machines-user")); + } }; export const openAddVirtualMachineLoginDialog = (vmUuid: string) => @@ -125,17 +137,17 @@ export const openAddVirtualMachineLoginDialog = (vmUuid: string) => dispatch(updateResources(virtualMachines.items)); const logins = await services.permissionService.list({ filters: new FilterBuilder() - .addIn('head_uuid', virtualMachines.items.map(item => item.uuid)) - .addEqual('name', PermissionLevel.CAN_LOGIN) - .getFilters() + .addIn('head_uuid', virtualMachines.items.map(item => item.uuid)) + .addEqual('name', PermissionLevel.CAN_LOGIN) + .getFilters() }); dispatch(updateResources(logins.items)); dispatch(initialize(VIRTUAL_MACHINE_ADD_LOGIN_FORM, { - [VIRTUAL_MACHINE_ADD_LOGIN_VM_FIELD]: vmUuid, - [VIRTUAL_MACHINE_ADD_LOGIN_GROUPS_FIELD]: [], - })); - dispatch(dialogActions.OPEN_DIALOG( {id: VIRTUAL_MACHINE_ADD_LOGIN_DIALOG, data: {excludedParticipants: logins.items.map(it => it.tailUuid)}} )); + [VIRTUAL_MACHINE_ADD_LOGIN_VM_FIELD]: vmUuid, + [VIRTUAL_MACHINE_ADD_LOGIN_GROUPS_FIELD]: [], + })); + dispatch(dialogActions.OPEN_DIALOG({ id: VIRTUAL_MACHINE_ADD_LOGIN_DIALOG, data: { excludedParticipants: logins.items.map(it => it.tailUuid) } })); } export const openEditVirtualMachineLoginDialog = (permissionUuid: string) => @@ -143,11 +155,11 @@ export const openEditVirtualMachineLoginDialog = (permissionUuid: string) => const login = await services.permissionService.get(permissionUuid); const user = await services.userService.get(login.tailUuid); dispatch(initialize(VIRTUAL_MACHINE_ADD_LOGIN_FORM, { - [VIRTUAL_MACHINE_UPDATE_LOGIN_UUID_FIELD]: permissionUuid, - [VIRTUAL_MACHINE_ADD_LOGIN_USER_FIELD]: {name: getUserDisplayName(user, true, true), uuid: login.tailUuid}, - [VIRTUAL_MACHINE_ADD_LOGIN_GROUPS_FIELD]: login.properties.groups, - })); - dispatch(dialogActions.OPEN_DIALOG( {id: VIRTUAL_MACHINE_ADD_LOGIN_DIALOG, data: {updating: true}} )); + [VIRTUAL_MACHINE_UPDATE_LOGIN_UUID_FIELD]: permissionUuid, + [VIRTUAL_MACHINE_ADD_LOGIN_USER_FIELD]: { name: getUserDisplayName(user, true, true), uuid: login.tailUuid }, + [VIRTUAL_MACHINE_ADD_LOGIN_GROUPS_FIELD]: login.properties.groups, + })); + dispatch(dialogActions.OPEN_DIALOG({ id: VIRTUAL_MACHINE_ADD_LOGIN_DIALOG, data: { updating: true } })); } export interface AddLoginFormData { @@ -158,15 +170,15 @@ export interface AddLoginFormData { } -export const addUpdateVirtualMachineLogin = ({uuid, vmUuid, user, groups}: AddLoginFormData) => +export const addUpdateVirtualMachineLogin = ({ uuid, vmUuid, user, groups }: AddLoginFormData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { let userResource: UserResource | undefined = undefined; try { // Get user userResource = await services.userService.get(user.uuid, false); } catch (e) { - dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Failed to get user details.", hideDuration: 2000, kind: SnackbarKind.ERROR })); - return; + dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Failed to get user details.", hideDuration: 2000, kind: SnackbarKind.ERROR })); + return; } try { if (uuid) {