@krowdy-ui/views
Version:
React components that implement Google's Material Design.
81 lines (67 loc) • 2.16 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _typeof from "@babel/runtime/helpers/esm/typeof";
import XDate from 'xdate';
var formatDate = function formatDate(date) {
return new XDate(date).toString('yyyy/MM/dd');
}; // 2020/01/20
var formatRegex = function formatRegex(value) {
var vocals = ['[aáàãâä]', '[eéèêë]', '[iíìîï]', '[oóòõôö]', '[uúùûü]'];
var string = Array.isArray(value) ? value.join('|') : value;
vocals.forEach(function (list) {
string = string.replace(new RegExp(list, 'gi'), list);
});
return new RegExp("(^|)".concat(string.replace(/ /g, '\\s*'), "($|)\\b"), 'i');
};
var formatValue = function formatValue(type, value) {
switch (type) {
case 'date':
return formatDate(value);
case 'number':
return Number(value);
case 'category':
return _typeof(value) === 'object' ? value._id : value;
default:
return value;
}
};
export default function formatFilters(filters) {
return filters.map(function (filter) {
var key = filter.key,
operator = filter.operator,
type = filter.type,
value = filter.value,
_filter$children = filter.children,
children = _filter$children === void 0 ? [] : _filter$children;
var valueFilter = Array.isArray(value) ? value.map(function (val) {
return formatValue(type, val);
}) : formatValue(type, value);
var valueFromOperator = {};
switch (operator) {
case '$range':
valueFromOperator = {
$gte: valueFilter[0],
$lte: valueFilter[1]
};
break;
case '$regex':
case '$unregex':
valueFromOperator = {
$regex: formatRegex(value)
};
break;
default:
valueFromOperator = _defineProperty({}, operator, valueFilter);
break;
}
var response = _defineProperty({}, key, valueFromOperator);
if (children.length) {
var child = formatFilters(children);
return {
$and: [_defineProperty({
$or: child
}, key, valueFromOperator)]
};
}
return response;
});
}