Вкратце: есть ли способ реализовать собственный компаратор для фильтров числовых столбцов?
Длинная история:
Я использую ag-grid в Angular (2). Я предоставляю свои собственные компоненты для ячеек в моей ag-сетке:
let column = {
headerName: column.header,
field: column.id,
cellRendererFramework: DynamicComponent,
filter: this.convertFormatToFilterType(column.format) // returns "text", "number" or "date"
}
Чтобы фильтры правильно получали значения из моих ячеек, я предоставляю настраиваемые компараторы (это для фильтров текстовых столбцов):
if (c.filter === "text")
c['filterParams'] = {
textCustomComparator: (filter, cell, filterText): boolean => {
var filterTextLowerCase = filterText.toLowerCase();
var valueLowerCase = cell.value.toString().toLowerCase();
switch (filter) {
case 'contains':
return valueLowerCase.indexOf(filterTextLowerCase) >= 0;
case 'notContains':
return valueLowerCase.indexOf(filterTextLowerCase) === -1;
case 'equals':
return valueLowerCase === filterTextLowerCase;
case 'notEqual':
return valueLowerCase != filterTextLowerCase;
case 'startsWith':
return valueLowerCase.indexOf(filterTextLowerCase) === 0;
case 'endsWith':
var index = valueLowerCase.lastIndexOf(filterTextLowerCase);
return index >= 0 && index === (valueLowerCase.length - filterTextLowerCase.length);
default:
// should never happen
console.warn('invalid filter type ' + filter);
return false;
}
}
};
Как видите, мне нужно получить доступ к значению ячейки, используя "cell.value". Код выше работает нормально.
У меня проблемы с предоставлением аналогичных функций для фильтров числовых столбцов - они, похоже, не используют какой-либо настраиваемый компаратор. Следовательно, что происходит, фильтр пытается получить доступ к значению ячейки напрямую вместо использования "cell.value".
Итак, есть ли способ реализовать собственный компаратор для фильтров числовых столбцов? Или, если нет, то каким-либо другим способом я могу правильно получить значение из моих ячеек в этом случае?