UNPKG

@adaptabletools/adaptable-cjs

Version:

Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

202 lines (201 loc) 8.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapColumnFilterToQlPredicate = exports.isPredicateEmpty = exports.qlPredicateToString = exports.mapQlPredicateToAdaptablePredicate = exports.mapAdaptablePredicateToQlPredicate = exports.mapAdaptablePredicateDefToQlPredicateDef = void 0; const tslib_1 = require("tslib"); const react_1 = tslib_1.__importDefault(require("react")); const Icon_1 = require("../../../components/Icon"); const AdaptableIconComponent_1 = require("../AdaptableIconComponent"); const mapAdaptablePredicateDefToQlPredicateDef = (adaptablePredicateDef, // used to determine values type dataType) => { let icon = null; if ((0, Icon_1.isAdaptableIcon)(adaptablePredicateDef.icon)) { icon = react_1.default.createElement(AdaptableIconComponent_1.AdaptableIconComponent, { icon: adaptablePredicateDef.icon }); } else if (adaptablePredicateDef.icon && 'text' in adaptablePredicateDef.icon) { icon = react_1.default.createElement('div', { children: adaptablePredicateDef.icon.text }); } const inputs = (adaptablePredicateDef?.inputs ?? [])?.map((input) => { return input.type; }); if (adaptablePredicateDef.id === 'In' || adaptablePredicateDef.id === 'NotIn') { if (['text', 'number', 'date'].includes(dataType)) { // add array type inputs.push(`${dataType}[]`); } if (['text[]', 'number[]'].includes(dataType)) { // add array type inputs.push(dataType); } } const qlPredicateDef = { operator: adaptablePredicateDef.id, label: adaptablePredicateDef.label ?? adaptablePredicateDef.id, icon, inputs, toString: (params) => adaptablePredicateDef.label, }; if (adaptablePredicateDef.hasOwnProperty('toString')) { qlPredicateDef.toString = adaptablePredicateDef.toString; } return qlPredicateDef; }; exports.mapAdaptablePredicateDefToQlPredicateDef = mapAdaptablePredicateDefToQlPredicateDef; const mapAdaptablePredicateToQlPredicate = (adaptablePredicate) => { return { operator: adaptablePredicate.PredicateId, // make sure all predicates are in qal args: adaptablePredicate.Inputs, }; }; exports.mapAdaptablePredicateToQlPredicate = mapAdaptablePredicateToQlPredicate; const mapQlPredicateToAdaptablePredicate = (qlPredicate) => { return { PredicateId: qlPredicate.operator, Inputs: qlPredicate.args, }; }; exports.mapQlPredicateToAdaptablePredicate = mapQlPredicateToAdaptablePredicate; const qlPredicateToString = (qlPredicate, predicateDefs) => { if (typeof qlPredicate === 'object' && 'operator' in qlPredicate && (qlPredicate.operator === 'AND' || qlPredicate.operator === 'OR')) { // save to join args because there is no extra nesting return qlPredicate.args .filter((str) => str) .map((arg) => (0, exports.qlPredicateToString)(arg, predicateDefs)) .join(` ${qlPredicate.operator} `); } const predicateDef = predicateDefs.find((predicateDef) => predicateDef.operator === qlPredicate.operator); if (!predicateDef) { return qlPredicate.operator; } if (!predicateDef) { return qlPredicate.operator; } if (!predicateDef.hasOwnProperty('toString')) { return predicateDef.label; } const str = predicateDef.toString({ inputs: (qlPredicate.args || []).filter((arg) => arg != undefined), }); return str; }; exports.qlPredicateToString = qlPredicateToString; const isPredicateEmpty = (predicate, predicateDef) => { if (!predicateDef?.inputs || predicateDef.inputs.length === 0) { return false; } return (!predicate || !predicate.args || predicate.args.length === 0 || predicate.args.every((arg) => arg == undefined)); }; exports.isPredicateEmpty = isPredicateEmpty; const mapColumnFilterToQlPredicate = (columnFilter, abColumn, qlPredicateDefs, columnFilterOptions, filterComponent, api) => { const combinator = columnFilter?.PredicatesOperator ?? 'AND'; const qlPredicate = { operator: combinator, args: (columnFilter?.Predicates ?? []).map?.(exports.mapAdaptablePredicateToQlPredicate), }; if (qlPredicate.args.length === 0) { // used when none is defined let defaultQlPredicate = null; switch (abColumn.dataType) { case 'number': let defaultQlNumberPredicate; const defaultNumericColumnFilter = columnFilterOptions.defaultNumericColumnFilter; if (defaultNumericColumnFilter) { if (typeof defaultNumericColumnFilter === 'function') { const context = { column: abColumn, filterComponent, ...api.internalApi.buildBaseContext(), }; defaultQlNumberPredicate = defaultNumericColumnFilter(context); } else { defaultQlNumberPredicate = defaultNumericColumnFilter; } } defaultQlPredicate = defaultQlNumberPredicate ? { operator: defaultQlNumberPredicate, args: [] } : { operator: 'Equals', args: [] }; break; case 'text': let defaultQlTextPredicate; const defaultTextColumnFilter = columnFilterOptions.defaultTextColumnFilter; if (defaultTextColumnFilter) { if (typeof defaultTextColumnFilter === 'function') { const context = { column: abColumn, filterComponent, ...api.internalApi.buildBaseContext(), }; defaultQlTextPredicate = defaultTextColumnFilter(context); } else { defaultQlTextPredicate = defaultTextColumnFilter; } } defaultQlPredicate = defaultQlTextPredicate ? { operator: defaultQlTextPredicate, args: [] } : { operator: 'Contains', args: [] }; break; case 'date': let defaultQlDatePredicate; const defaultDateColumnFilter = columnFilterOptions.defaultDateColumnFilter; if (defaultDateColumnFilter) { if (typeof defaultDateColumnFilter === 'function') { const context = { column: abColumn, filterComponent, ...api.internalApi.buildBaseContext(), }; defaultQlDatePredicate = defaultDateColumnFilter(context); } else { defaultQlDatePredicate = defaultDateColumnFilter; } } defaultQlPredicate = defaultQlDatePredicate ? { operator: defaultQlDatePredicate, args: [] } : { operator: 'On', args: [] }; break; case 'boolean': defaultQlPredicate = { operator: 'BooleanToggle', args: [] }; break; case 'textArray': case 'numberArray': let defaultQlArrayPredicate; const defaultArrayColumnFilter = columnFilterOptions.defaultArrayColumnFilter; if (defaultArrayColumnFilter) { if (typeof defaultArrayColumnFilter === 'function') { const context = { column: abColumn, filterComponent, ...api.internalApi.buildBaseContext(), }; defaultQlArrayPredicate = defaultArrayColumnFilter(context); } else { defaultQlArrayPredicate = defaultArrayColumnFilter; } } defaultQlPredicate = defaultQlArrayPredicate ? { operator: defaultQlArrayPredicate, args: [] } : { operator: 'In', args: [] }; break; } if (defaultQlPredicate === null) { // take the firstavailable one if (qlPredicateDefs.length > 0) { defaultQlPredicate = { operator: qlPredicateDefs[0].operator, args: [] }; } } if (defaultQlPredicate) { qlPredicate.args = [defaultQlPredicate]; } } return qlPredicate; }; exports.mapColumnFilterToQlPredicate = mapColumnFilterToQlPredicate;