in src/hooks/useRecordingContext.ts [39:93]
export function useRecordingContext(
electronAPI: IElectronAPI,
url: string,
stepCount: number,
setResult: (data: undefined) => void,
setSteps: Setter<Steps>
): IRecordingContext {
const [isStartOverModalVisible, setIsStartOverModalVisible] = useState(false);
const [recordingStatus, setRecordingStatus] = useState(RecordingStatus.NotRecording);
const toggleRecording = useCallback(async () => {
if (recordingStatus === RecordingStatus.NotRecording && stepCount > 0) {
setIsStartOverModalVisible(true);
} else if (recordingStatus === RecordingStatus.Recording) {
setRecordingStatus(RecordingStatus.NotRecording);
// Stop browser process
electronAPI.stopRecording();
} else {
setRecordingStatus(RecordingStatus.Recording);
await electronAPI.recordJourney(url);
setRecordingStatus(RecordingStatus.NotRecording);
}
}, [electronAPI, recordingStatus, stepCount, url]);
const startOver = useCallback(async () => {
setSteps([]);
if (recordingStatus === RecordingStatus.NotRecording) {
setRecordingStatus(RecordingStatus.Recording);
// Depends on the result's context, because when we overwrite
// a previous journey we need to discard its result status
setResult(undefined);
await electronAPI.recordJourney(url);
setRecordingStatus(RecordingStatus.NotRecording);
}
}, [electronAPI, recordingStatus, setResult, setSteps, url]);
const togglePause = async () => {
if (recordingStatus === RecordingStatus.NotRecording) return;
if (recordingStatus !== RecordingStatus.Paused) {
setRecordingStatus(RecordingStatus.Paused);
await electronAPI.pauseRecording();
} else {
await electronAPI.resumeRecording();
setRecordingStatus(RecordingStatus.Recording);
}
};
return {
startOver,
isStartOverModalVisible,
setIsStartOverModalVisible,
recordingStatus,
toggleRecording,
togglePause,
};
}