-// Copyright (C) The Arvados Authors. All rights reserved.
-//
-// SPDX-License-Identifier: AGPL-3.0
-import 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, CHOOSE_VM_VALIDATION } from 'validators/validators';
-import { InputLabel } from '@material-ui/core';
-import { NativeSelectField } from 'components/select-field/select-field';
-import { SetupShellAccountFormDialogData, SETUP_SHELL_ACCOUNT_DIALOG, setupUserVM } from 'store/users/users-actions';
-import { UserResource } from 'models/user';
-
-export const SetupShellAccountDialog = compose(
- withDialog(SETUP_SHELL_ACCOUNT_DIALOG),
- reduxForm<SetupShellAccountFormDialogData>({
- form: SETUP_SHELL_ACCOUNT_DIALOG,
- onSubmit: (data, dispatch) => {
- dispatch(setupUserVM(data));
- }
- })
-)(
- (props: SetupShellAccountDialogComponentProps) =>
- <FormDialog
- dialogTitle='Setup shell account'
- formFields={SetupShellAccountFormFields}
- submitLabel='Submit'
- {...props}
- />
-);
-
-interface UserProps {
- data: {
- user: UserResource;
- };
-}
-
-interface VirtualMachinesProps {
- data: {
- items: VirtualMachinesResource[];
- };
-}
-interface DataProps {
- user: UserResource;
- items: VirtualMachinesResource[];
-}
-
-const UserEmailField = ({ data }: UserProps) =>
- <span>
- <Field
- name='email'
- component={TextField as any}
- disabled
- label={data.user.email} /></span>;
-
-const UserVirtualMachineField = ({ data }: VirtualMachinesProps) =>
- <div style={{ marginBottom: '21px' }}>
- <InputLabel>Virtual Machine</InputLabel>
- <Field
- name='virtualMachine'
- component={NativeSelectField as any}
- validate={CHOOSE_VM_VALIDATION}
- items={getVirtualMachinesList(data.items)} />
- </div>;
-
-const UserGroupsVirtualMachineField = () =>
- <Field
- name='groups'
- component={TextField as any}
- validate={USER_LENGTH_VALIDATION}
- label="Groups for virtual machine (comma separated list)" />;
-
-const getVirtualMachinesList = (virtualMachines: VirtualMachinesResource[]) =>
- [{ key: "", value: "" }].concat(virtualMachines.map(it => ({ key: it.hostname, value: it.hostname })));
-
-type SetupShellAccountDialogComponentProps = WithDialogProps<{}> & InjectedFormProps<SetupShellAccountFormDialogData>;
-
-const SetupShellAccountFormFields = (props: SetupShellAccountDialogComponentProps) =>
- <>
- <UserEmailField data={props.data as DataProps} />
- <UserVirtualMachineField data={props.data as DataProps} />
- <UserGroupsVirtualMachineField />
- </>;