@@ -16,36 +16,13 @@ import { checkImageType, uploadImageToServer, useImage } from '@/hooks/useImage'
16
16
import useModal from '@/hooks/useModal' ;
17
17
import { eventLogger } from '@/utils' ;
18
18
import { css } from '@styled-system/css' ;
19
- import { useMutation } from '@tanstack/react-query' ;
20
19
21
20
export default function MissionRecordPage ( ) {
22
21
const router = useRouter ( ) ;
23
22
const { triggerSnackBar } = useSnackBar ( ) ;
24
23
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 ) ;
49
26
50
27
const missionId = params . id as string ;
51
28
@@ -55,8 +32,6 @@ export default function MissionRecordPage() {
55
32
56
33
const { uploadImageChange, imagePreview, imageFile } = useImage ( ) ;
57
34
58
- const isPending = isUpLoadingPending || isUploadCompletePending ;
59
-
60
35
const onChangeText = ( e : ChangeEvent < HTMLTextAreaElement > ) => {
61
36
// TODO: 200자 제한
62
37
setRemark ( e . target . value ) ;
@@ -75,22 +50,37 @@ export default function MissionRecordPage() {
75
50
}
76
51
77
52
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 ) ;
82
55
} ;
83
56
84
- const isButtonDisabled = ! imagePreview || isPending ;
57
+ const isButtonDisabled = ! imagePreview || isSubmitLoading ;
85
58
86
59
const onImageClick = ( ) => {
87
60
imageRef . current ?. click ( ) ;
88
61
} ;
89
62
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
+
90
80
return (
91
81
< main className = { mainWrapperCss } >
92
82
< div className = { headerWrapperCss } >
93
- { isPending && < Loading /> }
83
+ { isSubmitLoading && < Loading /> }
94
84
< div className = { headerTitleCss } > 미션 인증</ div >
95
85
< div className = { headerRightCss } onClick = { openModal } >
96
86
< Icon name = "normal-close" />
0 commit comments