Фильтр FK колонок: заменён dropdown на ввод с автоподстановкой

- autocomplete: true - показывает подсказки при вводе
- freetext: true - разрешает свободный ввод
- filterFunc - фильтрация по вхождению подстроки
- clearable: true - кнопка очистки

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-01-22 11:23:40 +03:00
parent 9ac52afb8b
commit 23e557d792

View File

@@ -479,21 +479,26 @@ async function selectTable(schema, tableName) {
// ✅ Проверяем - загружены ли все значения
const allLoaded = values.length >= total;
// ✅ ФИЛЬТР В ЗАГОЛОВКЕ - выпадающий список для FK колонок
// ✅ ФИЛЬТР В ЗАГОЛОВКЕ - ввод с автоподстановкой для FK колонок
if (allLoaded || total <= 1000) {
// Формируем список значений для фильтра с пустым значением
const filterValues = { "": "-- Все --" };
values.forEach(v => { filterValues[v] = v; });
colDef.headerFilter = "list";
colDef.headerFilterParams = {
values: filterValues,
clearable: false // Не показываем кнопку очистки, есть "Все"
values: values,
autocomplete: true,
clearable: true,
listOnEmpty: true,
freetext: true, // Разрешаем свободный ввод для поиска
placeholderEmpty: "Введите для поиска...",
filterFunc: function(term, label, value, item) {
// Фильтрация по вхождению подстроки
if (!term) return true;
return String(label).toLowerCase().includes(term.toLowerCase());
}
};
// Серверная фильтрация - пропускаем все на клиенте
colDef.headerFilterFunc = function() { return true; };
} else {
// Много значений - оставляем текстовый поиск
// Много значений - текстовый поиск
colDef.headerFilter = "input";
colDef.headerFilterPlaceholder = `Поиск (${total})...`;
colDef.headerFilterFunc = function() { return true; };