@adaptabletools/adaptable 20.2.0-canary.1 → 20.2.0
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/AdaptableOptions/ExportOptions.d.ts +3 -3
- package/src/AdaptableState/LayoutState.d.ts +29 -8
- package/src/Api/Implementation/SettingsPanelApiImpl.d.ts +1 -0
- package/src/Api/Implementation/SettingsPanelApiImpl.js +8 -3
- package/src/Api/SettingsPanelApi.d.ts +4 -0
- package/src/Utilities/Services/ChartingService.js +4 -4
- package/src/View/Charting/useAgChartState.js +1 -1
- package/src/View/Components/SharedProps/ModuleViewPopupProps.d.ts +1 -1
- package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
- package/src/agGrid/AdaptableAgGrid.js +27 -3
- package/src/components/WindowModal/useStacking.js +2 -1
- package/src/env.js +2 -2
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/tsconfig.esm.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaptabletools/adaptable",
|
|
3
|
-
"version": "20.2.0
|
|
3
|
+
"version": "20.2.0",
|
|
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",
|
|
@@ -26,21 +26,21 @@ export interface ExportOptions<TData = any> {
|
|
|
26
26
|
*/
|
|
27
27
|
customDestinations?: CustomDestination[];
|
|
28
28
|
/**
|
|
29
|
-
* System Reports to use; leave
|
|
29
|
+
* System Reports to use; leave unset for all, empty array for none
|
|
30
30
|
*
|
|
31
31
|
* @defaultValue 'All Data', 'Current Layout', 'Selected Data',
|
|
32
32
|
* @gridInfoItem
|
|
33
33
|
*/
|
|
34
34
|
systemReportNames?: SystemReportName[] | ((context: SystemReportNamesContext) => SystemReportName[]);
|
|
35
35
|
/**
|
|
36
|
-
* System Report Formats to use; leave
|
|
36
|
+
* System Report Formats to use; leave unset for all, empty array for none
|
|
37
37
|
*
|
|
38
38
|
* @defaultValue 'Excel', 'VisualExcel', 'CSV', 'JSON'
|
|
39
39
|
* @gridInfoItem
|
|
40
40
|
*/
|
|
41
41
|
systemReportFormats?: SystemReportFormat[] | ((context: SystemReportFormatsContext) => SystemReportFormat[]);
|
|
42
42
|
/**
|
|
43
|
-
* Export destinations to use; leave
|
|
43
|
+
* Export destinations to use; leave unset for all, empty array for none
|
|
44
44
|
*
|
|
45
45
|
* @defaultValue 'Download', 'Clipboard'
|
|
46
46
|
* @gridInfoItem
|
|
@@ -46,6 +46,9 @@ export interface LayoutBase extends AdaptableObject {
|
|
|
46
46
|
* Defines which Row Groups are expanded / collapsed
|
|
47
47
|
*/
|
|
48
48
|
RowGroupValues?: RowGroupValues;
|
|
49
|
+
/**
|
|
50
|
+
* Defines which Column Groups are expanded / collapsed
|
|
51
|
+
*/
|
|
49
52
|
ColumnGroupValues?: ColumnGroupValues;
|
|
50
53
|
/**
|
|
51
54
|
* Set of custom header names for some (or all) Columns
|
|
@@ -172,25 +175,43 @@ export interface PivotLayout extends LayoutBase {
|
|
|
172
175
|
*/
|
|
173
176
|
export type PivotTotalPosition = 'before' | 'after' | boolean;
|
|
174
177
|
/**
|
|
175
|
-
* Manages
|
|
178
|
+
* Manages Row Group expand / collapse behaviour, including exceptions
|
|
176
179
|
*/
|
|
177
180
|
export type RowGroupValues = {
|
|
178
181
|
RowGroupDefaultBehavior: 'always-expanded' | 'always-collapsed';
|
|
179
182
|
} | RowGroupValuesWithExceptionKeys;
|
|
183
|
+
/**
|
|
184
|
+
* Defines which Row Groups are expanded or collapsed
|
|
185
|
+
*/
|
|
186
|
+
export type RowGroupValuesWithExceptionKeys = {
|
|
187
|
+
/**
|
|
188
|
+
* Default behaviour for Row Groups: 'expanded' or 'collapsed';
|
|
189
|
+
*/
|
|
190
|
+
RowGroupDefaultBehavior: 'expanded' | 'collapsed';
|
|
191
|
+
/**
|
|
192
|
+
* Keys of Row Groups which are exceptions to default RowGroupDefaultBehavior - these are actual values in Row Grouped Column
|
|
193
|
+
*/
|
|
194
|
+
ExceptionGroupKeys?: any[][];
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Manages Column Group expand / collapse behaviour, including exceptions
|
|
198
|
+
*/
|
|
180
199
|
export type ColumnGroupValues = {
|
|
181
200
|
ColumnGroupDefaultBehavior: 'always-expanded' | 'always-collapsed';
|
|
182
201
|
} | ColumnGroupValuesWithExceptionKeys;
|
|
202
|
+
/**
|
|
203
|
+
* Defines which Column Groups are expanded or collapsed
|
|
204
|
+
*/
|
|
183
205
|
export type ColumnGroupValuesWithExceptionKeys = {
|
|
206
|
+
/**
|
|
207
|
+
* Default behaviour for Column Groups: 'expanded' or 'collapsed';
|
|
208
|
+
*/
|
|
184
209
|
ColumnGroupDefaultBehavior: 'expanded' | 'collapsed';
|
|
210
|
+
/**
|
|
211
|
+
* Keys of Column Groups which are exceptions to default ColumnGroupDefaultBehavior; key maps to groupId property in ColGroupDef
|
|
212
|
+
*/
|
|
185
213
|
ExceptionGroupKeys?: any[];
|
|
186
214
|
};
|
|
187
|
-
/**
|
|
188
|
-
* Defines which Row Group Values are expanded or collapsed
|
|
189
|
-
*/
|
|
190
|
-
export type RowGroupValuesWithExceptionKeys = {
|
|
191
|
-
RowGroupDefaultBehavior: 'expanded' | 'collapsed';
|
|
192
|
-
ExceptionGroupKeys?: any[][];
|
|
193
|
-
};
|
|
194
215
|
/**
|
|
195
216
|
* Defines a map of Columns with a String value
|
|
196
217
|
*/
|
|
@@ -4,4 +4,5 @@ import { AdaptableModule } from '../../../types';
|
|
|
4
4
|
export declare class SettingsPanelApiImpl extends ApiBase implements SettingsPanelApi {
|
|
5
5
|
openSettingsPanel(moduleName?: AdaptableModule): void;
|
|
6
6
|
openCustomSettingsPanel(name: string): void;
|
|
7
|
+
closeSettingsPanel(): void;
|
|
7
8
|
}
|
|
@@ -2,16 +2,21 @@ import { ApiBase } from './ApiBase';
|
|
|
2
2
|
import * as PopupRedux from '../../Redux/ActionsReducers/PopupRedux';
|
|
3
3
|
export class SettingsPanelApiImpl extends ApiBase {
|
|
4
4
|
openSettingsPanel(moduleName) {
|
|
5
|
+
if (!moduleName) {
|
|
6
|
+
this.dispatchAction(PopupRedux.PopupShowScreen());
|
|
7
|
+
}
|
|
5
8
|
const moduleInfo = this.getAdaptableInternalApi()
|
|
6
9
|
.getModuleService()
|
|
7
10
|
.getModuleInfoByModule(moduleName);
|
|
8
11
|
if (!moduleInfo) {
|
|
9
|
-
this.
|
|
10
|
-
return;
|
|
12
|
+
this.logWarn(`${moduleName} module does not exist`);
|
|
11
13
|
}
|
|
12
|
-
this.dispatchAction(PopupRedux.PopupShowScreen(moduleName, moduleInfo
|
|
14
|
+
this.dispatchAction(PopupRedux.PopupShowScreen(moduleName, moduleInfo?.Popup));
|
|
13
15
|
}
|
|
14
16
|
openCustomSettingsPanel(name) {
|
|
15
17
|
this.dispatchAction(PopupRedux.PopupShowScreen(null, name));
|
|
16
18
|
}
|
|
19
|
+
closeSettingsPanel() {
|
|
20
|
+
this.dispatchAction(PopupRedux.PopupHideScreen());
|
|
21
|
+
}
|
|
17
22
|
}
|
|
@@ -6,16 +6,16 @@ export class ChartingService {
|
|
|
6
6
|
}
|
|
7
7
|
onChartModelChange(models, eventType, params) {
|
|
8
8
|
const allChartDefinitions = this.api.chartingApi.getChartDefinitions();
|
|
9
|
-
const currentChartModel = models.find((model) => model
|
|
10
|
-
const currentChartDefinition = allChartDefinitions.find((chartDefinition) => chartDefinition.Model
|
|
9
|
+
const currentChartModel = models.find((model) => model?.chartId === params.chartId);
|
|
10
|
+
const currentChartDefinition = allChartDefinitions.find((chartDefinition) => chartDefinition.Model?.chartId === params.chartId);
|
|
11
11
|
switch (eventType) {
|
|
12
12
|
case 'chartCreated':
|
|
13
13
|
const createParams = params;
|
|
14
|
-
if (allChartDefinitions.some((chartDefinition) => chartDefinition.Model
|
|
14
|
+
if (allChartDefinitions.some((chartDefinition) => chartDefinition.Model?.chartId === createParams.chartId)) {
|
|
15
15
|
// chart already exists
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
const chartModel = models.find((model) => model
|
|
18
|
+
const chartModel = models.find((model) => model?.chartId === createParams.chartId);
|
|
19
19
|
this.saveNewChart(chartModel);
|
|
20
20
|
}
|
|
21
21
|
break;
|
|
@@ -16,7 +16,7 @@ export const useAgChartState = (chartDefinition) => {
|
|
|
16
16
|
}, [currentChartModels, chartDefinition]);
|
|
17
17
|
const closeAlreadyOpenedChartsInContainer = (element) => {
|
|
18
18
|
const chartModelAlreadyInChartContainer = currentChartModels.find((chartModel) => {
|
|
19
|
-
const chartRef = adaptable.api.chartingApi.getChartRef(chartModel
|
|
19
|
+
const chartRef = adaptable.api.chartingApi.getChartRef(chartModel?.chartId);
|
|
20
20
|
return chartRef && element.contains(chartRef.chartElement);
|
|
21
21
|
});
|
|
22
22
|
if (chartModelAlreadyInChartContainer) {
|
|
@@ -18,7 +18,7 @@ export interface ModuleParams {
|
|
|
18
18
|
value?: any;
|
|
19
19
|
primaryKeyValues?: any[];
|
|
20
20
|
maxWidth?: number;
|
|
21
|
-
source: 'Toolbar' | 'ModuleMenu' | 'ColumnMenu' | 'ContextMenu' | 'ModuleButton' | 'Other';
|
|
21
|
+
source: 'Toolbar' | 'ModuleMenu' | 'ColumnMenu' | 'ContextMenu' | 'ModuleButton' | 'Other' | 'Api';
|
|
22
22
|
config?: {
|
|
23
23
|
[key: string]: any;
|
|
24
24
|
};
|
|
@@ -101,6 +101,7 @@ export declare class AdaptableAgGrid implements IAdaptable {
|
|
|
101
101
|
private agGridListenerMouseEnter;
|
|
102
102
|
private agGridListenerMouseLeave;
|
|
103
103
|
private listenerGlobalSetRowSelection;
|
|
104
|
+
private listenerGlobalChartingChanges;
|
|
104
105
|
private listenerCellEditingStarted;
|
|
105
106
|
private listenerFirstDataRendered;
|
|
106
107
|
private listenerPivotChanged;
|
|
@@ -1402,11 +1402,25 @@ You need to define at least one Layout!`);
|
|
|
1402
1402
|
];
|
|
1403
1403
|
const chartingModule = this.ModuleService.getModuleById('Charting');
|
|
1404
1404
|
if (chartingModule.isModuleAvailable()) {
|
|
1405
|
-
|
|
1406
|
-
|
|
1405
|
+
// We need to break the loop of charting changes for 'chartOptionsChanged', which is triggered by the subsequent agGridApi.updateChart(...)
|
|
1406
|
+
// see #ag_grid_update_chart_loop
|
|
1407
|
+
let lastChartOptionsChangePayload = '';
|
|
1408
|
+
this.listenerGlobalChartingChanges = (type, params) => {
|
|
1409
|
+
if (eventsThatTriggerChartingChanges.includes(type)) {
|
|
1410
|
+
if (type === 'chartOptionsChanged') {
|
|
1411
|
+
// Exclude api and context
|
|
1412
|
+
const { api, context, ...sanitizedParams } = params || {};
|
|
1413
|
+
const eventPayload = JSON.stringify(sanitizedParams);
|
|
1414
|
+
if (eventPayload === lastChartOptionsChangePayload) {
|
|
1415
|
+
// this is a loop, so we ignore it
|
|
1416
|
+
return;
|
|
1417
|
+
}
|
|
1418
|
+
lastChartOptionsChangePayload = eventPayload;
|
|
1419
|
+
}
|
|
1407
1420
|
this.ChartingService.onChartModelChange(this.getChartModels(), type, params);
|
|
1408
1421
|
}
|
|
1409
|
-
}
|
|
1422
|
+
};
|
|
1423
|
+
this.agGridAdapter.getAgGridApi().addGlobalListener(this.listenerGlobalChartingChanges);
|
|
1410
1424
|
}
|
|
1411
1425
|
/**
|
|
1412
1426
|
* Row and Cell listeners created in 2020
|
|
@@ -2705,6 +2719,10 @@ You need to define at least one Layout!`);
|
|
|
2705
2719
|
return chartRef;
|
|
2706
2720
|
}
|
|
2707
2721
|
updateChart(chart) {
|
|
2722
|
+
if (!chart.Model) {
|
|
2723
|
+
this.logger.consoleError(`Chart definition must have a Model property to be updated: ${chart.Name}`);
|
|
2724
|
+
return;
|
|
2725
|
+
}
|
|
2708
2726
|
const upgradableProperties = {
|
|
2709
2727
|
// Only Range charts are supported to be created at run time
|
|
2710
2728
|
// the other two are pivot & cross-filter
|
|
@@ -2714,6 +2732,7 @@ You need to define at least one Layout!`);
|
|
|
2714
2732
|
suppressChartRanges: Boolean(chart.Model.suppressChartRanges),
|
|
2715
2733
|
aggFunc: chart.Model.aggFunc,
|
|
2716
2734
|
};
|
|
2735
|
+
// see also #ag_grid_update_chart_loop
|
|
2717
2736
|
this.agGridAdapter.getAgGridApi().updateChart(upgradableProperties);
|
|
2718
2737
|
}
|
|
2719
2738
|
getChartModels() {
|
|
@@ -2930,6 +2949,9 @@ You need to define at least one Layout!`);
|
|
|
2930
2949
|
agGridApi.removeEventListener('columnGroupOpened', this.listenerColumnGroupOpened);
|
|
2931
2950
|
agGridApi.removeEventListener('sortChanged', this.listenerSortChanged);
|
|
2932
2951
|
agGridApi.removeGlobalListener(this.listenerGlobalSetRowSelection);
|
|
2952
|
+
if (this.listenerGlobalChartingChanges) {
|
|
2953
|
+
this.agGridAdapter.getAgGridApi().removeGlobalListener(this.listenerGlobalChartingChanges);
|
|
2954
|
+
}
|
|
2933
2955
|
this.listenerFirstDataRendered = null;
|
|
2934
2956
|
this.listenerPivotChanged = null;
|
|
2935
2957
|
this.listenerColumnGroupOpened = null;
|
|
@@ -3007,7 +3029,9 @@ You need to define at least one Layout!`);
|
|
|
3007
3029
|
}
|
|
3008
3030
|
this.DANGER_USE_GETTER_adaptableContainerElement = null;
|
|
3009
3031
|
this.DANGER_USE_GETTER_agGridContainerElement = null;
|
|
3032
|
+
this.debouncedSetSelectedCells?.cancel?.();
|
|
3010
3033
|
this.debouncedSetSelectedCells = null;
|
|
3034
|
+
this.debouncedSetSelectedRows?.cancel?.();
|
|
3011
3035
|
this.debouncedSetSelectedRows = null;
|
|
3012
3036
|
this.adaptableStore?.destroy();
|
|
3013
3037
|
this.adaptableStore = null;
|
|
@@ -2,7 +2,8 @@ import * as React from 'react';
|
|
|
2
2
|
import { createUuid } from '../utils/uuid';
|
|
3
3
|
const setZIndexMap = {};
|
|
4
4
|
const zIndexMap = [];
|
|
5
|
-
|
|
5
|
+
// starts with 3000, to be above the default zIndex of the Modal component
|
|
6
|
+
const BASE_Z_INDEX = 3000;
|
|
6
7
|
/**
|
|
7
8
|
* Used to facilitate the stacking between multiple opened windows.
|
|
8
9
|
* When calling 'bringToFront' brings caller to top.
|
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.2.0
|
|
3
|
+
PUBLISH_TIMESTAMP: 1749810312509 || Date.now(),
|
|
4
|
+
VERSION: "20.2.0" || '--current-version--',
|
|
5
5
|
};
|