import { useCallback, useEffect, useState } from 'react' import { useNavigate } from 'react-router-dom' import { Button, FormControl, FormErrorMessage, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from '@chakra-ui/react' import { useSWRConfig } from 'swr' import { Field, FieldAttributes, FieldProps, Form, Formik, FormikHelpers, } from 'formik' import * as Yup from 'yup' import cx from 'classnames' import GroupAPI, { Group } from '@/client/api/group' import UserAPI, { User } from '@/client/api/user' import UserSelector from '../common/user-selector' export type GroupAddMemberProps = { open: boolean group: Group onClose?: () => void } type FormValues = { userId: string } const GroupAddMember = ({ group, open, onClose }: GroupAddMemberProps) => { const navigate = useNavigate() const { mutate } = useSWRConfig() const [isModalOpen, setIsModalOpen] = useState(false) const [activeUser, setActiveUser] = useState() const formSchema = Yup.object().shape({ userId: Yup.string().required('User is required'), }) useEffect(() => { setIsModalOpen(open) }, [open]) const handleSubmit = useCallback( async ( { userId }: FormValues, { setSubmitting }: FormikHelpers, ) => { setSubmitting(true) try { await GroupAPI.addMember(group.id, { userId, }) mutate( `/users?${UserAPI.paramsFromListOptions({ groupId: group.id, nonGroupMembersOnly: true, })}`, ) mutate(`/groups/${group.id}/get_available_users`) setSubmitting(false) onClose?.() navigate(`/group/${group.id}/member`) } finally { setSubmitting(false) } }, [group.id, navigate, onClose, mutate], ) return ( onClose?.()} closeOnOverlayClick={false} > Add Member {({ errors, touched, isSubmitting, setFieldValue }) => (
{({ field }: FieldAttributes) => ( { setActiveUser(value) setFieldValue(field.name, value.id) }} /> {errors.userId} )}
)}
) } export default GroupAddMember