import React, { useState } from 'react'; import { message, Button, Input, Modal, Typography, Form, Collapse } from 'antd'; import { useCreateGroupMutation } from '../../../graphql/group.generated'; import { useEnterKeyListener } from '../../shared/useEnterKeyListener'; import { groupIdTextValidation } from '../../shared/textUtil'; import analytics, { EventType } from '../../analytics'; import { CorpGroup, EntityType } from '../../../types.generated'; type Props = { onClose: () => void; onCreate: (group: CorpGroup) => void; }; export default function CreateGroupModal({ onClose, onCreate }: Props) { const [stagedName, setStagedName] = useState(''); const [stagedDescription, setStagedDescription] = useState(''); const [stagedId, setStagedId] = useState(undefined); const [createGroupMutation] = useCreateGroupMutation(); const [createButtonEnabled, setCreateButtonEnabled] = useState(true); const [form] = Form.useForm(); const onCreateGroup = () => { createGroupMutation({ variables: { input: { id: stagedId, name: stagedName, description: stagedDescription, }, }, }) .then(({ data, errors }) => { if (!errors) { analytics.event({ type: EventType.CreateGroupEvent, }); message.success({ content: `Created group!`, duration: 3, }); // TODO: Get a full corp group back from create endpoint. onCreate({ urn: data?.createGroup || '', type: EntityType.CorpGroup, name: stagedName, info: { description: stagedDescription, }, }); } }) .catch((e) => { message.destroy(); message.error({ content: `Failed to create group!: \n ${e.message || ''}`, duration: 3 }); }) .finally(() => { setStagedName(''); setStagedDescription(''); }); onClose(); }; // Handle the Enter press useEnterKeyListener({ querySelectorToExecuteClick: '#createGroupButton', }); return ( } >
setCreateButtonEnabled(form.getFieldsError().some((field) => field.errors.length > 0)) } > Name}> Give your new group a name. setStagedName(event.target.value)} /> Description}> An optional description for your new group. setStagedDescription(event.target.value)} /> Advanced} key="1"> Group Id}> By default, a random UUID will be generated to uniquely identify this group. If you'd like to provide a custom id instead to more easily keep track of this group, you may provide it here. Be careful, you cannot easily change the group id after creation. ({ validator(_, value) { if (value && groupIdTextValidation(value)) { return Promise.resolve(); } return Promise.reject(new Error('Please enter correct Group name')); }, }), ]} > setStagedId(event.target.value)} />
); }