UNPKG

@gftdcojp/weblate-nextjs-sdk

Version:

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

91 lines (90 loc) 3.21 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useLanguage = useLanguage; exports.useComponentLanguages = useComponentLanguages; const react_1 = require("react"); const swr_1 = __importDefault(require("swr")); function useLanguage({ client, defaultLanguage = 'en', }) { const [currentLanguage, setCurrentLanguage] = (0, react_1.useState)(null); const { data: languages, error, isLoading, } = (0, swr_1.default)('languages', async () => { return client.getLanguages(); }, { revalidateOnFocus: false, revalidateOnReconnect: false, }); (0, react_1.useEffect)(() => { if (languages && languages.length > 0) { const defaultLang = languages.find(lang => lang.code === defaultLanguage) || languages[0]; setCurrentLanguage(defaultLang); } }, [languages, defaultLanguage]); const setLanguage = (0, react_1.useCallback)((languageCode) => { if (languages) { const selectedLanguage = languages.find(lang => lang.code === languageCode); if (selectedLanguage) { setCurrentLanguage(selectedLanguage); } } }, [languages]); const languageError = error ? { error: 'Language Error', message: error.message, code: error.code, } : null; return { languages: languages || [], currentLanguage, isLoading, error: languageError, setLanguage, }; } // Hook for getting available languages for a specific component function useComponentLanguages(componentSlug, client) { const [currentLanguage, setCurrentLanguage] = (0, react_1.useState)(null); const { data: translations, error, isLoading, } = (0, swr_1.default)(`components/${componentSlug}/translations`, async () => { return client.getTranslations(componentSlug); }, { revalidateOnFocus: false, revalidateOnReconnect: false, }); const languages = translations?.map(translation => ({ id: translation.language, code: translation.language, name: translation.language, native_name: translation.language, direction: 'ltr', plural: { number: 2, formula: 'n != 1' }, statistics: translation.statistics, })) || []; (0, react_1.useEffect)(() => { if (languages.length > 0) { setCurrentLanguage(languages[0]); } }, [languages]); const setLanguage = (0, react_1.useCallback)((languageCode) => { const selectedLanguage = languages.find(lang => lang.code === languageCode); if (selectedLanguage) { setCurrentLanguage(selectedLanguage); } }, [languages]); const languageError = error ? { error: 'Language Error', message: error.message, code: error.code, } : null; return { languages, currentLanguage, isLoading, error: languageError, setLanguage, }; }