import React, { useMemo, useState } from 'react'; import { View, Text, Pressable, Switch } from 'react-native'; import { SessionType } from '@multiplayer-app/session-recorder-common'; import { type TextOverridesOptions } from '../../types'; import { sharedStyles } from './styles'; import ModalHeader from './ModalHeader'; import { CapturingIcon } from './icons'; import { logger } from '../../utils'; interface InitialPopoverProps extends React.PropsWithChildren { isContinuous: boolean; showContinuousRecording: boolean; textOverrides: TextOverridesOptions; onStartRecording: (sessionType: SessionType) => void; onStopRecording: (comment?: string) => void; onSaveContinuousSession: () => void; onClose: () => void; isSubmitting: boolean; isOnline: boolean; } const InitialPopover: React.FC = ({ isContinuous, textOverrides, showContinuousRecording, onStartRecording, onStopRecording, onSaveContinuousSession, isOnline, children, }) => { const [saving, setSaving] = useState(false); const [loading, setLoading] = useState(false); const [continuousRecording, setContinuousRecording] = useState(isContinuous); const handleStartRecording = async () => { try { setLoading(true); await onStartRecording(SessionType.MANUAL); } catch (error) { logger.error('InitialPopover', 'Failed to start recording', error); } finally { setLoading(false); } }; const handleToggleContinuousRecording = async (value: boolean) => { try { setLoading(true); setContinuousRecording(value); if (value) { await onStartRecording(SessionType.CONTINUOUS); } else { await onStopRecording(); } } catch (error) { logger.error( 'InitialPopover', 'Failed to toggle continuous recording', error ); } finally { setLoading(false); } }; const handleSaveContinuousSession = async () => { try { setSaving(true); await onSaveContinuousSession(); } catch (error) { logger.error( 'InitialPopover', 'Failed to save continuous session', error ); } finally { setSaving(false); } }; const textContent = useMemo(() => { return { label: textOverrides.continuousRecordingLabel, title: showContinuousRecording ? textOverrides.initialTitleWithContinuous : textOverrides.initialTitleWithoutContinuous, description: showContinuousRecording ? textOverrides.initialDescriptionWithContinuous : textOverrides.initialDescriptionWithoutContinuous, }; }, [showContinuousRecording, textOverrides]); return ( {children} {showContinuousRecording && ( {textContent.label} )} {!continuousRecording ? ( <> {textContent.title} {textContent.description} {loading ? 'Starting to record...' : textOverrides.startRecordingButtonText} ) : ( <> {textOverrides.continuousOverlayTitle} {textOverrides.continuousOverlayDescription} {saving ? 'Saving...' : textOverrides.saveLastSnapshotButtonText} )} ); }; export default InitialPopover;