UNPKG

@adaptabletools/adaptable

Version:

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

121 lines (120 loc) 4.87 kB
import React from 'react'; import { isAdaptableIcon } from '../../../components/Icon'; import { AdaptableIconComponent } from '../AdaptableIconComponent'; export const mapAdaptablePredicateDefToQlPredicateDef = (adaptablePredicateDef, // used to determine values type dataType) => { let icon = null; if (isAdaptableIcon(adaptablePredicateDef.icon)) { icon = React.createElement(AdaptableIconComponent, { icon: adaptablePredicateDef.icon }); } else if (adaptablePredicateDef.icon && 'text' in adaptablePredicateDef.icon) { icon = React.createElement('div', { children: adaptablePredicateDef.icon.text }); } const inputs = (adaptablePredicateDef?.inputs ?? [])?.map((input) => { return input.type; }); if ((adaptablePredicateDef.id === 'In' || adaptablePredicateDef.id === 'NotIn') && ['text', 'number', 'date'].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; }; export const mapAdaptablePredicateToQlPredicate = (adaptablePredicate) => { return { operator: adaptablePredicate.PredicateId, // make sure all predicates are in qal args: adaptablePredicate.Inputs, }; }; export const mapQlPredicateToAdaptablePredicate = (qlPredicate) => { return { PredicateId: qlPredicate.operator, Inputs: qlPredicate.args, }; }; export 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) => 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; }; export 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)); }; export const mapColumnFilterToQlPredicate = (columnFilter, abColumn, qlPredicateDefs, columnFilterOptions) => { const combinator = columnFilter?.PredicatesOperator ?? 'AND'; const qlPredicate = { operator: combinator, args: (columnFilter?.Predicates ?? []).map?.(mapAdaptablePredicateToQlPredicate), }; if (qlPredicate.args.length === 0) { // used when none is defined let defaultQlPredicate = null; switch (abColumn.dataType) { case 'number': defaultQlPredicate = columnFilterOptions.defaultNumericColumnFilter ? { operator: columnFilterOptions.defaultNumericColumnFilter, args: [] } : { operator: 'Equals', args: [] }; break; case 'text': defaultQlPredicate = columnFilterOptions.defaultTextColumnFilter ? { operator: columnFilterOptions.defaultTextColumnFilter, args: [] } : { operator: 'Contains', args: [] }; break; case 'date': defaultQlPredicate = columnFilterOptions.defaultDateColumnFilter ? { operator: columnFilterOptions.defaultDateColumnFilter, args: [] } : { operator: 'On', args: [] }; break; case 'boolean': defaultQlPredicate = { operator: 'BooleanToggle', 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; };