dydx-v4-web/src/state/localizationSelectors.ts
Jared Vu ab454d5928
eslint (#26)
* eslint - hooks

* eslint - icons

* eslint - styles

* eslint - state
2023-09-12 09:42:38 -07:00

57 lines
1.3 KiB
TypeScript

import { createSelector } from 'reselect';
import _ from 'lodash';
import { EN_LOCALE_DATA, LocaleData, SupportedLocales } from '@/constants/localization';
import formatString from '@/lib/formatString';
import type { RootState } from './_store';
/**
* @param state
* @returns
*/
export const getIsLocaleLoaded = (state: RootState): boolean => state.localization.isLocaleLoaded;
/**
* @param state
* @returns
*/
export const getSelectedLocaleData = (state: RootState): LocaleData =>
state.localization.localeData;
/**
* @param state
* @returns
*/
export const getSelectedLocale = (state: RootState): SupportedLocales =>
state.localization.selectedLocale;
/**
* @param state
* @returns
*/
export const getStringGetterForLocaleData = (localeData: LocaleData) => {
return ({
key,
params = {},
}: {
key: any;
params?: { [key: string]: string | React.ReactNode };
}): string | Array<string | React.ReactNode> => {
// Fallback to english whenever a key doesn't exist for other languages
const formattedString: string = _.get(localeData, key) || _.get(EN_LOCALE_DATA, key) || '';
return formatString(formattedString, params);
};
};
/**
* @param state
* @returns
*/
export const getLocaleStringGetter = createSelector(
[getSelectedLocaleData],
getStringGetterForLocaleData
);