import { useEffect } from '@wordpress/element'; import { api } from '../shared/api/endpoints'; import type { ScanState } from '../shared/api/types/status'; const STEP_PAUSE_MILLISECONDS = 1000; function pause( milliseconds: number ): Promise< void > { return new Promise( ( resolve ) => { setTimeout( resolve, milliseconds ); } ); } async function isStepTaken(): Promise< boolean > { try { await api.scanStep(); } catch { return false; } return true; } async function stepWhileRunning( isStopped: () => boolean ): Promise< void > { while ( ! isStopped() ) { const wasTaken = await isStepTaken(); if ( ! wasTaken ) { return; } await pause( STEP_PAUSE_MILLISECONDS ); } } export function useScanSteps( scanState: ScanState | undefined ): void { useEffect( () => { if ( scanState !== 'running' ) { return undefined; } let isStopped = false; void stepWhileRunning( () => isStopped ); return () => { isStopped = true; }; }, [ scanState ] ); }