import { unflatten } from "flat"; import type { TTranslation, ILocale } from "../config/types"; type TMessage = { message: string; }; /** * Хук позволяет использовать локализованное сообщение * @returns {TMessage} */ const useMessage = ({ fn, code, instance, options, }: TTranslation & Pick): TMessage => { const result: string | (() => string) = fn(code); const getMessage: (() => string) = () => { switch (true) { // Локаль задана функцией с аргументами case typeof result === "function": { const item = instance?.translator?.resolve(code); if (!!item) { const res = item.res(options); return fn(res, options); } else { return ""; } } // Локаль задана строкой case typeof result === "string": { return fn(code, options); } default: { return ""; } } }; return { message: getMessage(), }; }; /** * Функция проверяет наличие атрибута для локализации * @returns {Boolean} */ const getIsAttr = (attr?: ILocale["attr"]): boolean => (typeof attr === "string" && !!attr.length) || (Array.isArray(attr) && attr.every((item) => typeof item === "string" && !!item.length)); /** * Получает пользовательские атрибуты в виде объекта с одним уровнем вложенности * @param attrs{ILocale["attr"]} * @returns {Object} */ const getUserAttrs = (attrs: T): T => { return unflatten(attrs, { object: true, }); }; export { getIsAttr, getUserAttrs, useMessage, };