@adaptabletools/adaptable 16.1.1-canary.1 → 16.2.0-canary.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/base.css +5 -0
- package/base.css.map +1 -1
- package/bundle.cjs.js +195 -197
- package/index.css +9 -0
- package/index.css.map +1 -1
- package/package.json +2 -2
- package/publishTimestamp.d.ts +1 -1
- package/publishTimestamp.js +1 -1
- package/src/AdaptableOptions/AdaptableOptions.d.ts +1 -1
- package/src/Api/Internal/AlertInternalApi.d.ts +3 -2
- package/src/Api/Internal/AlertInternalApi.js +35 -5
- package/src/Api/Internal/GridInternalApi.js +1 -0
- package/src/PredefinedConfig/Common/Fdc3Intent.d.ts +4 -4
- package/src/PredefinedConfig/Common/Fdc3Intent.js +4 -19
- package/src/PredefinedConfig/DashboardState.d.ts +4 -0
- package/src/Redux/ActionsReducers/DashboardRedux.d.ts +11 -0
- package/src/Redux/ActionsReducers/DashboardRedux.js +14 -1
- package/src/Strategy/AlertModule.js +14 -31
- package/src/Utilities/Defaults/DefaultAdaptableOptions.js +3 -1
- package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.d.ts +2 -0
- package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.js +14 -2
- package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.d.ts +1 -1
- package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.js +93 -1
- package/src/Utilities/Services/AlertService.js +13 -6
- package/src/Utilities/Services/DataService.d.ts +4 -1
- package/src/Utilities/Services/DataService.js +10 -5
- package/src/Utilities/Services/Interface/IAlertService.d.ts +12 -3
- package/src/Utilities/Services/Interface/IAlertService.js +9 -0
- package/src/Utilities/Services/Interface/IDataService.d.ts +3 -0
- package/src/Utilities/Services/Interface/IQueryLanguageService.d.ts +2 -1
- package/src/Utilities/Services/QueryLanguageService.d.ts +2 -2
- package/src/View/Components/Selectors/ColumnSelector.js +0 -5
- package/src/View/Dashboard/{CustomToolbarWrapper.d.ts → CustomToolbar.d.ts} +1 -0
- package/src/View/Dashboard/{CustomToolbarWrapper.js → CustomToolbar.js} +36 -33
- package/src/View/Dashboard/Dashboard.d.ts +2 -2
- package/src/View/Dashboard/Dashboard.js +20 -24
- package/src/View/Dashboard/DashboardPopup.d.ts +2 -1
- package/src/View/Dashboard/DashboardPopup.js +7 -3
- package/src/View/Dashboard/DashboardToolbarFactory.d.ts +7 -0
- package/src/View/Dashboard/DashboardToolbarFactory.js +46 -0
- package/src/View/Dashboard/PinnedDashboard.d.ts +5 -0
- package/src/View/Dashboard/PinnedDashboard.js +21 -0
- package/src/View/Dashboard/PinnedToolbarsSelector.d.ts +5 -0
- package/src/View/Dashboard/PinnedToolbarsSelector.js +52 -0
- package/src/View/DataImport/DataImportWizard/DataImportWizard.d.ts +6 -1
- package/src/View/DataImport/DataImportWizard/DataImportWizard.js +71 -9
- package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.d.ts +8 -0
- package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +119 -0
- package/src/View/DataImport/DataImportWizard/sections/DataPreview.d.ts +2 -1
- package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +13 -17
- package/src/View/DataImport/DataImportWizard/sections/ValidationSection.d.ts +2 -1
- package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +1 -1
- package/src/View/QuickSearch/QuickSearchInput.js +1 -1
- package/src/components/Dashboard/Dashboard.d.ts +1 -0
- package/src/components/Dashboard/Dashboard.js +2 -1
- package/src/components/DragAndDropContext/ModuleManager.js +1 -1
- package/src/components/DragAndDropContext/TabList.js +1 -1
- package/src/components/ExpressionEditor/editorButtonsObservable.js +5 -0
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/parser/src/index.js +4 -1
- package/src/parser/src/tokenizer.js +5 -2
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -7,7 +7,6 @@ const SystemRedux = tslib_1.__importStar(require("../Redux/ActionsReducers/Syste
|
|
|
7
7
|
const ModuleConstants = tslib_1.__importStar(require("../Utilities/Constants/ModuleConstants"));
|
|
8
8
|
const ArrayExtensions_1 = require("../Utilities/Extensions/ArrayExtensions");
|
|
9
9
|
const AdaptableModuleBase_1 = require("./AdaptableModuleBase");
|
|
10
|
-
const ObjectFactory_1 = tslib_1.__importDefault(require("../Utilities/ObjectFactory"));
|
|
11
10
|
const AlertWizard_1 = require("../View/Alert/Wizard/AlertWizard");
|
|
12
11
|
const getScopeViewItems_1 = require("./Utilities/getScopeViewItems");
|
|
13
12
|
const getRuleViewItems_1 = require("./Utilities/getRuleViewItems");
|
|
@@ -154,41 +153,25 @@ class AlertModule extends AdaptableModuleBase_1.AdaptableModuleBase {
|
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
155
|
handleGridDataChanged(gridDataChangedInfo) {
|
|
157
|
-
const internalAlertApi = this.api.alertApi.internalApi;
|
|
158
156
|
const alertDefinitions = this.getAlertDefinitionsForGridDataChange(gridDataChangedInfo);
|
|
159
|
-
|
|
160
|
-
const numberOfChangedRows = gridDataChangedInfo.rowNodes.length;
|
|
161
|
-
const actionName = rowAdded ? 'Added' : 'Removed';
|
|
162
|
-
const alertHeader = numberOfChangedRows > 1 ? `${actionName} Rows` : `${actionName} Row `;
|
|
163
|
-
const defaultMessage = numberOfChangedRows > 1
|
|
164
|
-
? `${numberOfChangedRows} rows were ${actionName.toLowerCase()}`
|
|
165
|
-
: `${numberOfChangedRows} row was ${actionName.toLowerCase()}`;
|
|
166
|
-
alertDefinitions === null || alertDefinitions === void 0 ? void 0 : alertDefinitions.forEach((alertDefinition) => {
|
|
167
|
-
if (internalAlertApi.shouldFireAlertOnClient(alertDefinition)) {
|
|
168
|
-
const customMessage = internalAlertApi.getCustomAlertDescription(alertDefinition, {
|
|
169
|
-
gridDataChangedInfo,
|
|
170
|
-
});
|
|
171
|
-
const customHeader = internalAlertApi.getCustomAlertMessageHeader(alertDefinition, {
|
|
172
|
-
gridDataChangedInfo,
|
|
173
|
-
});
|
|
174
|
-
const alertMessage = alertDefinition.MessageText
|
|
175
|
-
? alertDefinition.MessageText
|
|
176
|
-
: customMessage !== null && customMessage !== void 0 ? customMessage : defaultMessage;
|
|
177
|
-
const alert = ObjectFactory_1.default.CreateRowChangedAlert(customHeader !== null && customHeader !== void 0 ? customHeader : alertHeader, alertMessage, alertDefinition, gridDataChangedInfo);
|
|
178
|
-
this.api.alertApi.showAdaptableAlert(alert);
|
|
179
|
-
}
|
|
180
|
-
});
|
|
157
|
+
this.api.alertApi.internalApi.showAlertsForGridDataChanges(gridDataChangedInfo, alertDefinitions);
|
|
181
158
|
}
|
|
182
159
|
handleReactiveAlertTriggered(reactiveAlertInfo) {
|
|
183
160
|
// TODO - suppress Notification if alert is not relevant for layout
|
|
184
161
|
var _a;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
this.api.alertApi.internalApi.showAlertForDefinitions(reactiveAlertInfo.
|
|
162
|
+
if (reactiveAlertInfo.type === 'cellDataChangedAlert') {
|
|
163
|
+
// the row node data is most probably stale because the reactive queries buffer the changed data
|
|
164
|
+
// so we have to refresh it
|
|
165
|
+
reactiveAlertInfo.cellChangeLogEntry.rowNode = this.api.gridApi.getRowNodeForPrimaryKey(reactiveAlertInfo.cellChangeLogEntry.primaryKeyValue);
|
|
166
|
+
reactiveAlertInfo.cellChangeLogEntry.rowData =
|
|
167
|
+
(_a = reactiveAlertInfo.cellChangeLogEntry.rowNode) === null || _a === void 0 ? void 0 : _a.data;
|
|
168
|
+
this.api.alertApi.internalApi.showAlertForDefinitions(reactiveAlertInfo.cellChangeLogEntry, [
|
|
169
|
+
reactiveAlertInfo.alertDefinition,
|
|
170
|
+
]);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
// reactiveAlertInfo.type === gridDataChangedAlert'
|
|
174
|
+
this.api.alertApi.internalApi.showAlertForDefinitions(reactiveAlertInfo.gridChangeLogEntry, [
|
|
192
175
|
reactiveAlertInfo.alertDefinition,
|
|
193
176
|
]);
|
|
194
177
|
}
|
|
@@ -40,7 +40,9 @@ exports.DefaultAdaptableOptions = {
|
|
|
40
40
|
showSystemStatusMessageNotifications: false,
|
|
41
41
|
maxSystemMessagesInStore: 100,
|
|
42
42
|
},
|
|
43
|
-
dataImportOptions: {
|
|
43
|
+
dataImportOptions: {
|
|
44
|
+
fileHandlers: undefined,
|
|
45
|
+
},
|
|
44
46
|
flashingCellOptions: {
|
|
45
47
|
defaultFlashDuration: 500,
|
|
46
48
|
defaultFlashTarget: 'cell',
|
|
@@ -2,6 +2,7 @@ import { ExpressionContext } from '../../parser/src/types';
|
|
|
2
2
|
import { AdaptableApi } from '../../Api/AdaptableApi';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { CellDataChangedInfo } from '../../PredefinedConfig/Common/CellDataChangedInfo';
|
|
5
|
+
import { GridDataChangedInfo } from '../../types';
|
|
5
6
|
export interface BaseParameter<T = string, N = string> {
|
|
6
7
|
type: T;
|
|
7
8
|
name: N;
|
|
@@ -13,6 +14,7 @@ export declare const getStringValues: (context: ExpressionContext, ...stringArgu
|
|
|
13
14
|
export declare const getStringValue: (context: ExpressionContext, stringArgument: string) => string;
|
|
14
15
|
export declare const isTextSearchCaseInsensitive: (context: ExpressionContext) => boolean;
|
|
15
16
|
export declare const getDataChangeLog$: (context: ExpressionContext, columnNameFilter: string) => Observable<CellDataChangedInfo>;
|
|
17
|
+
export declare const getGridChangeLog$: (context: ExpressionContext, gridChangeType: GridDataChangedInfo['rowTrigger']) => Observable<GridDataChangedInfo>;
|
|
16
18
|
export declare const handleWhereFunction: (args: ExpressionNode[], context: ExpressionContext) => any;
|
|
17
19
|
export declare type ExpressionNode = any;
|
|
18
20
|
export declare const evaluateExpressionNode: (expressionNode: ExpressionNode, context: ExpressionContext, filterFn?: (item: any) => boolean) => any;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateColumnType = exports.getNumericValue = exports.handleColumnFunction = exports.extractParameters = exports.extractParameter = exports.extractColumnParameters = exports.extractColumnParameter = exports.evaluateExpressionNode = exports.handleWhereFunction = exports.getDataChangeLog$ = exports.isTextSearchCaseInsensitive = exports.getStringValue = exports.getStringValues = void 0;
|
|
3
|
+
exports.validateColumnType = exports.getNumericValue = exports.handleColumnFunction = exports.extractParameters = exports.extractParameter = exports.extractColumnParameters = exports.extractColumnParameter = exports.evaluateExpressionNode = exports.handleWhereFunction = exports.getGridChangeLog$ = exports.getDataChangeLog$ = exports.isTextSearchCaseInsensitive = exports.getStringValue = exports.getStringValues = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const ExpressionEvaluationError_1 = require("../../parser/src/ExpressionEvaluationError");
|
|
6
6
|
const StringExtensions_1 = tslib_1.__importDefault(require("../Extensions/StringExtensions"));
|
|
@@ -29,11 +29,23 @@ const getDataChangeLog$ = (context, columnNameFilter) => {
|
|
|
29
29
|
dataChangeLog$ = dataChangeLog$.pipe((0, operators_1.filter)((dataChangeLog) => dataChangeLog.column.columnId === columnNameFilter));
|
|
30
30
|
// filter based on the WHERE clause
|
|
31
31
|
if (context.filterFn) {
|
|
32
|
-
dataChangeLog$ = dataChangeLog$.pipe((0, operators_1.filter)((value) =>
|
|
32
|
+
dataChangeLog$ = dataChangeLog$.pipe((0, operators_1.filter)((value) => {
|
|
33
|
+
return context.filterFn(value.rowNode);
|
|
34
|
+
}));
|
|
33
35
|
}
|
|
34
36
|
return dataChangeLog$;
|
|
35
37
|
};
|
|
36
38
|
exports.getDataChangeLog$ = getDataChangeLog$;
|
|
39
|
+
const getGridChangeLog$ = (context, gridChangeType) => {
|
|
40
|
+
const gridChangeLog$ = context.adaptableApi.internalApi.getDataService().gridChangeLog$;
|
|
41
|
+
let gridChangeStream$ = gridChangeLog$.pipe((0, operators_1.filter)((gridDataChangedInfo) => gridDataChangedInfo.rowTrigger === gridChangeType));
|
|
42
|
+
// filter based on the WHERE clause
|
|
43
|
+
if (context.filterFn) {
|
|
44
|
+
gridChangeStream$ = gridChangeStream$.pipe((0, operators_1.filter)((value) => value.rowNodes.some((node) => context.filterFn(node))));
|
|
45
|
+
}
|
|
46
|
+
return gridChangeStream$;
|
|
47
|
+
};
|
|
48
|
+
exports.getGridChangeLog$ = getGridChangeLog$;
|
|
37
49
|
const handleWhereFunction = (args, context) => {
|
|
38
50
|
const reactiveExpressionNode = args[0];
|
|
39
51
|
const whereClauseExpressionNode = args[1];
|
|
@@ -2,6 +2,6 @@ import { ExpressionFunction } from '../../parser/src/types';
|
|
|
2
2
|
/**
|
|
3
3
|
* List of all the Observable Functions available in AdaptableQL
|
|
4
4
|
*/
|
|
5
|
-
export declare type ObservableFunctionName = 'WHERE' | 'COL' | 'TIMEFRAME' | 'ROW_CHANGE' | 'GRID_CHANGE' | 'MAX' | 'MIN' | 'NONE' | 'COUNT';
|
|
5
|
+
export declare type ObservableFunctionName = 'WHERE' | 'COL' | 'TIMEFRAME' | 'ROW_CHANGE' | 'ROW_ADDED' | 'GRID_CHANGE' | 'ROW_REMOVED' | 'MAX' | 'MIN' | 'NONE' | 'COUNT';
|
|
6
6
|
export declare const observableExpressionFunctions: Record<ObservableFunctionName, ExpressionFunction>;
|
|
7
7
|
export declare const observableExpressionFunctionNames: ObservableFunctionName[];
|
|
@@ -91,7 +91,7 @@ exports.observableExpressionFunctions = {
|
|
|
91
91
|
(0, operators_1.debounceTime)(timeframeParameter.value),
|
|
92
92
|
// completing the observable (ex. alert deletion) will also fire the NONE event
|
|
93
93
|
// takeUntil takes care of this, ignoring any emissions as soon as the source completes
|
|
94
|
-
// (count() result is irrelevant here, the main thing is that it emits
|
|
94
|
+
// (count() result is irrelevant here, the main thing is that it emits a source completion)
|
|
95
95
|
(0, operators_1.takeUntil)(dataChangeLog$.pipe((0, operators_1.count)())));
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -105,6 +105,48 @@ exports.observableExpressionFunctions = {
|
|
|
105
105
|
],
|
|
106
106
|
category: 'observable',
|
|
107
107
|
},
|
|
108
|
+
ROW_ADDED: {
|
|
109
|
+
handler(args, context) {
|
|
110
|
+
const gridChangeLog$ = (0, expressionFunctionUtils_1.getGridChangeLog$)(context, 'Add');
|
|
111
|
+
return handleGridRowAddedOrRemoved(args, gridChangeLog$, 'ROW_ADDED', context);
|
|
112
|
+
},
|
|
113
|
+
returnType: 'boolean',
|
|
114
|
+
description: 'Observes added rows in the grid',
|
|
115
|
+
signatures: [
|
|
116
|
+
'ROW_ADDED()',
|
|
117
|
+
'ROW_ADDED(rowCount: number)',
|
|
118
|
+
'ROW_ADDED(timeframe:TIMEFRAME)',
|
|
119
|
+
'ROW_ADDED(rowCount: number, timeframe:TIMEFRAME)',
|
|
120
|
+
],
|
|
121
|
+
examples: [
|
|
122
|
+
'ROW_ADDED()',
|
|
123
|
+
'ROW_ADDED(2)',
|
|
124
|
+
"ROW_ADDED(TIMEFRAME('20s'))",
|
|
125
|
+
"ROW_ADDED(2, TIMEFRAME('20s'))",
|
|
126
|
+
],
|
|
127
|
+
category: 'observable',
|
|
128
|
+
},
|
|
129
|
+
ROW_REMOVED: {
|
|
130
|
+
handler(args, context) {
|
|
131
|
+
const gridChangeLog$ = (0, expressionFunctionUtils_1.getGridChangeLog$)(context, 'Delete');
|
|
132
|
+
return handleGridRowAddedOrRemoved(args, gridChangeLog$, 'ROW_REMOVED', context);
|
|
133
|
+
},
|
|
134
|
+
returnType: 'boolean',
|
|
135
|
+
description: 'Observes removed rows in the grid',
|
|
136
|
+
signatures: [
|
|
137
|
+
'ROW_REMOVED()',
|
|
138
|
+
'ROW_REMOVED(rowCount: number)',
|
|
139
|
+
'ROW_REMOVED(timeframe:TIMEFRAME)',
|
|
140
|
+
'ROW_REMOVED(rowCount: number, timeframe:TIMEFRAME)',
|
|
141
|
+
],
|
|
142
|
+
examples: [
|
|
143
|
+
'ROW_REMOVED()',
|
|
144
|
+
'ROW_REMOVED(2)',
|
|
145
|
+
"ROW_REMOVED(TIMEFRAME('20s'))",
|
|
146
|
+
"ROW_REMOVED(2, TIMEFRAME('20s'))",
|
|
147
|
+
],
|
|
148
|
+
category: 'observable',
|
|
149
|
+
},
|
|
108
150
|
COL: {
|
|
109
151
|
handler(args, context) {
|
|
110
152
|
return (0, expressionFunctionUtils_1.handleColumnFunction)(args, context);
|
|
@@ -320,6 +362,7 @@ const getTrailingGridCountChange$ = (source$, trailingPeriod, counterLimit) => {
|
|
|
320
362
|
if (gridCounter === counterLimit) {
|
|
321
363
|
// reset counter
|
|
322
364
|
counter = 0;
|
|
365
|
+
console.log('reset counter');
|
|
323
366
|
}
|
|
324
367
|
return gridCounter;
|
|
325
368
|
}));
|
|
@@ -434,3 +477,52 @@ const getMaxTimeframeSize = (expressionValue, context) => {
|
|
|
434
477
|
}
|
|
435
478
|
return expressionValue > maxTimeframeSize ? maxTimeframeSize : expressionValue;
|
|
436
479
|
};
|
|
480
|
+
const handleGridRowAddedOrRemoved = (args, gridChangeLog$, consumingFunction, context) => {
|
|
481
|
+
let countValue = args.find((arg) => typeof arg === 'number');
|
|
482
|
+
if (countValue < 0) {
|
|
483
|
+
throw new ExpressionEvaluationError_1.ExpressionEvaluationError(consumingFunction, 'supports only zero or a positive number as argument');
|
|
484
|
+
}
|
|
485
|
+
let timeframeParameter = (0, expressionFunctionUtils_1.extractParameter)(consumingFunction, 'config', ['TIMEFRAME'], args, { isOptional: true });
|
|
486
|
+
if (countValue === 0 && timeframeParameter == null) {
|
|
487
|
+
throw new ExpressionEvaluationError_1.ExpressionEvaluationError(consumingFunction, 'requires a TIMEFRAME parameter when observing for no changes');
|
|
488
|
+
}
|
|
489
|
+
if (countValue == null && timeframeParameter == null) {
|
|
490
|
+
// default - return all new rows
|
|
491
|
+
return gridChangeLog$;
|
|
492
|
+
}
|
|
493
|
+
if (countValue == null) {
|
|
494
|
+
// default count value of 1
|
|
495
|
+
countValue = 1;
|
|
496
|
+
}
|
|
497
|
+
if (timeframeParameter == null) {
|
|
498
|
+
// default time parameter of max
|
|
499
|
+
timeframeParameter = {
|
|
500
|
+
name: 'TIMEFRAME',
|
|
501
|
+
type: 'config',
|
|
502
|
+
value: SYSTEM_MAX_TIMEFRAME_SIZE,
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
if (countValue === 0) {
|
|
506
|
+
// handle special case when observing NO changes
|
|
507
|
+
const gridDataChangeInfoStub = {
|
|
508
|
+
rowTrigger: consumingFunction === 'ROW_ADDED' ? 'Add' : 'Delete',
|
|
509
|
+
rowNodes: [],
|
|
510
|
+
dataRows: [],
|
|
511
|
+
changedAt: Date.now(),
|
|
512
|
+
adaptableId: context.adaptableId,
|
|
513
|
+
adaptableApi: context.adaptableApi,
|
|
514
|
+
userName: context.userName,
|
|
515
|
+
};
|
|
516
|
+
return gridChangeLog$.pipe(
|
|
517
|
+
// add a synthetic first value to ensure the grid is observed even when there are no changes
|
|
518
|
+
(0, operators_1.startWith)(gridDataChangeInfoStub),
|
|
519
|
+
// wait for the given time
|
|
520
|
+
(0, operators_1.debounceTime)(timeframeParameter.value),
|
|
521
|
+
// completing the observable (ex. alert deletion) will also fire the NONE event
|
|
522
|
+
// takeUntil takes care of this, ignoring any emissions as soon as the source completes
|
|
523
|
+
// (count() result is irrelevant here, the main thing is that it emits a source completion)
|
|
524
|
+
(0, operators_1.takeUntil)(gridChangeLog$.pipe((0, operators_1.count)())));
|
|
525
|
+
}
|
|
526
|
+
const timeframeChange$ = getTrailingGridCountChange$(gridChangeLog$, timeframeParameter.value, countValue);
|
|
527
|
+
return getDataChangeCount$(gridChangeLog$, timeframeChange$, countValue);
|
|
528
|
+
};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AlertService = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const IAlertService_1 = require("./Interface/IAlertService");
|
|
5
6
|
const Emitter_1 = tslib_1.__importDefault(require("../Emitter"));
|
|
6
7
|
const rxjs_1 = require("rxjs");
|
|
7
8
|
const ModuleConstants_1 = require("../Constants/ModuleConstants");
|
|
@@ -36,12 +37,18 @@ class AlertService {
|
|
|
36
37
|
const reactiveAlertSubscription = (0, rxjs_1.combineLatest)([
|
|
37
38
|
(0, rxjs_1.of)(alertDefinition),
|
|
38
39
|
reactiveExpressionObservable,
|
|
39
|
-
]).subscribe(([alertDefinition,
|
|
40
|
-
const reactiveAlertInfo =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
]).subscribe(([alertDefinition, changeLogEntry]) => {
|
|
41
|
+
const reactiveAlertInfo = (0, IAlertService_1.isGridDataChangedInfo)(changeLogEntry)
|
|
42
|
+
? {
|
|
43
|
+
alertDefinition,
|
|
44
|
+
type: 'gridDataChangedAlert',
|
|
45
|
+
gridChangeLogEntry: changeLogEntry,
|
|
46
|
+
}
|
|
47
|
+
: {
|
|
48
|
+
alertDefinition,
|
|
49
|
+
type: 'cellDataChangedAlert',
|
|
50
|
+
cellChangeLogEntry: changeLogEntry,
|
|
51
|
+
};
|
|
45
52
|
this.emitter.emitSync('ReactiveAlertTriggered', reactiveAlertInfo);
|
|
46
53
|
});
|
|
47
54
|
this.reactiveAlertsMap.set(alertDefinition.Uuid, {
|
|
@@ -3,11 +3,14 @@ import { IAdaptable } from '../../AdaptableInterfaces/IAdaptable';
|
|
|
3
3
|
import { CellDataChangedInfo } from '../../PredefinedConfig/Common/CellDataChangedInfo';
|
|
4
4
|
import { EmitterCallback } from '../../Utilities/Emitter';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
|
+
import { GridDataChangedInfo } from '../../types';
|
|
6
7
|
export declare class DataService implements IDataService {
|
|
7
8
|
private adaptable;
|
|
8
9
|
private emitter;
|
|
9
10
|
private dataChangeLogSubject$;
|
|
10
11
|
dataChangeLog$: Observable<CellDataChangedInfo>;
|
|
12
|
+
private gridChangeLogSubject$;
|
|
13
|
+
gridChangeLog$: Observable<GridDataChangedInfo>;
|
|
11
14
|
private undoChangeLog;
|
|
12
15
|
private undoChangeTimers;
|
|
13
16
|
constructor(adaptable: IAdaptable);
|
|
@@ -15,9 +18,9 @@ export declare class DataService implements IDataService {
|
|
|
15
18
|
on: (eventName: string, callback: EmitterCallback) => (() => void);
|
|
16
19
|
emit: (eventName: string, data?: any) => Promise<any>;
|
|
17
20
|
CreateDataChangedEvent(cellDataChangedInfo: CellDataChangedInfo): void;
|
|
21
|
+
CreateGridChangedEvent(gridDataChangedInfo: GridDataChangedInfo): void;
|
|
18
22
|
logUndoChange(change: CellDataChangedInfo): void;
|
|
19
23
|
extractUndoChange(change: CellDataChangedInfo): CellDataChangedInfo | undefined;
|
|
20
24
|
private getUndoChangeKey;
|
|
21
|
-
private logDataChange;
|
|
22
25
|
private extractDataChangeLogEntry;
|
|
23
26
|
}
|
|
@@ -16,6 +16,8 @@ class DataService {
|
|
|
16
16
|
this.emitter = new Emitter_1.default();
|
|
17
17
|
this.dataChangeLogSubject$ = new rxjs_1.Subject();
|
|
18
18
|
this.dataChangeLog$ = this.dataChangeLogSubject$.asObservable();
|
|
19
|
+
this.gridChangeLogSubject$ = new rxjs_1.Subject();
|
|
20
|
+
this.gridChangeLog$ = this.gridChangeLogSubject$.asObservable();
|
|
19
21
|
this.undoChangeLog = new Map();
|
|
20
22
|
this.undoChangeTimers = new Map();
|
|
21
23
|
}
|
|
@@ -25,6 +27,9 @@ class DataService {
|
|
|
25
27
|
this.dataChangeLogSubject$.complete();
|
|
26
28
|
this.dataChangeLogSubject$ = null;
|
|
27
29
|
this.dataChangeLog$ = null;
|
|
30
|
+
this.gridChangeLogSubject$.complete();
|
|
31
|
+
this.gridChangeLogSubject$ = null;
|
|
32
|
+
this.gridChangeLog$ = null;
|
|
28
33
|
this.undoChangeLog.clear();
|
|
29
34
|
this.undoChangeLog = null;
|
|
30
35
|
this.undoChangeTimers.clear();
|
|
@@ -34,9 +39,13 @@ class DataService {
|
|
|
34
39
|
if (cellDataChangedInfo.newValue != cellDataChangedInfo.oldValue) {
|
|
35
40
|
this.emitter.emitSync('CellDataChanged', cellDataChangedInfo);
|
|
36
41
|
this.adaptable.api.gridApi.internalApi.fireCellChangedEvent(cellDataChangedInfo);
|
|
37
|
-
this.
|
|
42
|
+
const dataChangeLogEntry = this.extractDataChangeLogEntry(cellDataChangedInfo);
|
|
43
|
+
this.dataChangeLogSubject$.next(dataChangeLogEntry);
|
|
38
44
|
}
|
|
39
45
|
}
|
|
46
|
+
CreateGridChangedEvent(gridDataChangedInfo) {
|
|
47
|
+
this.gridChangeLogSubject$.next(gridDataChangedInfo);
|
|
48
|
+
}
|
|
40
49
|
// we need this temporary "shared memory" because the value change and the AG Grid cellChanged event are asynchronous
|
|
41
50
|
// in the first phase we keep the undone change
|
|
42
51
|
logUndoChange(change) {
|
|
@@ -75,10 +84,6 @@ class DataService {
|
|
|
75
84
|
newValue,
|
|
76
85
|
});
|
|
77
86
|
}
|
|
78
|
-
logDataChange(cellDataChangedInfo) {
|
|
79
|
-
const dataChangeLogEntry = this.extractDataChangeLogEntry(cellDataChangedInfo);
|
|
80
|
-
this.dataChangeLogSubject$.next(dataChangeLogEntry);
|
|
81
|
-
}
|
|
82
87
|
extractDataChangeLogEntry(cellDataChangedInfo) {
|
|
83
88
|
// create rowData snapshot
|
|
84
89
|
const rowData = cellDataChangedInfo.rowData
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { AlertDefinition } from '../../../PredefinedConfig/AlertState';
|
|
2
2
|
import { CellDataChangedInfo } from '../../../PredefinedConfig/Common/CellDataChangedInfo';
|
|
3
|
+
import { GridDataChangedInfo } from '../../../types';
|
|
3
4
|
import { IAdaptableService } from './IAdaptableService';
|
|
4
|
-
export declare type ReactiveAlertInfo =
|
|
5
|
+
export declare type ReactiveAlertInfo = ReactiveGridDataChangedAlertInfo | ReactiveCellDataChangedAlertInfo;
|
|
6
|
+
export declare type ReactiveGridDataChangedAlertInfo = {
|
|
7
|
+
type: 'gridDataChangedAlert';
|
|
5
8
|
alertDefinition: AlertDefinition;
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
gridChangeLogEntry: GridDataChangedInfo;
|
|
10
|
+
};
|
|
11
|
+
export declare type ReactiveCellDataChangedAlertInfo = {
|
|
12
|
+
type: 'cellDataChangedAlert';
|
|
13
|
+
alertDefinition: AlertDefinition;
|
|
14
|
+
cellChangeLogEntry: CellDataChangedInfo;
|
|
8
15
|
};
|
|
9
16
|
export interface IAlertService extends IAdaptableService {
|
|
10
17
|
createReactiveAlert(alertDefinition: AlertDefinition): void;
|
|
@@ -13,3 +20,5 @@ export interface IAlertService extends IAdaptableService {
|
|
|
13
20
|
getReactiveActiveAlerts(): AlertDefinition[];
|
|
14
21
|
isReactiveAlertActive(alertDefinition: AlertDefinition): boolean;
|
|
15
22
|
}
|
|
23
|
+
export declare const isGridDataChangedInfo: (value: CellDataChangedInfo | GridDataChangedInfo) => value is GridDataChangedInfo<any>;
|
|
24
|
+
export declare const isCellDataChangedInfo: (value: CellDataChangedInfo | GridDataChangedInfo) => value is CellDataChangedInfo<any>;
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isCellDataChangedInfo = exports.isGridDataChangedInfo = void 0;
|
|
4
|
+
const isGridDataChangedInfo = (value) => {
|
|
5
|
+
return typeof value.rowTrigger === 'string';
|
|
6
|
+
};
|
|
7
|
+
exports.isGridDataChangedInfo = isGridDataChangedInfo;
|
|
8
|
+
const isCellDataChangedInfo = (value) => {
|
|
9
|
+
return !(0, exports.isGridDataChangedInfo)(value);
|
|
10
|
+
};
|
|
11
|
+
exports.isCellDataChangedInfo = isCellDataChangedInfo;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { CellDataChangedInfo } from '../../../PredefinedConfig/Common/CellDataChangedInfo';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { IAdaptableService } from './IAdaptableService';
|
|
4
|
+
import { GridDataChangedInfo } from '../../../types';
|
|
4
5
|
export interface IDataService extends IAdaptableService {
|
|
5
6
|
CreateDataChangedEvent(cellDataChangedInfo: CellDataChangedInfo): void;
|
|
7
|
+
CreateGridChangedEvent(gridDataChangedInfo: GridDataChangedInfo): void;
|
|
6
8
|
on(eventName: 'CellDataChanged', callback: (cellDataChangedInfo: CellDataChangedInfo) => void): () => void;
|
|
7
9
|
readonly dataChangeLog$: Observable<CellDataChangedInfo>;
|
|
10
|
+
readonly gridChangeLog$: Observable<GridDataChangedInfo>;
|
|
8
11
|
logUndoChange(undoChange: CellDataChangedInfo): void;
|
|
9
12
|
extractUndoChange(undoChange: CellDataChangedInfo): CellDataChangedInfo | undefined;
|
|
10
13
|
}
|
|
@@ -9,10 +9,11 @@ import { BooleanFunctionName } from '../../ExpressionFunctions/booleanExpression
|
|
|
9
9
|
import { ScalarFunctionName } from '../../ExpressionFunctions/scalarExpressionFunctions';
|
|
10
10
|
import { ObservableFunctionName } from '../../ExpressionFunctions/observableExpressionFunctions';
|
|
11
11
|
import { ExpressionFunctionMap } from '../../../parser/src/types';
|
|
12
|
+
import { GridDataChangedInfo } from '../../../types';
|
|
12
13
|
export interface IQueryLanguageService extends IAdaptableService {
|
|
13
14
|
evaluateBooleanExpression(expression: string, module: AdaptableModule, rowNode: IRowNode): boolean;
|
|
14
15
|
evaluateScalarExpression(expression: string, module: AdaptableModule, rowNode: IRowNode): any;
|
|
15
|
-
evaluateObservableExpression(expression: string, module: AdaptableModule): Observable<CellDataChangedInfo>;
|
|
16
|
+
evaluateObservableExpression(expression: string, module: AdaptableModule): Observable<CellDataChangedInfo | GridDataChangedInfo>;
|
|
16
17
|
evaluateAggregatedBooleanExpression(expression: string, module: AdaptableModule): BooleanAggregationParameter;
|
|
17
18
|
evaluateAggregatedScalarExpression(expression: string, module: AdaptableModule): ScalarAggregationParameter;
|
|
18
19
|
validateBoolean(expression: string, module: AdaptableModule, config?: {
|
|
@@ -4,7 +4,7 @@ import { CellDataChangedInfo } from '../../PredefinedConfig/Common/CellDataChang
|
|
|
4
4
|
import { IRowNode } from '@ag-grid-community/core';
|
|
5
5
|
import { AdaptableModule } from '../../PredefinedConfig/Common/Types';
|
|
6
6
|
import { ScalarAggregationParameter } from '../ExpressionFunctions/aggregatedScalarExpressionFunctions';
|
|
7
|
-
import { AdaptableApi } from '../../../types';
|
|
7
|
+
import { AdaptableApi, GridDataChangedInfo } from '../../../types';
|
|
8
8
|
import { BooleanAggregationParameter } from '../ExpressionFunctions/aggregatedBooleanExpressionFunctions';
|
|
9
9
|
export declare class QueryLanguageService implements IQueryLanguageService {
|
|
10
10
|
private adaptableApi;
|
|
@@ -17,7 +17,7 @@ export declare class QueryLanguageService implements IQueryLanguageService {
|
|
|
17
17
|
evaluateBooleanExpression(expression: string, module: AdaptableModule, rowNode: any): any;
|
|
18
18
|
evaluateScalarExpression(expression: string, module: AdaptableModule, rowNode: IRowNode): any;
|
|
19
19
|
evaluateAggregatedScalarExpression(expression: string, module: AdaptableModule): ScalarAggregationParameter;
|
|
20
|
-
evaluateObservableExpression(reactiveExpression: string, module: AdaptableModule): Observable<CellDataChangedInfo>;
|
|
20
|
+
evaluateObservableExpression(reactiveExpression: string, module: AdaptableModule): Observable<CellDataChangedInfo | GridDataChangedInfo>;
|
|
21
21
|
evaluateAggregatedBooleanExpression(aggregationExpression: string, module: AdaptableModule): BooleanAggregationParameter;
|
|
22
22
|
validateBoolean(expressionInput: string, module: AdaptableModule, config?: {
|
|
23
23
|
force?: boolean;
|
|
@@ -13,11 +13,6 @@ class ColumnSelector extends React.Component {
|
|
|
13
13
|
var _a;
|
|
14
14
|
const sortedColumns = ArrayExtensions_1.ArrayExtensions.sortArrayWithProperty(Enums_1.SortOrder.Asc, this.props.ColumnList, 'friendlyName');
|
|
15
15
|
const selectedColumnIds = this.props.SelectedColumnIds.filter((x) => StringExtensions_1.StringExtensions.IsNotNullOrEmpty(x));
|
|
16
|
-
const placeHolder = StringExtensions_1.StringExtensions.IsNotNullOrEmpty(this.props.placeHolder)
|
|
17
|
-
? this.props.placeHolder.toString()
|
|
18
|
-
: this.props.SelectionMode == Enums_1.SelectionMode.Single
|
|
19
|
-
? 'Select a column'
|
|
20
|
-
: 'Select columns';
|
|
21
16
|
const isEmptySelectedColumnIds = this.props.SelectedColumnIds.filter((x) => StringExtensions_1.StringExtensions.IsNotNullOrEmpty(x)).length == 0;
|
|
22
17
|
let sortedColumnOptions = sortedColumns.map((column) => {
|
|
23
18
|
return {
|
|
@@ -4,5 +4,6 @@ interface CustomToolbarWrapperProps {
|
|
|
4
4
|
customToolbar: CustomToolbar;
|
|
5
5
|
dashboardRevision: number;
|
|
6
6
|
}
|
|
7
|
+
export declare const CustomToolbarCmp: (props: CustomToolbarWrapperProps) => JSX.Element;
|
|
7
8
|
export declare const CustomToolbarWrapper: (props: CustomToolbarWrapperProps) => JSX.Element;
|
|
8
9
|
export {};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CustomToolbarWrapper = void 0;
|
|
3
|
+
exports.CustomToolbarWrapper = exports.CustomToolbarCmp = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const React = tslib_1.__importStar(require("react"));
|
|
6
6
|
const react_1 = require("react");
|
|
7
|
-
const PanelDashboard_1 = require("../Components/Panels/PanelDashboard");
|
|
8
7
|
const AdaptableContext_1 = require("../AdaptableContext");
|
|
9
8
|
const AdaptableButton_1 = require("../Components/AdaptableButton");
|
|
10
|
-
const
|
|
9
|
+
const PanelDashboard_1 = require("../Components/Panels/PanelDashboard");
|
|
10
|
+
const CustomToolbarCmp = (props) => {
|
|
11
11
|
let contentsDivId = 'ab-CustomToolbar__' + props.customToolbar.name + '__contents';
|
|
12
12
|
let buttonsDivId = 'ab-CustomToolbar__' + props.customToolbar.name + '__buttons';
|
|
13
13
|
const [contentsHTML, setContentsHTML] = (0, react_1.useState)('');
|
|
@@ -63,6 +63,38 @@ const CustomToolbarWrapper = (props) => {
|
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
65
|
}, []);
|
|
66
|
+
return (React.createElement(React.Fragment, null,
|
|
67
|
+
contentsHTML && (React.createElement("div", { id: contentsDivId, ref: contentsDivRef, className: "CustomToolBarContents ab-CustomToolbar__contents ab-CustomToolbar__contents--render", style: { minHeight: 22 }, dangerouslySetInnerHTML: { __html: contentsHTML } })),
|
|
68
|
+
props.customToolbar.toolbarButtons && (React.createElement("div", { id: buttonsDivId, className: "ab-CustomToolbar__buttons", style: { minHeight: 22 } }, props.customToolbar.toolbarButtons.map((button, index) => {
|
|
69
|
+
const dashboardContext = {
|
|
70
|
+
customToolbar: props.customToolbar,
|
|
71
|
+
adaptableApi: api,
|
|
72
|
+
userName: api.optionsApi.getUserName(),
|
|
73
|
+
adaptableId: api.optionsApi.getAdaptableId(),
|
|
74
|
+
dashboardState: api.dashboardApi.getDashboardState(),
|
|
75
|
+
};
|
|
76
|
+
const buttonIcon = api.internalApi.getIconForButton(button, dashboardContext);
|
|
77
|
+
let buttonStyle = api.internalApi.getStyleForButton(button, dashboardContext);
|
|
78
|
+
let buttonLabel = api.internalApi.getLabelForButton(button, dashboardContext);
|
|
79
|
+
let buttonTooltip = api.internalApi.getTooltipForButton(button, dashboardContext);
|
|
80
|
+
if (button.hidden && button.hidden(button, dashboardContext)) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const disabled = button.disabled && button.disabled(button, dashboardContext);
|
|
84
|
+
let buttonVariant = buttonStyle && buttonStyle.variant ? buttonStyle.variant : 'outlined';
|
|
85
|
+
let buttonTone = buttonStyle && buttonStyle.tone ? buttonStyle.tone : 'neutral';
|
|
86
|
+
return (React.createElement(AdaptableButton_1.AdaptableButtonComponent, { style: { marginLeft: index ? 'var(--ab-space-1)' : 0 }, key: index, disabled: disabled, tooltip: buttonTooltip, icon: buttonIcon, variant: buttonVariant, tone: buttonTone, className: (buttonStyle === null || buttonStyle === void 0 ? void 0 : buttonStyle.className) || '', onClick: () => {
|
|
87
|
+
button.onClick ? button.onClick(button, dashboardContext) : null;
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
// mutate state to force a re-rendering
|
|
90
|
+
setComponentRevision(componentRevision + 1);
|
|
91
|
+
}, 16);
|
|
92
|
+
} }, buttonLabel));
|
|
93
|
+
})))));
|
|
94
|
+
};
|
|
95
|
+
exports.CustomToolbarCmp = CustomToolbarCmp;
|
|
96
|
+
const CustomToolbarWrapper = (props) => {
|
|
97
|
+
const { api } = (0, AdaptableContext_1.useAdaptable)();
|
|
66
98
|
return (React.createElement(PanelDashboard_1.PanelDashboard, { className: `ab-CustomToolbar ab-DashboardToolbar__${props.customToolbar.name}`, "data-name": `ab-CustomToolbar ab-DashboardToolbar__${props.customToolbar.name}`, headerText: props.customToolbar.title ? props.customToolbar.title : '', showConfigureButton: props.customToolbar.showConfigureButton != null &&
|
|
67
99
|
props.customToolbar.showConfigureButton == true, showCloseButton: props.customToolbar.showCloseButton != null && props.customToolbar.showCloseButton == true, onConfigure: () => {
|
|
68
100
|
const customToolbarConfiguredInfo = {
|
|
@@ -75,35 +107,6 @@ const CustomToolbarWrapper = (props) => {
|
|
|
75
107
|
}, accessLevel: api.internalApi
|
|
76
108
|
.getEntitlementService()
|
|
77
109
|
.getEntitlementAccessLevelForModule('Dashboard') },
|
|
78
|
-
React.createElement(
|
|
79
|
-
React.createElement("div", { id: buttonsDivId, className: "ab-CustomToolbar__buttons", style: { minHeight: 22 } }, props.customToolbar.toolbarButtons &&
|
|
80
|
-
props.customToolbar.toolbarButtons.map((button, index) => {
|
|
81
|
-
// TODO: variants of this mapping are present in several places (just search for api.internalApi.getStyleForButton() usages)
|
|
82
|
-
// with the next opportunity we should abstract it
|
|
83
|
-
const dashboardContext = {
|
|
84
|
-
customToolbar: props.customToolbar,
|
|
85
|
-
adaptableApi: api,
|
|
86
|
-
userName: api.optionsApi.getUserName(),
|
|
87
|
-
adaptableId: api.optionsApi.getAdaptableId(),
|
|
88
|
-
dashboardState: api.dashboardApi.getDashboardState(),
|
|
89
|
-
};
|
|
90
|
-
const buttonIcon = api.internalApi.getIconForButton(button, dashboardContext);
|
|
91
|
-
let buttonStyle = api.internalApi.getStyleForButton(button, dashboardContext);
|
|
92
|
-
let buttonLabel = api.internalApi.getLabelForButton(button, dashboardContext);
|
|
93
|
-
let buttonTooltip = api.internalApi.getTooltipForButton(button, dashboardContext);
|
|
94
|
-
if (button.hidden && button.hidden(button, dashboardContext)) {
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
const disabled = button.disabled && button.disabled(button, dashboardContext);
|
|
98
|
-
let buttonVariant = buttonStyle && buttonStyle.variant ? buttonStyle.variant : 'outlined';
|
|
99
|
-
let buttonTone = buttonStyle && buttonStyle.tone ? buttonStyle.tone : 'neutral';
|
|
100
|
-
return (React.createElement(AdaptableButton_1.AdaptableButtonComponent, { style: { marginLeft: index ? 'var(--ab-space-1)' : 0 }, key: index, disabled: disabled, tooltip: buttonTooltip, icon: buttonIcon, variant: buttonVariant, tone: buttonTone, className: (buttonStyle === null || buttonStyle === void 0 ? void 0 : buttonStyle.className) || '', onClick: () => {
|
|
101
|
-
button.onClick ? button.onClick(button, dashboardContext) : null;
|
|
102
|
-
setTimeout(() => {
|
|
103
|
-
// mutate state to force a re-rendering
|
|
104
|
-
setComponentRevision(componentRevision + 1);
|
|
105
|
-
}, 16);
|
|
106
|
-
} }, buttonLabel));
|
|
107
|
-
}))));
|
|
110
|
+
React.createElement(exports.CustomToolbarCmp, Object.assign({}, props))));
|
|
108
111
|
};
|
|
109
112
|
exports.CustomToolbarWrapper = CustomToolbarWrapper;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import * as Redux from 'redux';
|
|
3
|
-
import {
|
|
3
|
+
import { SystemStatusMessageInfo } from '../../PredefinedConfig/Common/SystemStatusMessageInfo';
|
|
4
4
|
import { AdaptableCoordinate, DashboardState } from '../../PredefinedConfig/DashboardState';
|
|
5
5
|
import { GridState } from '../../PredefinedConfig/GridState';
|
|
6
6
|
import * as DashboardRedux from '../../Redux/ActionsReducers/DashboardRedux';
|
|
7
7
|
import * as PopupRedux from '../../Redux/ActionsReducers/PopupRedux';
|
|
8
8
|
import * as QuickSearchRedux from '../../Redux/ActionsReducers/QuickSearchRedux';
|
|
9
|
-
import {
|
|
9
|
+
import { ModuleViewPopupProps } from '../Components/SharedProps/ModuleViewPopupProps';
|
|
10
10
|
interface DashboardComponentProps extends ModuleViewPopupProps<any> {
|
|
11
11
|
DashboardRevision: number;
|
|
12
12
|
DashboardState: DashboardState;
|