Изменить критерии поиска, когда результаты HeaderFilter равны нулю - PullRequest
0 голосов
/ 15 января 2020

Я бы хотел, чтобы критерии поиска адаптировались, когда пользователь выполняет поиск с использованием поля поиска headerFilter, переключаясь между правилами поиска "равно" / "подобен" в зависимости от количества результатов

пример> значений являются ["a", "b", "a c", "ab"] для столбца

При поиске "a" показываются только результаты, где value_search === row_value. Если предыдущие критерии возвращают 0 строк, измените критерии поиска на row_value.includes(value_search)

Таким образом, поиск значений в приведенном выше примере должен привести к следующему

Search : "a" должно быть Results : "a" только

Search : "b" должно быть Results : "b" только

Search : "ac" должно быть Results : "ac" только

Search : "c" должно быть Results : "ac" (таким образом, это «подобный» поиск поскольку это не точное совпадение с какими-либо значениями)

Search : "ab" должно быть только Results : "ab" (не "a" или "b", поскольку "равный" поиск дал результаты)

Я не уверен, если это возможно, но было бы здорово, если это так. Я не смог заставить это работать.


Было бы также хорошо, если бы выпадающие значения (при использовании с headerFilterParams: {values: true}) также фильтровались с помощью ввода пользователя. Например, предложения должны реагировать с "a", "ac", "ab", если в фильтр заголовка было введено "a".

1 Ответ

1 голос
/ 19 января 2020

Вы можете использовать пользовательскую функцию фильтра заголовка, чтобы использовать любое правило, которое вам нравится для фильтрации, для этого можно использовать свойство определения столбца headerFilterFun c:

function customHeaderFilter(headerValue, rowValue, rowData, filterParams){
    //headerValue - the value of the header filter element
    //rowValue - the value of the column in this row
    //rowData - the data for the row being filtered
    //filterParams - params object passed to the headerFilterFuncParams property

    return rowData.name == filterParams.name && rowValue < headerValue; //must return a boolean, true if it passes the filter.
}

//column definition object in table constructor
{title:"Age", field:"age", headerFilter:"input", headerFilterPlaceholder:"Max Age", headerFilterFunc:customHeaderFilter, headerFilterFuncParams:{name:"bob"}}

Проверьте Документацию фильтра для получения полной информации

Функция фильтрации сама выполняет фильтрацию, поэтому не знает о количестве проходящих через нее строк. но вы можете использовать обратный вызов dataFiltered , чтобы проверить количество строк, прошедших через фильтр, при передаче в массив строк.

dataFiltered:function(filters, rows){
    //filters - array of filters currently applied
    //rows - array of row components that pass the filters
}

Затем вы можете изменить фильтр таблицы, если длина массива строк равна 0

...