SYNC: filterable table control

This commit is contained in:
SPRINX0\prochazka
2025-04-08 13:54:04 +02:00
committed by Diflow
parent fc43b35628
commit 13d057e4f7
4 changed files with 99 additions and 3 deletions

View File

@@ -1,6 +1,9 @@
import { arrayToHexString, isTypeDateTime } from 'dbgate-tools';
import { arrayToHexString, evalFilterBehaviour, isTypeDateTime } from 'dbgate-tools';
import { format, toDate } from 'date-fns';
import _isString from 'lodash/isString';
import _cloneDeepWith from 'lodash/cloneDeepWith';
import { Condition, Expression } from 'dbgate-sqltree';
import { parseFilter } from './parseFilter';
export type FilterMultipleValuesMode = 'is' | 'is_not' | 'contains' | 'begins' | 'ends';
@@ -61,3 +64,29 @@ export function createMultiLineFilter(mode: FilterMultipleValuesMode, text: stri
}
return res;
}
export function compileCompoudEvalCondition(filters: { [column: string]: string }): Condition {
if (!filters) return null;
const conditions = [];
for (const name in filters) {
try {
const condition = parseFilter(filters[name], evalFilterBehaviour);
const replaced = _cloneDeepWith(condition, (expr: Expression) => {
if (expr.exprType == 'placeholder')
return {
exprType: 'column',
columnName: name,
};
});
conditions.push(replaced);
} catch (err) {
// filter parse error - ignore filter
}
}
if (conditions.length == 0) return null;
return {
conditionType: 'and',
conditions,
};
}