@adaptabletools/adaptable-cjs 20.2.0-canary.0 → 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/AdaptableOptions/FilterOptions.d.ts +4 -0
- package/src/AdaptableOptions/QuickSearchOptions.d.ts +3 -0
- package/src/AdaptableState/LayoutState.d.ts +29 -8
- package/src/AdaptableState/Selection/GridCell.d.ts +1 -0
- 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/NewScopeComponent.js +4 -4
- package/src/View/Components/SharedProps/ModuleViewPopupProps.d.ts +1 -1
- package/src/View/Layout/Wizard/sections/ColumnsSection.js +9 -7
- package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
- package/src/agGrid/AdaptableAgGrid.js +38 -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.cjs.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaptabletools/adaptable-cjs",
|
|
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
|
|
@@ -186,6 +186,10 @@ export interface InFilterValueInfo {
|
|
|
186
186
|
* How many times the item appears in the column
|
|
187
187
|
*/
|
|
188
188
|
count?: number;
|
|
189
|
+
/**
|
|
190
|
+
* How many times the item appears in the column in filtered rows
|
|
191
|
+
*/
|
|
192
|
+
visibleCount?: number;
|
|
189
193
|
/**
|
|
190
194
|
* Whether the item is currently visible in the Grid (i.e. in filtered rows)
|
|
191
195
|
*/
|
|
@@ -9,6 +9,9 @@ export interface QuickSearchOptions<TData = any> {
|
|
|
9
9
|
* @param quickSearchContext Contains quick search text and current Grid Cell
|
|
10
10
|
*/
|
|
11
11
|
isCellSearchable?: (quickSearchContext: QuickSearchContext) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Allows a different value to be used for a cell when searching (instead of its raw value)
|
|
14
|
+
*/
|
|
12
15
|
getCellSearchText?: (quickSearchContext: QuickSearchContext) => string | null;
|
|
13
16
|
/**
|
|
14
17
|
* Value to use as placeholder in QuickSearch controls (e.g. in Dashboard)
|
|
@@ -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
|
}
|
|
@@ -6,17 +6,22 @@ const ApiBase_1 = require("./ApiBase");
|
|
|
6
6
|
const PopupRedux = tslib_1.__importStar(require("../../Redux/ActionsReducers/PopupRedux"));
|
|
7
7
|
class SettingsPanelApiImpl extends ApiBase_1.ApiBase {
|
|
8
8
|
openSettingsPanel(moduleName) {
|
|
9
|
+
if (!moduleName) {
|
|
10
|
+
this.dispatchAction(PopupRedux.PopupShowScreen());
|
|
11
|
+
}
|
|
9
12
|
const moduleInfo = this.getAdaptableInternalApi()
|
|
10
13
|
.getModuleService()
|
|
11
14
|
.getModuleInfoByModule(moduleName);
|
|
12
15
|
if (!moduleInfo) {
|
|
13
|
-
this.
|
|
14
|
-
return;
|
|
16
|
+
this.logWarn(`${moduleName} module does not exist`);
|
|
15
17
|
}
|
|
16
|
-
this.dispatchAction(PopupRedux.PopupShowScreen(moduleName, moduleInfo
|
|
18
|
+
this.dispatchAction(PopupRedux.PopupShowScreen(moduleName, moduleInfo?.Popup));
|
|
17
19
|
}
|
|
18
20
|
openCustomSettingsPanel(name) {
|
|
19
21
|
this.dispatchAction(PopupRedux.PopupShowScreen(null, name));
|
|
20
22
|
}
|
|
23
|
+
closeSettingsPanel() {
|
|
24
|
+
this.dispatchAction(PopupRedux.PopupHideScreen());
|
|
25
|
+
}
|
|
21
26
|
}
|
|
22
27
|
exports.SettingsPanelApiImpl = SettingsPanelApiImpl;
|
|
@@ -10,16 +10,16 @@ class ChartingService {
|
|
|
10
10
|
}
|
|
11
11
|
onChartModelChange(models, eventType, params) {
|
|
12
12
|
const allChartDefinitions = this.api.chartingApi.getChartDefinitions();
|
|
13
|
-
const currentChartModel = models.find((model) => model
|
|
14
|
-
const currentChartDefinition = allChartDefinitions.find((chartDefinition) => chartDefinition.Model
|
|
13
|
+
const currentChartModel = models.find((model) => model?.chartId === params.chartId);
|
|
14
|
+
const currentChartDefinition = allChartDefinitions.find((chartDefinition) => chartDefinition.Model?.chartId === params.chartId);
|
|
15
15
|
switch (eventType) {
|
|
16
16
|
case 'chartCreated':
|
|
17
17
|
const createParams = params;
|
|
18
|
-
if (allChartDefinitions.some((chartDefinition) => chartDefinition.Model
|
|
18
|
+
if (allChartDefinitions.some((chartDefinition) => chartDefinition.Model?.chartId === createParams.chartId)) {
|
|
19
19
|
// chart already exists
|
|
20
20
|
}
|
|
21
21
|
else {
|
|
22
|
-
const chartModel = models.find((model) => model
|
|
22
|
+
const chartModel = models.find((model) => model?.chartId === createParams.chartId);
|
|
23
23
|
this.saveNewChart(chartModel);
|
|
24
24
|
}
|
|
25
25
|
break;
|
|
@@ -20,7 +20,7 @@ const useAgChartState = (chartDefinition) => {
|
|
|
20
20
|
}, [currentChartModels, chartDefinition]);
|
|
21
21
|
const closeAlreadyOpenedChartsInContainer = (element) => {
|
|
22
22
|
const chartModelAlreadyInChartContainer = currentChartModels.find((chartModel) => {
|
|
23
|
-
const chartRef = adaptable.api.chartingApi.getChartRef(chartModel
|
|
23
|
+
const chartRef = adaptable.api.chartingApi.getChartRef(chartModel?.chartId);
|
|
24
24
|
return chartRef && element.contains(chartRef.chartElement);
|
|
25
25
|
});
|
|
26
26
|
if (chartModelAlreadyInChartContainer) {
|
|
@@ -29,19 +29,19 @@ const isScopeValid = ({ Scope }) => {
|
|
|
29
29
|
};
|
|
30
30
|
exports.isScopeValid = isScopeValid;
|
|
31
31
|
const DATA_TYPES_MAP = {
|
|
32
|
-
|
|
32
|
+
date: {
|
|
33
33
|
label: 'Date',
|
|
34
34
|
value: 'date',
|
|
35
35
|
},
|
|
36
|
-
|
|
36
|
+
number: {
|
|
37
37
|
label: 'Number',
|
|
38
38
|
value: 'number',
|
|
39
39
|
},
|
|
40
|
-
|
|
40
|
+
text: {
|
|
41
41
|
label: 'Text',
|
|
42
42
|
value: 'text',
|
|
43
43
|
},
|
|
44
|
-
|
|
44
|
+
boolean: {
|
|
45
45
|
label: 'Boolean',
|
|
46
46
|
value: 'boolean',
|
|
47
47
|
},
|
|
@@ -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
|
};
|
|
@@ -200,14 +200,16 @@ const ColumnsSection = (props) => {
|
|
|
200
200
|
const adaptable = (0, AdaptableContext_1.useAdaptable)();
|
|
201
201
|
const { data: layout } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
|
|
202
202
|
const [searchInputValue, setSearchInputValue] = React.useState('');
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
const allColumns = adaptable.api.columnApi
|
|
204
|
+
.getUIAvailableColumns()
|
|
205
|
+
.filter((col) => {
|
|
206
|
+
// since the "Row Groups" section of the editor can determine a change
|
|
207
|
+
// which is not reflected into AG Grid until we hit finish
|
|
208
|
+
// so we only rely on non-generated columns, which are the same
|
|
209
209
|
return !col.isGeneratedRowGroupColumn;
|
|
210
|
-
})
|
|
210
|
+
})
|
|
211
|
+
// if the current Layout is a PivotLayout, then we also filter out current Pivot Result Columns
|
|
212
|
+
.filter((col) => !col.isGeneratedPivotResultColumn);
|
|
211
213
|
// however, changes in RowGroupedColumns done in the previous step
|
|
212
214
|
// are reflected into the layout, so we use the latest layout.RowGroupedColumns
|
|
213
215
|
// to create new columns
|
|
@@ -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;
|
|
@@ -1406,11 +1406,25 @@ You need to define at least one Layout!`);
|
|
|
1406
1406
|
];
|
|
1407
1407
|
const chartingModule = this.ModuleService.getModuleById('Charting');
|
|
1408
1408
|
if (chartingModule.isModuleAvailable()) {
|
|
1409
|
-
|
|
1410
|
-
|
|
1409
|
+
// We need to break the loop of charting changes for 'chartOptionsChanged', which is triggered by the subsequent agGridApi.updateChart(...)
|
|
1410
|
+
// see #ag_grid_update_chart_loop
|
|
1411
|
+
let lastChartOptionsChangePayload = '';
|
|
1412
|
+
this.listenerGlobalChartingChanges = (type, params) => {
|
|
1413
|
+
if (eventsThatTriggerChartingChanges.includes(type)) {
|
|
1414
|
+
if (type === 'chartOptionsChanged') {
|
|
1415
|
+
// Exclude api and context
|
|
1416
|
+
const { api, context, ...sanitizedParams } = params || {};
|
|
1417
|
+
const eventPayload = JSON.stringify(sanitizedParams);
|
|
1418
|
+
if (eventPayload === lastChartOptionsChangePayload) {
|
|
1419
|
+
// this is a loop, so we ignore it
|
|
1420
|
+
return;
|
|
1421
|
+
}
|
|
1422
|
+
lastChartOptionsChangePayload = eventPayload;
|
|
1423
|
+
}
|
|
1411
1424
|
this.ChartingService.onChartModelChange(this.getChartModels(), type, params);
|
|
1412
1425
|
}
|
|
1413
|
-
}
|
|
1426
|
+
};
|
|
1427
|
+
this.agGridAdapter.getAgGridApi().addGlobalListener(this.listenerGlobalChartingChanges);
|
|
1414
1428
|
}
|
|
1415
1429
|
/**
|
|
1416
1430
|
* Row and Cell listeners created in 2020
|
|
@@ -2252,6 +2266,9 @@ You need to define at least one Layout!`);
|
|
|
2252
2266
|
get visible() {
|
|
2253
2267
|
return gridCell.visible;
|
|
2254
2268
|
},
|
|
2269
|
+
get visibleCount() {
|
|
2270
|
+
return gridCell.visibleCount;
|
|
2271
|
+
},
|
|
2255
2272
|
};
|
|
2256
2273
|
});
|
|
2257
2274
|
return result;
|
|
@@ -2266,6 +2283,9 @@ You need to define at least one Layout!`);
|
|
|
2266
2283
|
get visible() {
|
|
2267
2284
|
return gridCell.visible;
|
|
2268
2285
|
},
|
|
2286
|
+
get visibleCount() {
|
|
2287
|
+
return gridCell.visibleCount;
|
|
2288
|
+
},
|
|
2269
2289
|
};
|
|
2270
2290
|
});
|
|
2271
2291
|
return result;
|
|
@@ -2434,6 +2454,11 @@ You need to define at least one Layout!`);
|
|
|
2434
2454
|
return (rowNodesWithSameCellValue.findIndex((pk) => self.isRowNodeAvailableAfterFiltering(pk) === true) !== -1);
|
|
2435
2455
|
},
|
|
2436
2456
|
});
|
|
2457
|
+
Object.defineProperty(cellWithCount, 'visibleCount', {
|
|
2458
|
+
get: () => {
|
|
2459
|
+
return rowNodesWithSameCellValue.filter((pk) => self.isRowNodeAvailableAfterFiltering(pk) === true).length;
|
|
2460
|
+
},
|
|
2461
|
+
});
|
|
2437
2462
|
result.push(cellWithCount);
|
|
2438
2463
|
});
|
|
2439
2464
|
return result;
|
|
@@ -2698,6 +2723,10 @@ You need to define at least one Layout!`);
|
|
|
2698
2723
|
return chartRef;
|
|
2699
2724
|
}
|
|
2700
2725
|
updateChart(chart) {
|
|
2726
|
+
if (!chart.Model) {
|
|
2727
|
+
this.logger.consoleError(`Chart definition must have a Model property to be updated: ${chart.Name}`);
|
|
2728
|
+
return;
|
|
2729
|
+
}
|
|
2701
2730
|
const upgradableProperties = {
|
|
2702
2731
|
// Only Range charts are supported to be created at run time
|
|
2703
2732
|
// the other two are pivot & cross-filter
|
|
@@ -2707,6 +2736,7 @@ You need to define at least one Layout!`);
|
|
|
2707
2736
|
suppressChartRanges: Boolean(chart.Model.suppressChartRanges),
|
|
2708
2737
|
aggFunc: chart.Model.aggFunc,
|
|
2709
2738
|
};
|
|
2739
|
+
// see also #ag_grid_update_chart_loop
|
|
2710
2740
|
this.agGridAdapter.getAgGridApi().updateChart(upgradableProperties);
|
|
2711
2741
|
}
|
|
2712
2742
|
getChartModels() {
|
|
@@ -2923,6 +2953,9 @@ You need to define at least one Layout!`);
|
|
|
2923
2953
|
agGridApi.removeEventListener('columnGroupOpened', this.listenerColumnGroupOpened);
|
|
2924
2954
|
agGridApi.removeEventListener('sortChanged', this.listenerSortChanged);
|
|
2925
2955
|
agGridApi.removeGlobalListener(this.listenerGlobalSetRowSelection);
|
|
2956
|
+
if (this.listenerGlobalChartingChanges) {
|
|
2957
|
+
this.agGridAdapter.getAgGridApi().removeGlobalListener(this.listenerGlobalChartingChanges);
|
|
2958
|
+
}
|
|
2926
2959
|
this.listenerFirstDataRendered = null;
|
|
2927
2960
|
this.listenerPivotChanged = null;
|
|
2928
2961
|
this.listenerColumnGroupOpened = null;
|
|
@@ -3000,7 +3033,9 @@ You need to define at least one Layout!`);
|
|
|
3000
3033
|
}
|
|
3001
3034
|
this.DANGER_USE_GETTER_adaptableContainerElement = null;
|
|
3002
3035
|
this.DANGER_USE_GETTER_agGridContainerElement = null;
|
|
3036
|
+
this.debouncedSetSelectedCells?.cancel?.();
|
|
3003
3037
|
this.debouncedSetSelectedCells = null;
|
|
3038
|
+
this.debouncedSetSelectedRows?.cancel?.();
|
|
3004
3039
|
this.debouncedSetSelectedRows = null;
|
|
3005
3040
|
this.adaptableStore?.destroy();
|
|
3006
3041
|
this.adaptableStore = null;
|
|
@@ -6,7 +6,8 @@ const React = tslib_1.__importStar(require("react"));
|
|
|
6
6
|
const uuid_1 = require("../utils/uuid");
|
|
7
7
|
const setZIndexMap = {};
|
|
8
8
|
const zIndexMap = [];
|
|
9
|
-
|
|
9
|
+
// starts with 3000, to be above the default zIndex of the Modal component
|
|
10
|
+
const BASE_Z_INDEX = 3000;
|
|
10
11
|
/**
|
|
11
12
|
* Used to facilitate the stacking between multiple opened windows.
|
|
12
13
|
* When calling 'bringToFront' brings caller to top.
|
package/src/env.js
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.default = {
|
|
4
4
|
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" || '',
|
|
5
|
-
PUBLISH_TIMESTAMP:
|
|
6
|
-
VERSION: "20.2.0
|
|
5
|
+
PUBLISH_TIMESTAMP: 1749810340250 || Date.now(),
|
|
6
|
+
VERSION: "20.2.0" || '--current-version--',
|
|
7
7
|
};
|