// 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);