UNPKG

@gftdcojp/weblate-nextjs-sdk

Version:

A Next.js SDK for integrating with Weblate translation management system

80 lines (79 loc) 2.66 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTranslation = useTranslation; exports.useT = useT; exports.useUpdateTranslation = useUpdateTranslation; const react_1 = require("react"); const swr_1 = __importDefault(require("swr")); function useTranslation({ componentSlug, languageCode, client, }) { const [translations, setTranslations] = (0, react_1.useState)({}); const { data: units, error, isLoading, mutate, } = (0, swr_1.default)(`translations/${componentSlug}/${languageCode}/units`, async () => { const translation = await client.getTranslation(componentSlug, languageCode); return client.getUnits(translation.id); }, { revalidateOnFocus: false, revalidateOnReconnect: false, }); (0, react_1.useEffect)(() => { if (units) { const translationMap = units.reduce((acc, unit) => { acc[unit.source] = unit.target || unit.source; return acc; }, {}); setTranslations(translationMap); } }, [units]); const translationError = error ? { error: 'Translation Error', message: error.message, code: error.code, } : null; return { translations, isLoading, error: translationError, mutate, }; } // Hook for getting a single translation function useT(key, defaultValue, options) { const { translations } = options ? useTranslation(options) : { translations: {} }; return translations[key] || defaultValue || key; } // Hook for updating translations function useUpdateTranslation(client) { const [isUpdating, setIsUpdating] = (0, react_1.useState)(false); const [error, setError] = (0, react_1.useState)(null); const updateTranslation = (0, react_1.useCallback)(async (unitId, target) => { setIsUpdating(true); setError(null); try { const updatedUnit = await client.updateUnit(unitId, target); return updatedUnit; } catch (err) { const translationError = { error: 'Update Error', message: err.message, code: err.code, }; setError(translationError); throw translationError; } finally { setIsUpdating(false); } }, [client]); return { updateTranslation, isUpdating, error, }; }