@adaptabletools/adaptable 12.0.3 → 12.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/bundle.cjs.js +93 -93
  2. package/package.json +1 -1
  3. package/publishTimestamp.d.ts +1 -1
  4. package/publishTimestamp.js +1 -1
  5. package/src/AdaptableOptions/ExportOptions.d.ts +3 -3
  6. package/src/Api/Events/SearchChanged.d.ts +1 -1
  7. package/src/Api/FormatColumnApi.d.ts +5 -0
  8. package/src/Api/Implementation/FormatColumnApiImpl.d.ts +1 -0
  9. package/src/Api/Implementation/FormatColumnApiImpl.js +23 -1
  10. package/src/Api/Implementation/LayoutApiImpl.d.ts +1 -0
  11. package/src/Api/Implementation/LayoutApiImpl.js +6 -0
  12. package/src/Api/LayoutApi.d.ts +5 -0
  13. package/src/PredefinedConfig/ChartingState.d.ts +1 -1
  14. package/src/PredefinedConfig/Common/SpecialColumnSettings.d.ts +1 -1
  15. package/src/Redux/Store/AdaptableStore.js +6 -0
  16. package/src/Strategy/FormatColumnModule.js +1 -1
  17. package/src/Strategy/LayoutModule.js +2 -1
  18. package/src/Utilities/Constants/DocumentationLinkConstants.js +2 -2
  19. package/src/Utilities/Constants/GeneralConstants.d.ts +1 -0
  20. package/src/Utilities/Constants/GeneralConstants.js +3 -2
  21. package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +4 -4
  22. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.js +7 -7
  23. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +26 -4
  24. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +5 -5
  25. package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +11 -11
  26. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +2 -2
  27. package/src/Utilities/Helpers/FormatHelper.js +2 -1
  28. package/src/Utilities/Services/QueryLanguageService.js +4 -4
  29. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +1 -2
  30. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +30 -27
  31. package/src/View/Layout/LayoutViewPanel.d.ts +2 -2
  32. package/src/View/Layout/LayoutViewPanel.js +3 -4
  33. package/src/View/Layout/SaveLayoutButton.d.ts +2 -0
  34. package/src/View/Layout/SaveLayoutButton.js +30 -0
  35. package/src/agGrid/Adaptable.js +1 -1
  36. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
  37. package/src/metamodel/adaptable.metamodel.d.ts +5 -5
  38. package/src/metamodel/adaptable.metamodel.js +1 -1
  39. package/src/parser/src/types.d.ts +4 -8
  40. package/version.d.ts +1 -1
  41. package/version.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "12.0.3",
3
+ "version": "12.0.6",
4
4
  "description": "Powerful data-agnostic HTML5 datagrid add-on that sits on top of an underlying grid component and provides all the rich functionality that advanced users expect from their DataGrids and Data Tables",
5
5
  "keywords": [
6
6
  "web-components",
@@ -1,2 +1,2 @@
1
- declare const _default: 1656962682750;
1
+ declare const _default: 1657449987893;
2
2
  export default _default;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = 1656962682750;
3
+ exports.default = 1657449987893;
@@ -72,15 +72,15 @@ export interface CustomReport {
72
72
  */
73
73
  export interface CustomDestination {
74
74
  /**
75
- * Name of Custom Destination
75
+ * Name of Custom Destination (mandatory)
76
76
  */
77
77
  name: string;
78
78
  /**
79
- * Optional Adaptable Form - if provided, it must include Buttons that will execute the export
79
+ * Optional Adaptable Form; if provided, it must include Buttons that will execute the Export
80
80
  */
81
81
  form?: AdaptableForm<ExportFormContext>;
82
82
  /**
83
- * Function invoked when export is applied (used if no form is supplied)
83
+ * Optional Function invoked when Export is applied (used if no form is supplied)
84
84
  */
85
85
  onExport?: (reportContext: ReportContext) => void;
86
86
  }
@@ -7,7 +7,7 @@ import { ColumnFilter, DataSet } from '../../types';
7
7
  */
8
8
  export interface SearchChangedInfo extends BaseEventInfo {
9
9
  /**
10
- * What search-related change caused the event to fire
10
+ * How Search was changed: 'CurrentQuery', 'Filter', 'DataChange' or 'Sort'
11
11
  */
12
12
  searchChangedTrigger: 'CurrentQuery' | 'Filter' | 'DataChange' | 'Sort';
13
13
  /**
@@ -199,4 +199,9 @@ export interface FormatColumnApi {
199
199
  * @param options formatter options
200
200
  */
201
201
  getDateFormattedValue(value: any, node: RowNode, abColumn: AdaptableColumn, options: AdaptableFormat['Options']): string;
202
+ /**
203
+ * Checks if a Format Column contains a Custom Display Formatter
204
+ * @param formatColumn Format Column
205
+ */
206
+ hasCustomDisplayFormatter(formatColumn: FormatColumn): boolean;
202
207
  }
@@ -48,4 +48,5 @@ export declare class FormatColumnApiImpl extends ApiBase implements FormatColumn
48
48
  getNumberFormattedValue(value: any, node: RowNode, abColumn: AdaptableColumn, options: AdaptableFormat['Options']): string;
49
49
  getStringFormattedValue(value: any, node: RowNode, abColumn: AdaptableColumn, options: AdaptableFormat['Options']): string;
50
50
  getDateFormattedValue(value: any, node: RowNode, abColumn: AdaptableColumn, options: AdaptableFormat['Options']): string;
51
+ hasCustomDisplayFormatter(formatColumn: FormatColumn): boolean;
51
52
  }
@@ -293,6 +293,9 @@ class FormatColumnApiImpl extends ApiBase_1.ApiBase {
293
293
  }, customDisplayFormatterContext);
