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