From ad9e1282a5f1ff8e53f7c5473d678eb5ad8c3baa Mon Sep 17 00:00:00 2001 From: Shay Zluf Date: Thu, 30 Jan 2025 12:05:46 +0530 Subject: [PATCH] fix loader issue --- .../SubmissionFormPage/SubmissionFormPage.tsx | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx b/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx index 9a354272b..f7e6af12b 100644 --- a/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx +++ b/packages/web/src/pages/Submissions/SubmissionFormPage/SubmissionFormPage.tsx @@ -77,11 +77,15 @@ export const SubmissionFormPage = () => { reset: callReset, send: sendVulnerabilityOnChain, isLoading: isSigningSubmission, + error: contractError } = LogClaimContract.hook(vault); const { isLoading: isSubmitting } = useWaitForTransaction({ hash: callData?.hash, onSettled(data, error) { - if (error) return reset(); + if (error) { + reset(); + return; + } if (submissionData && data?.transactionHash && chain?.id) { const newVulnerabilityData: ISubmissionData = { @@ -97,7 +101,21 @@ export const SubmissionFormPage = () => { }; setSubmissionData(newVulnerabilityData); - sendSubmissionToServer(newVulnerabilityData); + sendSubmissionToServer(newVulnerabilityData).catch(() => { + // If server submission fails, update the UI to show the error + setSubmissionData({ + ...newVulnerabilityData, + submissionResult: { + ...newVulnerabilityData.submissionResult, + verified: true, + txStatus: SubmissionOpStatus.Fail, + botStatus: SubmissionOpStatus.Fail, + transactionHash: data?.transactionHash, + chainId: chain?.id, + auditCompetitionRepo: undefined, + }, + }); + }); } }, }); @@ -109,6 +127,20 @@ export const SubmissionFormPage = () => { setAllFormDisabled(false); }; + // Handle contract errors + useEffect(() => { + if (contractError) { + reset(); + } + }, [contractError]); + + // Clear submission data if chain changes + useEffect(() => { + if (submissionData?.submissionResult?.chainId && chain?.id && submissionData.submissionResult.chainId !== chain.id) { + reset(); + } + }, [chain?.id]); + // Loads initial state of the vault useEffect(() => { if (!activeVaults || activeVaults.length === 0) return;