UNPKG

@oxyhq/services

Version:

OxyHQ Expo/React Native SDK — UI components, screens, and native features

112 lines (110 loc) 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useLanguageManagement = void 0; var _react = require("react"); var _core = require("@oxyhq/core"); var _errorHandlers = require("../../utils/errorHandlers.js"); const DEFAULT_LANGUAGE = 'en-US'; /** * Manage UI language state, persistence, and metadata derivation. * * @param options - Configuration for storage access and error reporting */ const useLanguageManagement = ({ storage, languageKey, onError, logger }) => { const [currentLanguage, setCurrentLanguage] = (0, _react.useState)(DEFAULT_LANGUAGE); const loadLanguageFromStorage = (0, _react.useCallback)(async () => { if (!storage) { return; } try { const savedLanguageRaw = await storage.getItem(languageKey); const normalized = (0, _core.normalizeLanguageCode)(savedLanguageRaw) || savedLanguageRaw; if (normalized) { setCurrentLanguage(normalized); } } catch (error) { const message = (0, _errorHandlers.extractErrorMessage)(error, 'Failed to load language preference'); onError?.({ message, code: 'LANGUAGE_LOAD_ERROR', status: 500 }); if (logger) { logger(message, error); } else if (__DEV__) { console.warn('Failed to load language preference:', error); } } }, [languageKey, logger, onError, storage]); (0, _react.useEffect)(() => { loadLanguageFromStorage().catch(error => { if (logger) { logger('Unexpected error loading language', error); } }); }, [loadLanguageFromStorage, logger]); const setLanguage = (0, _react.useCallback)(async languageId => { if (!storage) { throw new Error('Storage not initialized'); } const normalized = (0, _core.normalizeLanguageCode)(languageId) || languageId; try { await storage.setItem(languageKey, normalized); setCurrentLanguage(normalized); } catch (error) { const message = (0, _errorHandlers.extractErrorMessage)(error, 'Failed to save language preference'); onError?.({ message, code: 'LANGUAGE_SAVE_ERROR', status: 500 }); if (logger) { logger(message, error); } else if (__DEV__) { console.warn('Failed to save language preference:', error); } throw error instanceof Error ? error : new Error(message); } }, [languageKey, logger, onError, storage]); const applyLanguagePreference = (0, _react.useCallback)(async user => { if (!storage || !user) { return; } const userLanguage = user?.language; if (!userLanguage) { return; } try { const normalized = (0, _core.normalizeLanguageCode)(userLanguage) || userLanguage; await storage.setItem(languageKey, normalized); setCurrentLanguage(normalized); } catch (error) { if (logger) { logger('Failed to apply server language preference', error); } else if (__DEV__) { console.warn('Failed to apply server language preference', error); } } }, [languageKey, logger, storage]); const metadata = (0, _react.useMemo)(() => (0, _core.getLanguageMetadata)(currentLanguage), [currentLanguage]); const languageName = (0, _react.useMemo)(() => (0, _core.getLanguageName)(currentLanguage), [currentLanguage]); const nativeLanguageName = (0, _react.useMemo)(() => (0, _core.getNativeLanguageName)(currentLanguage), [currentLanguage]); return { currentLanguage, metadata, languageName, nativeLanguageName, setLanguage, applyLanguagePreference, hydrateLanguage: loadLanguageFromStorage }; }; exports.useLanguageManagement = useLanguageManagement; //# sourceMappingURL=useLanguageManagement.js.map