kea-react
Version:
Componentes comunes de react
64 lines (63 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var rangoFechasFilter = require("./rangoFechas");
var valorUnicoFilter = require("./valorUnico");
var busquedaTexto = require("./busquedaTexto");
/**Selecciona un filtro basado en la información de la columna */
function getDataType(data, getData) {
if (data.length == 0)
return "empty";
var distinctData = new Set();
var distinctNumberCount = 0;
var distinctStringCount = 0;
var manyMax = 20;
//Tratamos de tomar una muestra de este tamaño:
var sampleSize = 1000;
var step = Math.round(Math.max(data.length / sampleSize, 1));
var isAllEquals = true;
var firstData = getData(data[0]);
for (var i = 0; i < data.length; i += step) {
var value = getData(data[i]);
if (value instanceof Date) {
return "date";
}
else {
var newValue = !distinctData.has(value);
if (newValue) {
//El valor nunca ha aparecido antes
var type = typeof (data[i]);
if (type == "number")
distinctNumberCount++;
else
distinctStringCount++;
}
}
if (distinctNumberCount > manyMax && distinctStringCount == 0) {
return "numericRange";
}
else if (distinctStringCount > manyMax) {
return "manyValues";
}
distinctData.add(value);
if (value != firstData) {
isAllEquals = false;
}
}
return isAllEquals ? "allEqual" : "fewValues";
}
/**Selecciona un tipo de filtro basado en la información de la columna */
function getAutoFiltro(data, getData) {
var dataType = getDataType(data, getData);
switch (dataType) {
case "allEqual":
return valorUnicoFilter.filtro;
case "date":
return rangoFechasFilter.filtro;
case "numericRange":
case "fewValues":
return valorUnicoFilter.filtro;
case "manyValues":
return busquedaTexto.filtro;
}
}
exports.getAutoFiltro = getAutoFiltro;