Exemplos
Uso Avançado
Padrões avançados para tratamento de erros, suporte offline e mais.
Uso Avançado
Padrões avançados e melhores práticas para aplicações em produção.
Tratamento de Erros
import { VidtreoRecorder } from '@vidtreo/recorder-react';
import { useState } from 'react';
function RobustRecorder() {
const [error, setError] = useState<string | null>(null);
const handleError = (err: Error) => {
if (err.message.includes('NotAllowedError')) {
setError('Acesso à câmera negado. Por favor permita as permissões.');
} else if (err.message.includes('NotFoundError')) {
setError('Câmera não encontrada. Por favor conecte uma câmera.');
} else if (err.message.includes('NotSupportedError')) {
setError('Seu navegador não suporta gravação de vídeo.');
} else if (err.message.includes('Upload failed')) {
setError('Upload falhou. Por favor verifique sua conexão.');
} else {
setError(err.message);
}
};
return (
<div>
<VidtreoRecorder
apiKey={import.meta.env.VITE_VIDTREO_API_KEY}
lang="pt"
onError={handleError}
onUploadError={handleError}
/>
{error && (
<div className="error-banner">
<p>{error}</p>
<button onClick={() => setError(null)}>Fechar</button>
</div>
)}
</div>
);
}Suporte Offline
O SDK automaticamente enfileira gravações quando offline:
function OfflineAwareRecorder() {
const [isOnline, setIsOnline] = useState(navigator.onLine);
useEffect(() => {
const handleOnline = () => setIsOnline(true);
const handleOffline = () => setIsOnline(false);
window.addEventListener('online', handleOnline);
window.addEventListener('offline', handleOffline);
return () => {
window.removeEventListener('online', handleOnline);
window.removeEventListener('offline', handleOffline);
};
}, []);
return (
<div>
{!isOnline && (
<div className="offline-banner">
Você está offline. As gravações serão enviadas quando conectado.
</div>
)}
<VidtreoRecorder
apiKey={import.meta.env.VITE_VIDTREO_API_KEY}
lang="pt"
/>
</div>
);
}Integração com Formulários
function FeedbackForm() {
const [videoUrl, setVideoUrl] = useState<string | null>(null);
const [feedback, setFeedback] = useState('');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
await submitFeedback({ text: feedback, videoUrl });
};
return (
<form onSubmit={handleSubmit}>
<textarea
value={feedback}
onChange={(e) => setFeedback(e.target.value)}
placeholder="Descreva seu feedback..."
/>
<VidtreoRecorder
apiKey={import.meta.env.VITE_VIDTREO_API_KEY}
lang="pt"
maxRecordingTime={120000}
onUploadComplete={(result) => setVideoUrl(result.uploadUrl)}
/>
{videoUrl && <p>Vídeo anexado</p>}
<button type="submit">Enviar Feedback</button>
</form>
);
}Detecção de Suporte do Navegador
function BrowserAwareRecorder() {
const [isSupported, setIsSupported] = useState(true);
useEffect(() => {
const supported =
'VideoEncoder' in window &&
'AudioEncoder' in window &&
navigator.mediaDevices?.getUserMedia;
setIsSupported(!!supported);
}, []);
if (!isSupported) {
return (
<div className="unsupported">
<h3>Navegador Não Suportado</h3>
<p>Por favor use Chrome, Edge ou Safari 16.4+</p>
</div>
);
}
return <VidtreoRecorder apiKey={import.meta.env.VITE_VIDTREO_API_KEY} lang="pt" />;
}Ver Também
- Configuração — Todas as opções
- Callbacks — Manipulação de eventos
- Referência de API — API completa