18559: Add basic field validation for profile email
[arvados-workbench2.git] / src / views-components / dialog-forms / setup-shell-account-dialog.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4 import 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 { InputLabel } from '@material-ui/core';
12 import { SETUP_SHELL_ACCOUNT_DIALOG, setupUserVM } from 'store/users/users-actions';
13 import { UserResource } from 'models/user';
14 import { VIRTUAL_MACHINE_ADD_LOGIN_USER_FIELD, AddLoginFormData } from 'store/virtual-machines/virtual-machines-actions';
15 import { UserGroupsVirtualMachineField, RequiredUserVirtualMachineField } from 'views-components/form-fields/user-form-fields';
16
17 export const SetupShellAccountDialog = compose(
18     withDialog(SETUP_SHELL_ACCOUNT_DIALOG),
19     reduxForm<AddLoginFormData>({
20         form: SETUP_SHELL_ACCOUNT_DIALOG,
21         onSubmit: (data, dispatch) => {
22             dispatch(setupUserVM(data));
23         }
24     })
25 )(
26     (props: SetupShellAccountDialogComponentProps) =>
27         <FormDialog
28             dialogTitle='Setup shell account'
29             formFields={SetupShellAccountFormFields}
30             submitLabel='Submit'
31             {...props}
32         />
33 );
34
35 interface DataProps {
36     user: UserResource;
37     items: VirtualMachinesResource[];
38 }
39
40 const UserNameField = () =>
41     <span>
42         <InputLabel>VM Login</InputLabel>
43         <Field
44             name={`${VIRTUAL_MACHINE_ADD_LOGIN_USER_FIELD}.username`}
45             component={TextField as any}
46             disabled />
47     </span>;
48
49 type SetupShellAccountDialogComponentProps = WithDialogProps<{}> & InjectedFormProps<AddLoginFormData>;
50
51 const SetupShellAccountFormFields = (props: SetupShellAccountDialogComponentProps) =>
52     <>
53         <UserNameField />
54         <RequiredUserVirtualMachineField data={props.data as DataProps} />
55         <UserGroupsVirtualMachineField />
56     </>;