@adaptabletools/adaptable 20.0.0-canary.5 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "20.0.0-canary.5",
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",
@@ -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 { 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);
@@ -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 = {
@@ -2961,6 +2961,10 @@ You need to define at least one Layout!`);
2961
2961
  };
2962
2962
  this.agGridColumnAdapter.setupColumnHeader(colSetupInfo);
2963
2963
  });
2964
+ // need to refresh the header,
2965
+ // as the Layout.ColumnHeaders state property is not implemented in the LayoutManager
2966
+ // and is specific to Adaptable, therefore we need to refresh it manually
2967
+ this.refreshHeader();
2964
2968
  const layoutModel = layoutStateToLayoutModel(layout);
2965
2969
  this.layoutManager?.setLayout(layoutModel, {
2966
2970
  skipApplyRowGroupsExpandedState: !shouldUpdateExpandState,
@@ -96,7 +96,7 @@ export class AgGridAdapter {
96
96
  // `context`
97
97
  const passedContext = options.context;
98
98
  if (passedContext) {
99
- passedContext['__adaptable'] = self;
99
+ passedContext['__adaptable'] = self._adaptableInstance;
100
100
  passedContext['adaptableApi'] = self.adaptableApi;
101
101
  }
102
102
  // we mutated the options array, so it's OK to use the 'arguments' object
@@ -387,9 +387,6 @@ export class AgGridColumnAdapter {
387
387
  if (layoutCustomHeader) {
388
388
  resultHeaderName = layoutCustomHeader;
389
389
  }
390
- // required here for the initial layout rendering
391
- // Removed by JW, 3 october 2023; i don't think we need it and it overrides stuff unnecessarily
392
- abColumn.friendlyName = resultHeaderName;
393
390
  return resultHeaderName;
394
391
  });
395
392
  const newColumnHeader = col?.getColDef()?.headerName;
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: 1741156623359 || Date.now(),
4
- VERSION: "20.0.0-canary.5" || '--current-version--',
3
+ PUBLISH_TIMESTAMP: 1741253338614 || Date.now(),
4
+ VERSION: "20.0.0-canary.6" || '--current-version--',
5
5
  };