@findify/react-components
Version:
Findify react UI components
27 lines (22 loc) • 765 B
text/typescript
import { useConfig } from '@findify/react-connect';
import { Config } from '@findify/store-configuration';
import { useMemo } from 'react';
import unescape from 'lodash/unescape';
const createTranslator = (strings = Map(), selector: RegExp) => {
return (key: keyof Config['translations'], ...args: any[]): string => {
const value = strings.get(key);
const isTemplate = selector.test(value);
if (!value) return key;
if (!isTemplate) return value;
const tpl = unescape(value);
let index = -1;
return tpl.replace(selector, () => {
index++;
return args[index] || '';
});
};
};
export default () => {
const { config } = useConfig();
return useMemo(() => createTranslator(config.get('translations'), /%s/), []);
};