fix: 🐛 Comparison now also works with strings
Inline filters like >2011/04/01 will work as expected. Works with >, < and :
This commit is contained in:
parent
26a37b539f
commit
acfe0e49cd
@ -270,13 +270,8 @@ export default class ColumnManager {
|
|||||||
|
|
||||||
bindFilter() {
|
bindFilter() {
|
||||||
if (!this.options.inlineFilters) return;
|
if (!this.options.inlineFilters) return;
|
||||||
this.appliedFilters = this.appliedFilters || {};
|
|
||||||
const handler = e => {
|
const handler = e => {
|
||||||
this.$filterCell = $.closest('.dt-cell', e.target);
|
this.applyFilter(this.getAppliedFilters());
|
||||||
const { colIndex } = $.data(this.$filterCell);
|
|
||||||
const keyword = e.target.value;
|
|
||||||
this.appliedFilters[colIndex] = keyword;
|
|
||||||
this.applyFilter(this.appliedFilters);
|
|
||||||
};
|
};
|
||||||
$.on(this.header, 'keydown', '.dt-filter', debounce(handler, 300));
|
$.on(this.header, 'keydown', '.dt-filter', debounce(handler, 300));
|
||||||
}
|
}
|
||||||
@ -290,6 +285,17 @@ export default class ColumnManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAppliedFilters() {
|
||||||
|
const filters = {};
|
||||||
|
$.each('.dt-filter', this.header).map((input) => {
|
||||||
|
const value = input.value;
|
||||||
|
if (value) {
|
||||||
|
filters[input.dataset.colIndex] = value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return filters;
|
||||||
|
}
|
||||||
|
|
||||||
applyDefaultSortOrder() {
|
applyDefaultSortOrder() {
|
||||||
// sort rows if any 1 column has a default sortOrder set
|
// sort rows if any 1 column has a default sortOrder set
|
||||||
const columnsToSort = this.getColumns().filter(col => col.sortOrder !== 'none');
|
const columnsToSort = this.getColumns().filter(col => col.sortOrder !== 'none');
|
||||||
|
|||||||
@ -3,6 +3,10 @@ import { isNumber, stripHTML } from './utils';
|
|||||||
export default function filterRows(rows, filters) {
|
export default function filterRows(rows, filters) {
|
||||||
let filteredRowIndices = [];
|
let filteredRowIndices = [];
|
||||||
|
|
||||||
|
if (Object.keys(filters).length === 0) {
|
||||||
|
return rows.map(row => row.meta.rowIndex);
|
||||||
|
}
|
||||||
|
|
||||||
for (let colIndex in filters) {
|
for (let colIndex in filters) {
|
||||||
const keyword = filters[colIndex];
|
const keyword = filters[colIndex];
|
||||||
|
|
||||||
@ -40,7 +44,7 @@ function getFilterMethod(filter) {
|
|||||||
greaterThan(keyword, cells) {
|
greaterThan(keyword, cells) {
|
||||||
return cells
|
return cells
|
||||||
.filter(cell => {
|
.filter(cell => {
|
||||||
const value = parseFloat(cell.content);
|
const value = cell.content;
|
||||||
return value > keyword;
|
return value > keyword;
|
||||||
})
|
})
|
||||||
.map(cell => cell.rowIndex);
|
.map(cell => cell.rowIndex);
|
||||||
@ -49,7 +53,7 @@ function getFilterMethod(filter) {
|
|||||||
lessThan(keyword, cells) {
|
lessThan(keyword, cells) {
|
||||||
return cells
|
return cells
|
||||||
.filter(cell => {
|
.filter(cell => {
|
||||||
const value = parseFloat(cell.content);
|
const value = cell.content;
|
||||||
return value < keyword;
|
return value < keyword;
|
||||||
})
|
})
|
||||||
.map(cell => cell.rowIndex);
|
.map(cell => cell.rowIndex);
|
||||||
@ -67,7 +71,7 @@ function getFilterMethod(filter) {
|
|||||||
range(rangeValues, cells) {
|
range(rangeValues, cells) {
|
||||||
return cells
|
return cells
|
||||||
.filter(cell => {
|
.filter(cell => {
|
||||||
const value = parseFloat(cell.content);
|
const value = cell.content;
|
||||||
return value >= rangeValues[0] && value <= rangeValues[1];
|
return value >= rangeValues[0] && value <= rangeValues[1];
|
||||||
})
|
})
|
||||||
.map(cell => cell.rowIndex);
|
.map(cell => cell.rowIndex);
|
||||||
@ -80,48 +84,49 @@ function getFilterMethod(filter) {
|
|||||||
function guessFilter(keyword = '') {
|
function guessFilter(keyword = '') {
|
||||||
if (keyword.length === 0) return {};
|
if (keyword.length === 0) return {};
|
||||||
|
|
||||||
|
let compareString = keyword;
|
||||||
|
|
||||||
|
if (['>', '<', '='].includes(compareString[0])) {
|
||||||
|
compareString = keyword.slice(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (keyword.startsWith('>')) {
|
if (keyword.startsWith('>')) {
|
||||||
if (isNumber(keyword.slice(1))) {
|
if (compareString) {
|
||||||
return {
|
return {
|
||||||
type: 'greaterThan',
|
type: 'greaterThan',
|
||||||
text: Number(keyword.slice(1).trim())
|
text: compareString.trim()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
keyword = keyword.slice(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyword.startsWith('<')) {
|
if (keyword.startsWith('<')) {
|
||||||
if (isNumber(keyword.slice(1))) {
|
if (compareString) {
|
||||||
return {
|
return {
|
||||||
type: 'lessThan',
|
type: 'lessThan',
|
||||||
text: Number(keyword.slice(1).trim())
|
text: compareString.trim()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
keyword = keyword.slice(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keyword.split(':').length === 2 && keyword.split(':').every(isNumber)) {
|
|
||||||
return {
|
|
||||||
type: 'range',
|
|
||||||
text: keyword.split(':').map(v => v.trim()).map(Number)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyword.startsWith('=')) {
|
if (keyword.startsWith('=')) {
|
||||||
if (isNumber(keyword.slice(1))) {
|
if (isNumber(compareString)) {
|
||||||
return {
|
return {
|
||||||
type: 'equals',
|
type: 'equals',
|
||||||
text: Number(keyword.slice(1).trim())
|
text: Number(keyword.slice(1).trim())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
keyword = keyword.slice(1);
|
if (keyword.split(':').length === 2) {
|
||||||
|
compareString = keyword.split(':');
|
||||||
|
return {
|
||||||
|
type: 'range',
|
||||||
|
text: compareString.map(v => v.trim())
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: 'contains',
|
type: 'contains',
|
||||||
text: keyword.toLowerCase()
|
text: compareString.toLowerCase()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user