@adaptabletools/adaptable 20.0.0-canary.4 → 20.0.0-canary.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 (38) hide show
  1. package/package.json +1 -1
  2. package/src/AdaptableInterfaces/IAdaptable.d.ts +2 -1
  3. package/src/AdaptableOptions/DefaultAdaptableOptions.js +1 -0
  4. package/src/AdaptableOptions/EditOptions.d.ts +13 -2
  5. package/src/AdaptableOptions/UserInterfaceOptions.d.ts +7 -0
  6. package/src/Api/Fdc3Api.d.ts +5 -3
  7. package/src/Api/Implementation/Fdc3ApiImpl.d.ts +3 -3
  8. package/src/Api/Implementation/Fdc3ApiImpl.js +4 -4
  9. package/src/Api/Implementation/LayoutHelpers.js +8 -27
  10. package/src/Api/Implementation/ThemeApiImpl.js +3 -1
  11. package/src/Api/Internal/RowFormInternalApi.js +1 -1
  12. package/src/Api/ThemeApi.d.ts +2 -0
  13. package/src/PredefinedConfig/AlertState.d.ts +1 -1
  14. package/src/PredefinedConfig/Common/AdaptablePredicate.js +0 -16
  15. package/src/PredefinedConfig/FlashingCellState.d.ts +1 -1
  16. package/src/PredefinedConfig/LayoutState.d.ts +2 -2
  17. package/src/Utilities/Helpers/AdaptableHelper.d.ts +2 -0
  18. package/src/Utilities/Helpers/AdaptableHelper.js +10 -0
  19. package/src/Utilities/Services/Fdc3Service.d.ts +2 -2
  20. package/src/Utilities/Services/Fdc3Service.js +7 -2
  21. package/src/Utilities/Services/ThemeService.d.ts +1 -1
  22. package/src/Utilities/Services/ThemeService.js +5 -5
  23. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +41 -0
  24. package/src/View/DataChangeHistory/DataChangeHistoryPopup.js +4 -1
  25. package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +7 -2
  26. package/src/agGrid/AdaptableAgGrid.d.ts +2 -2
  27. package/src/agGrid/AdaptableAgGrid.js +15 -74
  28. package/src/agGrid/AgGridAdapter.d.ts +1 -1
  29. package/src/agGrid/AgGridAdapter.js +3 -7
  30. package/src/agGrid/AgGridColumnAdapter.js +0 -7
  31. package/src/agGrid/AgGridThemeAdapter.d.ts +19 -0
  32. package/src/agGrid/AgGridThemeAdapter.js +122 -0
  33. package/src/components/OverlayTrigger/useAgGridClassName.js +1 -1
  34. package/src/env.js +2 -2
  35. package/src/metamodel/adaptable.metamodel.d.ts +16 -0
  36. package/src/metamodel/adaptable.metamodel.js +1 -1
  37. package/src/migration/VersionUpgrade20.js +49 -5
  38. package/tsconfig.esm.tsbuildinfo +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "20.0.0-canary.4",
3
+ "version": "20.0.0-canary.6",
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",
@@ -31,6 +31,7 @@ import { AgGridMenuAdapter } from '../agGrid/AgGridMenuAdapter';
31
31
  import { RowFormService } from '../Utilities/Services/RowFormService';
32
32
  import { FlashingCellService } from '../Utilities/Services/FlashingCellService';
33
33
  import { AgGridExportAdapter } from '../agGrid/AgGridExportAdapter';
34
+ import { AgGridThemeAdapter } from '../agGrid/AgGridThemeAdapter';
34
35
  /**
35
36
  * Contains AG Grid Options and Modules - used when instantiating AdapTable vanilla
36
37
  */
