UNPKG

@lakshmiprasanth/react-voice-to-text

Version:

A modern React package for voice-to-text conversion with real-time speech recognition and file upload support

95 lines (91 loc) 3.11 kB
'use strict'; var react = require('react'); const useFileUpload = (options = {}) => { const { acceptedFormats = ['audio/*'], maxFileSize = 50 * 1024 * 1024, // 50MB onFileSelect, onConvert, onError } = options; const [selectedFile, setSelectedFile] = react.useState(null); const [isConverting, setIsConverting] = react.useState(false); const [results, setResults] = react.useState([]); const [error, setError] = react.useState(null); const validateFile = react.useCallback((file) => { // Validate file size if (file.size > maxFileSize) { return { isValid: false, error: `File size (${(file.size / 1024 / 1024).toFixed(2)}MB) exceeds maximum allowed size (${(maxFileSize / 1024 / 1024).toFixed(2)}MB)` }; } // Validate file type const isValidType = acceptedFormats.some(format => { if (format === 'audio/*') { return file.type.startsWith('audio/'); } return file.type === format; }); if (!isValidType) { return { isValid: false, error: `File type ${file.type} is not supported. Please select an audio file.` }; } return { isValid: true }; }, [acceptedFormats, maxFileSize]); const selectFile = react.useCallback((file) => { const validation = validateFile(file); if (!validation.isValid) { setError(validation.error || 'Unknown validation error'); onError?.(validation.error); return; } setSelectedFile(file); setError(null); onFileSelect?.(file); }, [validateFile, onFileSelect, onError]); const convertFile = react.useCallback(async (language = 'en-US') => { if (!selectedFile) { const error = 'No file selected'; setError(error); onError?.(error); return; } setIsConverting(true); setError(null); try { const result = await onConvert?.(selectedFile, language); if (result) { setResults(prev => [...prev, result]); } } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Failed to convert file'; setError(errorMessage); onError?.(errorMessage); } finally { setIsConverting(false); } }, [selectedFile, onConvert, onError]); const clearFile = react.useCallback(() => { setSelectedFile(null); }, []); const clearResults = react.useCallback(() => { setResults([]); }, []); const clearError = react.useCallback(() => { setError(null); }, []); return { selectedFile, isConverting, results, error, selectFile, convertFile, clearFile, clearResults, clearError, validateFile }; }; exports.useFileUpload = useFileUpload; //# sourceMappingURL=useFileUpload.js.map