// 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, WrappedFieldArrayProps, FieldArray } from 'redux-form'; import { withDialog, WithDialogProps } from "~/store/dialog/with-dialog"; import { FormDialog } from '~/components/form-dialog/form-dialog'; import { PeopleSelect, Person } from '~/views-components/sharing-dialog/people-select'; import { ADD_GROUP_MEMBERS_DIALOG, ADD_GROUP_MEMBERS_FORM, AddGroupMembersFormData, ADD_GROUP_MEMBERS_USERS_FIELD_NAME, addGroupMembers } from '~/store/group-details-panel/group-details-panel-actions'; import { minLength } from '~/validators/min-length'; export const AddGroupMembersDialog = compose( withDialog(ADD_GROUP_MEMBERS_DIALOG), reduxForm<AddGroupMembersFormData>({ form: ADD_GROUP_MEMBERS_FORM, onSubmit: (data, dispatch) => { dispatch(addGroupMembers(data)); }, }) )( (props: AddGroupMembersDialogProps) => <FormDialog dialogTitle='Add users' formFields={UsersField} submitLabel='Add' {...props} /> ); type AddGroupMembersDialogProps = WithDialogProps<{}> & InjectedFormProps<AddGroupMembersFormData>; const UsersField = () => <FieldArray name={ADD_GROUP_MEMBERS_USERS_FIELD_NAME} component={UsersSelect} validate={UsersFieldValidation} />; const UsersFieldValidation = [minLength(1, () => 'Select at least one user')]; const UsersSelect = ({ fields }: WrappedFieldArrayProps<Person>) => <PeopleSelect onlyPeople autofocus label='Enter email adresses ' items={fields.getAll() || []} onSelect={fields.push} onDelete={fields.remove} />;