@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.
Files changed (133) hide show
  1. package/index.css +3 -14
  2. package/index.css.map +1 -1
  3. package/package.json +1 -1
  4. package/src/AdaptableOptions/AdaptablePlugin.js +6 -1
  5. package/src/AdaptableOptions/ExportOptions.d.ts +1 -2
  6. package/src/AdaptableOptions/FilterOptions.d.ts +3 -0
  7. package/src/AdaptableState/Common/AdaptableColumn.d.ts +6 -0
  8. package/src/AdaptableState/Common/RowDataChangedInfo.d.ts +3 -0
  9. package/src/AdaptableState/InitialState.d.ts +1 -1
  10. package/src/AdaptableState/Selection/GridCell.d.ts +9 -0
  11. package/src/Api/Implementation/ActionColumnApiImpl.js +1 -0
  12. package/src/Api/Implementation/AdaptableApiImpl.js +52 -0
  13. package/src/Api/Implementation/AlertApiImpl.js +1 -0
  14. package/src/Api/Implementation/ApiBase.js +1 -0
  15. package/src/Api/Implementation/CalculatedColumnApiImpl.js +1 -0
  16. package/src/Api/Implementation/ChartingApiImpl.js +4 -0
  17. package/src/Api/Implementation/ColumnApiImpl.js +1 -0
  18. package/src/Api/Implementation/ColumnFilterApiImpl.js +1 -0
  19. package/src/Api/Implementation/CommentsApiImpl.js +1 -0
  20. package/src/Api/Implementation/CustomSortApiImpl.js +1 -0
  21. package/src/Api/Implementation/DashboardApiImpl.js +1 -0
  22. package/src/Api/Implementation/DataChangeHistoryApiImpl.js +12 -15
  23. package/src/Api/Implementation/DataImportApiImpl.js +1 -0
  24. package/src/Api/Implementation/DataSetApiImpl.js +1 -0
  25. package/src/Api/Implementation/EntitlementApiImpl.js +1 -0
  26. package/src/Api/Implementation/EventApiImpl.js +16 -14
  27. package/src/Api/Implementation/ExportApiImpl.js +1 -0
  28. package/src/Api/Implementation/ExpressionApiImpl.js +1 -0
  29. package/src/Api/Implementation/Fdc3ApiImpl.js +1 -0
  30. package/src/Api/Implementation/FilterApiImpl.js +3 -0
  31. package/src/Api/Implementation/FlashingCellApiImpl.js +1 -0
  32. package/src/Api/Implementation/FormatColumnApiImpl.js +1 -0
  33. package/src/Api/Implementation/FreeTextColumnApiImpl.js +1 -0
  34. package/src/Api/Implementation/GridApiImpl.js +1 -0
  35. package/src/Api/Implementation/GridFilterApiImpl.js +1 -0
  36. package/src/Api/Implementation/LayoutApiImpl.js +1 -0
  37. package/src/Api/Implementation/NamedQueryApiImpl.js +1 -0
  38. package/src/Api/Implementation/NoteApiImpl.js +1 -0
  39. package/src/Api/Implementation/PredicateApiImpl.js +1 -0
  40. package/src/Api/Implementation/RowFormApiImpl.js +1 -0
  41. package/src/Api/Implementation/StyledColumnApiImpl.js +1 -0
  42. package/src/Api/Implementation/SystemStatusApiImpl.js +2 -0
  43. package/src/Api/Implementation/TeamSharingApiImpl.js +1 -0
  44. package/src/Api/Implementation/ThemeApiImpl.js +1 -0
  45. package/src/Api/Implementation/UserInterfaceApiImpl.js +2 -1
  46. package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +6 -0
  47. package/src/Redux/Store/AdaptableStore.js +49 -43
  48. package/src/Strategy/AdaptableModuleBase.js +4 -0
  49. package/src/Strategy/AlertModule.js +1 -0
  50. package/src/Strategy/CalculatedColumnModule.js +1 -0
  51. package/src/Strategy/CellSummaryModule.js +1 -1
  52. package/src/Strategy/DataChangeHistoryModule.js +1 -0
  53. package/src/Strategy/FlashingCellModule.js +1 -0
  54. package/src/Strategy/FreeTextColumnModule.js +1 -0
  55. package/src/Strategy/LayoutModule.js +2 -1
  56. package/src/Strategy/PlusMinusModule.js +2 -0
  57. package/src/Strategy/ScheduleModule.js +1 -0
  58. package/src/Strategy/ShortcutModule.js +2 -0
  59. package/src/Strategy/TeamSharingModule.js +10 -10
  60. package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +1 -1
  61. package/src/Utilities/Constants/DocumentationLinkConstants.js +1 -1
  62. package/src/Utilities/ExpressionFunctions/deepMap.js +31 -31
  63. package/src/Utilities/MenuItem.js +18 -0
  64. package/src/Utilities/Services/AggregatedScalarLiveValue.js +8 -0
  65. package/src/Utilities/Services/AlertService.js +6 -4
  66. package/src/Utilities/Services/AnnotationsService.js +3 -0
  67. package/src/Utilities/Services/CalculatedColumnExpressionService.js +2 -1
  68. package/src/Utilities/Services/ChartingService.js +1 -0
  69. package/src/Utilities/Services/DataService.js +10 -2
  70. package/src/Utilities/Services/Fdc3Service.js +5 -3
  71. package/src/Utilities/Services/FlashingCellService.js +5 -0
  72. package/src/Utilities/Services/LicenseService/index.js +1 -1
  73. package/src/Utilities/Services/MetamodelService.js +2 -2
  74. package/src/Utilities/Services/ModuleService.js +1 -0
  75. package/src/Utilities/Services/QueryLanguageService.js +6 -5
  76. package/src/Utilities/Services/RowFormService.js +1 -0
  77. package/src/Utilities/Services/RowSummaryService.js +10 -7
  78. package/src/Utilities/Services/TeamSharingService.js +3 -1
  79. package/src/Utilities/Services/ThemeService.js +11 -9
  80. package/src/Utilities/Services/ValidationService.js +1 -0
  81. package/src/Utilities/createAgStatusPanelComponent.js +3 -0
  82. package/src/View/BulkUpdate/BulkUpdateViewPanel.js +1 -0
  83. package/src/View/CalculatedColumn/CalculatedColumnSummary.js +8 -8
  84. package/src/View/CellSummary/CellSummaryViewPanel.js +1 -0
  85. package/src/View/Components/Buttons/ButtonBase/index.js +9 -9
  86. package/src/View/Components/Buttons/EntityListActionButtons.js +18 -18
  87. package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +1 -1
  88. package/src/View/Components/ExpressionWizard.js +5 -5
  89. package/src/View/Components/Panels/PanelDashboard/index.js +8 -8
  90. package/src/View/Components/Panels/PanelToolPanel/index.js +7 -7
  91. package/src/View/Components/ToolPanel/AdaptableToolPanel.js +2 -0
  92. package/src/View/CustomSort/CustomSortSummary.js +13 -13
  93. package/src/View/FormatColumn/FormatColumnSummary.js +13 -13
  94. package/src/View/FreeTextColumn/FreeTextColumnSummary.js +13 -13
  95. package/src/View/SmartEdit/SmartEditViewPanel.js +1 -0
  96. package/src/View/Theme/ThemePopup.js +13 -16
  97. package/src/agGrid/Adaptable.js +4 -0
  98. package/src/agGrid/AdaptableAgGrid.js +99 -33
  99. package/src/agGrid/AdaptableFilterHandler.js +4 -0
  100. package/src/agGrid/AdaptableLogger.d.ts +3 -0
  101. package/src/agGrid/AdaptableLogger.js +10 -0
  102. package/src/agGrid/AgGridAdapter.js +11 -1
  103. package/src/agGrid/AgGridColumnAdapter.js +2 -0
  104. package/src/agGrid/AgGridExportAdapter.js +10 -9
  105. package/src/agGrid/AgGridFilterAdapter.js +4 -0
  106. package/src/agGrid/AgGridFloatingFilterAdapter.js +3 -0
  107. package/src/agGrid/AgGridMenuAdapter.js +1 -0
  108. package/src/agGrid/AgGridModulesAdapter.js +2 -1
  109. package/src/agGrid/AgGridOptionsService.js +3 -0
  110. package/src/agGrid/AgGridThemeAdapter.js +2 -0
  111. package/src/agGrid/cellRenderers/ActionColumnRenderer.js +5 -0
  112. package/src/agGrid/cellRenderers/BadgeRenderer.js +2 -0
  113. package/src/agGrid/cellRenderers/PercentBarRenderer.js +1 -0
  114. package/src/agGrid/editors/AdaptableDateEditor/index.js +6 -3
  115. package/src/agGrid/editors/AdaptableNumberEditor/index.js +16 -12
  116. package/src/agGrid/editors/AdaptablePercentageEditor/index.js +17 -13
  117. package/src/agGrid/index.d.ts +6 -0
  118. package/src/agGrid/index.js +6 -0
  119. package/src/components/Datepicker/index.js +1 -1
  120. package/src/components/overlayBaseZIndex.js +1 -1
  121. package/src/components/utils/useContainerScrollObserver/index.js +17 -14
  122. package/src/devTools/index.js +54 -53
  123. package/src/env.js +2 -2
  124. package/src/layout-manager/src/LMEmitter.js +11 -11
  125. package/src/layout-manager/src/LMLogger.js +7 -0
  126. package/src/layout-manager/src/index.js +56 -51
  127. package/src/metamodel/adaptable.metamodel.d.ts +57 -0
  128. package/src/metamodel/adaptable.metamodel.js +1 -1
  129. package/src/migration/AdaptableUpgradeHelper.js +3 -0
  130. package/src/migration/VersionUpgrade.js +1 -0
  131. package/src/migration/VersionUpgrade17.js +1 -2
  132. package/src/parser/src/ExpressionEvaluationError.js +1 -0
  133. 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) {
@@ -1,6 +1,7 @@
1
1
  import * as InternalRedux from '../../Redux/ActionsReducers/InternalRedux';
2
2
  import ObjectFactory from '../ObjectFactory';
3
3
  export class ChartingService {
4
+ api;
4
5
  constructor(api) {
5
6
  this.api = api;
6
7
  }
@@ -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) {
@@ -1,4 +1,5 @@
1
1
  export class RowFormService {
2
+ adaptableApi;
2
3
  constructor(adaptableApi) {
3
4
  this.adaptableApi = adaptableApi;
4
5
  if (adaptableApi.optionsApi.getRowFormOptions().autoHandle) {
@@ -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;
@@ -19,6 +19,9 @@ export const createAgStatusPanelComponent = (component, adaptable, context) => {
19
19
  };
20
20
  }
21
21
  return class StatusBarRenderer {
22
+ params;
23
+ eGui;
24
+ unmountReactRoot;
22
25
  init(params) {
23
26
  this.params = params;
24
27
  this.eGui = document.createElement('div');
@@ -13,6 +13,7 @@ import { connect } from 'react-redux';
13
13
  import { Flex } from '../../components/Flex';
14
14
  import clsx from 'clsx';
15
15
  class BulkUpdateViewPanelComponent extends React.Component {
16
+ cleanupEvent;
16
17
  constructor(props) {
17
18
  super(props);
18
19
  this.state = {
@@ -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-quickfilter-selected-options-text__font-weight)',
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
- };