294
294
  }
295
295
  getNumberFormattedValue(value, node, abColumn, options) {
296
+ if (!value) {
297
+ return undefined;
298
+ }
296
299
  const preparedValue = this.applyCustomFormatters(value, node, abColumn, options);
297
300
  return FormatHelper_1.default.NumberFormatter(preparedValue, options);
298
301
  }
@@ -301,8 +304,27 @@ class FormatColumnApiImpl extends ApiBase_1.ApiBase {
301
304
  return FormatHelper_1.default.StringFormatter(preparedValue, options);
302
305
  }
303
306
  getDateFormattedValue(value, node, abColumn, options) {
307
+ if (!value) {
308
+ return undefined;
309
+ }
304
310
  const preparedValue = this.applyCustomFormatters(value, node, abColumn, options);
305
- return FormatHelper_1.default.DateFormatter(preparedValue, options);
311
+ const dateFormatterOptions = options;
312
+ // only use DateFormatter if we have a pattern
313
+ return dateFormatterOptions.Pattern
314
+ ? FormatHelper_1.default.DateFormatter(preparedValue, options)
315
+ : preparedValue;
316
+ }
317
+ hasCustomDisplayFormatter(formatColumn) {
318
+ var _a;
319
+ if (!formatColumn || !formatColumn.DisplayFormat || !formatColumn.DisplayFormat.Options) {
320
+ return false;
321
+ }
322
+ const options = formatColumn.DisplayFormat.Options;
323
+ const columnCustomFormatters = (_a = options === null || options === void 0 ? void 0 : options.CustomDisplayFormats) !== null && _a !== void 0 ? _a : [];
324
+ if (!(columnCustomFormatters === null || columnCustomFormatters === void 0 ? void 0 : columnCustomFormatters.length)) {
325
+ return false;
326
+ }
327
+ return true;
306
328
  }
307
329
  }
308
330
  exports.FormatColumnApiImpl = FormatColumnApiImpl;
