src/utils/parseFormatter.js
import moment from 'moment';
import numeral from 'numeral';
import {
split,
trim,
join,
slice,
map,
isNil,
isString,
toString,
} from 'lodash';
const typesFunctions = {
date: ({ data, format }) =>
moment(data, 'DD.MM.YYYY HH:mm:ss').format(format),
password: ({ data }) => join(map(data, () => '*'), ''),
number: ({ data, format }) => {
const number = isString(data) ? Number(data) : data;
return numeral(number).format(format);
},
dateFromNow: ({ format }) => moment().format(format),
};
/**
* Преобразует строку по формату
* Примеры форматов:
* format="date DD.MM.YYYY HH:mm"
* format="date DD.MM.YYYY"
* format="dateFromNow"
* format="password"
* format="number 0,0.00"
* format="number 0,0.00[000]"
* @param data - исходная строка
* @param typeAndformat - строка с типом данных и форматом
* @returns {*}
*/
function parseFormatter(data, typeAndformat = false) {
const str = toString(data);
if (isNil(data) || !typeAndformat || str === '') return data;
const typeAndFormat = split(trim(typeAndformat), ' ');
if (!typeAndFormat.length) return null;
const type = typeAndFormat[0];
const format = join(slice(typeAndFormat, 1), ' ');
return typesFunctions[type]({ data: str, format });
}
export default parseFormatter;