@adaptabletools/adaptable 20.3.0-canary.0 → 20.3.0-canary.2

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "20.3.0-canary.0",
3
+ "version": "20.3.0-canary.2",
4
4
  "description": "Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
5
5
  "keywords": [
6
6
  "web-components",
@@ -153,6 +153,7 @@ const DefaultAdaptableOptions = {
153
153
  defaultNumericColumnFilter: 'Equals',
154
154
  defaultTextColumnFilter: 'Contains',
155
155
  defaultDateColumnFilter: 'On',
156
+ defaultArrayColumnFilter: 'In',
156
157
  hideQuickFilterDropdown: undefined,
157
158
  hideQuickFilterInput: undefined,
158
159
  quickFilterDebounce: 250,
@@ -106,6 +106,13 @@ export interface ColumnFilterOptions<TData = any> {
106
106
  * @gridInfoItem
107
107
  */
108
108
  defaultDateColumnFilter?: StrictExtract<SystemFilterPredicateId, 'After' | 'Before' | 'On' | 'NotOn' | 'In'> | ((adaptableColumnContext: AdaptableColumnContext<TData>) => StrictExtract<SystemFilterPredicateId, 'After' | 'Before' | 'On' | 'NotOn' | 'In'>);
109
+ /**
110
+ * Default filter type for array Columns ('textArray', 'numberArray', etc.)
111
+ *
112
+ * @defaultValue In
113
+ * @gridInfoItem
114
+ */
115
+ defaultArrayColumnFilter?: StrictExtract<SystemFilterPredicateId, 'In' | 'NotIn' | 'Blanks' | 'NonBlanks'> | ((adaptableColumnContext: AdaptableColumnContext<TData>) => StrictExtract<SystemFilterPredicateId, 'In' | 'NotIn' | 'Blanks' | 'NonBlanks'>);
109
116
  /**
110
117
  * Hides Dropdown in Quick Filter Bar for a given Column
111
118
  *
@@ -1,5 +1,5 @@
1
1
  import { AdaptableObject } from './AdaptableObject';
2
- import { BaseCellDataType } from 'ag-grid-enterprise';
2
+ import { BaseCellDataType, ColDef } from 'ag-grid-enterprise';
3
3
  /**
4
4
  * Defines data type of a Column; can be an AG Grid BaseCellDataType or an AdapTable array-related one
5
5
  */
@@ -9,6 +9,7 @@ export type AdaptableColumnDataType = BaseCellDataType | 'textArray' | 'numberAr
9
9
  */
10
10
  export type AdaptableColumnType = 'hiddenColumn' | 'calculatedColumn' | 'freeTextColumn' | 'actionColumn' | 'fdc3Column' | 'pivotAnyTotal' | 'pivotGrandTotal' | 'pivotColumnTotal' | 'pivotAggregationTotal';
11
11
  export declare const HIDDEN_COLUMN_TYPE: AdaptableColumnType;
12
+ export declare const hiddenColDefConfig: ColDef;
12
13
  export declare const CALCULATED_COLUMN_TYPE: AdaptableColumnType;
13
14
  export declare const FREE_TEXT_COLUMN_TYPE: AdaptableColumnType;
14
15
  export declare const ACTION_COLUMN_TYPE: AdaptableColumnType;
@@ -1,5 +1,11 @@
1
1
  import { PIVOT_AGGREGATION_TOTAL_COL_TYPE, PIVOT_ANY_TOTAL_COL_TYPE, PIVOT_COLUMN_TOTAL_COL_TYPE, PIVOT_GRAND_TOTAL_COL_TYPE, } from '../../layout-manager/src';
2
2
  export const HIDDEN_COLUMN_TYPE = 'hiddenColumn';
3
+ export const hiddenColDefConfig = {
4
+ initialHide: true,
5
+ hide: true,
6
+ lockVisible: true,
7
+ suppressColumnsToolPanel: true,
8
+ };
3
9
  export const CALCULATED_COLUMN_TYPE = 'calculatedColumn';
4
10
  export const FREE_TEXT_COLUMN_TYPE = 'freeTextColumn';
5
11
  export const ACTION_COLUMN_TYPE = 'actionColumn';
@@ -9,11 +9,11 @@ export type AdaptableVersion = `${string}.${string}.${string}`;
9
9
  */
10
10
  export interface AdaptableObject {
11
11
  /**
12
- * Unique identifier for the Adaptable Object, generated and used internally by AdapTable
12
+ * Unique identifier for the Object, generated and used internally by AdapTable
13
13
  */
14
14
  Uuid?: TypeUuid;
15
15
  /**
16
- * Source of state object: 'InitialState' if provided via `AdaptableOptions.initialState`, 'User' or undefined for runtime state.
16
+ * Source of state object: 'InitialState' if provided via `AdaptableOptions.initialState`, 'User' or undefined for runtime state
17
17
  */
18
18
  Source?: 'InitialState' | 'User';
19
19
  /**
@@ -25,7 +25,7 @@ export interface AdaptableObject {
25
25
  */
26
26
  IsReadOnly?: boolean;
27
27
  /**
28
- * List of Tags associated with the Object; often used for (but not limited to) managing Layout object scope
28
+ * List of Tags associated with the Object; often used for extending Layouts
29
29
  */
30
30
  Tags?: AdaptableObjectTag[];
31
31
  /**
@@ -95,7 +95,7 @@ export const SystemPredicateDefs = [
95
95
  id: 'NotIn',
96
96
  label: 'Not In',
97
97
  icon: { text: '!IN' },
98
- columnScope: { DataTypes: ['text', 'number', 'date'] },
98
+ columnScope: { DataTypes: ['text', 'number', 'date', 'textArray', 'numberArray'] },
99
99
  moduleScope: ['columnFilter', 'flashingcell', 'formatColumn', 'alert', 'badgeStyle'],
100
100
  handler: (context) => {
101
101
  const { inputs, column, value, adaptableApi } = context;
@@ -139,6 +139,12 @@ export const SystemPredicateDefs = [
139
139
  if (column.dataType === 'number') {
140
140
  return !inputs.includes(value);
141
141
  }
142
+ if (column.dataType === 'numberArray') {
143
+ const arrayValue = Array.isArray(value) ? value : [value];
144
+ return inputs.every((input) => {
145
+ return !arrayValue.includes(input);
146
+ });
147
+ }
142
148
  if (column.dataType === 'text') {
143
149
  return adaptableApi.predicateApi.useCaseSensitivity()
144
150
  ? !inputs
@@ -148,6 +154,14 @@ export const SystemPredicateDefs = [
148
154
  .includes(value?.toLocaleLowerCase())
149
155
  : !inputs.includes(value);
150
156
  }
157
+ if (column.dataType === 'textArray') {
158
+ const arrayValue = Array.isArray(value) ? value : [value];
159
+ return inputs.every((input) => {
160
+ return adaptableApi.predicateApi.useCaseSensitivity()
161
+ ? !arrayValue.map((v) => v?.toLocaleLowerCase()).includes(input?.toLocaleLowerCase())
162
+ : !arrayValue.includes(input);
163
+ });
164
+ }
151
165
  return true;
152
166
  },
153
167
  toString: ({ inputs }) => `Exclude (${inputs.join(', ')})`,
@@ -158,7 +172,12 @@ export const SystemPredicateDefs = [
158
172
  icon: { name: 'unfilled-circle' },
159
173
  columnScope: { All: true },
160
174
  moduleScope: ['columnFilter', 'alert', 'flashingcell', 'formatColumn', 'badgeStyle'],
161
- handler: ({ value }) => Helper.isInputNullOrEmpty(value),
175
+ handler: ({ value, column, adaptableApi }) => {
176
+ if (adaptableApi.columnApi.internalApi.hasArrayDataType(column)) {
177
+ return value == undefined || value.length === 0;
178
+ }
179
+ return Helper.isInputNullOrEmpty(value);
180
+ },
162
181
  },
163
182
  {
164
183
  id: 'NonBlanks',
@@ -166,7 +185,12 @@ export const SystemPredicateDefs = [
166
185
  icon: { name: 'filled-circle' },
167
186
  columnScope: { All: true },
168
187
  moduleScope: ['columnFilter', 'alert', 'flashingcell', 'formatColumn', 'badgeStyle'],
169
- handler: ({ value }) => Helper.isInputNotNullOrEmpty(value),
188
+ handler: ({ value, column, adaptableApi }) => {
189
+ if (adaptableApi.columnApi.internalApi.hasArrayDataType(column)) {
190
+ return value == undefined || value.length === 0;
191
+ }
192
+ return Helper.isInputNotNullOrEmpty(value);
193
+ },
170
194
  },
171
195
  // Numeric System Filters
172
196
  {
@@ -501,6 +501,9 @@ export class ColumnApiImpl extends ApiBase {
501
501
  return this.getAgGridApi().getColumn(columnId);
502
502
  }
503
503
  hasColumnType(columnIdentifier, columnType) {
504
+ if (!columnIdentifier) {
505
+ return false;
506
+ }
504
507
  const colDef = typeof columnIdentifier === 'string'
505
508
  ? this.getAgGridApi().getColumnDef(columnIdentifier)
506
509
  : columnIdentifier;
@@ -1,5 +1,5 @@
1
1
  import { ApiBase } from '../Implementation/ApiBase';
2
- import { Column, HeaderValueGetterParams, IRowNode } from 'ag-grid-enterprise';
2
+ import { ColDef, Column, HeaderValueGetterParams, IRowNode } from 'ag-grid-enterprise';
3
3
  import { CustomSort } from '../../AdaptableState/CustomSortState';
4
4
  import { ColumnValuesComparer } from '../../AdaptableOptions/CustomSortOptions';
5
5
  import { AdaptableColumn } from '../../types';
@@ -33,6 +33,7 @@ export declare class ColumnInternalApi extends ApiBase {
33
33
  isSpecialColumn(columnId: string, column?: AdaptableColumn): boolean;
34
34
  getColumnHeaderName(params: HeaderValueGetterParams): string;
35
35
  private buildColumnHeaderContext;
36
- getQueryableColumnsForUIEditor(): AdaptableColumn[];
37
36
  hasArrayDataType(column: AdaptableColumn): boolean;
37
+ getQueryableColumnsForUIEditor(): AdaptableColumn[];
38
+ isAlwaysHiddenColumn(columnIdentifier: string | ColDef): boolean;
38
39
  }
@@ -6,6 +6,7 @@ import { isPivotGrandTotal, isPivotResultColumn } from '../Implementation/Column
6
6
  import { destructurePivotColumnId } from '../../layout-manager/src/destructurePivotColumnId';
7
7
  import { isPivotColumnTotal } from '../../layout-manager/src/isPivotColumnTotal';
8
8
  import { isPivotAggTotalColumn } from '../../layout-manager/src/isPivotAggTotalColumn';
9
+ import { HIDDEN_COLUMN_TYPE } from '../../AdaptableState/Common/AdaptableColumn';
9
10
  export function getAutoRowGroupColumnIdFor(columnId) {
10
11
  return `${AG_GRID_GROUPED_COLUMN}-${columnId}`;
11
12
  }
@@ -282,12 +283,15 @@ export class ColumnInternalApi extends ApiBase {
282
283
  // if nothing matched, we skip this column[group]
283
284
  return 'skip';
284
285
  }
286
+ hasArrayDataType(column) {
287
+ return ['textArray', 'numberArray', 'tupleArray', 'objectArray'].includes(column.dataType);
288
+ }
285
289
  getQueryableColumnsForUIEditor() {
286
290
  return this.getColumnApi()
287
291
  .getQueryableColumns()
288
292
  .filter((column) => !column.isGeneratedPivotResultColumn && !column.isGeneratedRowGroupColumn);
289
293
  }
290
- hasArrayDataType(column) {
291
- return ['textArray', 'numberArray', 'tupleArray', 'objectArray'].includes(column.dataType);
294
+ isAlwaysHiddenColumn(columnIdentifier) {
295
+ return this.getColumnApi().hasColumnType(columnIdentifier, HIDDEN_COLUMN_TYPE);
292
296
  }
293
297
  }
@@ -169,12 +169,16 @@ export declare const getColumnFilterSelector: (state: AdaptableState, columnId:
169
169
  PredicatesOperator?: import("../../types").PredicatesOperator;
170
170
  IsSuspended?: boolean;
171
171
  Uuid?: string;
172
+ /**
173
+ * @ReduxAction Layout Module is ready
174
+ */
172
175
  Source?: "InitialState" | "User";
176
+ /**
177
+ * @ReduxAction A Layout has been edited
178
+ */
173
179
  AdaptableVersion?: `${string}.${string}.${string}`;
174
180
  IsReadOnly?: boolean;
175
181
  Tags?: string[];
176
- Metadata?: any; /**
177
- * @ReduxAction A Column Filter has been edited
178
- */
182
+ Metadata?: any;
179
183
  };
180
184
  export declare const LayoutReducer: Redux.Reducer<LayoutState>;
@@ -103,7 +103,7 @@ export class ModuleService {
103
103
  case 'ColumnFilter':
104
104
  return learnUrl + 'handbook-column-filter';
105
105
  case 'ColumnInfo':
106
- return learnUrl + 'dev-guide-tutorial-grid-column-info';
106
+ return learnUrl + 'dev-guide-column-grid-column-info';
107
107
  case 'Comment':
108
108
  return learnUrl + 'handbook-comments';
109
109
  case 'CustomSort':
@@ -129,7 +129,7 @@ export class ModuleService {
129
129
  case 'GridFilter':
130
130
  return learnUrl + 'handbook-grid-filter';
131
131
  case 'GridInfo':
132
- return learnUrl + 'dev-guide-tutorial-grid-column-info';
132
+ return learnUrl + 'dev-guide-column-grid-column-info';
133
133
  case 'Layout':
134
134
  return learnUrl + 'handbook-layouts';
135
135
  case 'NamedQuery':
@@ -152,6 +152,26 @@ export const mapColumnFilterToQlPredicate = (columnFilter, abColumn, qlPredicate
152
152
  case 'boolean':
153
153
  defaultQlPredicate = { operator: 'BooleanToggle', args: [] };
154
154
  break;
155
+ case 'textArray':
156
+ case 'numberArray':
157
+ let defaultQlArrayPredicate;
158
+ const defaultArrayColumnFilter = columnFilterOptions.defaultArrayColumnFilter;
159
+ if (defaultArrayColumnFilter) {
160
+ if (typeof defaultArrayColumnFilter === 'function') {
161
+ const context = {
162
+ column: abColumn,
163
+ ...api.internalApi.buildBaseContext(),
164
+ };
165
+ defaultQlArrayPredicate = defaultArrayColumnFilter(context);
166
+ }
167
+ else {
168
+ defaultQlArrayPredicate = defaultArrayColumnFilter;
169
+ }
170
+ }
171
+ defaultQlPredicate = defaultQlArrayPredicate
172
+ ? { operator: defaultQlArrayPredicate, args: [] }
173
+ : { operator: 'In', args: [] };
174
+ break;
155
175
  }
156
176
  if (defaultQlPredicate === null) {
157
177
  // take the firstavailable one
@@ -355,7 +355,8 @@ export const ColumnsSection = (props) => {
355
355
  };
356
356
  const visibleIds = layout.TableColumns.filter((colId) => {
357
357
  return (layout.ColumnVisibility?.[colId] !== false &&
358
- adaptable.api.columnApi.isSelectionColumn(colId) === false);
358
+ adaptable.api.columnApi.isSelectionColumn(colId) === false &&
359
+ !adaptable.api.columnApi.internalApi.isAlwaysHiddenColumn(colId));
359
360
  });
360
361
  const toLabel = (colId) => adaptable.api.columnApi.getFriendlyNameForColumnId(colId, layout);
361
362
  const toIdentifier = (colId) => colId;
@@ -93,7 +93,7 @@ import { AgGridExportAdapter } from './AgGridExportAdapter';
93
93
  import { checkForDuplicateColumns, getLayoutRowGroupValuesExceptionGroupKeys, isPivotLayout, layoutModelToLayoutState, layoutStateToLayoutModel, normalizeLayout, } from '../Api/Implementation/LayoutHelpers';
94
94
  import { LayoutManager } from '../layout-manager/src';
95
95
  import { isPivotLayoutModel } from '../layout-manager/src/isPivotLayoutModel';
96
- import { ACTION_COLUMN_TYPE, CALCULATED_COLUMN_TYPE, FDC3_COLUMN_TYPE, FREE_TEXT_COLUMN_TYPE, PIVOT_AGGREGATION_TOTAL_COLUMN_TYPE, PIVOT_ANY_TOTAL_COLUMN_TYPE, PIVOT_COLUMN_TOTAL_COLUMN_TYPE, PIVOT_GRAND_TOTAL_COLUMN_TYPE, } from '../AdaptableState/Common/AdaptableColumn';
96
+ import { ACTION_COLUMN_TYPE, CALCULATED_COLUMN_TYPE, FDC3_COLUMN_TYPE, FREE_TEXT_COLUMN_TYPE, HIDDEN_COLUMN_TYPE, hiddenColDefConfig, PIVOT_AGGREGATION_TOTAL_COLUMN_TYPE, PIVOT_ANY_TOTAL_COLUMN_TYPE, PIVOT_COLUMN_TOTAL_COLUMN_TYPE, PIVOT_GRAND_TOTAL_COLUMN_TYPE, } from '../AdaptableState/Common/AdaptableColumn';
97
97
  import { agGridDataTypeDefinitions } from './agGridDataTypeDefinitions';
98
98
  import { AgGridThemeAdapter } from './AgGridThemeAdapter';
99
99
  import { mapOldTypeToDataType } from '../migration/VersionUpgrade20';
@@ -1090,6 +1090,7 @@ You need to define at least one Layout!`);
1090
1090
  this.agGridOptionsService.setGridOptionsProperty(gridOptions, 'columnTypes', (original_columnTypes) => {
1091
1091
  const providedColumnTypes = original_columnTypes || {};
1092
1092
  const adaptableSpecialColumnTypes = {
1093
+ [HIDDEN_COLUMN_TYPE]: hiddenColDefConfig,
1093
1094
  [CALCULATED_COLUMN_TYPE]: {},
1094
1095
  [FREE_TEXT_COLUMN_TYPE]: {},
1095
1096
  [ACTION_COLUMN_TYPE]: {},
@@ -1,5 +1,5 @@
1
1
  import { ColumnApiModule, } from 'ag-grid-enterprise';
2
- import { ACTION_COLUMN_TYPE, CALCULATED_COLUMN_TYPE, FDC3_COLUMN_TYPE, FREE_TEXT_COLUMN_TYPE, HIDDEN_COLUMN_TYPE, } from '../AdaptableState/Common/AdaptableColumn';
2
+ import { ACTION_COLUMN_TYPE, CALCULATED_COLUMN_TYPE, FDC3_COLUMN_TYPE, FREE_TEXT_COLUMN_TYPE, } from '../AdaptableState/Common/AdaptableColumn';
3
3
  import { ADAPTABLE_FDC3_ACTION_COLUMN_FRIENDLY_NAME } from '../Utilities/Constants/GeneralConstants';
4
4
  import { createUuid } from '../AdaptableState/Uuid';
5
5
  import ArrayExtensions from '../Utilities/Extensions/ArrayExtensions';
@@ -459,7 +459,7 @@ export class AgGridAdapter {
459
459
  ? 'number'
460
460
  : this.deriveAdaptableColumnDataType(agGridColumn, false);
461
461
  const isTreeColumn = this.isTreeColumn(isGeneratedRowGroupColumn);
462
- const alwaysHidden = this.adaptableApi.columnApi.hasColumnType(colDef, HIDDEN_COLUMN_TYPE);
462
+ const alwaysHidden = this.adaptableApi.columnApi.internalApi.isAlwaysHiddenColumn(colDef);
463
463
  const visible = !alwaysHidden || agGridColumn.isVisible();
464
464
  const isGenerated = isGeneratedRowGroupColumn || isGeneratedPivotResultColumn || isGeneratedSelectionColumn;
465
465
  const abColumn = {
@@ -328,8 +328,10 @@ export class AgGridColumnAdapter {
328
328
  setupColumnHeaderStyle({ col }) {
329
329
  this.setColDefProperty(col, 'headerStyle', (userHeaderStyle) => {
330
330
  const headerStyleFunc = (params) => {
331
+ let baseStyles = {};
331
332
  // inherit styles from user provided colDef property
332
- const baseStyles = typeof userHeaderStyle === 'function' ? userHeaderStyle(params) : userHeaderStyle;
333
+ baseStyles =
334
+ typeof userHeaderStyle === 'function' ? userHeaderStyle(params) : userHeaderStyle;
333
335
  if (params.floatingFilter) {
334
336
  // we NEVER style floating filters
335
337
  return baseStyles;
package/src/env.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export default {
2
2
  NEXT_PUBLIC_INFINITE_TABLE_LICENSE_KEY: "StartDate=2021-06-29|EndDate=2030-01-01|Owner=Adaptable|Type=distribution|TS=1624971462479|C=137829811,1004007071,2756196225,1839832928,3994409405,636616862" || '',
3
- PUBLISH_TIMESTAMP: 1752676413621 || Date.now(),
4
- VERSION: "20.3.0-canary.0" || '--current-version--',
3
+ PUBLISH_TIMESTAMP: 1752841742262 || Date.now(),
4
+ VERSION: "20.3.0-canary.2" || '--current-version--',
5
5
  };