@adaptabletools/adaptable 22.0.0-canary.1 → 22.0.0-canary.2
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/index.css +3 -14
- package/index.css.map +1 -1
- package/package.json +1 -1
- package/src/AdaptableOptions/AdaptablePlugin.js +6 -1
- package/src/AdaptableOptions/ExportOptions.d.ts +1 -2
- package/src/AdaptableOptions/FilterOptions.d.ts +3 -0
- package/src/AdaptableState/Common/AdaptableColumn.d.ts +6 -0
- package/src/AdaptableState/Common/RowDataChangedInfo.d.ts +3 -0
- package/src/AdaptableState/InitialState.d.ts +1 -1
- package/src/AdaptableState/Selection/GridCell.d.ts +9 -0
- package/src/Api/Implementation/ActionColumnApiImpl.js +1 -0
- package/src/Api/Implementation/AdaptableApiImpl.js +52 -0
- package/src/Api/Implementation/AlertApiImpl.js +1 -0
- package/src/Api/Implementation/ApiBase.js +1 -0
- package/src/Api/Implementation/CalculatedColumnApiImpl.js +1 -0
- package/src/Api/Implementation/ChartingApiImpl.js +4 -0
- package/src/Api/Implementation/ColumnApiImpl.js +1 -0
- package/src/Api/Implementation/ColumnFilterApiImpl.js +1 -0
- package/src/Api/Implementation/CommentsApiImpl.js +1 -0
- package/src/Api/Implementation/CustomSortApiImpl.js +1 -0
- package/src/Api/Implementation/DashboardApiImpl.js +1 -0
- package/src/Api/Implementation/DataChangeHistoryApiImpl.js +12 -15
- package/src/Api/Implementation/DataImportApiImpl.js +1 -0
- package/src/Api/Implementation/DataSetApiImpl.js +1 -0
- package/src/Api/Implementation/EntitlementApiImpl.js +1 -0
- package/src/Api/Implementation/EventApiImpl.js +16 -14
- package/src/Api/Implementation/ExportApiImpl.js +1 -0
- package/src/Api/Implementation/ExpressionApiImpl.js +1 -0
- package/src/Api/Implementation/Fdc3ApiImpl.js +1 -0
- package/src/Api/Implementation/FilterApiImpl.js +3 -0
- package/src/Api/Implementation/FlashingCellApiImpl.js +1 -0
- package/src/Api/Implementation/FormatColumnApiImpl.js +1 -0
- package/src/Api/Implementation/FreeTextColumnApiImpl.js +1 -0
- package/src/Api/Implementation/GridApiImpl.js +1 -0
- package/src/Api/Implementation/GridFilterApiImpl.js +1 -0
- package/src/Api/Implementation/LayoutApiImpl.js +1 -0
- package/src/Api/Implementation/NamedQueryApiImpl.js +1 -0
- package/src/Api/Implementation/NoteApiImpl.js +1 -0
- package/src/Api/Implementation/PredicateApiImpl.js +1 -0
- package/src/Api/Implementation/RowFormApiImpl.js +1 -0
- package/src/Api/Implementation/StyledColumnApiImpl.js +1 -0
- package/src/Api/Implementation/SystemStatusApiImpl.js +2 -0
- package/src/Api/Implementation/TeamSharingApiImpl.js +1 -0
- package/src/Api/Implementation/ThemeApiImpl.js +1 -0
- package/src/Api/Implementation/UserInterfaceApiImpl.js +2 -1
- package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +6 -0
- package/src/Redux/Store/AdaptableStore.js +49 -43
- package/src/Strategy/AdaptableModuleBase.js +4 -0
- package/src/Strategy/AlertModule.js +1 -0
- package/src/Strategy/CalculatedColumnModule.js +1 -0
- package/src/Strategy/CellSummaryModule.js +1 -1
- package/src/Strategy/DataChangeHistoryModule.js +1 -0
- package/src/Strategy/FlashingCellModule.js +1 -0
- package/src/Strategy/FreeTextColumnModule.js +1 -0
- package/src/Strategy/LayoutModule.js +2 -1
- package/src/Strategy/PlusMinusModule.js +2 -0
- package/src/Strategy/ScheduleModule.js +1 -0
- package/src/Strategy/ShortcutModule.js +2 -0
- package/src/Strategy/TeamSharingModule.js +10 -10
- package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +1 -1
- package/src/Utilities/Constants/DocumentationLinkConstants.js +1 -1
- package/src/Utilities/ExpressionFunctions/deepMap.js +31 -31
- package/src/Utilities/MenuItem.js +18 -0
- package/src/Utilities/Services/AggregatedScalarLiveValue.js +8 -0
- package/src/Utilities/Services/AlertService.js +6 -4
- package/src/Utilities/Services/AnnotationsService.js +3 -0
- package/src/Utilities/Services/CalculatedColumnExpressionService.js +2 -1
- package/src/Utilities/Services/ChartingService.js +1 -0
- package/src/Utilities/Services/DataService.js +10 -2
- package/src/Utilities/Services/Fdc3Service.js +5 -3
- package/src/Utilities/Services/FlashingCellService.js +5 -0
- package/src/Utilities/Services/LicenseService/index.js +1 -1
- package/src/Utilities/Services/MetamodelService.js +2 -2
- package/src/Utilities/Services/ModuleService.js +1 -0
- package/src/Utilities/Services/QueryLanguageService.js +6 -5
- package/src/Utilities/Services/RowFormService.js +1 -0
- package/src/Utilities/Services/RowSummaryService.js +10 -7
- package/src/Utilities/Services/TeamSharingService.js +3 -1
- package/src/Utilities/Services/ThemeService.js +11 -9
- package/src/Utilities/Services/ValidationService.js +1 -0
- package/src/Utilities/createAgStatusPanelComponent.js +3 -0
- package/src/View/BulkUpdate/BulkUpdateViewPanel.js +1 -0
- package/src/View/CalculatedColumn/CalculatedColumnSummary.js +8 -8
- package/src/View/CellSummary/CellSummaryViewPanel.js +1 -0
- package/src/View/Components/Buttons/ButtonBase/index.js +9 -9
- package/src/View/Components/Buttons/EntityListActionButtons.js +18 -18
- package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +1 -1
- package/src/View/Components/ExpressionWizard.js +5 -5
- package/src/View/Components/Panels/PanelDashboard/index.js +8 -8
- package/src/View/Components/Panels/PanelToolPanel/index.js +7 -7
- package/src/View/Components/ToolPanel/AdaptableToolPanel.js +2 -0
- package/src/View/CustomSort/CustomSortSummary.js +13 -13
- package/src/View/FormatColumn/FormatColumnSummary.js +13 -13
- package/src/View/FreeTextColumn/FreeTextColumnSummary.js +13 -13
- package/src/View/SmartEdit/SmartEditViewPanel.js +1 -0
- package/src/View/Theme/ThemePopup.js +13 -16
- package/src/agGrid/Adaptable.js +4 -0
- package/src/agGrid/AdaptableAgGrid.js +99 -33
- package/src/agGrid/AdaptableFilterHandler.js +4 -0
- package/src/agGrid/AdaptableLogger.d.ts +3 -0
- package/src/agGrid/AdaptableLogger.js +10 -0
- package/src/agGrid/AgGridAdapter.js +11 -1
- package/src/agGrid/AgGridColumnAdapter.js +2 -0
- package/src/agGrid/AgGridExportAdapter.js +10 -9
- package/src/agGrid/AgGridFilterAdapter.js +4 -0
- package/src/agGrid/AgGridFloatingFilterAdapter.js +3 -0
- package/src/agGrid/AgGridMenuAdapter.js +1 -0
- package/src/agGrid/AgGridModulesAdapter.js +2 -1
- package/src/agGrid/AgGridOptionsService.js +3 -0
- package/src/agGrid/AgGridThemeAdapter.js +2 -0
- package/src/agGrid/cellRenderers/ActionColumnRenderer.js +5 -0
- package/src/agGrid/cellRenderers/BadgeRenderer.js +2 -0
- package/src/agGrid/cellRenderers/PercentBarRenderer.js +1 -0
- package/src/agGrid/editors/AdaptableDateEditor/index.js +6 -3
- package/src/agGrid/editors/AdaptableNumberEditor/index.js +16 -12
- package/src/agGrid/editors/AdaptablePercentageEditor/index.js +17 -13
- package/src/agGrid/index.d.ts +6 -0
- package/src/agGrid/index.js +6 -0
- package/src/components/Datepicker/index.js +1 -1
- package/src/components/overlayBaseZIndex.js +1 -1
- package/src/components/utils/useContainerScrollObserver/index.js +17 -14
- package/src/devTools/index.js +54 -53
- package/src/env.js +2 -2
- package/src/layout-manager/src/LMEmitter.js +11 -11
- package/src/layout-manager/src/LMLogger.js +7 -0
- package/src/layout-manager/src/index.js +56 -51
- package/src/metamodel/adaptable.metamodel.d.ts +57 -0
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/migration/AdaptableUpgradeHelper.js +3 -0
- package/src/migration/VersionUpgrade.js +1 -0
- package/src/migration/VersionUpgrade17.js +1 -2
- package/src/parser/src/ExpressionEvaluationError.js +1 -0
- package/tsconfig.esm.tsbuildinfo +1 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
const SORT_ASC_REVISION = (p1, p2) => sortAscending(p1.revision, p2.revision);
|
|
2
2
|
export class DeepMap {
|
|
3
|
+
map = new Map();
|
|
4
|
+
length = 0;
|
|
5
|
+
revision = 0;
|
|
3
6
|
static clone(map) {
|
|
4
7
|
const clone = new DeepMap();
|
|
5
8
|
map.visit((pair, keys) => {
|
|
@@ -8,37 +11,6 @@ export class DeepMap {
|
|
|
8
11
|
return clone;
|
|
9
12
|
}
|
|
10
13
|
constructor(initial) {
|
|
11
|
-
this.map = new Map();
|
|
12
|
-
this.length = 0;
|
|
13
|
-
this.revision = 0;
|
|
14
|
-
this.visit = (fn) => {
|
|
15
|
-
this.map.forEach((_, k) => this.visitKey(k, this.map, [], fn));
|
|
16
|
-
};
|
|
17
|
-
this.visitDepthFirst = (fn) => {
|
|
18
|
-
this.visitWithNext([], fn);
|
|
19
|
-
};
|
|
20
|
-
this.visitWithNext = (parentKeys, fn, currentMap = this.map) => {
|
|
21
|
-
if (!currentMap) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
|
-
let i = 0;
|
|
25
|
-
currentMap.forEach((_, key) => {
|
|
26
|
-
const pair = currentMap.get(key);
|
|
27
|
-
if (!pair) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const { map } = pair;
|
|
31
|
-
const keys = [...parentKeys, key];
|
|
32
|
-
const next = map ? () => this.visitWithNext(keys, fn, map) : undefined;
|
|
33
|
-
if (pair.hasOwnProperty('value')) {
|
|
34
|
-
fn(pair.value, keys, i, next);
|
|
35
|
-
i++;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
next?.();
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
14
|
if (initial) {
|
|
43
15
|
initial.forEach((entry) => {
|
|
44
16
|
const [keys, value] = entry;
|
|
@@ -222,6 +194,34 @@ export class DeepMap {
|
|
|
222
194
|
// if it was called by fn, it won't be called again, as it's once-d
|
|
223
195
|
next();
|
|
224
196
|
}
|
|
197
|
+
visit = (fn) => {
|
|
198
|
+
this.map.forEach((_, k) => this.visitKey(k, this.map, [], fn));
|
|
199
|
+
};
|
|
200
|
+
visitDepthFirst = (fn) => {
|
|
201
|
+
this.visitWithNext([], fn);
|
|
202
|
+
};
|
|
203
|
+
visitWithNext = (parentKeys, fn, currentMap = this.map) => {
|
|
204
|
+
if (!currentMap) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
let i = 0;
|
|
208
|
+
currentMap.forEach((_, key) => {
|
|
209
|
+
const pair = currentMap.get(key);
|
|
210
|
+
if (!pair) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const { map } = pair;
|
|
214
|
+
const keys = [...parentKeys, key];
|
|
215
|
+
const next = map ? () => this.visitWithNext(keys, fn, map) : undefined;
|
|
216
|
+
if (pair.hasOwnProperty('value')) {
|
|
217
|
+
fn(pair.value, keys, i, next);
|
|
218
|
+
i++;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
next?.();
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
225
|
getArray(fn) {
|
|
226
226
|
const result = [];
|
|
227
227
|
this.visit((pair, keys) => {
|
|
@@ -11,6 +11,12 @@ export class MenuItemDoReduxAction {
|
|
|
11
11
|
};
|
|
12
12
|
this.reduxAction = reduxAction;
|
|
13
13
|
}
|
|
14
|
+
name;
|
|
15
|
+
reduxAction;
|
|
16
|
+
label;
|
|
17
|
+
category;
|
|
18
|
+
isVisible;
|
|
19
|
+
icon;
|
|
14
20
|
}
|
|
15
21
|
export class MenuItemDoClickFunction {
|
|
16
22
|
constructor(name, label, module, clickFunction, icon, isVisible) {
|
|
@@ -23,6 +29,12 @@ export class MenuItemDoClickFunction {
|
|
|
23
29
|
};
|
|
24
30
|
this.onClick = clickFunction;
|
|
25
31
|
}
|
|
32
|
+
name;
|
|
33
|
+
onClick;
|
|
34
|
+
label;
|
|
35
|
+
category;
|
|
36
|
+
isVisible;
|
|
37
|
+
icon;
|
|
26
38
|
}
|
|
27
39
|
// A menu item which shows a popup screen when it is clieked
|
|
28
40
|
export class MenuItemShowPopup {
|
|
@@ -36,4 +48,10 @@ export class MenuItemShowPopup {
|
|
|
36
48
|
};
|
|
37
49
|
this.reduxAction = PopupRedux.PopupShowScreen(module, componentName, popupParams);
|
|
38
50
|
}
|
|
51
|
+
name;
|
|
52
|
+
reduxAction;
|
|
53
|
+
label;
|
|
54
|
+
category;
|
|
55
|
+
isVisible;
|
|
56
|
+
icon;
|
|
39
57
|
}
|
|
@@ -8,6 +8,14 @@ const logOnce = (message, loggingFn) => {
|
|
|
8
8
|
doOnceFlags[message] = true;
|
|
9
9
|
};
|
|
10
10
|
export class AggregatedScalarLiveValue {
|
|
11
|
+
source;
|
|
12
|
+
requestingModule;
|
|
13
|
+
adaptableApi;
|
|
14
|
+
getRowNodes;
|
|
15
|
+
aggregationReducerName;
|
|
16
|
+
aggregatedScalarExpression;
|
|
17
|
+
expressionEvaluation;
|
|
18
|
+
aggregationResult;
|
|
11
19
|
constructor(source, requestingModule, adaptableApi, getRowNodes) {
|
|
12
20
|
this.source = source;
|
|
13
21
|
this.requestingModule = requestingModule;
|
|
@@ -3,12 +3,11 @@ import Emitter from '../Emitter';
|
|
|
3
3
|
import { combineLatest, of } from 'rxjs';
|
|
4
4
|
import { AlertModuleId } from '../Constants/ModuleConstants';
|
|
5
5
|
export class AlertService {
|
|
6
|
+
adaptableApi;
|
|
7
|
+
emitter;
|
|
8
|
+
reactiveAlertsMap = new Map();
|
|
6
9
|
constructor(adaptableApi) {
|
|
7
10
|
this.adaptableApi = adaptableApi;
|
|
8
|
-
this.reactiveAlertsMap = new Map();
|
|
9
|
-
this.onReactiveAlertTriggered = (callback) => {
|
|
10
|
-
return this.emitter.on('ReactiveAlertTriggered', callback);
|
|
11
|
-
};
|
|
12
11
|
this.emitter = new Emitter();
|
|
13
12
|
}
|
|
14
13
|
destroy() {
|
|
@@ -18,6 +17,9 @@ export class AlertService {
|
|
|
18
17
|
this.reactiveAlertsMap.clear();
|
|
19
18
|
this.reactiveAlertsMap = null;
|
|
20
19
|
}
|
|
20
|
+
onReactiveAlertTriggered = (callback) => {
|
|
21
|
+
return this.emitter.on('ReactiveAlertTriggered', callback);
|
|
22
|
+
};
|
|
21
23
|
createReactiveAlert(alertDefinition) {
|
|
22
24
|
// if there is already a reactive alert for this definition, delete it (possible in case of editing definitions),
|
|
23
25
|
this.deleteReactiveAlert(alertDefinition);
|
|
@@ -5,6 +5,9 @@ import ArrayExtensions from '../Extensions/ArrayExtensions';
|
|
|
5
5
|
* If there are active Notes or Comments it listens to Cell Selection and Mouse Enter events
|
|
6
6
|
*/
|
|
7
7
|
export class AnnotationsService {
|
|
8
|
+
api;
|
|
9
|
+
adaptable;
|
|
10
|
+
isListeningToEvents;
|
|
8
11
|
constructor(api) {
|
|
9
12
|
this.api = api;
|
|
10
13
|
this.isListeningToEvents = false;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { CalculatedColumnModuleId } from '../Constants/ModuleConstants';
|
|
2
2
|
import { AggregatedScalarLiveValue } from './AggregatedScalarLiveValue';
|
|
3
3
|
export class CalculatedColumnExpressionService {
|
|
4
|
+
adaptableApi;
|
|
5
|
+
aggregatedScalarLiveValuesMap = new Map();
|
|
4
6
|
constructor(adaptableApi) {
|
|
5
7
|
this.adaptableApi = adaptableApi;
|
|
6
|
-
this.aggregatedScalarLiveValuesMap = new Map();
|
|
7
8
|
this.adaptableApi = adaptableApi;
|
|
8
9
|
}
|
|
9
10
|
listentoCellDataChange(cellDataChangedInfo) {
|
|
@@ -4,10 +4,16 @@ import Helper from '../Helpers/Helper';
|
|
|
4
4
|
// ~ 8 hours
|
|
5
5
|
const MAX_TIMEFRAME_SIZE = 86400000;
|
|
6
6
|
export class DataService {
|
|
7
|
+
adaptable;
|
|
8
|
+
emitter;
|
|
9
|
+
cellDataChangeLogSubject$;
|
|
10
|
+
cellDataChangeLog$;
|
|
11
|
+
rowDataChangeLogSubject$;
|
|
12
|
+
rowDataChangeLog$;
|
|
13
|
+
undoChangeLog;
|
|
14
|
+
undoChangeTimers;
|
|
7
15
|
constructor(adaptable) {
|
|
8
16
|
this.adaptable = adaptable;
|
|
9
|
-
this.on = (eventName, callback) => this.emitter.on(eventName, callback);
|
|
10
|
-
this.emit = (eventName, data) => this.emitter.emit(eventName, data);
|
|
11
17
|
this.adaptable = adaptable;
|
|
12
18
|
this.emitter = new Emitter();
|
|
13
19
|
this.cellDataChangeLogSubject$ = new Subject();
|
|
@@ -31,6 +37,8 @@ export class DataService {
|
|
|
31
37
|
this.undoChangeTimers.clear();
|
|
32
38
|
this.undoChangeTimers = null;
|
|
33
39
|
}
|
|
40
|
+
on = (eventName, callback) => this.emitter.on(eventName, callback);
|
|
41
|
+
emit = (eventName, data) => this.emitter.emit(eventName, data);
|
|
34
42
|
CreateCellDataChangedEvent(cellDataChangedInfo) {
|
|
35
43
|
if (cellDataChangedInfo.newValue != cellDataChangedInfo.oldValue) {
|
|
36
44
|
this.emitter.emitSync('CellDataChanged', cellDataChangedInfo);
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { ContextConfiguration } from '../../AdaptableState/Common/Fdc3Context';
|
|
2
2
|
import { Fdc3IntentConfiguration } from '../../AdaptableState/Common/Fdc3Intent';
|
|
3
3
|
export class Fdc3Service {
|
|
4
|
+
adaptableApi;
|
|
5
|
+
contextHandlerSubscriptions = [];
|
|
6
|
+
intentHandlerSubscriptions = [];
|
|
7
|
+
loggedAgentError = false;
|
|
8
|
+
uiControlsDefaultConfiguration;
|
|
4
9
|
constructor(adaptableApi) {
|
|
5
10
|
this.adaptableApi = adaptableApi;
|
|
6
|
-
this.contextHandlerSubscriptions = [];
|
|
7
|
-
this.intentHandlerSubscriptions = [];
|
|
8
|
-
this.loggedAgentError = false;
|
|
9
11
|
// 1. Subscribe to FDC3 events
|
|
10
12
|
const adaptableHandleIntentFn = this.getFdc3Options().intents?.handleIntent;
|
|
11
13
|
const listenForIntents = this.getFdc3Options().intents?.listensFor ?? [];
|
|
@@ -3,6 +3,11 @@ export const FLASHING_CELL_ROW_KEY = '__ROW';
|
|
|
3
3
|
* This service manages Flashing Cells
|
|
4
4
|
*/
|
|
5
5
|
export class FlashingCellService {
|
|
6
|
+
api;
|
|
7
|
+
// map of rowPrimaryKey -> ColIdOrRowId -> FlashingCellUuid
|
|
8
|
+
gridCellsCurrentlyFlashing;
|
|
9
|
+
// map of FlashingCellUuid -> FlashingCell
|
|
10
|
+
flashingCellsMapping;
|
|
6
11
|
constructor(api) {
|
|
7
12
|
this.api = api;
|
|
8
13
|
this.gridCellsCurrentlyFlashing = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LicenseDisablePersistence as e,LicenseShowWatermark as a}from"../../../Redux/ActionsReducers/InternalRedux";import{PopupShowAlert as t}from"../../../Redux/ActionsReducers/PopupRedux";import i from"../../ObjectFactory";import s from"lodash/clamp";import{LicenseDocsLink as o}from"../../Constants/DocumentationLinkConstants";import{decode as n,GENERIC_APP_NAME as r}from"../../license/decode";import{shouldLogThankYouMessage as l}from"./shouldLogThankYouMessage";const c="sales@adaptabletools.com",p=10,d=864e5;export var LicenseValidityType;!function(e){e.INVALID_LICENSE="INVALID_LICENSE",e.NO_LICENSE="NO_LICENSE",e.NON_PRODUCTION_VALID="NON_PRODUCTION_VALID",e.NON_PRODUCTION_EXPIRED_IN_SCOPE="NON_PRODUCTION_EXPIRED_IN_SCOPE",e.NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE="NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE",e.COMMERCIAL_VALID="COMMERCIAL_VALID",e.COMMERCIAL_EXPIRED_IN_SCOPE="COMMERCIAL_EXPIRED_IN_SCOPE",e.COMMERCIAL_EXPIRED_OUT_OF_SCOPE="COMMERCIAL_EXPIRED_OUT_OF_SCOPE"}(LicenseValidityType||(LicenseValidityType={}));const h=()=>"undefined"!=typeof window?window.location.origin:"",E=()=>{const e=h(),[a,t,i]=Array.from(/(https):\/\/\d+\-\d+\-\d+\-(sandpack\.codesandbox\.io)/g.exec(e)||[]);return"https"===t&&"sandpack.codesandbox.io"===i},I=()=>{const e=h(),[a,t,i]=Array.from(/(https):\/\/\S+(\.csb\.app)/g.exec(e)||[]);return"https"===t&&".csb.app"===i},_=()=>{const e=h(),[a,t,i]=Array.from(/(https):\/\/\S+(\.adaptabletools\.com)/g.exec(e)||[]);return"https"===t&&".adaptabletools.com"===i};export class LicenseService{constructor(e,a,t){this.adaptable=e,this.licenseKey=a,this.packageDetails=t,this.adaptable=e,this.adaptable.api.eventApi.on("AdaptableReady",()=>{requestAnimationFrame(()=>{this.adaptable.isDestroyed||this.init()})})}init(){let e=null;if(this.licenseKey)try{e=n(this.licenseKey)}catch(a){e=a}E()||I()||_()||this.handleLicenseValidation(e,this.getValidityType(e,this.packageDetails))}getValidityType(e,a){if(!e)return LicenseValidityType.NO_LICENSE;if(e instanceof Error)return LicenseValidityType.INVALID_LICENSE;const t=new Date(a.publishedAt),i=new Date(e.end),s=i<new Date,o=e.trial;let n=null;return n=s?i>t?o?LicenseValidityType.NON_PRODUCTION_EXPIRED_IN_SCOPE:LicenseValidityType.COMMERCIAL_EXPIRED_IN_SCOPE:o?LicenseValidityType.NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE:LicenseValidityType.COMMERCIAL_EXPIRED_OUT_OF_SCOPE:o?LicenseValidityType.NON_PRODUCTION_VALID:LicenseValidityType.COMMERCIAL_VALID,n}handleLicenseValidation(e,a){const t=new Date;t.setHours(0,0,0,0);let i=0;e instanceof Error||!e?.end||(i=Math.floor((e?.end?.getTime()-t.getTime())/d),i=s(i,0,1/0));let n="",h="";!e||e instanceof Error||!e.appName||e.appName==r||(n=e.appName,h=" for application [APP_NAME]");const E=(e,a=o,t=c,s=i,r=n)=>e.replace("[LINK]",a).replace("[EMAIL]",t).replace("[APP_NAME]",r).replace("[DAYS]",`${s}`);switch(a){case"NO_LICENSE":case"NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE":this.adaptable.logger.consoleLogByMessageType(E("This instance of AdapTable does not have a license, and some functionality has therefore been removed. In order to use a fully-featured version of AdapTable, please contact [EMAIL]. You can learn more about the different AdapTable license options at [LINK]."),"Error"),this.showNotification("No AdapTable License found."),this.showWatermark("This instance of AdapTable does not have a license, and some functionality has therefore been removed."),this.disableStatePersistence();break;case"INVALID_LICENSE":this.adaptable.logger.consoleLogByMessageType(E("This instance of AdapTable seems to use a corrupted License, and some functionality has therefore been removed. In order to use a fully-featured version of AdapTable, please contact [EMAIL]. You can learn more about the different AdapTable license options at [LINK]."),"Error"),this.showNotification("Corrupted AdapTable License found."),this.showWatermark("This instance of AdapTable has a corrupted License, and some functionality has therefore been removed."),this.disableStatePersistence();break;case"NON_PRODUCTION_VALID":this.adaptable.logger.consoleLogByMessageType(E("This AdapTable trial license expires in [DAYS] days. Please contact [EMAIL] to upgrade to a commercial version of AdapTable. You can learn more about the different AdapTable license options at [LINK]."),"Info");break;case"NON_PRODUCTION_EXPIRED_IN_SCOPE":this.adaptable.logger.consoleLogByMessageType(E("This AdapTable trial license has now expired. Please contact [EMAIL] to upgrade to a commercial version of AdapTable. You can learn more about the different AdapTable license options at [LINK]."),"Warning"),this.showWatermark("AdapTable License has expired");break;case"COMMERCIAL_VALID":if(i<=p)this.adaptable.logger.consoleLogByMessageType(E(`This AdapTable license${h} expires in [DAYS] days. Please contact [EMAIL] to renew (giving you access to Support and Updates)`),"Info");else try{l()&&this.adaptable.logger.consoleLogByMessageType(E(`Thank you for using a valid AdapTable license${h}. Your license will expire in [DAYS] days.`),"Info")}catch(e){}break;case"COMMERCIAL_EXPIRED_IN_SCOPE":this.adaptable.logger.consoleLogByMessageType(E(`This AdapTable license${h} has expired. Please contact [EMAIL] if you wish to renew (giving you access to Support and Updates)`),"Warning");break;case"COMMERCIAL_EXPIRED_OUT_OF_SCOPE":this.adaptable.logger.consoleLogByMessageType(E(`This AdapTable license${h} has expired. Adaptable version was published after the license expired. Please contact [EMAIL] if you wish to renew your license.`),"Error"),this.showNotification("Adaptable License has expired"),this.showWatermark("Adaptable License has expired")}}showNotification(e){this.adaptable.api.internalApi.dispatchReduxAction(t({alertType:"generic",header:"License Error",message:e,alertDefinition:i.CreateInternalAlertDefinitionForMessages("Error")}))}showWatermark(e){this.adaptable.api.internalApi.dispatchReduxAction(a(e))}disableStatePersistence(){this.adaptable.api.internalApi.dispatchReduxAction(e())}destroy(){}}
|
|
1
|
+
import{LicenseDisablePersistence as e,LicenseShowWatermark as a}from"../../../Redux/ActionsReducers/InternalRedux";import{PopupShowAlert as t}from"../../../Redux/ActionsReducers/PopupRedux";import i from"../../ObjectFactory";import s from"lodash/clamp";import{LicenseDocsLink as o}from"../../Constants/DocumentationLinkConstants";import{decode as n,GENERIC_APP_NAME as r}from"../../license/decode";import{shouldLogThankYouMessage as l}from"./shouldLogThankYouMessage";const c="sales@adaptabletools.com",p=10,d=864e5;export var LicenseValidityType;!function(e){e.INVALID_LICENSE="INVALID_LICENSE",e.NO_LICENSE="NO_LICENSE",e.NON_PRODUCTION_VALID="NON_PRODUCTION_VALID",e.NON_PRODUCTION_EXPIRED_IN_SCOPE="NON_PRODUCTION_EXPIRED_IN_SCOPE",e.NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE="NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE",e.COMMERCIAL_VALID="COMMERCIAL_VALID",e.COMMERCIAL_EXPIRED_IN_SCOPE="COMMERCIAL_EXPIRED_IN_SCOPE",e.COMMERCIAL_EXPIRED_OUT_OF_SCOPE="COMMERCIAL_EXPIRED_OUT_OF_SCOPE"}(LicenseValidityType||(LicenseValidityType={}));const h=()=>"undefined"!=typeof window?window.location.origin:"",E=()=>{const e=h(),[a,t,i]=Array.from(/(https):\/\/\d+\-\d+\-\d+\-(sandpack\.codesandbox\.io)/g.exec(e)||[]);return"https"===t&&"sandpack.codesandbox.io"===i},I=()=>{const e=h(),[a,t,i]=Array.from(/(https):\/\/\S+(\.csb\.app)/g.exec(e)||[]);return"https"===t&&".csb.app"===i},_=()=>{const e=h(),[a,t,i]=Array.from(/(https):\/\/\S+(\.adaptabletools\.com)/g.exec(e)||[]);return"https"===t&&".adaptabletools.com"===i};export class LicenseService{adaptable;licenseKey;packageDetails;constructor(e,a,t){this.adaptable=e,this.licenseKey=a,this.packageDetails=t,this.adaptable=e,this.adaptable.api.eventApi.on("AdaptableReady",()=>{requestAnimationFrame(()=>{this.adaptable.isDestroyed||this.init()})})}init(){let e=null;if(this.licenseKey)try{e=n(this.licenseKey)}catch(a){e=a}E()||I()||_()||this.handleLicenseValidation(e,this.getValidityType(e,this.packageDetails))}getValidityType(e,a){if(!e)return LicenseValidityType.NO_LICENSE;if(e instanceof Error)return LicenseValidityType.INVALID_LICENSE;const t=new Date(a.publishedAt),i=new Date(e.end),s=i<new Date,o=e.trial;let n=null;return n=s?i>t?o?LicenseValidityType.NON_PRODUCTION_EXPIRED_IN_SCOPE:LicenseValidityType.COMMERCIAL_EXPIRED_IN_SCOPE:o?LicenseValidityType.NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE:LicenseValidityType.COMMERCIAL_EXPIRED_OUT_OF_SCOPE:o?LicenseValidityType.NON_PRODUCTION_VALID:LicenseValidityType.COMMERCIAL_VALID,n}handleLicenseValidation(e,a){const t=new Date;t.setHours(0,0,0,0);let i=0;e instanceof Error||!e?.end||(i=Math.floor((e?.end?.getTime()-t.getTime())/d),i=s(i,0,1/0));let n="",h="";!e||e instanceof Error||!e.appName||e.appName==r||(n=e.appName,h=" for application [APP_NAME]");const E=(e,a=o,t=c,s=i,r=n)=>e.replace("[LINK]",a).replace("[EMAIL]",t).replace("[APP_NAME]",r).replace("[DAYS]",`${s}`);switch(a){case"NO_LICENSE":case"NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE":this.adaptable.logger.consoleLogByMessageType(E("This instance of AdapTable does not have a license, and some functionality has therefore been removed. In order to use a fully-featured version of AdapTable, please contact [EMAIL]. You can learn more about the different AdapTable license options at [LINK]."),"Error"),this.showNotification("No AdapTable License found."),this.showWatermark("This instance of AdapTable does not have a license, and some functionality has therefore been removed."),this.disableStatePersistence();break;case"INVALID_LICENSE":this.adaptable.logger.consoleLogByMessageType(E("This instance of AdapTable seems to use a corrupted License, and some functionality has therefore been removed. In order to use a fully-featured version of AdapTable, please contact [EMAIL]. You can learn more about the different AdapTable license options at [LINK]."),"Error"),this.showNotification("Corrupted AdapTable License found."),this.showWatermark("This instance of AdapTable has a corrupted License, and some functionality has therefore been removed."),this.disableStatePersistence();break;case"NON_PRODUCTION_VALID":this.adaptable.logger.consoleLogByMessageType(E("This AdapTable trial license expires in [DAYS] days. Please contact [EMAIL] to upgrade to a commercial version of AdapTable. You can learn more about the different AdapTable license options at [LINK]."),"Info");break;case"NON_PRODUCTION_EXPIRED_IN_SCOPE":this.adaptable.logger.consoleLogByMessageType(E("This AdapTable trial license has now expired. Please contact [EMAIL] to upgrade to a commercial version of AdapTable. You can learn more about the different AdapTable license options at [LINK]."),"Warning"),this.showWatermark("AdapTable License has expired");break;case"COMMERCIAL_VALID":if(i<=p)this.adaptable.logger.consoleLogByMessageType(E(`This AdapTable license${h} expires in [DAYS] days. Please contact [EMAIL] to renew (giving you access to Support and Updates)`),"Info");else try{l()&&this.adaptable.logger.consoleLogByMessageType(E(`Thank you for using a valid AdapTable license${h}. Your license will expire in [DAYS] days.`),"Info")}catch(e){}break;case"COMMERCIAL_EXPIRED_IN_SCOPE":this.adaptable.logger.consoleLogByMessageType(E(`This AdapTable license${h} has expired. Please contact [EMAIL] if you wish to renew (giving you access to Support and Updates)`),"Warning");break;case"COMMERCIAL_EXPIRED_OUT_OF_SCOPE":this.adaptable.logger.consoleLogByMessageType(E(`This AdapTable license${h} has expired. Adaptable version was published after the license expired. Please contact [EMAIL] if you wish to renew your license.`),"Error"),this.showNotification("Adaptable License has expired"),this.showWatermark("Adaptable License has expired")}}showNotification(e){this.adaptable.api.internalApi.dispatchReduxAction(t({alertType:"generic",header:"License Error",message:e,alertDefinition:i.CreateInternalAlertDefinitionForMessages("Error")}))}showWatermark(e){this.adaptable.api.internalApi.dispatchReduxAction(a(e))}disableStatePersistence(){this.adaptable.api.internalApi.dispatchReduxAction(e())}destroy(){}}
|
|
@@ -5,9 +5,9 @@ import { AdaptableLogger } from '../../agGrid/AdaptableLogger';
|
|
|
5
5
|
import { getDefaultAdaptableOptions } from '../../AdaptableOptions/DefaultAdaptableOptions';
|
|
6
6
|
const supportedMetamodelTypes = ['s', 'n', 'b', 'a', 'f', 'R'];
|
|
7
7
|
export class MetamodelService {
|
|
8
|
+
gridInfoOptions = new Map();
|
|
9
|
+
getAdaptableOptions = () => null;
|
|
8
10
|
constructor(getAdaptableOptions, validateOptions) {
|
|
9
|
-
this.gridInfoOptions = new Map();
|
|
10
|
-
this.getAdaptableOptions = () => null;
|
|
11
11
|
this.getAdaptableOptions = getAdaptableOptions;
|
|
12
12
|
this.gridInfoOptions = this.buildGridInfoOptions();
|
|
13
13
|
if (validateOptions) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Helper from '../Helpers/Helper';
|
|
2
2
|
import { AgGridRequiredModulesDocsLink, HOST_URL_DOCS, } from '../Constants/DocumentationLinkConstants';
|
|
3
3
|
export class ModuleService {
|
|
4
|
+
adaptableApi;
|
|
4
5
|
constructor(adaptableApi) {
|
|
5
6
|
this.adaptableApi = adaptableApi;
|
|
6
7
|
this.adaptableApi = adaptableApi;
|
|
@@ -9,13 +9,14 @@ import { scalarExpressionFunctions } from '../ExpressionFunctions/scalarExpressi
|
|
|
9
9
|
import { getTypedKeys } from '../Extensions/TypeExtensions';
|
|
10
10
|
import { AggregatedScalarLiveValue } from './AggregatedScalarLiveValue';
|
|
11
11
|
export class QueryLanguageService {
|
|
12
|
+
adaptableApi;
|
|
13
|
+
cacheBooleanValidation = new Map();
|
|
14
|
+
cacheObservableValidation = new Map();
|
|
15
|
+
cacheAggregatedBooleanValidation = new Map();
|
|
16
|
+
cacheAggregatedScalarValidation = new Map();
|
|
17
|
+
cacheModuleSpecificExpressionFunctions = new Map();
|
|
12
18
|
constructor(adaptableApi) {
|
|
13
19
|
this.adaptableApi = adaptableApi;
|
|
14
|
-
this.cacheBooleanValidation = new Map();
|
|
15
|
-
this.cacheObservableValidation = new Map();
|
|
16
|
-
this.cacheAggregatedBooleanValidation = new Map();
|
|
17
|
-
this.cacheAggregatedScalarValidation = new Map();
|
|
18
|
-
this.cacheModuleSpecificExpressionFunctions = new Map();
|
|
19
20
|
}
|
|
20
21
|
evaluateBooleanExpression(expression, module, rowNode, evalContext) {
|
|
21
22
|
if (expression == undefined) {
|
|
@@ -10,15 +10,12 @@ import isEqual from 'lodash/isEqual';
|
|
|
10
10
|
* The logic is extracted here to make it easier to follow
|
|
11
11
|
*/
|
|
12
12
|
export class RowSummaryService {
|
|
13
|
+
api;
|
|
14
|
+
cachedCellSummary = new Map();
|
|
15
|
+
previousRowSummaries;
|
|
16
|
+
previousLayout;
|
|
13
17
|
constructor(api) {
|
|
14
18
|
this.api = api;
|
|
15
|
-
this.cachedCellSummary = new Map();
|
|
16
|
-
this._throttleAcumulatedColumnsThatChanged = new Set();
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* @param colId optional to evaluate only one column
|
|
20
|
-
*/
|
|
21
|
-
this._throttledEvaluateRowSummary = throttle(this.evaluateRowSummary, 300);
|
|
22
19
|
}
|
|
23
20
|
onAdaptableReady() {
|
|
24
21
|
this.rowSummariesSubscriptions();
|
|
@@ -66,12 +63,18 @@ export class RowSummaryService {
|
|
|
66
63
|
this.throttledEvaluateRowSummary();
|
|
67
64
|
});
|
|
68
65
|
}
|
|
66
|
+
_throttleAcumulatedColumnsThatChanged = new Set();
|
|
69
67
|
throttledEvaluateRowSummary(reason) {
|
|
70
68
|
if (reason) {
|
|
71
69
|
reason.columnIds.forEach((col) => this._throttleAcumulatedColumnsThatChanged.add(col));
|
|
72
70
|
}
|
|
73
71
|
this._throttledEvaluateRowSummary(reason);
|
|
74
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
*
|
|
75
|
+
* @param colId optional to evaluate only one column
|
|
76
|
+
*/
|
|
77
|
+
_throttledEvaluateRowSummary = throttle(this.evaluateRowSummary, 300);
|
|
75
78
|
evaluateRowSummary(reason) {
|
|
76
79
|
if (this._throttleAcumulatedColumnsThatChanged.size > 0) {
|
|
77
80
|
const columnIds = Array.from(this._throttleAcumulatedColumnsThatChanged.values());
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { createUuid } from '../../AdaptableState/Uuid';
|
|
2
2
|
import ObjectFactory from '../ObjectFactory';
|
|
3
3
|
export class TeamSharingService {
|
|
4
|
+
adaptableApi;
|
|
5
|
+
dismissedNotifications = [];
|
|
6
|
+
updateCheckTimerId;
|
|
4
7
|
constructor(adaptableApi) {
|
|
5
8
|
this.adaptableApi = adaptableApi;
|
|
6
|
-
this.dismissedNotifications = [];
|
|
7
9
|
const teamSharingOptions = adaptableApi.optionsApi.getTeamSharingOptions();
|
|
8
10
|
if (teamSharingOptions.updateInterval > 0) {
|
|
9
11
|
// convert minutes to millis
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
export class ThemeService {
|
|
2
|
+
api;
|
|
3
|
+
unsubscribe = () => { };
|
|
4
|
+
styleSheetObject;
|
|
2
5
|
constructor(api) {
|
|
3
|
-
this.unsubscribe = () => { };
|
|
4
|
-
this.onThemeChanged = () => {
|
|
5
|
-
let currentTheme = this.api.themeApi.getCurrentThemeObject();
|
|
6
|
-
currentTheme = this.mapOsTheme(currentTheme);
|
|
7
|
-
this.applyNewThemeVariables(currentTheme);
|
|
8
|
-
// this needs to be called after variables are set
|
|
9
|
-
// as it may show the warning for a custom/runtime theme
|
|
10
|
-
this.showMissingThemeFiles(currentTheme);
|
|
11
|
-
};
|
|
12
6
|
this.api = api;
|
|
13
7
|
this.subscribe();
|
|
14
8
|
if (!this.styleSheetObject) {
|
|
@@ -33,6 +27,14 @@ export class ThemeService {
|
|
|
33
27
|
prefferedColorSchemeUnsubscribe();
|
|
34
28
|
};
|
|
35
29
|
}
|
|
30
|
+
onThemeChanged = () => {
|
|
31
|
+
let currentTheme = this.api.themeApi.getCurrentThemeObject();
|
|
32
|
+
currentTheme = this.mapOsTheme(currentTheme);
|
|
33
|
+
this.applyNewThemeVariables(currentTheme);
|
|
34
|
+
// this needs to be called after variables are set
|
|
35
|
+
// as it may show the warning for a custom/runtime theme
|
|
36
|
+
this.showMissingThemeFiles(currentTheme);
|
|
37
|
+
};
|
|
36
38
|
applyNewThemeVariables(theme) {
|
|
37
39
|
const variables = theme.CSSVariables;
|
|
38
40
|
if (!variables || Object.keys(variables).length === 0) {
|
|
@@ -4,6 +4,7 @@ import { AlertModuleId } from '../Constants/ModuleConstants';
|
|
|
4
4
|
import { SERVER_VALIDATION_HEADER, SERVER_VALIDATION_MESSAGE_TYPE, } from '../Constants/GeneralConstants';
|
|
5
5
|
import { errorOnce } from '../../agGrid/AdaptableLogger';
|
|
6
6
|
export class ValidationService {
|
|
7
|
+
adaptableApi;
|
|
7
8
|
constructor(adaptableApi) {
|
|
8
9
|
this.adaptableApi = adaptableApi;
|
|
9
10
|
this.adaptableApi = adaptableApi;
|
|
@@ -9,14 +9,6 @@ import { CalculatedColumnWizard } from './Wizard/CalculatedColumnWizard';
|
|
|
9
9
|
export class CalculatedColumnSummaryComponent extends React.Component {
|
|
10
10
|
constructor(props) {
|
|
11
11
|
super(props);
|
|
12
|
-
this.onFinishWizard = (calculatedColumn) => {
|
|
13
|
-
this.props.onEdit(calculatedColumn);
|
|
14
|
-
this.setState({
|
|
15
|
-
editedAdaptableObject: null,
|
|
16
|
-
wizardStartIndex: 0,
|
|
17
|
-
wizardStatus: WizardStatus.None,
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
12
|
this.state = UIHelper.getEmptyConfigState();
|
|
21
13
|
}
|
|
22
14
|
render() {
|
|
@@ -44,6 +36,14 @@ export class CalculatedColumnSummaryComponent extends React.Component {
|
|
|
44
36
|
wizardStatus: WizardStatus.None,
|
|
45
37
|
});
|
|
46
38
|
}
|
|
39
|
+
onFinishWizard = (calculatedColumn) => {
|
|
40
|
+
this.props.onEdit(calculatedColumn);
|
|
41
|
+
this.setState({
|
|
42
|
+
editedAdaptableObject: null,
|
|
43
|
+
wizardStartIndex: 0,
|
|
44
|
+
wizardStatus: WizardStatus.None,
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
47
|
}
|
|
48
48
|
function mapStateToProps(state) {
|
|
49
49
|
return {
|
|
@@ -10,6 +10,7 @@ import { connect } from 'react-redux';
|
|
|
10
10
|
import { Select } from '../../components/Select';
|
|
11
11
|
import { Flex } from '../../components/Flex';
|
|
12
12
|
class CellSummaryViewPanelComponent extends React.Component {
|
|
13
|
+
cleanupEvent;
|
|
13
14
|
constructor(props) {
|
|
14
15
|
super(props);
|
|
15
16
|
}
|
|
@@ -7,6 +7,15 @@ const Glyphicon = ({ glyph, style }) => {
|
|
|
7
7
|
};
|
|
8
8
|
const baseClassName = 'ab-Button twa:text-current';
|
|
9
9
|
export class ButtonBase extends React.Component {
|
|
10
|
+
static defaultProps = {
|
|
11
|
+
overrideDisableButton: false,
|
|
12
|
+
toolTipAndText: '',
|
|
13
|
+
glyph: '',
|
|
14
|
+
displayMode: 'Glyph+Text',
|
|
15
|
+
transformGlyph: false,
|
|
16
|
+
accessLevel: 'Full',
|
|
17
|
+
showDefaultStyle: false,
|
|
18
|
+
};
|
|
10
19
|
render() {
|
|
11
20
|
let isDisabled;
|
|
12
21
|
isDisabled = this.props.accessLevel == 'Hidden';
|
|
@@ -59,12 +68,3 @@ export class ButtonBase extends React.Component {
|
|
|
59
68
|
return hideToolTip ? button : buttonwithtooltip;
|
|
60
69
|
}
|
|
61
70
|
}
|
|
62
|
-
ButtonBase.defaultProps = {
|
|
63
|
-
overrideDisableButton: false,
|
|
64
|
-
toolTipAndText: '',
|
|
65
|
-
glyph: '',
|
|
66
|
-
displayMode: 'Glyph+Text',
|
|
67
|
-
transformGlyph: false,
|
|
68
|
-
accessLevel: 'Full',
|
|
69
|
-
showDefaultStyle: false,
|
|
70
|
-
};
|
|
@@ -10,6 +10,24 @@ const stopPropagation = (e) => {
|
|
|
10
10
|
e.stopPropagation();
|
|
11
11
|
};
|
|
12
12
|
export class EntityListActionButtons extends React.Component {
|
|
13
|
+
static defaultProps = {
|
|
14
|
+
// Adaptable: null,
|
|
15
|
+
suspendableObject: null,
|
|
16
|
+
showEdit: true,
|
|
17
|
+
showDelete: true,
|
|
18
|
+
showShare: false,
|
|
19
|
+
showSuspend: false,
|
|
20
|
+
overrideDisableEdit: false,
|
|
21
|
+
overrideDisableDelete: false,
|
|
22
|
+
overrideDisableClone: false,
|
|
23
|
+
overrideDisableShare: false,
|
|
24
|
+
confirmDeleteAction: null,
|
|
25
|
+
entityType: '',
|
|
26
|
+
accessLevel: 'Full',
|
|
27
|
+
editSize: 'xsmall',
|
|
28
|
+
deleteSize: 'xsmall',
|
|
29
|
+
shareSize: 'xsmall',
|
|
30
|
+
};
|
|
13
31
|
render() {
|
|
14
32
|
const { justifyContent } = this.props;
|
|
15
33
|
const justifyContentClassName = clsx({
|
|
@@ -25,21 +43,3 @@ export class EntityListActionButtons extends React.Component {
|
|
|
25
43
|
this.props.showSuspend && this.props.suspendableObject && (React.createElement(SuspendToggleButton, { className: `twa:ml-[2px] twa:align-self-center`, onSuspend: this.props.onSuspend, onUnSuspend: this.props.onUnSuspend, suspendableObject: this.props.suspendableObject, disabled: this.props.accessLevel == 'ReadOnly' }))));
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
|
-
EntityListActionButtons.defaultProps = {
|
|
29
|
-
// Adaptable: null,
|
|
30
|
-
suspendableObject: null,
|
|
31
|
-
showEdit: true,
|
|
32
|
-
showDelete: true,
|
|
33
|
-
showShare: false,
|
|
34
|
-
showSuspend: false,
|
|
35
|
-
overrideDisableEdit: false,
|
|
36
|
-
overrideDisableDelete: false,
|
|
37
|
-
overrideDisableClone: false,
|
|
38
|
-
overrideDisableShare: false,
|
|
39
|
-
confirmDeleteAction: null,
|
|
40
|
-
entityType: '',
|
|
41
|
-
accessLevel: 'Full',
|
|
42
|
-
editSize: 'xsmall',
|
|
43
|
-
deleteSize: 'xsmall',
|
|
44
|
-
shareSize: 'xsmall',
|
|
45
|
-
};
|
|
@@ -204,7 +204,7 @@ export const FloatingFilterValues = (props) => {
|
|
|
204
204
|
...(props.value?.length
|
|
205
205
|
? {
|
|
206
206
|
valueContainer: {
|
|
207
|
-
fontWeight: 'var(--ab-cmp-
|
|
207
|
+
fontWeight: 'var(--ab-cmp-floatingfilter-selected-options-text__font-weight)',
|
|
208
208
|
},
|
|
209
209
|
}
|
|
210
210
|
: {}),
|
|
@@ -9,11 +9,6 @@ import { Flex } from '../../components/Flex';
|
|
|
9
9
|
export class ExpressionWizard extends React.Component {
|
|
10
10
|
constructor(props) {
|
|
11
11
|
super(props);
|
|
12
|
-
this.handleCustomExpressionChange = (expression) => {
|
|
13
|
-
this.setState({
|
|
14
|
-
expression,
|
|
15
|
-
}, () => this.props.updateGoBackState());
|
|
16
|
-
};
|
|
17
12
|
this.state = {
|
|
18
13
|
// this is realy horrible but its only way to use the Expression Wizard for both Report (that has Query) and Format Column (that has Rule)
|
|
19
14
|
// once we move to the new Wizard we can remove this monstrosity
|
|
@@ -43,6 +38,11 @@ export class ExpressionWizard extends React.Component {
|
|
|
43
38
|
.getQueryLanguageService()
|
|
44
39
|
.validateBoolean(this.state.expression, NamedQueryModuleId).isValid);
|
|
45
40
|
}
|
|
41
|
+
handleCustomExpressionChange = (expression) => {
|
|
42
|
+
this.setState({
|
|
43
|
+
expression,
|
|
44
|
+
}, () => this.props.updateGoBackState());
|
|
45
|
+
};
|
|
46
46
|
canNext() {
|
|
47
47
|
if (this.isValidExpression() == false) {
|
|
48
48
|
return false;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { DashboardToolbar as DashboardToolbarUI } from '../../../../components/Dashboard';
|
|
3
3
|
export class PanelDashboard extends React.Component {
|
|
4
|
+
static defaultProps = {
|
|
5
|
+
showConfigureActionButton: true,
|
|
6
|
+
showCloseActionButton: true,
|
|
7
|
+
headerText: 'Module',
|
|
8
|
+
onClose: null,
|
|
9
|
+
onConfigure: null,
|
|
10
|
+
accessLevel: 'Full',
|
|
11
|
+
};
|
|
4
12
|
render() {
|
|
5
13
|
const { headerText, showConfigureActionButton, showCloseActionButton, onConfigure, onClose, accessLevel, children, } = this.props;
|
|
6
14
|
return (React.createElement(DashboardToolbarUI, { title: headerText, onConfigure: onConfigure, showConfigure: showConfigureActionButton, showClose: showCloseActionButton, onClose: onClose, accessLevel: accessLevel }, children));
|
|
7
15
|
}
|
|
8
16
|
}
|
|
9
|
-
PanelDashboard.defaultProps = {
|
|
10
|
-
showConfigureActionButton: true,
|
|
11
|
-
showCloseActionButton: true,
|
|
12
|
-
headerText: 'Module',
|
|
13
|
-
onClose: null,
|
|
14
|
-
onConfigure: null,
|
|
15
|
-
accessLevel: 'Full',
|
|
16
|
-
};
|
|
@@ -7,6 +7,13 @@ import { ButtonMaximise } from '../../Buttons/ButtonMaximise';
|
|
|
7
7
|
import { twMerge } from '../../../../twMerge';
|
|
8
8
|
import { Flex } from '../../../../components/Flex';
|
|
9
9
|
export class PanelToolPanel extends React.Component {
|
|
10
|
+
static defaultProps = {
|
|
11
|
+
headerText: '',
|
|
12
|
+
onClose: null,
|
|
13
|
+
onConfigure: null,
|
|
14
|
+
onMinimiseChanged: null,
|
|
15
|
+
isMinimised: true,
|
|
16
|
+
};
|
|
10
17
|
render() {
|
|
11
18
|
const { useDefaultPanelStyle, isMinimised, onMinimiseChanged, headerText, onClose, onConfigure, ...props } = this.props;
|
|
12
19
|
let header = (React.createElement(React.Fragment, null,
|
|
@@ -38,10 +45,3 @@ export class PanelToolPanel extends React.Component {
|
|
|
38
45
|
} }));
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
|
-
PanelToolPanel.defaultProps = {
|
|
42
|
-
headerText: '',
|
|
43
|
-
onClose: null,
|
|
44
|
-
onConfigure: null,
|
|
45
|
-
onMinimiseChanged: null,
|
|
46
|
-
isMinimised: true,
|
|
47
|
-
};
|