@gftdcojp/weblate-nextjs-sdk
Version:
A Next.js SDK for integrating with Weblate translation management system
91 lines (90 loc) • 3.21 kB
JavaScript
;
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,
};
}