@@ -14,6 +14,7 @@ export declare class LayoutApiImpl extends ApiBase implements LayoutApi {
14
14
  fireLayoutChangedEvent(trigger: string, oldSate: LayoutState, newState: LayoutState): void;
15
15
  getCurrentLayout(): Layout;
16
16
  getCurrentLayoutColumnSort(columnId: string): ColumnSort['SortOrder'] | null;
17
+ areDraftAndCurrentLayoutEqual(): boolean;
17
18
  getCurrentLayoutName(): string;
18
19
  getLayoutByName(layoutName: string): Layout | null;
19
20
  getAllLayout(): Layout[];
@@ -76,6 +76,12 @@ class LayoutApiImpl extends ApiBase_1.ApiBase {
76
76
  const currentLayout = this.getCurrentLayout();
77
77
  return ((_d = (_c = (_b = (_a = currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.ColumnSorts) === null || _a === void 0 ? void 0 : _a.find) === null || _b === void 0 ? void 0 : _b.call(_a, (sort) => sort.ColumnId === columnId)) === null || _c === void 0 ? void 0 : _c.SortOrder) !== null && _d !== void 0 ? _d : null);
78
78
  }
79
+ areDraftAndCurrentLayoutEqual() {
80
+ const state = this.getAdaptableState();
81
+ const currentLayout = this.getLayoutByName(state.Layout.CurrentLayout);
82
+ const draftLayout = state.Grid.CurrentLayout;
83
+ return this.areLayoutsEqual(currentLayout, draftLayout);
84
+ }
79
85
  getCurrentLayoutName() {
80
86
  return this.getAdaptableState().Layout.CurrentLayout;
81
87
  }
@@ -198,4 +198,9 @@ export interface LayoutApi {
198
198
  * @param layoutName layout from which to remove Column
199
199
  */
200
200
  removeColumnFromLayout(columnId: string, layoutName: string): void;
201
+ /**
202
+ * Checks if the draft layout and the current layout are the same.
203
+ * Useful when `autoSaveLayouts=true`
204
+ */
205
+ areDraftAndCurrentLayoutEqual(): boolean;
201
206
  }
@@ -10,7 +10,7 @@ export interface ChartDefinition {
10
10
  model: ChartModel;
11
11
  }
12
12
  /**
13
- * Predefined Configuration for Quick Search Module
13
+ * Used for persisting AG Grids in Adaptable State
14
14
  */
15
15
  export interface ChartingState extends ConfigState {
16
16
  /**
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export interface SpecialColumnSettings {
5
5
  /**
6
- * Preferred width (in pixels) for Column; if unset, calculated dynamically by AG Grid
6
+ * Preferred (pixel) Column Width; if unset, calculated dynamically by AG Grid
7
7
  */
8
8
  Width?: number;
9
9
  /**
@@ -682,12 +682,18 @@ const adaptableMiddleware = (adaptable) => function (middlewareAPI) {
682
682
  if (adaptable.adaptableOptions.searchOptions.filterResultsAfterQuickSearch) {
683
683
  const actionTyped = action;
684
684
  const searchText = actionTyped.quickSearchText;
685
+ // const gridOptions = adaptable.api.gridApi.getAgGridInstance();
685
686
  if (StringExtensions_1.StringExtensions.IsNotNullOrEmpty(searchText)) {
687
+ // Currently using this but any searchable would allow us to limit the cols checked
686
688
  const queryText = 'ANY_CONTAINS("' + searchText + '") ';
689
+ // const queryText = 'ANY_SEARCHABLE_CONTAINS("' + searchText + '") ';
687
690
  adaptable.api.queryApi.setCurrentQuery(queryText);
691
+ // Better still would be to use ag grid if that is possible?
692
+ // gridOptions.api.setQuickFilter(searchText);
688
693
  }
689
694
  else {
690
695
  adaptable.api.queryApi.clearCurrentQuery();
696
+ // gridOptions.api.setQuickFilter('');
691
697
  }
692
698
  }
693
699
  return returnAction;
@@ -247,7 +247,7 @@ class FormatColumnModule extends AdaptableModuleBase_1.AdaptableModuleBase {
247
247
  },
248
248
  {
249
249
  name: 'Display Format',
250
- values: [FormatColumnFormatWizardSection_1.getFormatColumnFormatSummaryValue(formatColumn, this.api.formatColumnApi)],
250
+ values: [FormatColumnFormatWizardSection_1.getFormatColumnFormatSummaryValue(formatColumn, this.api)],
251
251
  },
252
252
  getFormatColumnSettingsViewItems_1.getFormatColumnSettingsViewItems(formatColumn),
253
253
  getObjectTagsViewItems_1.getObjectTagsViewItems(formatColumn, this.api),
@@ -10,6 +10,7 @@ const LayoutRadioSelector_1 = require("../View/Layout/LayoutRadioSelector");
10
10
  const LayoutStatusBarSubPanelPopover_1 = require("../View/Layout/LayoutStatusBarSubPanelPopover");
11
11
  const EditCurrentLayoutButton_1 = require("../View/Layout/EditCurrentLayoutButton");
12
12
  const LayoutCloneButton_1 = require("../View/Layout/LayoutCloneButton");
13
+ const SaveLayoutButton_1 = require("../View/Layout/SaveLayoutButton");
13
14
  class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
14
15
  constructor(api) {
15
16
  super(ModuleConstants.LayoutModuleId, 'Layout', 'layout', 'LayoutPopup', 'Named sets of column visibility, order, groupings, aggregation, pivots etc.', api);
@@ -293,7 +294,7 @@ class LayoutModule extends AdaptableModuleBase_1.AdaptableModuleBase {
293
294
  content: text,
294
295
  popover: popover,
295
296
  popoverMinWidth: 150,
296
- extraActions: [EditCurrentLayoutButton_1.EditCurrentLayoutButton],
297
+ extraActions: [EditCurrentLayoutButton_1.EditCurrentLayoutButton, SaveLayoutButton_1.SaveLayoutButton],
297
298
  };
298
299
  },
299
300
  };
@@ -7,8 +7,8 @@ exports.ExpressionEditorDocsLink = `${exports.HOST_URL_DOCS}/guide/ui-expression
7
7
  exports.BooleanQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-boolean`;
8
8
  exports.ScalarQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-scalar`;
9
9
  exports.ObservableQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-observable`;
10
- exports.AggregatedBooleanQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation#aggregated-boolean-expressions`;
11
- exports.AggregatedScalarQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation#aggregated-scalar-expressions`;
10
+ exports.AggregatedBooleanQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation-boolean`;
11
+ exports.AggregatedScalarQueryDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-expression-aggregation-scalar`;
12
12
  exports.PredicateDocsLink = `${exports.HOST_URL_DOCS}/guide/adaptable-ql-predicate`;
13
13
  exports.PrimaryKeyDocsLink = `${exports.HOST_URL_DOCS}/guide/dev-guide-tutorial-primary-key`;
14
14
  exports.LicenseDocsLink = `${exports.HOST_URL_DOCS}/guide/licensing`;
@@ -28,6 +28,7 @@ export declare const AG_GRID_GROUPED_COLUMN: string;
28
28
  export declare const AG_GRID_PIVOT_COLUMN: string;
29
29
  export declare const ADAPTABLE_ROW_ACTION_BUTTONS = "adaptableRowActionButtons";
30
30
  export declare const ADAPTABLE_ROW_ACTION_BUTTONS_FRIENDLY_NAME = "(ActionRowButtons)";
31
+ export declare const DEFAULT_DATE_FORMAT_PATTERN = "dd-MM-yyyy";
31
32
  export declare const SYSTEM_STATUS_DEFAULT_MAX_MESSAGES_IN_STORE: number;
32
33
  export declare const QUICK_SEARCH_DEFAULT_BACK_COLOR: string;
33
34
  export declare const QUICK_SEARCH_DEFAULT_FORE_COLOR: string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VISUAL_DATA_REPORT = exports.SYSTEM_THEMES = exports.SMART_EDIT_MATH_OPERATION_STATE_PROPERTY = exports.SMART_EDIT_VALUE_STATE_PROPERTY = exports.QUICK_SEARCH_STYLE_STATE_PROPERTY = exports.QUICK_SEARCH_TEXT_STATE_PROPERTY = exports.CURRENT_THEME_STATE_PROPERTY = exports.FLASHING_CELL_DEFAULT_DURATION_STATE_PROPERTY = exports.FLASHING_CELL_DEFAULT_DOWN_COLOR_STATE_PROPERTY = exports.FLASHING_CELL_DEFAULT_UP_COLOR_STATE_PROPERTY = exports.CURRENT_REPORT_STATE_PROPERTY = exports.CURRENT_LAYOUT_STATE_PROPERTY = exports.SUMMARY_OPERATION_STATE_PROPERTY = exports.ALERT_DEFAULT_SHOW_POPUP = exports.ALERT_DEFAULT_MESSAGE_TYPE = exports.PLUS_MINUS_DEFAULT_NUDGE_VALUE = exports.DEFAULT_LIVE_REPORT_THROTTLE_TIME = exports.THEME_DEFAULT_CURRENT_THEME = exports.SYSTEM_DEFAULT_SYSTEM_STATUS_TYPE = exports.CELL_SUMMARY_DEFAULT_OPERATION = exports.QUICK_SEARCH_DEBOUNCE_TIME = exports.QUICK_SEARCH_DEFAULT_FORE_COLOR = exports.QUICK_SEARCH_DEFAULT_BACK_COLOR = exports.SYSTEM_STATUS_DEFAULT_MAX_MESSAGES_IN_STORE = exports.ADAPTABLE_ROW_ACTION_BUTTONS_FRIENDLY_NAME = exports.ADAPTABLE_ROW_ACTION_BUTTONS = exports.AG_GRID_PIVOT_COLUMN = exports.AG_GRID_GROUPED_COLUMN = exports.HALF_SECOND = exports.AB_SPECIAL_COLUMN = exports.EMPTY_ARRAY = exports.EMPTY_STRING = exports.FILTER_THROTTLE = exports.FILTER_NEVER = exports.FILTER_ALWAYS = exports.ALL_COLUMN_VALUES = exports.READ_ONLY_STYLE = exports.MENU_PREFIX = exports.AGGRID_TOOLPANEL_COLUMNS = exports.AGGRID_TOOLPANEL_FILTERS = exports.ADAPTABLE_TOOLPANEL_COMPONENT = exports.ADAPTABLE_TOOLPANEL_ID = exports.ADAPTABLE = exports.ADAPTABLE_ID = exports.USER_NAME = exports.DARK_THEME = exports.LIGHT_THEME = exports.DEFAULT_LAYOUT = exports.MISSING_COLUMN = exports.AUTOGENERATED_PK_COLUMN = void 0;
4
- exports.THEME_STYLE = exports.SELECTED_ROWS_REPORT = exports.SELECTED_CELLS_REPORT = exports.CURRENT_DATA_REPORT = exports.ALL_DATA_REPORT = void 0;
3
+ exports.SYSTEM_THEMES = exports.SMART_EDIT_MATH_OPERATION_STATE_PROPERTY = exports.SMART_EDIT_VALUE_STATE_PROPERTY = exports.QUICK_SEARCH_STYLE_STATE_PROPERTY = exports.QUICK_SEARCH_TEXT_STATE_PROPERTY = exports.CURRENT_THEME_STATE_PROPERTY = exports.FLASHING_CELL_DEFAULT_DURATION_STATE_PROPERTY = exports.FLASHING_CELL_DEFAULT_DOWN_COLOR_STATE_PROPERTY = exports.FLASHING_CELL_DEFAULT_UP_COLOR_STATE_PROPERTY = exports.CURRENT_REPORT_STATE_PROPERTY = exports.CURRENT_LAYOUT_STATE_PROPERTY = exports.SUMMARY_OPERATION_STATE_PROPERTY = exports.ALERT_DEFAULT_SHOW_POPUP = exports.ALERT_DEFAULT_MESSAGE_TYPE = exports.PLUS_MINUS_DEFAULT_NUDGE_VALUE = exports.DEFAULT_LIVE_REPORT_THROTTLE_TIME = exports.THEME_DEFAULT_CURRENT_THEME = exports.SYSTEM_DEFAULT_SYSTEM_STATUS_TYPE = exports.CELL_SUMMARY_DEFAULT_OPERATION = exports.QUICK_SEARCH_DEBOUNCE_TIME = exports.QUICK_SEARCH_DEFAULT_FORE_COLOR = exports.QUICK_SEARCH_DEFAULT_BACK_COLOR = exports.SYSTEM_STATUS_DEFAULT_MAX_MESSAGES_IN_STORE = exports.DEFAULT_DATE_FORMAT_PATTERN = exports.ADAPTABLE_ROW_ACTION_BUTTONS_FRIENDLY_NAME = exports.ADAPTABLE_ROW_ACTION_BUTTONS = exports.AG_GRID_PIVOT_COLUMN = exports.AG_GRID_GROUPED_COLUMN = exports.HALF_SECOND = exports.AB_SPECIAL_COLUMN = exports.EMPTY_ARRAY = exports.EMPTY_STRING = exports.FILTER_THROTTLE = exports.FILTER_NEVER = exports.FILTER_ALWAYS = exports.ALL_COLUMN_VALUES = exports.READ_ONLY_STYLE = exports.MENU_PREFIX = exports.AGGRID_TOOLPANEL_COLUMNS = exports.AGGRID_TOOLPANEL_FILTERS = exports.ADAPTABLE_TOOLPANEL_COMPONENT = exports.ADAPTABLE_TOOLPANEL_ID = exports.ADAPTABLE = exports.ADAPTABLE_ID = exports.USER_NAME = exports.DARK_THEME = exports.LIGHT_THEME = exports.DEFAULT_LAYOUT = exports.MISSING_COLUMN = exports.AUTOGENERATED_PK_COLUMN = void 0;
4
+ exports.THEME_STYLE = exports.SELECTED_ROWS_REPORT = exports.SELECTED_CELLS_REPORT = exports.CURRENT_DATA_REPORT = exports.ALL_DATA_REPORT = exports.VISUAL_DATA_REPORT = void 0;
5
5
  const Enums_1 = require("../../PredefinedConfig/Common/Enums");
6
6
  const UIHelper_1 = require("../../View/UIHelper");
7
7
  exports.AUTOGENERATED_PK_COLUMN = '__ADAPTABLE_PK__';
@@ -31,6 +31,7 @@ exports.AG_GRID_GROUPED_COLUMN = 'ag-Grid-AutoColumn';
31
31
  exports.AG_GRID_PIVOT_COLUMN = 'pivot_';
32
32
  exports.ADAPTABLE_ROW_ACTION_BUTTONS = 'adaptableRowActionButtons';
33
33
  exports.ADAPTABLE_ROW_ACTION_BUTTONS_FRIENDLY_NAME = '(ActionRowButtons)';
34
+ exports.DEFAULT_DATE_FORMAT_PATTERN = 'dd-MM-yyyy';
34
35
  /*
35
36
  Redux / State Defaults
36
37
  Try to put all our Redux / State defaults here and ONLY reference from here - avoid magic numbers / strings.
@@ -28,7 +28,7 @@ exports.aggregatedBooleanExpressionFunctions = {
28
28
  SUM: {
29
29
  handler(args, context) {
30
30
  const columnParameter = expressionFunctionUtils_1.extractColumnParameter('SUM', args);
31
- expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number'], 'SUM', context.api);
31
+ expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number'], 'SUM', context.adaptableApi);
32
32
  const sumAggregationFn = (dataSource$) => getSumAggregation$(dataSource$, getColumnValueSum(columnParameter.value, context));
33
33
  const result = {
34
34
  type: 'aggregation',
@@ -195,15 +195,15 @@ const getSumAggregation$ = (source$, initialSum) => {
195
195
  };
196
196
  const getColumnValueSum = (column, context) => {
197
197
  let sum = 0;
198
- context.api.internalApi.forAllRowNodesDo((rowNode) => {
198
+ context.adaptableApi.internalApi.forAllRowNodesDo((rowNode) => {
199
199
  // if there is a WHERE clause defined, check if the current rowNode satisfies the condition
200
200
  if (context.filterFn && !context.filterFn(rowNode)) {
201
201
  return;
202
202
  }
203
- if (context.api.gridApi.isGroupRowNode(rowNode)) {
203
+ if (context.adaptableApi.gridApi.isGroupRowNode(rowNode)) {
204
204
  return;
205
205
  }
206
- const cellValue = context.api.gridApi.getRawValueFromRowNode(rowNode, column);
206
+ const cellValue = context.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, column);
207
207
  if (cellValue != undefined) {
208
208
  sum = sum + expressionFunctionUtils_1.getNumericValue(rowNode.data[column]);
209
209
  }
@@ -8,7 +8,7 @@ exports.aggregatedScalarExpressionFunctions = {
8
8
  handler(args, context) {
9
9
  const sumColumnParameter = expressionFunctionUtils_1.extractColumnParameter('SUM', args);
10
10
  const sumColumnName = sumColumnParameter.value;
11
- expressionFunctionUtils_1.validateColumnType(sumColumnName, ['Number'], 'SUM', context.api);
11
+ expressionFunctionUtils_1.validateColumnType(sumColumnName, ['Number'], 'SUM', context.adaptableApi);
12
12
  const groupByParameter = expressionFunctionUtils_1.extractParameter('SUM', 'operand', ['GROUP_BY'], args, true);
13
13
  const aggregationExpressionEvaluation = {
14
14
  aggregationParams: {
@@ -50,7 +50,7 @@ exports.aggregatedScalarExpressionFunctions = {
50
50
  var _a;
51
51
  const percentageColumnParameter = expressionFunctionUtils_1.extractColumnParameter('PERCENTAGE', args);
52
52
  const percentageColumnName = percentageColumnParameter.value;
53
- expressionFunctionUtils_1.validateColumnType(percentageColumnName, ['Number'], 'PERCENTAGE', context.api);
53
+ expressionFunctionUtils_1.validateColumnType(percentageColumnName, ['Number'], 'PERCENTAGE', context.adaptableApi);
54
54
  const sumOperand = expressionFunctionUtils_1.extractParameter('PERCENTAGE', 'aggregation', ['SUM'], args, true);
55
55
  const groupByOperand = expressionFunctionUtils_1.extractParameter('PERCENTAGE', 'operand', ['GROUP_BY'], args, true);
56
56
  if (sumOperand && groupByOperand) {
@@ -79,7 +79,7 @@ exports.aggregatedScalarExpressionFunctions = {
79
79
  },
80
80
  },
81
81
  rowValueGetter: (rowNode, aggregationValue) => {
82
- return ((context.api.gridApi.getRawValueFromRowNode(rowNode, percentageColumnName) /
82
+ return ((context.adaptableApi.gridApi.getRawValueFromRowNode(rowNode, percentageColumnName) /
83
83
  aggregationValue) *
84
84
  100);
85
85
  },
@@ -118,7 +118,7 @@ exports.aggregatedScalarExpressionFunctions = {
118
118
  handler(args, context) {
119
119
  const avgColumnParameter = expressionFunctionUtils_1.extractColumnParameter('AVG', args);
120
120
  const avgColumnName = avgColumnParameter.value;
121
- expressionFunctionUtils_1.validateColumnType(avgColumnName, ['Number'], 'AVG', context.api);
121
+ expressionFunctionUtils_1.validateColumnType(avgColumnName, ['Number'], 'AVG', context.adaptableApi);
122
122
  const groupByParameter = expressionFunctionUtils_1.extractParameter('AVG', 'operand', ['GROUP_BY'], args, true);
123
123
  const aggregationExpressionEvaluation = {
124
124
  aggregationParams: {
@@ -162,7 +162,7 @@ exports.aggregatedScalarExpressionFunctions = {
162
162
  handler(args, context) {
163
163
  const minColumnParameter = expressionFunctionUtils_1.extractColumnParameter('MIN', args);
164
164
  const minColumnName = minColumnParameter.value;
165
- expressionFunctionUtils_1.validateColumnType(minColumnName, ['Number'], 'MIN', context.api);
165
+ expressionFunctionUtils_1.validateColumnType(minColumnName, ['Number'], 'MIN', context.adaptableApi);
166
166
  const groupByParameter = expressionFunctionUtils_1.extractParameter('MIN', 'operand', ['GROUP_BY'], args, true);
167
167
  const aggregationExpressionEvaluation = {
168
168
  aggregationParams: {
@@ -203,7 +203,7 @@ exports.aggregatedScalarExpressionFunctions = {
203
203
  handler(args, context) {
204
204
  const maxColumnParameter = expressionFunctionUtils_1.extractColumnParameter('MAX', args);
205
205
  const maxColumnName = maxColumnParameter.value;
206
- expressionFunctionUtils_1.validateColumnType(maxColumnName, ['Number'], 'MAX', context.api);
206
+ expressionFunctionUtils_1.validateColumnType(maxColumnName, ['Number'], 'MAX', context.adaptableApi);
207
207
  const groupByParameter = expressionFunctionUtils_1.extractParameter('MAX', 'operand', ['GROUP_BY'], args, true);
208
208
  const aggregationExpressionEvaluation = {
209
209
  aggregationParams: {
@@ -284,7 +284,7 @@ exports.aggregatedScalarExpressionFunctions = {
284
284
  OVER: {
285
285
  handler(args, context) {
286
286
  const columnParameter = expressionFunctionUtils_1.extractColumnParameter('OVER', args);
287
- expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number', 'Date'], 'OVER', context.api);
287
+ expressionFunctionUtils_1.validateColumnType(columnParameter.value, ['Number', 'Date'], 'OVER', context.adaptableApi);
288
288
  const result = {
289
289
  type: 'operand',
290
290
  name: 'OVER',
@@ -225,18 +225,40 @@ exports.booleanExpressionFunctions = {
225
225
  handler(args, context) {
226
226
  var _a;
227
227
  const searchTerm = expressionFunctionUtils_1.getStringValue(context, String(args[0]));
228
- return (_a = context.api) === null || _a === void 0 ? void 0 : _a.columnApi.getColumns().some((column) => {
228
+ return (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.columnApi.getColumns().some((column) => {
229
229
  var _a;
230
- const value = (_a = context.api) === null || _a === void 0 ? void 0 : _a.gridApi.getDisplayValueFromRowNode(context.node, column.columnId);
230
+ const value = (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.gridApi.getDisplayValueFromRowNode(context.node, column.columnId);
231
231
  const columnValue = expressionFunctionUtils_1.getStringValue(context, String(value));
232
232
  return columnValue.indexOf(searchTerm) !== -1;
233
233
  });
234
234
  },
235
235
  isPredicate: true,
236
- description: 'Returns true if any column contains input',
236
+ description: 'Returns true if any Column contains input',
237
237
  signatures: ['ANY_CONTAINS(value)'],
238
238
  examples: ['ANY_CONTAINS("abc")'],
239
239
  },
240
+ /*
241
+ ANY_SEARCHABLE_CONTAINS: {
242
+ handler(args, context) {
243
+ const searchTerm = getStringValue(context, String(args[0]));
244
+ return context.api?.columnApi
245
+ .getVisibleColumns()
246
+ .filter((c) => !c.isExcludedFromQuickSearch)
247
+ .some((column) => {
248
+ const value = context.api?.gridApi.getDisplayValueFromRowNode(
249
+ context.node,
250
+ column.columnId
251
+ );
252
+ const columnValue = getStringValue(context, String(value));
253
+ return columnValue.indexOf(searchTerm) !== -1;
254
+ });
255
+ },
256
+ isPredicate: true,
257
+ description: 'Returns true if any Searchable Column contains input',
258
+ signatures: ['ANY_SEARCHABLE_CONTAINS(value)'],
259
+ examples: ['ANY_SEARCHABLE_CONTAINS("abc")'],
260
+ },
261
+ */
240
262
  QUERY: {
241
263
  handler(args, context) {
242
264
  var _a, _b;
@@ -244,7 +266,7 @@ exports.booleanExpressionFunctions = {
244
266
  if (StringExtensions_1.default.IsNullOrEmpty(namedQueryName)) {
245
267
  return false;
246
268
  }
247
- const namedQuery = (_a = context.api) === null || _a === void 0 ? void 0 : _a.queryApi.getNamedQueryByName(namedQueryName);
269
+ const namedQuery = (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.queryApi.getNamedQueryByName(namedQueryName);
248
270
  if (!namedQuery) {
249
271
  throw new ExpressionEvaluationError_1.ExpressionEvaluationError('QUERY', `Named Query with name ${namedQueryName} not found!`);
250
272
  }
@@ -19,12 +19,12 @@ const getStringValue = (context, stringArgument) => {
19
19
  return exports.isTextSearchCaseInsensitive(context) ? stringArgument.toLowerCase() : stringArgument;
20
20
  };
21
21
  exports.getStringValue = getStringValue;
22
- const isTextSearchCaseInsensitive = (context) => !context.api.internalApi.isTextComparisonCaseSensitive();
22
+ const isTextSearchCaseInsensitive = (context) => !context.adaptableApi.internalApi.isTextComparisonCaseSensitive();
23
23
  exports.isTextSearchCaseInsensitive = isTextSearchCaseInsensitive;
24
24
  // returns an observable which filters the source$ emissions and emits only if the CellDataChangedInfo relates to the given column
25
25
  // optionally, if a filter function (where clause) is provided, it is also evaluated
26
26
  const getDataChangeLog$ = (context, columnNameFilter) => {
27
- let dataChangeLog$ = context.api.internalApi.getDataService().dataChangeLog$;
27
+ let dataChangeLog$ = context.adaptableApi.internalApi.getDataService().dataChangeLog$;
28
28
  // filter only the given column changes
29
29
  dataChangeLog$ = dataChangeLog$.pipe(operators_1.filter((dataChangeLog) => dataChangeLog.column.columnId === columnNameFilter));
30
30
  // filter based on the WHERE clause
@@ -41,14 +41,14 @@ const handleWhereFunction = (args, context) => {
41
41
  // whereClauseResult
42
42
  return evaluator_1.evaluateNode(whereClauseExpressionNode, {
43
43
  node: rowNode,
44
- api: context.api,
44
+ adaptableApi: context.adaptableApi,
45
45
  functions: context.whereClauseFunctions,
46
46
  });
47
47
  };
48
48
  // observableExpressionResult
49
49
  return evaluator_1.evaluateNode(reactiveExpressionNode, {
50
50
  node: context.node,
51
- api: context.api,
51
+ adaptableApi: context.adaptableApi,
52
52
  functions: context.functions,
53
53
  filterFn,
54
54
  });
@@ -76,7 +76,7 @@ const handleColumnFunction = (args, context) => {
76
76
  if (StringExtensions_1.default.IsNullOrEmpty(args[0])) {
77
77
  throw new ExpressionEvaluationError_1.ExpressionEvaluationError('COL', `no column name is provided`);
78
78
  }
79
- validateColumnId(args[0], context.api);
79
+ validateColumnId(args[0], context.adaptableApi);
80
80
  const result = {
81
81
  type: 'config',
82
82
  name: 'COL',
@@ -32,12 +32,12 @@ exports.observableExpressionFunctions = {
32
32
  return getDataChangeCount$(dataChangeLog$, timeframeChange$, operandParameter.value);
33
33
  }
34
34
  case 'MIN': {
35
- expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.api);
35
+ expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.adaptableApi);
36
36
  const timeframeChange$ = getTrailingRowValueChange$(dataChangeLog$, timeframeParameter.value);
37
37
  return getDataChangeMin$(dataChangeLog$, timeframeChange$);
38
38
  }
39
39
  case 'MAX': {
40
- expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.api);
40
+ expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.adaptableApi);
41
41
  const timeframeChange$ = getTrailingRowValueChange$(dataChangeLog$, timeframeParameter.value);
42
42
  return getDataChangeMax$(dataChangeLog$, timeframeChange$);
43
43
  }
@@ -71,12 +71,12 @@ exports.observableExpressionFunctions = {
71
71
  return getDataChangeCount$(dataChangeLog$, timeframeChange$, operandParameter.value);
72
72
  }
73
73
  case 'MIN': {
74
- expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.api);
74
+ expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MIN', context.adaptableApi);
75
75
  const timeframeChange$ = getTrailingGridValueChange$(dataChangeLog$, timeframeParameter.value);
76
76
  return getDataChangeMin$(dataChangeLog$, timeframeChange$);
77
77
  }
78
78
  case 'MAX': {
79
- expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.api);
79
+ expressionFunctionUtils_1.validateColumnType(operandParameter.column, ['Number'], 'MAX', context.adaptableApi);
80
80
  const timeframeChange$ = getTrailingGridValueChange$(dataChangeLog$, timeframeParameter.value);
81
81
  return getDataChangeMax$(dataChangeLog$, timeframeChange$);
82
82
  }
@@ -229,11 +229,11 @@ const getDataChangedInfoStub = (context) => {
229
229
  var _a;
230
230
  let rowNodeStub;
231
231
  if (!context.filterFn) {
232
- rowNodeStub = context.api.gridApi.getFirstRowNode();
232
+ rowNodeStub = context.adaptableApi.gridApi.getFirstRowNode();
233
233
  }
234
234
  else {
235
235
  // if there is a WHERE clause defined, find the first rowNode which satisfies the condition
236
- context.api.internalApi.forAllRowNodesDo((rowNode) => {
236
+ context.adaptableApi.internalApi.forAllRowNodesDo((rowNode) => {
237
237
  if (!rowNodeStub) {
238
238
  if (context.filterFn(rowNode)) {
239
239
  rowNodeStub = rowNode;
@@ -243,10 +243,10 @@ const getDataChangedInfoStub = (context) => {
243
243
  }
244
244
  const rowNode = rowNodeStub;
245
245
  if (rowNode) {
246
- const primaryKeyValue = context.api.gridApi.getPrimaryKeyValueForRowNode(rowNode);
247
- const columnId = (_a = context.api.columnApi.getQueryableColumns()[0]) === null || _a === void 0 ? void 0 : _a.columnId;
248
- const oldValue = context.api.gridApi.getCellRawValue(primaryKeyValue, columnId);
249
- const column = context.api.columnApi.getColumnFromId(columnId);
246
+ const primaryKeyValue = context.adaptableApi.gridApi.getPrimaryKeyValueForRowNode(rowNode);
247
+ const columnId = (_a = context.adaptableApi.columnApi.getQueryableColumns()[0]) === null || _a === void 0 ? void 0 : _a.columnId;
248
+ const oldValue = context.adaptableApi.gridApi.getCellRawValue(primaryKeyValue, columnId);
249
+ const column = context.adaptableApi.columnApi.getColumnFromId(columnId);
250
250
  const newValue = oldValue;
251
251
  return {
252
252
  changedAt: Date.now(),
@@ -417,7 +417,7 @@ const getSlidingTimeframe$ = (source$, timeframeDuration, onTimeframeEnter, onTi
417
417
  }));
418
418
  };
419
419
  const getMaxTimeframeSize = (expressionValue, context) => {
420
- let maxTimeframeSize = context.api.internalApi.getAdaptableOptions().adaptableQLOptions.expressionOptions
420
+ let maxTimeframeSize = context.adaptableApi.internalApi.getAdaptableOptions().adaptableQLOptions.expressionOptions
421
421
  .maxTimeframeSize;
422
422
  if (maxTimeframeSize > SYSTEM_MAX_TIMEFRAME_SIZE) {
423
423
  maxTimeframeSize = SYSTEM_MAX_TIMEFRAME_SIZE;
@@ -95,14 +95,14 @@ exports.scalarExpressionFunctions = {
95
95
  handler(args, context) {
96
96
  var _a, _b;
97
97
  const columnId = args[0];
98
- const column = (_a = context.api) === null || _a === void 0 ? void 0 : _a.columnApi.getColumnFromId(columnId);
98
+ const column = (_a = context.adaptableApi) === null || _a === void 0 ? void 0 : _a.columnApi.getColumnFromId(columnId);
99
99
  if (!column) {
100
100
  throw new ExpressionEvaluationError_1.ExpressionEvaluationError('COL', `Column name "${columnId}" is not found`);
101
101
  }
102
102
  if (!column.queryable) {
103
103
  throw new ExpressionEvaluationError_1.ExpressionEvaluationError('COL', `Column name "${columnId}" is not queryable`);
104
104
  }
105
- return (_b = context.api) === null || _b === void 0 ? void 0 : _b.gridApi.getRawValueFromRowNode(context.node, columnId);
105
+ return (_b = context.adaptableApi) === null || _b === void 0 ? void 0 : _b.gridApi.getRawValueFromRowNode(context.node, columnId);
106
106
  },
107
107
  description: 'Returns the value of a column',
108
108
  signatures: ['[colName]', 'COL(name: string)'],
@@ -6,6 +6,7 @@ const tslib_1 = require("tslib");
6
6
  // import dateFnsFormat from 'date-fns/format';
7
7
  const format_1 = tslib_1.__importDefault(require("date-fns/format"));
8
8
  const sentence_case_1 = require("sentence-case");
9
+ const GeneralConstants_1 = require("../Constants/GeneralConstants");
9
10
  function Format(input, format) {
10
11
  if (format.Formatter === 'NumberFormatter') {
11
12
  return NumberFormatter(input, format.Options);
@@ -79,7 +80,7 @@ function DateFormatter(input, options) {
79
80
  if (typeof input === 'string') {
80
81
  input = new Date(input);
81
82
  }
82
- return format_1.default(input, options.Pattern || '');
83
+ return format_1.default(input, (options === null || options === void 0 ? void 0 : options.Pattern) || GeneralConstants_1.DEFAULT_DATE_FORMAT_PATTERN);
83
84
  }
84
85
  catch (error) {
85
86
  return input;
@@ -19,7 +19,7 @@ class QueryLanguageService {
19
19
  const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
20
20
  return parser.evaluate(expression, {
21
21
  node: rowNode,
22
- api: this.adaptableApi,
22
+ adaptableApi: this.adaptableApi,
23
23
  functions: booleanAndScalarFunctions,
24
24
  });
25
25
  }
@@ -31,7 +31,7 @@ class QueryLanguageService {
31
31
  const aggregatedScalarFunctions = this.getModuleExpressionFunctions(module).aggregatedScalarFunctions;
32
32
  return parser.evaluate(expression, {
33
33
  node: null,
34
- api: this.adaptableApi,
34
+ adaptableApi: this.adaptableApi,
35
35
  functions: aggregatedScalarFunctions,
36
36
  });
37
37
  }
@@ -40,7 +40,7 @@ class QueryLanguageService {
40
40
  const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
41
41
  const reactiveExpression$ = parser.evaluate(reactiveExpression, {
42
42
  node: reactiveExpression,
43
- api: this.adaptableApi,
43
+ adaptableApi: this.adaptableApi,
44
44
  functions: moduleExpressionFunctions.observableFunctions,
45
45
  whereClauseFunctions: booleanAndScalarFunctions,
46
46
  });
@@ -51,7 +51,7 @@ class QueryLanguageService {
51
51
  const booleanAndScalarFunctions = this.getBooleanAndScalarFunctions(moduleExpressionFunctions);
52
52
  const aggregationExpression$ = parser.evaluate(aggregationExpression, {
53
53
  node: aggregationExpression,
54
- api: this.adaptableApi,
54
+ adaptableApi: this.adaptableApi,
55
55
  functions: moduleExpressionFunctions.aggregatedBooleanFunctions,
56
56
  whereClauseFunctions: booleanAndScalarFunctions,
57
57
  });
@@ -3,7 +3,6 @@ import { FormatColumn } from '../../../PredefinedConfig/FormatColumnState';
3
3
  import { AdaptableFormat } from '../../../PredefinedConfig/Common/AdaptableFormat';
4
4
  import { AdaptableScope } from '../../../PredefinedConfig/Common/AdaptableScope';
5
5
  import { AdaptableApi } from '../../../Api/AdaptableApi';
6
- import { FormatColumnApi } from '../../../types';
7
6
  export declare type FormatColumnFormatWizardSectionProps = {
8
7
  onChange: (data: FormatColumn) => void;
9
8
  };
@@ -11,7 +10,7 @@ export interface FormatColumnFormatWizardState {
11
10
  DisplayFormat: AdaptableFormat;
12
11
  NumericFormat?: 'Percent' | 'Thousand' | 'Million' | 'Dollar' | 'Sterling' | undefined;
13
12
  }
14
- export declare const getFormatColumnFormatSummaryValue: (data: FormatColumn, formattedColumnApi: FormatColumnApi) => string;
13
+ export declare const getFormatColumnFormatSummaryValue: (data: FormatColumn, api: AdaptableApi) => string;
15
14
  export declare const renderFormatColumnFormatSummary: (data: FormatColumn, api: AdaptableApi) => JSX.Element;
16
15
  export declare const getFormatDisplayTypeForScope: (scope: AdaptableScope, api: AdaptableApi) => 'Number' | 'Date' | 'String' | undefined;
17
16
  export declare const FormatColumnFormatWizardSection: (props: FormatColumnFormatWizardSectionProps) => JSX.Element;