Spaces:
Running
Running
import React, { useState } from 'react'; | |
import './IOSModal.scss'; | |
interface IOSModalProps { | |
isOpen: boolean; | |
onClose: () => void; | |
} | |
export const IOSModal: React.FC<IOSModalProps> = ({ isOpen, onClose }) => { | |
const [error, setError] = useState<string | null>(null); | |
const handleMicPermission = async () => { | |
try { | |
console.log('π€ Requesting iOS microphone permission from modal...'); | |
const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); | |
console.log('β iOS microphone permission granted from modal!'); | |
// Stop the stream since we don't need it yet - we'll request it again when recording starts | |
stream.getTracks().forEach(track => track.stop()); | |
setError(null); | |
onClose(); | |
} catch (err) { | |
console.error('β iOS microphone permission denied from modal:', err); | |
setError(err instanceof Error ? err.message : 'Failed to access microphone'); | |
} | |
}; | |
if (!isOpen) return null; | |
return ( | |
<div className="ios-modal-overlay"> | |
<div className="ios-modal"> | |
<h2>Microphone Access Required</h2> | |
<p> | |
To use this app on iOS, we need permission to access your microphone. | |
Please tap "Allow" when prompted. | |
</p> | |
<p> | |
If you've denied permission, you'll need to enable it in your device settings. | |
</p> | |
{error && ( | |
<p className="error-message"> | |
Error: {error} | |
</p> | |
)} | |
<button onClick={handleMicPermission} className="ios-modal-button"> | |
{error ? 'Try Again' : 'Got it'} | |
</button> | |
</div> | |
</div> | |
); | |
}; |