@@ -66,6 +67,7 @@ export interface IAdaptable {
66
67
  agGridMenuAdapter: AgGridMenuAdapter;
67
68
  agGridColumnAdapter: AgGridColumnAdapter;
68
69
  agGridExportAdapter: AgGridExportAdapter;
70
+ agGridThemeAdapter: AgGridThemeAdapter;
69
71
  hasAdaptableToolPanel: boolean;
70
72
  renderReactRoot: RenderReactRootFn;
71
73
  /**
@@ -244,7 +246,6 @@ export interface IAdaptable {
244
246
  isGridRangeSelectable(): boolean;
245
247
  isGridRowSelectable(): boolean;
246
248
  isGridGroupingActive(): boolean;
247
- getAgGridCurrentThemeName(): string;
248
249
  applyAdaptableTheme(theme: AdaptableTheme | string): void;
249
250
  setRowGroupColumns(columnIds: string[]): void;
250
251
  getAllGridColumns(): Column<any>[];
@@ -294,6 +294,7 @@ const DefaultAdaptableOptions = {
294
294
  styleClassNames: EMPTY_ARRAY,
295
295
  showDocumentationLinks: true,
296
296
  showAdapTableVersion: true,
297
+ showAgGridVersion: true,
297
298
  },
298
299
  };
299
300
  export function applyDefaultAdaptableOptions(adaptableOptions) {
@@ -39,17 +39,28 @@ export interface EditOptions<TData = any> {
39
39
  */
40
40
  export interface CustomEditColumnValuesContext<TData = any> extends AdaptableColumnContext<TData> {
41
41
  /**
42
- * Current distinct values in Cell
42
+ * Current distinct values in Column
43
43
  */
44
44
  defaultValues: Required<CustomEditColumnValueInfo>[];
45
+ /**
46
+ * Search text in Edit - used when fetching values from server
47
+ */
45
48
  currentSearchValue: string;
46
49
  /**
47
50
  * Currently edited Grid Cell
48
51
  */
49
52
  gridCell: GridCell;
50
53
  }
54
+ /**
55
+ * Information about items in the Edit Controls
56
+ */
51
57
  export interface CustomEditColumnValueInfo {
52
- label?: string;
58
+ /**
59
+ * Item's label
60
+ */ label?: string;
61
+ /**
62
+ * Value of Item being shown
63
+ */
53
64
  value: any;
54
65
  }
55
66
  /**
@@ -68,6 +68,13 @@ export interface UserInterfaceOptions<TData = any> {
68
68
  * @gridInfoItem
69
69
  */
70
70
  showAdapTableVersion?: boolean;
71
+ /**
72
+ * Displays the AG Grid version in Grid Info section of Settings Panel
73
+ *
74
+ * @defaultValue true
75
+ * @gridInfoItem
76
+ */
77
+ showAgGridVersion?: boolean;
71
78
  /**
72
79
  * English variant to use in AdapTable UI
73
80
  *
@@ -1,5 +1,5 @@
1
1
  import { IRowNode } from 'ag-grid-enterprise';
2
- import { AppIdentifier, Context, ContextType, DesktopAgent, Intent, IntentResolution } from '@finos/fdc3';
2
+ import { AppIdentifier, Channel, Context, ContextType, DesktopAgent, Intent, IntentResolution } from '@finos/fdc3';
3
3
  /**
4
4
  * Provides run-time access to AdapTable's FDC3 functionality
5
5
  */
@@ -59,14 +59,16 @@ export interface Fdc3Api {
59
59
  * Broadcasts the given Context from the given Row Node
60
60
  * @param rowNode - The Row Node
61
61
  * @param contextType - The FDC3 Context Type
62
+ * @param channel - (optional) Channel to broadcast to; if not provided, the Context will be broadcast to whatever User Channel the app is joined to
62
63
  */
63
- broadcastFromRow(rowNode: IRowNode, contextType: ContextType): Promise<void>;
64
+ broadcastFromRow(rowNode: IRowNode, contextType: ContextType, channel?: Channel): Promise<void>;
64
65
  /**
65
66
  * Broadcasts the given Context from the given Row Node with the given Primary Key Value
66
67
  * @param primaryKeyValue - The Primary Key Value
67
68
  * @param contextType - The FDC3 Context Type
69
+ * @param channel - (optional) Channel to broadcast to; if not provided, the Context will be broadcast to whatever User Channel the app is joined to
68
70
  */
69
- broadcastFromPrimaryKey(primaryKeyValue: string | number, contextType: ContextType): Promise<void> | undefined;
71
+ broadcastFromPrimaryKey(primaryKeyValue: string | number, contextType: ContextType, channel?: Channel): Promise<void> | undefined;
70
72
  /**
71
73
  * Checks if the given Context Type is a FDC3 standard Context Type
72
74
  */
@@ -1,5 +1,5 @@
1
1
  import { IRowNode } from 'ag-grid-enterprise';
2
- import { Context, ContextType, DesktopAgent, Intent, IntentResolution, StandardContextType, StandardIntent } from '@finos/fdc3';
2
+ import { Channel, Context, ContextType, DesktopAgent, Intent, IntentResolution, StandardContextType, StandardIntent } from '@finos/fdc3';
3
3
  import { ApiBase } from './ApiBase';
4
4
  import { Fdc3Api } from '../Fdc3Api';
5
5
  import { Fdc3InternalApi } from '../Internal/Fdc3InternalApi';
@@ -15,8 +15,8 @@ export declare class Fdc3ApiImpl extends ApiBase implements Fdc3Api {
15
15
  raiseIntentFromRow(rowNode: IRowNode, intent: Intent, contextType: ContextType, appIdentifier?: AppIdentifier): Promise<IntentResolution>;
16
16
  raiseIntentForContextFromRow(rowNode: IRowNode, contextType: ContextType, appIdentifier?: AppIdentifier): Promise<IntentResolution>;
17
17
  raiseIntentForContextFromPrimaryKey(primaryKeyValue: string | number, contextType: ContextType, appIdentifier?: AppIdentifier): Promise<IntentResolution> | undefined;
18
- broadcastFromRow(rowNode: IRowNode, contextType: ContextType): Promise<void>;
19
- broadcastFromPrimaryKey(primaryKeyValue: string | number, contextType: ContextType): Promise<void> | undefined;
18
+ broadcastFromRow(rowNode: IRowNode, contextType: ContextType, channel?: Channel): Promise<void>;
19
+ broadcastFromPrimaryKey(primaryKeyValue: string | number, contextType: ContextType, channel?: Channel): Promise<void> | undefined;
20
20
  getContextLabel(contextType: ContextType): string;
21
21
  isStandardContextType(contextType: string): contextType is StandardContextType;
22
22
  isStandardIntentType(intentType: string): intentType is StandardIntent;
@@ -44,17 +44,17 @@ export class Fdc3ApiImpl extends ApiBase {
44
44
  }
45
45
  return this.raiseIntentForContextFromRow(rowNode, contextType, appIdentifier);
46
46
  }
47
- broadcastFromRow(rowNode, contextType) {
47
+ broadcastFromRow(rowNode, contextType, channel) {
48
48
  const contextData = this.buildContextDataFromRow(contextType, rowNode);
49
- return this.getFdc3Service().broadcast(contextData);
49
+ return this.getFdc3Service().broadcast(contextData, channel);
50
50
  }
51
- broadcastFromPrimaryKey(primaryKeyValue, contextType) {
51
+ broadcastFromPrimaryKey(primaryKeyValue, contextType, channel) {
52
52
  const rowNode = this.getGridApi().getRowNodeForPrimaryKey(primaryKeyValue);
53
53
  if (!rowNode) {
54
54
  this.logWarn(`No row found for primary key value '${primaryKeyValue}'`);
55
55
  return undefined;
56
56
  }
57
- return this.broadcastFromRow(rowNode, contextType);
57
+ return this.broadcastFromRow(rowNode, contextType, channel);
58
58
  }
59
59
  getContextLabel(contextType) {
60
60
  return this.isStandardContextType(contextType)
@@ -3,6 +3,7 @@ import { isPivotLayoutModel } from '../../layout-manager/src/isPivotLayoutModel'
3
3
  import { normalizeTableLayoutModel, normalizePivotLayoutModel, } from '../../layout-manager/src/normalizeLayoutModel';
4
4
  import { simplifyTableLayoutModel, simplifyPivotLayoutModel, } from '../../layout-manager/src/simplifyLayoutModel';
5
5
  import { isWeightedAverageAggregation, WEIGHTED_AVERAGE_AGG_FN_NAME, isWeightedAverageAggFuncName, } from '../../PredefinedConfig/Common/AggregationColumns';
6
+ import { removeAdaptableObjectPrimitivesInline } from '../../Utilities/Helpers/AdaptableHelper';
6
7
  export const layoutStateToLayoutModel = (layout) => {
7
8
  if (isPivotLayout(layout)) {
8
9
  return pivotLayoutToPivotLayoutModel(layout);
@@ -18,44 +19,23 @@ export const layoutModelToLayoutState = (layoutModel, defaults) => {
18
19
  function cleanupAdaptableObjectPrimitives(layout) {
19
20
  if (layout.TableAggregationColumns) {
20
21
  layout.TableAggregationColumns.forEach((AggValue) => {
21
- // @ts-ignore
22
- delete AggValue.Source;
23
- // @ts-ignore
24
- delete AggValue.Uuid;
25
- // @ts-ignore
26
- delete AggValue.AdaptableVersion;
22
+ removeAdaptableObjectPrimitivesInline(AggValue);
27
23
  if (typeof AggValue.AggFunc === 'object' && AggValue.AggFunc) {
28
- // @ts-ignore
29
- delete AggValue.AggFunc.Source;
30
- // @ts-ignore
31
- delete AggValue.AggFunc.Uuid;
32
- // @ts-ignore
33
- delete AggValue.AggFunc.AdaptableVersion;
24
+ removeAdaptableObjectPrimitivesInline(AggValue.AggFunc);
34
25
  }
35
26
  });
36
27
  }
37
28
  if (layout.ColumnHeaders) {
38
- delete layout.ColumnHeaders.Source;
39
- delete layout.ColumnHeaders.Uuid;
40
- delete layout.ColumnHeaders.AdaptableVersion;
29
+ removeAdaptableObjectPrimitivesInline(layout.ColumnHeaders);
41
30
  }
42
31
  if (layout.ColumnVisibility) {
43
- delete layout.ColumnVisibility.Source;
44
- delete layout.ColumnVisibility.Uuid;
45
- delete layout.ColumnVisibility.AdaptableVersion;
32
+ removeAdaptableObjectPrimitivesInline(layout.ColumnVisibility);
46
33
  }
47
34
  if (layout.ColumnWidths) {
48
- delete layout.ColumnWidths.Source;
49
- delete layout.ColumnWidths.Uuid;
50
- delete layout.ColumnWidths.AdaptableVersion;
35
+ removeAdaptableObjectPrimitivesInline(layout.ColumnWidths);
51
36
  }
52
37
  if (layout.RowGroupValues) {
53
- // @ts-ignore
54
- delete layout.RowGroupValues.Source;
55
- // @ts-ignore
56
- delete layout.RowGroupValues.Uuid;
57
- // @ts-ignore
58
- delete layout.RowGroupValues.AdaptableVersion;
38
+ removeAdaptableObjectPrimitivesInline(layout.RowGroupValues);
59
39
  }
60
40
  }
61
41
  /**
@@ -258,6 +238,7 @@ export const tableLayoutModelToTableLayout = (layoutModel, defaults) => {
258
238
  else {
259
239
  delete tableLayout.TableAggregationColumns;
260
240
  }
241
+ cleanupAdaptableObjectPrimitives(tableLayout);
261
242
  return tableLayout;
262
243
  };
263
244
  function toAggregationColumnValue(columnAggregationModel) {
@@ -4,6 +4,7 @@ import { ApiBase } from './ApiBase';
4
4
  import { StaticThemes } from '../../themes';
5
5
  import { ThemeInternalApi } from '../Internal/ThemeInternalApi';
6
6
  import AdaptableHelper from '../../Utilities/Helpers/AdaptableHelper';
7
+ import { logDeprecation } from '../../Utilities/logDeprecation';
7
8
  export class ThemeApiImpl extends ApiBase {
8
9
  constructor(_adaptable) {
9
10
  super(_adaptable);
@@ -70,7 +71,8 @@ export class ThemeApiImpl extends ApiBase {
70
71
  this.showModulePopup(ModuleConstants.ThemeModuleId);
71
72
  }
72
73
  getAgGridCurrentThemeName() {
73
- return this._adaptable.getAgGridCurrentThemeName();
74
+ logDeprecation(this._adaptable.logger, 'ThemeApi', 'getAgGridCurrentThemeName', null, `This is required only for AG Grid's legacy themes. See https://www.ag-grid.com/javascript-data-grid/theming-v32/`);
75
+ return this._adaptable.agGridThemeAdapter.getAgGridCurrentThemeClassNames();
74
76
  }
75
77
  editTheme(theme) {
76
78
  this.dispatchAction(ThemeRedux.ThemeEdit(theme));
@@ -187,7 +187,7 @@ export class RowFormInternalApi extends ApiBase {
187
187
  }
188
188
  const returnValues = this.getGridApi().internalApi.getDistinctDisplayValuesForColumnOld(column.columnId);
189
189
  // FIXME add support for asynchronous custom select cell editor values
190
- // it involves refactoring the AdaptableForm & AdapatableFormComponent
190
+ // it involves refactoring the AdaptableForm & adaptableFormComponent
191
191
  // await this.getSelectCellEditorValuesForColumn(
192
192
  // column,
193
193
  // gridCell
@@ -81,6 +81,8 @@ export interface ThemeApi {
81
81
  openThemeSettingsPanel(): void;
82
82
  /**
83
83
  * Get the name of the current AG Grid theme
84
+ *
85
+ * @deprecated required only for legacy AG Grid themes, see https://www.ag-grid.com/javascript-data-grid/theming-v32/
84
86
  */
85
87
  getAgGridCurrentThemeName(): string;
86
88
  }
@@ -150,4 +150,4 @@ export type SystemAlertPredicateIds = SystemAlertPredicateId[];
150
150
  /**
151
151
  * List of System Predicates available for Alerts
152
152
  */
153
- export type SystemAlertPredicateId = 'Blanks' | 'NonBlanks' | 'Equals' | 'NotEquals' | 'GreaterThan' | 'LessThan' | 'Positive' | 'Negative' | 'Zero' | 'Between' | 'NotBetween' | 'Is' | 'IsNot' | 'Contains' | 'NotContains' | 'StartsWith' | 'EndsWith' | 'Regex' | 'Today' | 'Yesterday' | 'Tomorrow' | 'ThisWeek' | 'ThisMonth' | 'ThisQuarter' | 'ThisYear' | 'InPast' | 'InFuture' | 'Before' | 'After' | 'On' | 'NotOn' | 'NextWorkDay' | 'LastWorkDay' | 'WorkDay' | 'Holiday' | 'True' | 'False' | 'PercentChange' | 'IsNumeric' | 'IsNotNumeric' | 'In' | 'NotIn' | 'AnyChange';
153
+ export type SystemAlertPredicateId = 'Blanks' | 'NonBlanks' | 'Equals' | 'NotEquals' | 'GreaterThan' | 'LessThan' | 'Positive' | 'Negative' | 'Zero' | 'Between' | 'NotBetween' | 'Is' | 'IsNot' | 'Contains' | 'NotContains' | 'StartsWith' | 'EndsWith' | 'Regex' | 'Today' | 'Yesterday' | 'Tomorrow' | 'ThisWeek' | 'ThisMonth' | 'ThisQuarter' | 'ThisYear' | 'InPast' | 'InFuture' | 'Before' | 'After' | 'On' | 'NotOn' | 'NextWorkDay' | 'LastWorkDay' | 'WorkDay' | 'Holiday' | 'True' | 'False' | 'PercentChange' | 'In' | 'NotIn' | 'AnyChange';
@@ -266,22 +266,6 @@ export const SystemPredicateDefs = [
266
266
  toString: ({ inputs }) => `Not Between ${inputs[0] ?? ''}:${inputs[1]}`,
267
267
  shortcuts: ['!:'],
268
268
  },
269
- {
270
- id: 'IsNumeric',
271
- label: 'Is Numeric',
272
- icon: { text: '1' },
273
- columnScope: { DataTypes: ['number'] },
274
- moduleScope: ['alert', 'flashingcell'],
275
- handler: ({ value }) => !isNaN(Number(value)),
276
- },
277
- {
278
- id: 'IsNotNumeric',
279
- label: 'Is Not Numeric',
280
- icon: { text: '1' },
281
- columnScope: { DataTypes: ['number'] },
282
- moduleScope: ['alert', 'flashingcell'],
283
- handler: ({ value }) => isNaN(Number(value)),
284
- },
285
269
  // String System Filters
286
270
  {
287
271
  id: 'Is',
@@ -72,4 +72,4 @@ export type SystemFlashingCellPredicateIds = SystemFlashingCellPredicateId[];
72
72
  /**
73
73
  * List of System Predicates available for Flashing Cells
74
74
  */
75
- export type SystemFlashingCellPredicateId = 'Blanks' | 'NonBlanks' | 'Equals' | 'NotEquals' | 'GreaterThan' | 'LessThan' | 'Positive' | 'Negative' | 'Zero' | 'Between' | 'NotBetween' | 'Is' | 'IsNot' | 'Contains' | 'NotContains' | 'StartsWith' | 'EndsWith' | 'Regex' | 'Today' | 'Yesterday' | 'Tomorrow' | 'ThisWeek' | 'ThisMonth' | 'ThisQuarter' | 'ThisYear' | 'InPast' | 'InFuture' | 'Before' | 'After' | 'On' | 'NotOn' | 'NextWorkDay' | 'LastWorkDay' | 'WorkDay' | 'Holiday' | 'True' | 'False' | 'PercentChange' | 'IsNumeric' | 'IsNotNumeric' | 'In' | 'NotIn' | 'AnyChange';
75
+ export type SystemFlashingCellPredicateId = 'Blanks' | 'NonBlanks' | 'Equals' | 'NotEquals' | 'GreaterThan' | 'LessThan' | 'Positive' | 'Negative' | 'Zero' | 'Between' | 'NotBetween' | 'Is' | 'IsNot' | 'Contains' | 'NotContains' | 'StartsWith' | 'EndsWith' | 'Regex' | 'Today' | 'Yesterday' | 'Tomorrow' | 'ThisWeek' | 'ThisMonth' | 'ThisQuarter' | 'ThisYear' | 'InPast' | 'InFuture' | 'Before' | 'After' | 'On' | 'NotOn' | 'NextWorkDay' | 'LastWorkDay' | 'WorkDay' | 'Holiday' | 'True' | 'False' | 'PercentChange' | 'In' | 'NotIn' | 'AnyChange';
@@ -51,7 +51,7 @@ export interface LayoutBase extends AdaptableObject {
51
51
  */
52
52
  ColumnHeaders?: ColumnStringMap;
53
53
  /**
54
- * Whether to include aggFunc name in the Column header: e.g. 'sum(Price)' will just be 'Price'
54
+ * Whether to include aggFunc name in Column header: e.g. 'sum(Price)' becomes 'Price'
55
55
  */
56
56
  SuppressAggFuncInHeader?: boolean;
57
57
  /**
@@ -88,7 +88,7 @@ export interface TableLayout extends LayoutBase {
88
88
  */
89
89
  RowSummaries?: RowSummary[];
90
90
  /**
91
- * Columns showing aggregated values in Group Rows; 1st value in record is Column name, 2nd is either aggfunc (e.g. sum, avg etc.) or 'true' (to use default aggfunc)
91
+ * Columns showing aggregated values in Grouped Rows; a record of ColumnId and aggfunc (e.g. sum) or 'true' (to use default aggfunc)
92
92
  */
93
93
  TableAggregationColumns?: TableAggregationColumns;
94
94
  /**
@@ -4,6 +4,7 @@ import { AccessLevel } from '../../PredefinedConfig/Common/Entitlement';
4
4
  export declare function initPredefinedConfigWithUuids(predefinedConfig: PredefinedConfig): PredefinedConfig;
5
5
  export declare function getAccessLevelForObject(adaptableObject: AdaptableObject, moduleAccessLevel: AccessLevel): AccessLevel;
6
6
  export declare function addAdaptableObjectPrimitives<T extends AdaptableObject>(adaptableObject: T): T;
7
+ export declare function removeAdaptableObjectPrimitivesInline(target: any): any;
7
8
  export declare function removeAdaptableObjectPrimitives<T extends AdaptableObject>(adaptableObject: T): T;
8
9
  export declare function isAdaptableObject(object: unknown): object is AdaptableObject;
9
10
  export declare const AdaptableHelper: {
@@ -11,6 +12,7 @@ export declare const AdaptableHelper: {
11
12
  getAccessLevelForObject: typeof getAccessLevelForObject;
12
13
  addAdaptableObjectPrimitives: typeof addAdaptableObjectPrimitives;
13
14
  removeAdaptableObjectPrimitives: typeof removeAdaptableObjectPrimitives;
15
+ removeAdaptableObjectPrimitivesInline: typeof removeAdaptableObjectPrimitivesInline;
14
16
  isAdaptableObject: typeof isAdaptableObject;
15
17
  };
16
18
  export default AdaptableHelper;
@@ -43,6 +43,15 @@ export function addAdaptableObjectPrimitives(adaptableObject) {
43
43
  adaptableObject.AdaptableVersion = GET_CURRENT_VERSION();
44
44
  return adaptableObject;
45
45
  }
46
+ export function removeAdaptableObjectPrimitivesInline(target) {
47
+ if (!target || typeof target !== 'object') {
48
+ return target;
49
+ }
50
+ delete target.Source;
51
+ delete target.Uuid;
52
+ delete target.AdaptableVersion;
53
+ return target;
54
+ }
46
55
  export function removeAdaptableObjectPrimitives(adaptableObject) {
47
56
  const clonedObject = structuredClone(adaptableObject);
48
57
  const sanitiseObject = (object) => {
@@ -70,6 +79,7 @@ export const AdaptableHelper = {
70
79
  getAccessLevelForObject,
71
80
  addAdaptableObjectPrimitives,
72
81
  removeAdaptableObjectPrimitives,
82
+ removeAdaptableObjectPrimitivesInline,
73
83
  isAdaptableObject,
74
84
  };
75
85
  export default AdaptableHelper;
@@ -1,7 +1,7 @@
1
1
  import { IAdaptableService } from './Interface/IAdaptableService';
2
2
  import { AdaptableApi } from '../../Api/AdaptableApi';
3
3
  import { Fdc3Options } from '../../AdaptableOptions/Fdc3Options';
4
- import { AppIdentifier, DesktopAgent, IntentResolution } from '@finos/fdc3';
4
+ import { AppIdentifier, Channel, DesktopAgent, IntentResolution } from '@finos/fdc3';
5
5
  import { Context } from '@finos/fdc3/dist/context/ContextTypes';
6
6
  export declare class Fdc3Service implements IAdaptableService {
7
7
  private adaptableApi;
@@ -15,7 +15,7 @@ export declare class Fdc3Service implements IAdaptableService {
15
15
  destroy(): void;
16
16
  raiseIntent(intent: string, context: Context, app?: AppIdentifier): Promise<IntentResolution>;
17
17
  raiseIntentForContext(context: Context, app?: AppIdentifier): Promise<IntentResolution>;
18
- broadcast(context: Context): Promise<void>;
18
+ broadcast(context: Context, channel?: Channel): Promise<void>;
19
19
  private logFdc3Event;
20
20
  private logFdc3Error;
21
21
  private getFdc3Api;
@@ -131,7 +131,7 @@ export class Fdc3Service {
131
131
  this.logFdc3Error(error);
132
132
  }
133
133
  }
134
- broadcast(context) {
134
+ broadcast(context, channel) {
135
135
  if (!this.getDesktopAgent()) {
136
136
  return;
137
137
  }
@@ -144,7 +144,12 @@ export class Fdc3Service {
144
144
  context,
145
145
  };
146
146
  this.adaptableApi.eventApi.emit('Fdc3Message', payload);
147
- return this.getDesktopAgent().broadcast(context);
147
+ if (channel) {
148
+ return channel.broadcast(context);
149
+ }
150
+ else {
151
+ return this.getDesktopAgent().broadcast(context);
152
+ }
148
153
  }
149
154
  catch (error) {
150
155
  this.logFdc3Error(error);
@@ -5,10 +5,10 @@ export declare class ThemeService implements IThemeService {
5
5
  private unsubscribe;
6
6
  private styleSheetObject;
7
7
  constructor(api: AdaptableApi);
8
+ destroy(): void;
8
9
  subscribe(): void;
9
10
  onThemeChanged: () => void;
10
11
  applyNewThemeVariables(theme: AdaptableTheme): void;
11
- destroy(): void;
12
12
  showMissingThemeFiles(theme: AdaptableTheme): void;
13
13
  getDOMPrefferedColorScheme(): 'dark' | 'light';
14
14
  mapOsTheme(theme: AdaptableTheme | string): AdaptableTheme;
@@ -20,6 +20,11 @@ export class ThemeService {
20
20
  ];
21
21
  }
22
22
  }
23
+ destroy() {
24
+ this.api = null;
25
+ this.unsubscribe();
26
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets].filter((sheet) => sheet !== this.styleSheetObject);
27
+ }
23
28
  subscribe() {
24
29
  const themeChangedUnsubscribe = this.api.eventApi.on('ThemeChanged', this.onThemeChanged);
25
30
  const prefferedColorSchemeUnsubscribe = this.attachPrefferedColorSchemeListener();
@@ -44,11 +49,6 @@ export class ThemeService {
44
49
  str += '}';
45
50
  this.styleSheetObject.replaceSync(str);
46
51
  }
47
- destroy() {
48
- this.api = null;
49
- this.unsubscribe();
50
- document.adoptedStyleSheets = [...document.adoptedStyleSheets].filter((sheet) => sheet !== this.styleSheetObject);
51
- }
52
52
  showMissingThemeFiles(theme) {
53
53
  // run time defined theme
54
54
  // because it may be an empty theme
@@ -42,6 +42,47 @@ export const ConfigurationWizard = (props) => {
42
42
  delete newColumn.caption;
43
43
  return newColumn;
44
44
  });
45
+ const columnDefs = adaptableConfig.gridOptions.columnDefs;
46
+ // handle the layout creation
47
+ let Layouts = newAdaptableOptions.predefinedConfig?.Layout?.Layouts || [];
48
+ const NewLayout = {
49
+ TableColumns: columnDefs.map((col) => col.colId ?? col.field),
50
+ Name: 'Default Layout',
51
+ };
52
+ let currentLayoutName = NewLayout.Name;
53
+ let found = false;
54
+ if (!Layouts.length) {
55
+ // no layouts, make this the only one
56
+ Layouts = [NewLayout];
57
+ }
58
+ else {
59
+ Layouts = Layouts.map((layout) => {
60
+ if (found) {
61
+ return layout;
62
+ }
63
+ if (layout.TableColumns?.length === 0) {
64
+ // when finding the first empty layout
65
+ // set its column to be those of the new layout
66
+ found = true;
67
+ // and grab the name so we can put it in the Layout.CurrentLayout state
68
+ currentLayoutName = layout.Name;
69
+ layout = { ...layout };
70
+ layout.TableColumns = NewLayout.TableColumns;
71
+ }
72
+ return layout;
73
+ });
74
+ if (!found) {
75
+ Layouts.push(NewLayout);
76
+ }
77
+ }
78
+ newAdaptableOptions.predefinedConfig = {
79
+ ...newAdaptableOptions.predefinedConfig,
80
+ Layout: {
81
+ ...newAdaptableOptions.predefinedConfig.Layout,
82
+ Layouts: Layouts,
83
+ CurrentLayout: currentLayoutName,
84
+ },
85
+ };
45
86
  newAdaptableOptions.primaryKey = columnsHandle.current.getPrimaryKey();
46
87
  }
47
88
  const newAdaptableConfig = {
@@ -54,7 +54,10 @@ class DataChangeHistoryPopupComponent extends React.Component {
54
54
  this.props.api.dataChangeHistoryApi.clearDataChangeHistoryEntry(changeToBeUndone);
55
55
  }
56
56
  };
57
- const currentAgGridTheme = this.props.api.themeApi.getAgGridCurrentThemeName();
57
+ const agGridThemeMode = this.props.api.internalApi
58
+ .getAdaptableInstance()
59
+ .agGridThemeAdapter.getAgGridThemeMode();
60
+ const currentAgGridTheme = agGridThemeMode === 'legacy' ? this.props.api.themeApi.getAgGridCurrentThemeName() : '';
58
61
  return (React.createElement(PopupPanel, { headerText: this.props.moduleInfo.FriendlyName, glyphicon: this.props.moduleInfo.Glyph, infoLink: this.props.moduleInfo.HelpPage, infoLinkDisabled: !this.props.api.internalApi.isDocumentationLinksDisplayed() },
59
62
  React.createElement(Flex, { className: "ab-DataChangeHistoryPopup", flexDirection: "column", style: { height: '100%' } },
60
63
  React.createElement(Flex, { style: {
@@ -10,7 +10,9 @@ import { AdaptableObjectRow } from '../../Components/AdaptableObjectRow';
10
10
  import { PopupPanel } from '../../Components/Popups/AdaptablePopup/PopupPanel';
11
11
  import { AdaptableObjectsSummary } from './AdaptableObjectsSummary';
12
12
  import { ADAPTABLE_VERSION } from '../../../EnvVars';
13
- const version = ADAPTABLE_VERSION;
13
+ import { AG_GRID_VERSION } from '../../../agGrid/agGridModules';
14
+ const adaptableVersion = ADAPTABLE_VERSION;
15
+ const agGridVersion = AG_GRID_VERSION;
14
16
  export const GridInfoPopup = (props) => {
15
17
  const api = props.api;
16
18
  const CreateGridSummaries = (colItems) => {
@@ -33,7 +35,10 @@ export const GridInfoPopup = (props) => {
33
35
  : null;
34
36
  const selectedRowInfo = api.gridApi.getSelectedRowInfo();
35
37
  if (api.optionsApi.getUserInterfaceOptions()?.showAdapTableVersion) {
36
- returnRows.push(createReadOnlyColItem(colItems, 'AdapTable Version', version));
38
+ returnRows.push(createReadOnlyColItem(colItems, 'AdapTable Version', adaptableVersion));
39
+ }
40
+ if (api.optionsApi.getUserInterfaceOptions()?.showAgGridVersion) {
41
+ returnRows.push(createReadOnlyColItem(colItems, 'AG Grid Version', agGridVersion));
37
42
  }
38
43
  returnRows.push(createReadOnlyColItem(colItems, 'Sorted Columns', ArrayExtensions.IsNotNullOrEmpty(sorts) ? sorts.join('; ') : 'None'));
39
44
  returnRows.push(createReadOnlyColItem(colItems, 'Column Filters', columnFilterDescription));
@@ -29,6 +29,7 @@ import { RowFormService } from '../Utilities/Services/RowFormService';
29
29
  import { GridCellWithCount } from '../PredefinedConfig/Selection/GridCell';
30
30
  import { FlashingCellService } from '../Utilities/Services/FlashingCellService';
31
31
  import { AgGridExportAdapter } from './AgGridExportAdapter';
32
+ import { AgGridThemeAdapter } from './AgGridThemeAdapter';
32
33
  export type AdaptableLifecycleState = 'initial' | 'preprocessOptions' | 'initAdaptableState' | 'setupAgGrid' | 'initAgGrid' | 'agGridReady' | 'available' | 'ready' | 'preDestroyed';
33
34
  type RenderAgGridFrameworkComponentResult = false | GridApi;
34
35
  interface AdaptableInitInternalConfig<TData = any> {
@@ -70,6 +71,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
70
71
  agGridColumnAdapter: AgGridColumnAdapter;
71
72
  agGridMenuAdapter: AgGridMenuAdapter;
72
73
  agGridExportAdapter: AgGridExportAdapter;
74
+ agGridThemeAdapter: AgGridThemeAdapter;
73
75
  private DANGER_USE_GETTER_adaptableContainerElement;
74
76
  private DANGER_USE_GETTER_agGridContainerElement;
75
77
  api: AdaptableApi;
@@ -295,8 +297,6 @@ export declare class AdaptableAgGrid implements IAdaptable {
295
297
  isGridGroupingActive(): boolean;
296
298
  setAgGridQuickSearch(searchText: string): void;
297
299
  clearAgGridQuickSearch(): void;
298
- getAgGridCurrentThemeName(): string;
299
- private getAgGridLightThemeName;
300
300
  applyAdaptableTheme(theme: AdaptableTheme | string): void;
301
301
  setRowGroupColumns(columnIds: string[]): void;
302
302
  getAllGridColumns(): Column<any>[];