fix(audit): integrando AbortSignal na requisição de rede para cancelamento instantâneo

This commit is contained in:
2026-07-11 21:34:18 +00:00
parent b5b5b94595
commit b4df19b2c1
2 changed files with 38 additions and 17 deletions
+6 -4
View File
@@ -66,7 +66,9 @@ export default function AuditPanel() {
return;
}
abortRef.current = false;
const controller = new AbortController();
abortRef.current = controller as any; // Usando any pois não precisamos refatorar todos os tipos agora, apenas para passar o signal
setError(null);
setReport(null);
setProgress(0);
@@ -84,13 +86,13 @@ export default function AuditPanel() {
scenarios,
(p) => {
setProgress(p);
if (abortRef.current) throw new Error('Abortado pelo usuário');
},
controller.signal
);
setReport(reportResult);
setStatus('done');
} catch (e) {
if (e instanceof Error && e.message === 'Abortado pelo usuário') {
if (e instanceof Error && e.message.includes('Abortado')) {
setStatus('idle');
return;
}
@@ -179,7 +181,7 @@ export default function AuditPanel() {
Executar Auditoria
</Button>
{(status === 'running' || status === 'generating') && (
<Button variant="outline" size="sm" onClick={() => { abortRef.current = true; }}>
<Button variant="outline" size="sm" onClick={() => { if (abortRef.current && typeof (abortRef.current as any).abort === 'function') (abortRef.current as any).abort(); }}>
Cancelar
</Button>
)}