1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
4 import * as React from 'react';
5 import { compose } from "redux";
6 import { reduxForm, InjectedFormProps, Field } from 'redux-form';
7 import { withDialog, WithDialogProps } from "~/store/dialog/with-dialog";
8 import { FormDialog } from '~/components/form-dialog/form-dialog';
9 import { TextField } from '~/components/text-field/text-field';
10 import { VirtualMachinesResource } from '~/models/virtual-machines';
11 import { USER_LENGTH_VALIDATION } from '~/validators/validators';
12 import { InputLabel } from '@material-ui/core';
13 import { NativeSelectField } from '~/components/select-field/select-field';
14 import { SETUP_SHELL_ACCOUNT_DIALOG, createUser } from '~/store/users/users-actions';
16 interface SetupShellAccountFormDialogData {
18 virtualMachineName: string;
19 groupVirtualMachine: string;
22 export const SetupShellAccountDialog = compose(
23 withDialog(SETUP_SHELL_ACCOUNT_DIALOG),
24 reduxForm<SetupShellAccountFormDialogData>({
25 form: SETUP_SHELL_ACCOUNT_DIALOG,
26 onSubmit: (data, dispatch) => {
27 dispatch(createUser(data));
31 (props: SetupShellAccountDialogComponentProps) =>
33 dialogTitle='Setup shell account'
34 formFields={SetupShellAccountFormFields}
40 const UserEmailField = ({ data }: any) =>
45 label={data.user.email} />;
47 const UserVirtualMachineField = ({ data }: any) =>
48 <div style={{ marginBottom: '21px' }}>
49 <InputLabel>Virtual Machine</InputLabel>
52 component={NativeSelectField}
53 validate={USER_LENGTH_VALIDATION}
54 items={getVirtualMachinesList(data.items)} />
57 const UserGroupsVirtualMachineField = () =>
61 validate={USER_LENGTH_VALIDATION}
62 label="Groups for virtual machine (comma separated list)" />;
64 const getVirtualMachinesList = (virtualMachines: VirtualMachinesResource[]) => {
65 const mappedVirtualMachines = virtualMachines.map(it => ({ key: it.hostname, value: it.hostname }));
66 return mappedVirtualMachines;
69 type SetupShellAccountDialogComponentProps = WithDialogProps<{}> & InjectedFormProps<SetupShellAccountFormDialogData>;
71 const SetupShellAccountFormFields = (props: SetupShellAccountDialogComponentProps) =>
73 <UserEmailField data={props.data}/>
74 <UserVirtualMachineField data={props.data} />
75 <UserGroupsVirtualMachineField />