// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import {withObservables} from '@nozbe/watermelondb/react'; import React, {type ComponentType, createContext} from 'react'; import {IntlProvider} from 'react-intl'; import {of as of$} from 'rxjs'; import {switchMap} from 'rxjs/operators'; import {DEFAULT_LOCALE, getTranslations} from '@i18n'; import {observeCurrentUser} from '@queries/servers/user'; import type Database from '@nozbe/watermelondb/Database'; // Suppress missing translation warnings in development const onIntlError = (err: any) => { if (__DEV__ && err.code === 'MISSING_TRANSLATION') { // Silently ignore missing translations in dev mode return; } // eslint-disable-next-line no-console console.error(err); }; type Props = { locale: string; children: React.ReactNode; } type WithUserLocaleProps = { locale: string; } export const UserLocaleContext = createContext(DEFAULT_LOCALE); const {Consumer, Provider} = UserLocaleContext; const UserLocaleProvider = ({locale, children}: Props) => { return ( {children} ); }; export function withUserLocale(Component: ComponentType): ComponentType { return function UserLocaleComponent(props) { return ( {(locale: string) => ( )} ); }; } export function useUserLocale(): string { return React.useContext(UserLocaleContext); } const enhancedThemeProvider = withObservables([], ({database}: {database: Database}) => ({ locale: observeCurrentUser(database).pipe( switchMap((user) => of$(user?.locale || DEFAULT_LOCALE)), ), })); export default enhancedThemeProvider(UserLocaleProvider);