@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 +1 -1
- package/src/Api/Fdc3Api.d.ts +5 -3
- package/src/Api/Implementation/Fdc3ApiImpl.d.ts +3 -3
- package/src/Api/Implementation/Fdc3ApiImpl.js +4 -4
- package/src/Api/Implementation/LayoutHelpers.js +8 -27
- package/src/Utilities/Helpers/AdaptableHelper.d.ts +2 -0
- package/src/Utilities/Helpers/AdaptableHelper.js +10 -0
- package/src/Utilities/Services/Fdc3Service.d.ts +2 -2
- package/src/Utilities/Services/Fdc3Service.js +7 -2
- package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ConfigurationWizard.js +41 -0
- package/src/agGrid/AdaptableAgGrid.js +4 -0
- package/src/agGrid/AgGridAdapter.js +1 -1
- package/src/agGrid/AgGridColumnAdapter.js +0 -3
- package/src/env.js +2 -2
- 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.
|
|
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",
|
package/src/Api/Fdc3Api.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
39
|
-
delete layout.ColumnHeaders.Uuid;
|
|
40
|
-
delete layout.ColumnHeaders.AdaptableVersion;
|
|
29
|
+
removeAdaptableObjectPrimitivesInline(layout.ColumnHeaders);
|
|
41
30
|
}
|
|
42
31
|
if (layout.ColumnVisibility) {
|
|
43
|
-
|
|
44
|
-
delete layout.ColumnVisibility.Uuid;
|
|
45
|
-
delete layout.ColumnVisibility.AdaptableVersion;
|
|
32
|
+
removeAdaptableObjectPrimitivesInline(layout.ColumnVisibility);
|
|
46
33
|
}
|
|
47
34
|
if (layout.ColumnWidths) {
|
|
48
|
-
|
|
49
|
-
delete layout.ColumnWidths.Uuid;
|
|
50
|
-
delete layout.ColumnWidths.AdaptableVersion;
|
|
35
|
+
removeAdaptableObjectPrimitivesInline(layout.ColumnWidths);
|
|
51
36
|
}
|
|
52
37
|
if (layout.RowGroupValues) {
|
|
53
|
-
|
|
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
|
-
|
|
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:
|
|
4
|
-
VERSION: "20.0.0-canary.
|
|
3
|
+
PUBLISH_TIMESTAMP: 1741253338614 || Date.now(),
|
|
4
|
+
VERSION: "20.0.0-canary.6" || '--current-version--',
|
|
5
5
|
};
|