export function useRecordingContext()

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,
  };
}