fix(audit): integrando AbortSignal na requisição de rede para cancelamento instantâneo
This commit is contained in:
@@ -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>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user