import React, { useState } from 'react'; import { QueryObserverResult, useQueryClient } from '@tanstack/react-query'; import { toast } from 'react-toastify'; import { Page } from 'src/services/commonResponse/PageResponse'; import { MajorCodeListResponse, UpdateMajorNameRequest, useUpdateMajorNameMutation } from '@api/codeAPI'; import AlertModal from '@components/ui/modal/AlertModal'; import { isEmpty } from '@utils/objectUtils'; import Button from '@components/ui/button/Button'; interface Props { major: { code: string; name: string }; onClose: () => void; majorListRefetch: () => Promise, Error>>; } const MajorNameModal = ({ major, onClose, majorListRefetch }: Props) => { const [updateSuccess, setUpdateSuccess] = useState(false); const [modal, setModal] = useState({ isOpen: false, txt: '' }); const [updateMajorNameRequest, setUpdateMajorNameRequest] = useState({ data: { codeValue: major.name }, path: major.code }); // API const queryClient = useQueryClient(); const { mutate: updateMajorName, isPending: isUpdatingMajorName } = useUpdateMajorNameMutation(); const handleConfirmClick = () => { updateMajorName(updateMajorNameRequest, { onSuccess: () => { toast.success('Major name has been updated.'); onClose(); setUpdateSuccess(true); queryClient.invalidateQueries({ queryKey: ['majorCodeList'] }); }, onError: (error) => { setModal({ isOpen: true, txt: error.response?.data.errorMessage as string }); setUpdateSuccess(false); } }); }; const handleAlertModalClose = () => { setModal({ isOpen: false, txt: '' }); if (updateSuccess) { majorListRefetch(); onClose(); } }; return ( <> handleAlertModalClose(), buttonName: 'Close' }} > {modal.txt}
Major Name
Major Code {major.code}
Major Name setUpdateMajorNameRequest((prevState) => ({ ...prevState, data: { ...prevState.data, codeValue: e.target.value } })) } readOnly={isEmpty(updateMajorNameRequest.data)} />
); }; export default MajorNameModal;