UNPKG

kea-react

Version:

Componentes comunes de react

64 lines (63 loc) 2.21 kB
"use strict"; 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;