vlibras-player-webjs
Version:
Biblioteca JavaScript moderna para integração do VLibras Player com React, Vue, Angular e vanilla JS
92 lines • 3.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useVLibrasTranslation = useVLibrasTranslation;
const react_1 = require("react");
const useVLibras_1 = require("./useVLibras");
/**
* Hook específico para gerenciar traduções de texto para Libras
*/
function useVLibrasTranslation(options = {}) {
const { autoTranslate = false, debounceMs = 500, onTranslationStart, onTranslationComplete, onTranslationError } = options;
const { player, isLoaded } = (0, useVLibras_1.useVLibras)();
const [isTranslating, setIsTranslating] = (0, react_1.useState)(false);
const [error, setError] = (0, react_1.useState)(null);
const [lastTranslation, setLastTranslation] = (0, react_1.useState)(null);
const [translationHistory, setTranslationHistory] = (0, react_1.useState)([]);
const [debounceTimer, setDebounceTimer] = (0, react_1.useState)(null);
const translate = (0, react_1.useCallback)(async (text) => {
if (!player || !isLoaded || !text.trim()) {
return;
}
setIsTranslating(true);
setError(null);
onTranslationStart?.(text);
try {
await player.translateAsync(text);
setLastTranslation(text);
setTranslationHistory(prev => {
const updated = [text, ...prev.filter(t => t !== text)];
return updated.slice(0, 10); // Manter apenas últimas 10 traduções
});
onTranslationComplete?.();
}
catch (err) {
const errorMsg = err instanceof Error ? err.message : 'Erro na tradução';
setError(errorMsg);
onTranslationError?.(err instanceof Error ? err : new Error(errorMsg));
}
finally {
setIsTranslating(false);
}
}, [player, isLoaded, onTranslationStart, onTranslationComplete, onTranslationError]);
const translateAndPlay = (0, react_1.useCallback)(async (text) => {
if (!player || !isLoaded || !text.trim()) {
return;
}
try {
await translate(text);
await player.playAsync();
}
catch (err) {
const errorMsg = err instanceof Error ? err.message : 'Erro na tradução e reprodução';
setError(errorMsg);
onTranslationError?.(err instanceof Error ? err : new Error(errorMsg));
}
}, [player, isLoaded, translate, onTranslationError]);
const debouncedTranslate = (0, react_1.useCallback)(async (text) => {
if (debounceTimer) {
clearTimeout(debounceTimer);
}
return new Promise((resolve) => {
const timer = setTimeout(async () => {
if (autoTranslate) {
await translate(text);
}
resolve();
}, debounceMs);
setDebounceTimer(timer);
});
}, [translate, autoTranslate, debounceMs, debounceTimer]);
const clearHistory = (0, react_1.useCallback)(() => {
setTranslationHistory([]);
setLastTranslation(null);
}, []);
// Cleanup do timer quando componente desmonta
(0, react_1.useEffect)(() => {
return () => {
if (debounceTimer) {
clearTimeout(debounceTimer);
}
};
}, [debounceTimer]);
return {
translate: autoTranslate ? debouncedTranslate : translate,
translateAndPlay,
isTranslating,
error,
lastTranslation,
translationHistory,
clearHistory
};
}
//# sourceMappingURL=useVLibrasTranslation.js.map