Skip to content

Commit ad6d7fe

Browse files
committed
feat: 인증 실패 메시지 뜨는 문제 수정
1 parent e9a0a9d commit ad6d7fe

File tree

1 file changed

+23
-33
lines changed

1 file changed

+23
-33
lines changed

src/app/record/[id]/page.tsx

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,13 @@ import { checkImageType, uploadImageToServer, useImage } from '@/hooks/useImage'
1616
import useModal from '@/hooks/useModal';
1717
import { eventLogger } from '@/utils';
1818
import { css } from '@styled-system/css';
19-
import { useMutation } from '@tanstack/react-query';
2019

2120
export default function MissionRecordPage() {
2221
const router = useRouter();
2322
const { triggerSnackBar } = useSnackBar();
2423
const params = useParams();
25-
const { mutateAsync: uploadComplete, isPending: isUploadCompletePending } = useMutation({
26-
mutationFn: RECORD_API.uploadComplete,
27-
onSuccess: () => {
28-
router.replace(ROUTER.RECORD.SUCCESS);
29-
},
30-
onError: () => {
31-
triggerSnackBar({
32-
message: '미션 인증에 실패했습니다. 다시 시도해주세요.',
33-
});
34-
},
35-
});
36-
37-
const { mutateAsync: uploadImageToServerMutate, isPending: isUpLoadingPending } = useMutation({
38-
mutationFn: ({ missionId, imageFile }: { missionId: string; imageFile: File }) =>
39-
uploadImageToServer(missionId, imageFile),
40-
onSuccess: async ({ imageFileExtension }) => {
41-
await uploadComplete({ missionRecordId: missionId, imageFileExtension, remark });
42-
},
43-
onError: () => {
44-
triggerSnackBar({
45-
message: '미션 인증에 실패했습니다. 다시 시도해주세요.',
46-
});
47-
},
48-
});
24+
25+
const [isSubmitLoading, setIsSubmitLoading] = useState(false);
4926

5027
const missionId = params.id as string;
5128

@@ -55,8 +32,6 @@ export default function MissionRecordPage() {
5532

5633
const { uploadImageChange, imagePreview, imageFile } = useImage();
5734

58-
const isPending = isUpLoadingPending || isUploadCompletePending;
59-
6035
const onChangeText = (e: ChangeEvent<HTMLTextAreaElement>) => {
6136
// TODO: 200자 제한
6237
setRemark(e.target.value);
@@ -75,22 +50,37 @@ export default function MissionRecordPage() {
7550
}
7651

7752
eventLogger.logEvent(EVENT_LOG_NAME.CERTIFICATION.CLICK_CONFIRM, EVENT_LOG_CATEGORY.CERTIFICATION, { remark });
78-
await uploadImageToServerMutate({
79-
missionId,
80-
imageFile,
81-
});
53+
54+
await onSubmit(missionId, imageFile);
8255
};
8356

84-
const isButtonDisabled = !imagePreview || isPending;
57+
const isButtonDisabled = !imagePreview || isSubmitLoading;
8558

8659
const onImageClick = () => {
8760
imageRef.current?.click();
8861
};
8962

63+
// react query 지우로 axios 호출
64+
const onSubmit = async (_missionId: string, _imageFile: File) => {
65+
setIsSubmitLoading(true);
66+
67+
try {
68+
const { imageFileExtension } = await uploadImageToServer(_missionId, _imageFile);
69+
await RECORD_API.uploadComplete({ missionRecordId: _missionId, imageFileExtension, remark });
70+
71+
router.replace(ROUTER.RECORD.SUCCESS);
72+
} catch (e) {
73+
triggerSnackBar({
74+
message: '미션 인증에 실패했습니다. 다시 시도해주세요.',
75+
});
76+
setIsSubmitLoading(false);
77+
}
78+
};
79+
9080
return (
9181
<main className={mainWrapperCss}>
9282
<div className={headerWrapperCss}>
93-
{isPending && <Loading />}
83+
{isSubmitLoading && <Loading />}
9484
<div className={headerTitleCss}>미션 인증</div>
9585
<div className={headerRightCss} onClick={openModal}>
9686
<Icon name="normal-close" />

0 commit comments

Comments
 (0)