merge master
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 18 Dec 2018 09:08:51 +0000 (10:08 +0100)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Tue, 18 Dec 2018 09:08:51 +0000 (10:08 +0100)
Feature #14565

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

1  2 
src/store/users/users-actions.ts
src/views-components/dialog-forms/setup-shell-account-dialog.tsx
src/views/workbench/workbench.tsx

index 1a1c58eee3a67e9de6dcd8dccf86b69fd02c6213,585a3663bcdf5fabf7b34fe295f0d30981f08fd0..9e76396d0e7f3adafdf934da2fc83ee25534188c
@@@ -32,20 -31,6 +32,21 @@@ export const openUserAttributes = (uuid
          dispatch(dialogActions.OPEN_DIALOG({ id: USER_ATTRIBUTES_DIALOG, data }));
      };
  
-     (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
 +export const openUserManage = (uuid: string) =>
 +    (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
 +        const { resources } = getState();
 +        const data = getResource<UserResource>(uuid)(resources);
 +        dispatch(dialogActions.OPEN_DIALOG({ id: USER_MANAGE_DIALOG, data }));
 +    };
 +
 +export const openSetupShellAccount = (uuid: string) =>
-         const data = getResource<UserResource>(uuid)(resources);
-         dispatch(dialogActions.OPEN_DIALOG({ id: SETUP_SHELL_ACCOUNT_DIALOG, data }));
++    async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
 +        const { resources } = getState();
++        const user = getResource<UserResource>(uuid)(resources);
++        const virtualMachines = await services.virtualMachineService.list();
++        dispatch(dialogActions.OPEN_DIALOG({ id: SETUP_SHELL_ACCOUNT_DIALOG, data: { user, ...virtualMachines } }));
 +    };
 +
  export const openUserCreateDialog = () =>
      async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
          const userUuid = await services.authService.getUuid();
index 75f0bb6a5050513d70dd02b7e46c59f4a1dee1ac,0000000000000000000000000000000000000000..8b9a6b612cf6cd3b70a12bce654b5835a56fecf1
mode 100644,000000..100644
--- /dev/null
@@@ -1,63 -1,0 +1,79 @@@
-         label={data.email} />;
 +// Copyright (C) The Arvados Authors. All rights reserved.
 +//
 +// SPDX-License-Identifier: AGPL-3.0
 +import * as React from 'react';
 +import { compose } from "redux";
 +import { reduxForm, InjectedFormProps, Field } from 'redux-form';
 +import { withDialog, WithDialogProps } from "~/store/dialog/with-dialog";
 +import { FormDialog } from '~/components/form-dialog/form-dialog';
 +import { TextField } from '~/components/text-field/text-field';
 +import { VirtualMachinesResource } from '~/models/virtual-machines';
 +import { USER_LENGTH_VALIDATION } from '~/validators/validators';
 +import { InputLabel } from '@material-ui/core';
 +import { NativeSelectField } from '~/components/select-field/select-field';
 +import { SETUP_SHELL_ACCOUNT_DIALOG, createUser } from '~/store/users/users-actions';
 +
 +interface SetupShellAccountFormDialogData {
 +    email: string;
 +    virtualMachineName: string;
 +    groupVirtualMachine: string;
 +}
 +
 +export const SetupShellAccountDialog = compose(
 +    withDialog(SETUP_SHELL_ACCOUNT_DIALOG),
 +    reduxForm<SetupShellAccountFormDialogData>({
 +        form: SETUP_SHELL_ACCOUNT_DIALOG,
 +        onSubmit: (data, dispatch) => {
 +            dispatch(createUser(data));
 +        }
 +    })
 +)(
 +    (props: SetupShellAccountDialogComponentProps) =>
 +        <FormDialog
 +            dialogTitle='Setup shell account'
 +            formFields={SetupShellAccountFormFields}
 +            submitLabel='Submit'
 +            {...props}
 +        />
 +);
 +
 +const UserEmailField = ({ data }: any) =>
 +    <Field
 +        name='email'
 +        component={TextField}
 +        disabled
++        label={data.user.email} />;
++
++const UserVirtualMachineField = ({ data }: any) =>
++    <div style={{ marginBottom: '21px' }}>
++        <InputLabel>Virtual Machine</InputLabel>
++        <Field
++            name='virtualMachine'
++            component={NativeSelectField}
++            validate={USER_LENGTH_VALIDATION}
++            items={getVirtualMachinesList(data.items)} />
++    </div>;
 +
 +const UserGroupsVirtualMachineField = () =>
 +    <Field
 +        name='groups'
 +        component={TextField}
 +        validate={USER_LENGTH_VALIDATION}
 +        label="Groups for virtual machine (comma separated list)" />;
 +
++const getVirtualMachinesList = (virtualMachines: VirtualMachinesResource[]) => {
++    const mappedVirtualMachines = virtualMachines.map(it => ({ key: it.hostname, value: it.hostname }));
++    return mappedVirtualMachines;
++};
++
 +type SetupShellAccountDialogComponentProps = WithDialogProps<{}> & InjectedFormProps<SetupShellAccountFormDialogData>;
 +
 +const SetupShellAccountFormFields = (props: SetupShellAccountDialogComponentProps) =>
 +    <>
 +        <UserEmailField data={props.data}/>
++        <UserVirtualMachineField data={props.data} />
 +        <UserGroupsVirtualMachineField />
 +    </>;
 +
 +
 +
index cba89b3ba98dd4effcf530f6e8ea7bcf8b669474,bff328e8c8c6ff448bc271d36068925a8b0cc81d..6c7c24386205310611b65b3df22029911c8602c0
@@@ -79,8 -79,14 +79,16 @@@ import { UserPanel } from '~/views/user
  import { UserAttributesDialog } from '~/views-components/user-dialog/attributes-dialog';
  import { CreateUserDialog } from '~/views-components/dialog-forms/create-user-dialog';
  import { HelpApiClientAuthorizationDialog } from '~/views-components/api-client-authorizations-dialog/help-dialog';
 +import { UserManageDialog } from '~/views-components/user-dialog/manage-dialog';
 +import { SetupShellAccountDialog } from '~/views-components/dialog-forms/setup-shell-account-dialog';
+ import { GroupsPanel } from '~/views/groups-panel/groups-panel';
+ import { CreateGroupDialog } from '~/views-components/dialog-forms/create-group-dialog';
+ import { RemoveGroupDialog } from '~/views-components/groups-dialog/remove-dialog';
+ import { GroupAttributesDialog } from '~/views-components/groups-dialog/attributes-dialog';
+ import { GroupDetailsPanel } from '~/views/group-details-panel/group-details-panel';
+ import { RemoveGroupMemberDialog } from '~/views-components/groups-dialog/member-remove-dialog';
+ import { GroupMemberAttributesDialog } from '~/views-components/groups-dialog/member-attributes-dialog';
+ import { AddGroupMembersDialog } from '~/views-components/dialog-forms/add-group-member-dialog';
  
  type CssRules = 'root' | 'container' | 'splitter' | 'asidePanel' | 'contentWrapper' | 'content';