1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { compose } from "redux";
7 import { reduxForm, InjectedFormProps, WrappedFieldArrayProps, FieldArray } from 'redux-form';
8 import { withDialog, WithDialogProps } from "~/store/dialog/with-dialog";
9 import { FormDialog } from '~/components/form-dialog/form-dialog';
10 import { PeopleSelect, Person } from '~/views-components/sharing-dialog/people-select';
11 import { ADD_GROUP_MEMBERS_DIALOG, ADD_GROUP_MEMBERS_FORM, AddGroupMembersFormData, ADD_GROUP_MEMBERS_USERS_FIELD_NAME } from '~/store/group-details-panel/group-details-panel-actions';
12 import { minLength } from '~/validators/min-length';
14 export const AddGroupMembersDialog = compose(
15 withDialog(ADD_GROUP_MEMBERS_DIALOG),
16 reduxForm<AddGroupMembersFormData>({
17 form: ADD_GROUP_MEMBERS_FORM,
20 (props: AddGroupMembersDialogProps) =>
22 dialogTitle='Add users'
23 formFields={UsersField}
29 type AddGroupMembersDialogProps = WithDialogProps<{}> & InjectedFormProps<AddGroupMembersFormData>;
31 const UsersField = () =>
33 name={ADD_GROUP_MEMBERS_USERS_FIELD_NAME}
34 component={UsersSelect}
35 validate={UsersFieldValidation} />;
37 const UsersFieldValidation = [minLength(1, () => 'Select at least one user')];
39 const UsersSelect = ({ fields }: WrappedFieldArrayProps<Person>) =>
41 label='Enter email adresses '
42 items={fields.getAll() || []}
43 onSelect={fields.push}
44 onDelete={fields.remove} />;