import Select from 'react-select'; import { useEffect, useRef, useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { toast } from 'react-toastify'; import { useSimpleCodeListQuery } from '@api/codeAPI'; import { useAdminGroupCodeQuery } from '@api/adminGroupAPI'; import { AddAdminRequest, useAddAdminMutation } from '@api/adminAPI'; import { isEmpty } from '@utils/objectUtils'; import Button from '@components/ui/button/Button'; interface Props { onCloseModal: () => void; } const AUTH_CODE = '008'; const AdministratorAddModal = ({ onCloseModal }: Props) => { const [addAdminRequest, setAddAdminRequest] = useState({ email: '', name: '', phone: '', grp: '', auth: '' }); // Ref const nameRef = useRef(null); const contactRef = useRef(null); const emailRef = useRef(null); // API const queryClient = useQueryClient(); const { data: authCodeList } = useSimpleCodeListQuery(AUTH_CODE); const { data: groupCodeList } = useAdminGroupCodeQuery(); const { mutate: addAdmin, isPending: isPostingAdmin } = useAddAdminMutation(); const groupCodeOptions = groupCodeList?.map((group) => ({ label: group.groupName, value: group.groupCd })) ?? []; const authCodeOptions = authCodeList?.map((auth) => ({ label: auth.codeName, value: auth.code })) ?? []; useEffect(() => { if (authCodeList && authCodeList.length > 0) { setAddAdminRequest((prevState) => ({ ...prevState, auth: authCodeList[0].code })); } }, [authCodeList]); useEffect(() => { if (groupCodeList && groupCodeList.length > 0) { setAddAdminRequest((prevState) => ({ ...prevState, grp: groupCodeList[0].groupCd })); } }, [groupCodeList]); // Func const handleConfirmClick = () => { if (addAdminRequest.name === '') { toast.error('Please enter your name.'); nameRef.current?.focus(); return; } else if (!/^[\d-]+$/.test(addAdminRequest.phone)) { toast.error('Please enter your contact.'); contactRef.current?.focus(); return; } else if (!/^[\w.-]+\w@[\w.-]+\w$/.test(addAdminRequest.email)) { toast.error('Please enter your email in the correct format.'); emailRef.current?.focus(); return; } addAdmin(addAdminRequest, { onSuccess: () => { toast.success('A new Admin has been created.'); onCloseModal(); queryClient.invalidateQueries({ queryKey: ['adminList'] }); queryClient.invalidateQueries({ queryKey: ['adminInfo'] }); } }); }; return ( <>
Add Administrator
Administrator Admin + Number (Auto Create)
Person in charge setAddAdminRequest((prevState) => ({ ...prevState, name: e.target.value }))} placeholder="Name" disabled={isEmpty(addAdminRequest)} />
Contact setAddAdminRequest((prevState) => ({ ...prevState, phone: e.target.value }))} placeholder="000-0000-0000" disabled={isEmpty(addAdminRequest)} />
Email setAddAdminRequest((prevState) => ({ ...prevState, email: e.target.value }))} placeholder="AngkorLife@email.com" disabled={isEmpty(addAdminRequest)} />
Group
Permission
); }; export default AdministratorAddModal;