|
- /*
- Copyright (C) 2025 QuantumNous
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- For commercial licensing, please contact support@quantumnous.com
- */
-
- import React, { useEffect } from 'react';
- import { useTranslation } from 'react-i18next';
- import { reducer, initialState } from './reducer';
- import { StatusContext } from '../Status';
-
- export const UserContext = React.createContext({
- state: initialState,
- dispatch: () => null,
- });
-
- export const UserProvider = ({ children }) => {
- const [state, dispatch] = React.useReducer(reducer, initialState);
- const { i18n } = useTranslation();
- const [statusState] = React.useContext(StatusContext);
-
- // Sync language preference when user data is loaded
- useEffect(() => {
- if (state.user?.setting) {
- try {
- const settings = JSON.parse(state.user.setting);
- if (settings.language && settings.language !== i18n.language) {
- i18n.changeLanguage(settings.language);
- } else if (!settings.language && statusState.status?.default_language) {
- // No personal preference — fall back to admin default
- i18n.changeLanguage(statusState.status.default_language);
- }
- } catch (e) {
- // Ignore parse errors
- }
- }
- }, [state.user?.setting, statusState.status?.default_language, i18n]);
-
- return (
- <UserContext.Provider value={[state, dispatch]}>
- {children}
- </UserContext.Provider>
- );
- };
|