Skip to content

Commit 2873bda

Browse files
committed
bug(build-audit): Prevent potential duplicate audit creation by adding useref catch/debounce
1 parent bb06329 commit 2873bda

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

apps/frontend/src/routes/BuildAudit.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, FormEvent } from "react";
1+
import React, { useState, useRef, FormEvent } from "react";
22
import { useNavigate } from "react-router-dom";
33
import { useQuery, useQueryClient } from "@tanstack/react-query";
44
import { useUser } from "../queries";
@@ -45,6 +45,7 @@ export const BuildAudit = () => {
4545
const [auditNameValid, setAuditNameValid] = useState(false);
4646
const [isSaving, setIsSaving] = useState(false);
4747
const [isSavingAndRunning, setIsSavingAndRunning] = useState(false);
48+
const submittingRef = useRef(false);
4849
const [scanFrequency, setScanFrequency] = useState("Manually");
4950

5051
const [validRemoteCsv, setValidRemoteCsv] = useState(false);
@@ -101,6 +102,7 @@ export const BuildAudit = () => {
101102

102103
const saveAndRunAudit = async (e: FormEvent) => {
103104
e.preventDefault();
105+
if (submittingRef.current) return;
104106
if (pages.length === 0) {
105107
window.alert(`You need to add at least 1 URL to your audit.`);
106108
return;
@@ -110,6 +112,7 @@ export const BuildAudit = () => {
110112
const formData = new FormData(form);
111113
const auditData = buildAuditData(formData);
112114
console.log("Audit Data (Save & Run):", JSON.stringify(auditData));
115+
submittingRef.current = true;
113116
setIsSavingAndRunning(true);
114117
try {
115118
const response = (await (
@@ -123,13 +126,15 @@ export const BuildAudit = () => {
123126
await createLog(`Audit created and audit run started!`, response.id);
124127
navigate(`/audits/${response?.id}`);
125128
} finally {
129+
submittingRef.current = false;
126130
queryClient.invalidateQueries({ queryKey: ["audits"]});
127131
setIsSavingAndRunning(false);
128132
}
129133
};
130134

131135
const saveAudit = async (e: FormEvent) => {
132136
e.preventDefault();
137+
if (submittingRef.current) return;
133138
if (pages.length === 0) {
134139
window.alert(`You need to add at least 1 URL to your audit.`);
135140
return;
@@ -140,6 +145,7 @@ export const BuildAudit = () => {
140145
const auditData = buildAuditData(formData);
141146

142147
console.log("Audit Data (Save):", JSON.stringify(auditData));
148+
submittingRef.current = true;
143149
setIsSaving(true);
144150
try {
145151
const response = (await (
@@ -153,6 +159,7 @@ export const BuildAudit = () => {
153159
await createLog(`Audit created!`, response.id);
154160
navigate(`/audits/${response?.id}`);
155161
} finally {
162+
submittingRef.current = false;
156163
queryClient.invalidateQueries({ queryKey: ["audits"]});
157164
setIsSaving(false);
158165
}

0 commit comments

Comments
 (0)