@adaptabletools/adaptable 18.0.0-canary.14 → 18.0.0-canary.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adaptabletools/adaptable",
3
- "version": "18.0.0-canary.14",
3
+ "version": "18.0.0-canary.16",
4
4
  "description": "Powerful data-agnostic HTML5 AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements",
5
5
  "keywords": [
6
6
  "web-components",
@@ -102,6 +102,12 @@ export interface ColumnFilterOptions<TData = any> {
102
102
  * @noCodeItem
103
103
  */
104
104
  showSuspendFilterButton?: boolean;
105
+ /**
106
+ * Wether to show Date Picker or only Date Input
107
+ *
108
+ * @default true
109
+ */
110
+ showDatePicker?: boolean;
105
111
  }
106
112
  /**
107
113
  * Options for managing the Filter Bar (aka Quick Filter)
@@ -177,6 +177,10 @@ type ModuleGroup = {
177
177
  icon?: AdaptableIcon;
178
178
  title: string;
179
179
  };
180
- export declare const DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE: (AdaptableModule | ModuleGroup)[];
181
180
  export declare const DEFAULT_ADAPTABLE_COLUMN_MENU_STRUCTURE: (AdaptableModule | ModuleGroup)[];
181
+ /**
182
+ * Defines the order of Menu Items in the CONTEXT Menu
183
+ * The items commented out do not have a Context Menu Option
184
+ */
185
+ export declare const DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE: (AdaptableModule | ModuleGroup)[];
182
186
  export {};
@@ -1,95 +1,96 @@
1
1
  import * as ModuleConstants from '../Utilities/Constants/ModuleConstants';
2
- export const DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE = [
3
- ModuleConstants.SettingsPanelModuleId,
2
+ export const DEFAULT_ADAPTABLE_COLUMN_MENU_STRUCTURE = [
3
+ ModuleConstants.CalculatedColumnModuleId,
4
+ ModuleConstants.CellSummaryModuleId,
5
+ ModuleConstants.ColumnFilterModuleId,
6
+ ModuleConstants.ColumnInfoModuleId,
7
+ ModuleConstants.CustomSortModuleId,
4
8
  ModuleConstants.DashboardModuleId,
5
- ModuleConstants.ToolPanelModuleId,
6
- ModuleConstants.StatusBarModuleId,
7
- ModuleConstants.LayoutModuleId,
8
- ModuleConstants.FormatColumnModuleId,
9
- ModuleConstants.StyledColumnModuleId,
9
+ ModuleConstants.DataImportModuleId,
10
10
  ModuleConstants.FlashingCellModuleId,
11
- ModuleConstants.CustomSortModuleId,
12
- ModuleConstants.CellSummaryModuleId,
13
- ModuleConstants.Fdc3ModuleId,
11
+ ModuleConstants.FormatColumnModuleId,
12
+ ModuleConstants.FreeTextColumnModuleId,
14
13
  ModuleConstants.GridInfoModuleId,
15
- ModuleConstants.ColumnInfoModuleId,
14
+ ModuleConstants.LayoutModuleId,
15
+ ModuleConstants.PlusMinusModuleId,
16
+ ModuleConstants.SettingsPanelModuleId,
17
+ ModuleConstants.StyledColumnModuleId,
18
+ ModuleConstants.SystemStatusModuleId, // Single Item - Always present
19
+ /*
20
+ // Modules that dont provide a Column Menu
16
21
  ModuleConstants.AlertModuleId,
17
- ModuleConstants.CalculatedColumnModuleId,
18
- ModuleConstants.ExportModuleId,
19
- ModuleConstants.ColumnFilterModuleId,
20
- {
21
- title: 'Edit',
22
- icon: {
23
- name: 'edit',
24
- },
25
- modules: [ModuleConstants.SmartEditModuleId, ModuleConstants.BulkUpdateModuleId],
26
- },
27
- ModuleConstants.TeamSharingModuleId,
22
+ ModuleConstants.BulkUpdateModuleId,
23
+ ModuleConstants.ChartingModuleId,
24
+ ModuleConstants.CommentModuleId,
28
25
  ModuleConstants.DataChangeHistoryModuleId,
29
26
  ModuleConstants.DataSetModuleId,
30
- ModuleConstants.FreeTextColumnModuleId,
27
+ ModuleConstants.ExportModuleId,
28
+ ModuleConstants.Fdc3ModuleId,
29
+ ModuleConstants.GridFilterModuleId,
31
30
  ModuleConstants.NamedQueryModuleId,
31
+ ModuleConstants.NoteModuleId,
32
32
  ModuleConstants.QuickSearchModuleId,
33
- ModuleConstants.DataSetModuleId,
34
- ModuleConstants.AlertModuleId,
35
- ModuleConstants.SystemStatusModuleId,
36
- ModuleConstants.CalculatedColumnModuleId,
37
- ModuleConstants.FreeTextColumnModuleId,
38
- ModuleConstants.ExportModuleId,
39
- ModuleConstants.DataImportModuleId,
40
- ModuleConstants.DataChangeHistoryModuleId,
41
- ModuleConstants.PlusMinusModuleId,
42
- ModuleConstants.ShortcutModuleId,
43
- ModuleConstants.TeamSharingModuleId,
44
33
  ModuleConstants.ScheduleModuleId,
34
+ ModuleConstants.ShortcutModuleId,
35
+ ModuleConstants.SmartEditModuleId,
45
36
  ModuleConstants.StateManagementModuleId,
37
+ ModuleConstants.StatusBarModuleId,
38
+ ModuleConstants.TeamSharingModuleId,
46
39
  ModuleConstants.ThemeModuleId,
47
- ModuleConstants.ChartingModuleId,
48
- ModuleConstants.NoteModuleId,
49
- ModuleConstants.CommentModuleId,
50
- ];
51
- export const DEFAULT_ADAPTABLE_COLUMN_MENU_STRUCTURE = [
52
- ModuleConstants.SettingsPanelModuleId,
53
- ModuleConstants.DashboardModuleId,
54
40
  ModuleConstants.ToolPanelModuleId,
55
- ModuleConstants.StatusBarModuleId,
56
- ModuleConstants.LayoutModuleId,
57
- ModuleConstants.FormatColumnModuleId,
58
- ModuleConstants.StyledColumnModuleId,
59
- ModuleConstants.FlashingCellModuleId,
60
- ModuleConstants.CustomSortModuleId,
61
- ModuleConstants.CellSummaryModuleId,
62
- ModuleConstants.Fdc3ModuleId,
63
- ModuleConstants.GridInfoModuleId,
64
- ModuleConstants.ColumnInfoModuleId,
41
+ */
42
+ ];
43
+ /**
44
+ * Defines the order of Menu Items in the CONTEXT Menu
45
+ * The items commented out do not have a Context Menu Option
46
+ */
47
+ export const DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE = [
65
48
  ModuleConstants.AlertModuleId,
49
+ ModuleConstants.BulkUpdateModuleId,
66
50
  ModuleConstants.CalculatedColumnModuleId,
67
- ModuleConstants.ExportModuleId,
51
+ ModuleConstants.CellSummaryModuleId,
68
52
  ModuleConstants.ColumnFilterModuleId,
69
- {
70
- title: 'Edit',
71
- modules: [ModuleConstants.SmartEditModuleId, ModuleConstants.BulkUpdateModuleId],
72
- },
73
- ModuleConstants.TeamSharingModuleId,
53
+ ModuleConstants.ColumnInfoModuleId,
54
+ ModuleConstants.CommentModuleId,
55
+ ModuleConstants.DashboardModuleId,
56
+ ModuleConstants.DataImportModuleId,
57
+ ModuleConstants.ExportModuleId,
58
+ ModuleConstants.Fdc3ModuleId,
59
+ ModuleConstants.FlashingCellModuleId,
60
+ ModuleConstants.GridInfoModuleId,
61
+ ModuleConstants.LayoutModuleId,
62
+ ModuleConstants.NoteModuleId,
63
+ ModuleConstants.SettingsPanelModuleId,
64
+ ModuleConstants.SmartEditModuleId,
65
+ ModuleConstants.SystemStatusModuleId, // Single Item - Always present
66
+ // this currently doesnt work
67
+ // {
68
+ // title: 'Edit',
69
+ // icon: {
70
+ // name: 'edit',
71
+ // },
72
+ // modules: [ModuleConstants.SmartEditModuleId, ModuleConstants.BulkUpdateModuleId],
73
+ // },
74
+ /*
75
+ // Modules that dont provide a Context Menu
76
+ ModuleConstants.ChartingModuleId,
77
+ ModuleConstants.CustomSortModuleId,
74
78
  ModuleConstants.DataChangeHistoryModuleId,
75
79
  ModuleConstants.DataSetModuleId,
80
+ ModuleConstants.FormatColumnModuleId,
76
81
  ModuleConstants.FreeTextColumnModuleId,
82
+ ModuleConstants.GridFilterModuleId,
77
83
  ModuleConstants.NamedQueryModuleId,
78
- ModuleConstants.QuickSearchModuleId,
79
- ModuleConstants.DataSetModuleId,
80
- ModuleConstants.AlertModuleId,
81
- ModuleConstants.SystemStatusModuleId,
82
- ModuleConstants.CalculatedColumnModuleId,
83
- ModuleConstants.FreeTextColumnModuleId,
84
- ModuleConstants.ExportModuleId,
85
- ModuleConstants.DataImportModuleId,
86
- ModuleConstants.DataChangeHistoryModuleId,
87
84
  ModuleConstants.PlusMinusModuleId,
88
- ModuleConstants.ShortcutModuleId,
89
- ModuleConstants.TeamSharingModuleId,
85
+ ModuleConstants.QuickSearchModuleId,
90
86
  ModuleConstants.ScheduleModuleId,
87
+ ModuleConstants.ShortcutModuleId,
91
88
  ModuleConstants.StateManagementModuleId,
89
+ ModuleConstants.StatusBarModuleId,
90
+ ModuleConstants.StyledColumnModuleId,
91
+ ModuleConstants.TeamSharingModuleId,
92
92
  ModuleConstants.ThemeModuleId,
93
- ModuleConstants.ChartingModuleId,
94
- ModuleConstants.NoteModuleId,
93
+ ModuleConstants.ToolPanelModuleId,
94
+
95
+ */
95
96
  ];
@@ -269,8 +269,10 @@ export const LayoutReducer = (state = initialState, action) => {
269
269
  return Object.assign(Object.assign({}, state), { Layouts });
270
270
  }
271
271
  case LAYOUT_COLUMN_FILTER_ADD: {
272
- let columnFilters = [...((_b = currentLayout.ColumnFilters) !== null && _b !== void 0 ? _b : [])];
273
272
  const columnFilterAction = action.columnFilter;
273
+ let columnFilters = ((_b = currentLayout.ColumnFilters) !== null && _b !== void 0 ? _b : []).filter(
274
+ // make sure we are not adding a filter that already exists
275
+ (cf) => cf.ColumnId !== columnFilterAction.ColumnId);
274
276
  AdaptableHelper.addUuidAndSource(columnFilterAction);
275
277
  columnFilters.push(columnFilterAction);
276
278
  const Layouts = state.Layouts.map((layout) => {
@@ -283,10 +285,13 @@ export const LayoutReducer = (state = initialState, action) => {
283
285
  }
284
286
  case LAYOUT_COLUMN_FILTER_EDIT: {
285
287
  const columnFilterAction = action.columnFilter;
286
- let columnFilters = ((_c = currentLayout.ColumnFilters) !== null && _c !== void 0 ? _c : []).map((abObject) => abObject.Uuid === columnFilterAction.Uuid ? columnFilterAction : abObject);
288
+ // it is safer to change the col id, we cannot have multiple filter on the same id
289
+ // first we filter out other filters with the same colId, to ensure we have only one
290
+ const cleanColumnFilters = ((_c = currentLayout.ColumnFilters) !== null && _c !== void 0 ? _c : []).filter((cf) => cf.ColumnId !== columnFilterAction.ColumnId);
291
+ cleanColumnFilters.push(columnFilterAction);
287
292
  const Layouts = state.Layouts.map((layout) => {
288
293
  if (layout.Name === currentLayout.Name) {
289
- return Object.assign(Object.assign({}, layout), { ColumnFilters: columnFilters });
294
+ return Object.assign(Object.assign({}, layout), { ColumnFilters: cleanColumnFilters });
290
295
  }
291
296
  return layout;
292
297
  });
@@ -302,14 +307,11 @@ export const LayoutReducer = (state = initialState, action) => {
302
307
  return Object.assign(Object.assign({}, state), { Layouts });
303
308
  }
304
309
  case LAYOUT_COLUMN_FILTER_CLEAR: {
305
- let columnFilters = [...((_d = currentLayout.ColumnFilters) !== null && _d !== void 0 ? _d : [])];
306
310
  const actionTypedDelete = action;
307
- const index = actionTypedDelete.columnFilter
308
- ? columnFilters.findIndex((i) => i.Uuid == actionTypedDelete.columnFilter.Uuid)
309
- : -1;
310
- if (index != -1) {
311
- columnFilters.splice(index, 1);
312
- }
311
+ const columnFilters = ((_d = currentLayout.ColumnFilters) !== null && _d !== void 0 ? _d : []).filter((cf) => {
312
+ // make sure we are deleting all filters on the same column
313
+ return cf.ColumnId !== actionTypedDelete.columnFilter.ColumnId;
314
+ });
313
315
  const Layouts = state.Layouts.map((layout) => {
314
316
  if (layout.Name === currentLayout.Name) {
315
317
  return Object.assign(Object.assign({}, layout), { ColumnFilters: columnFilters });
@@ -7,5 +7,5 @@ export declare class DataImportModule extends AdaptableModuleBase implements IMo
7
7
  addModuleMenuItem(source: 'ModuleMenu' | 'ModuleButton'): AdaptableMenuItem | undefined;
8
8
  addContextMenuItems(): AdaptableMenuItem[] | undefined;
9
9
  addColumnMenuItems(): AdaptableMenuItem[] | undefined;
10
- private getOpenPopupMenuItem;
10
+ private createDataImportMenuItem;
11
11
  }
@@ -6,21 +6,21 @@ export class DataImportModule extends AdaptableModuleBase {
6
6
  }
7
7
  addModuleMenuItem(source) {
8
8
  if (this.isModuleAvailable()) {
9
- return this.getOpenPopupMenuItem(source);
9
+ return this.createDataImportMenuItem(source);
10
10
  }
11
11
  }
12
12
  addContextMenuItems() {
13
13
  if (this.isModuleAvailable()) {
14
- return [this.getOpenPopupMenuItem('ContextMenu')];
14
+ return [this.createDataImportMenuItem('ContextMenu')];
15
15
  }
16
16
  return undefined;
17
17
  }
18
18
  addColumnMenuItems() {
19
19
  if (this.isModuleAvailable()) {
20
- return [this.getOpenPopupMenuItem('ColumnMenu')];
20
+ return [this.createDataImportMenuItem('ColumnMenu')];
21
21
  }
22
22
  }
23
- getOpenPopupMenuItem(source) {
23
+ createDataImportMenuItem(source) {
24
24
  const moduleParams = {
25
25
  action: 'New',
26
26
  source: source,
@@ -1 +1 @@
1
- import{SystemLicenseDisablePersistence as e,SystemLicenseShowWatermark as a}from"../../../Redux/ActionsReducers/SystemRedux";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",d=10,p=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=/(https):\/\/\d+\-\d+\-\d+\-(sandpack\.codesandbox\.io)/g,E=/(https):\/\/\S+(\.csb\.app)/g,I=/(https):\/\/\S+(\.adaptabletools\.com)/g,_=()=>"undefined"!=typeof window?window.location.origin:"",O=()=>{const[e,a,t]=Array.from(h.exec(_())||[]);return"https"===a&&"sandpack.codesandbox.io"===t},A=()=>{const[e,a,t]=Array.from(E.exec(_())||[]);return"https"===a&&".csb.app"===t},L=()=>{const[e,a,t]=Array.from(I.exec(_())||[]);return"https"===a&&".adaptabletools.com"===t};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.init()}))}))}init(){let e=null;if(this.licenseKey)try{e=n(this.licenseKey)}catch(a){e=a}O()||A()||L()||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){var t;const i=new Date;i.setHours(0,0,0,0);let n=0;e instanceof Error||!(null==e?void 0:e.end)||(n=Math.floor(((null===(t=null==e?void 0:e.end)||void 0===t?void 0:t.getTime())-i.getTime())/p),n=s(n,0,1/0));let h="",E="";!e||e instanceof Error||!e.appName||e.appName==r||(h=e.appName,E=" for application [APP_NAME]");const I=(e,a=o,t=c,i=n,s=h)=>e.replace("[LINK]",a).replace("[EMAIL]",t).replace("[APP_NAME]",s).replace("[DAYS]",`${i}`);switch(a){case"NO_LICENSE":case"NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE":this.adaptable.logger.consoleLogByMessageType(I("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(I("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(I("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(I("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(n<=d)this.adaptable.logger.consoleLogByMessageType(I(`This AdapTable license${E} expires in [DAYS] days. Please contact [EMAIL] to renew (giving you access to Support and Updates)`),"Info");else try{l()&&this.adaptable.logger.consoleLogByMessageType(I(`Thank you for using a valid AdapTable license${E}. Your license will expire in [DAYS] days.`),"Info")}catch(e){}break;case"COMMERCIAL_EXPIRED_IN_SCOPE":this.adaptable.logger.consoleLogByMessageType(I(`This AdapTable license${E} 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(I(`This AdapTable license${E} 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{SystemLicenseDisablePersistence as e,SystemLicenseShowWatermark as a}from"../../../Redux/ActionsReducers/SystemRedux";import{PopupShowAlert as t}from"../../../Redux/ActionsReducers/PopupRedux";import s from"../../ObjectFactory";import i 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",d=10,p=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=/(https):\/\/\d+\-\d+\-\d+\-(sandpack\.codesandbox\.io)/g,E=/(https):\/\/\S+(\.csb\.app)/g,I=/(https):\/\/\S+(\.adaptabletools\.com)/g,_=()=>"undefined"!=typeof window?window.location.origin:"",O=()=>{const e=_();console.log("isInsideSandpack",e);const[a,t,s]=Array.from(h.exec(e)||[]);return"https"===t&&"sandpack.codesandbox.io"===s},A=()=>{const e=_();console.log("isInsideSandbox",e);const[a,t,s]=Array.from(E.exec(e)||[]);return"https"===t&&".csb.app"===s},L=()=>{const e=_();console.log("isDemoApp",e);const[a,t,s]=Array.from(I.exec(e)||[]);return"https"===t&&".adaptabletools.com"===s};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.init()}))}))}init(){let e=null;if(this.licenseKey)try{e=n(this.licenseKey)}catch(a){e=a}O()||A()||L()||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),s=new Date(e.end),i=s<new Date,o=e.trial;let n=null;return n=i?s>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){var t;const s=new Date;s.setHours(0,0,0,0);let n=0;e instanceof Error||!(null==e?void 0:e.end)||(n=Math.floor(((null===(t=null==e?void 0:e.end)||void 0===t?void 0:t.getTime())-s.getTime())/p),n=i(n,0,1/0));let h="",E="";!e||e instanceof Error||!e.appName||e.appName==r||(h=e.appName,E=" for application [APP_NAME]");const I=(e,a=o,t=c,s=n,i=h)=>e.replace("[LINK]",a).replace("[EMAIL]",t).replace("[APP_NAME]",i).replace("[DAYS]",`${s}`);switch(a){case"NO_LICENSE":case"NON_PRODUCTION_EXPIRED_OUT_OF_SCOPE":this.adaptable.logger.consoleLogByMessageType(I("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(I("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(I("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(I("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(n<=d)this.adaptable.logger.consoleLogByMessageType(I(`This AdapTable license${E} expires in [DAYS] days. Please contact [EMAIL] to renew (giving you access to Support and Updates)`),"Info");else try{l()&&this.adaptable.logger.consoleLogByMessageType(I(`Thank you for using a valid AdapTable license${E}. Your license will expire in [DAYS] days.`),"Info")}catch(e){}break;case"COMMERCIAL_EXPIRED_IN_SCOPE":this.adaptable.logger.consoleLogByMessageType(I(`This AdapTable license${E} 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(I(`This AdapTable license${E} 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:s.CreateInternalAlertDefinitionForMessages("Error")}))}showWatermark(e){this.adaptable.api.internalApi.dispatchReduxAction(a(e))}disableStatePersistence(){this.adaptable.api.internalApi.dispatchReduxAction(e())}destroy(){}}
@@ -83,7 +83,7 @@ export const UIOptionsStatusbarForm = (props) => {
83
83
  React.createElement(Box, { as: "b" }, "Create Adaptable Statusbar Panel"),
84
84
  React.createElement(FormLayout, { mt: 2 },
85
85
  React.createElement(FormRow, { label: "Panel Name" },
86
- React.createElement(Input, { value: adaptablePanelTitle, placehoder: 'Adaptable Panel Name', onChange: (event) => setAdaptablePanelTitle(event.target.value) })),
86
+ React.createElement(Input, { value: adaptablePanelTitle, placeholder: 'Adaptable Panel Name', onChange: (event) => setAdaptablePanelTitle(event.target.value) })),
87
87
  React.createElement(FormRow, { label: "Align" },
88
88
  React.createElement(DropdownButton, { columns: ['label'], items: alignOptions }, (_d = alignOptions.find((option) => option.value === adaptablePanelAlign)) === null || _d === void 0 ? void 0 : _d.label)),
89
89
  React.createElement(FormRow, { label: "" },
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import { AdaptableInputProps } from '../AdaptableInput';
3
3
  export type AdaptableDateInputProps = AdaptableInputProps;
4
- declare const AdaptableDateInput: React.ForwardRefExoticComponent<Pick<import("../../../components/Input").InputProps, "children" | "size" | "name" | "tabIndex" | "color" | "style" | "cite" | "data" | "form" | "label" | "p" | "slot" | "span" | "summary" | "title" | "pattern" | "start" | "hidden" | "content" | "default" | "flex" | "wrap" | "open" | "padding" | "multiple" | "disabled" | "checked" | "download" | "list" | "order" | "target" | "rows" | "src" | "className" | "onTransitionEnd" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEndCapture" | "opacity" | "value" | "key" | "sizes" | "variant" | "tx" | "as" | "css" | "m" | "margin" | "mt" | "marginTop" | "mr" | "marginRight" | "mb" | "marginBottom" | "ml" | "marginLeft" | "mx" | "marginX" | "my" | "marginY" | "pt" | "paddingTop" | "pr" | "paddingRight" | "pb" | "paddingBottom" | "pl" | "paddingLeft" | "px" | "paddingX" | "py" | "paddingY" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "display" | "verticalAlign" | "overflow" | "overflowX" | "overflowY" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "fontStyle" | "textAlign" | "bg" | "backgroundColor" | "alignItems" | "alignContent" | "justifyItems" | "justifyContent" | "flexWrap" | "flexDirection" | "flexGrow" | "flexShrink" | "flexBasis" | "justifySelf" | "alignSelf" | "sx" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "srcSet" | "step" | "type" | "useMap" | "wmode" | "placehoder"> & React.RefAttributes<HTMLInputElement>>;
4
+ declare const AdaptableDateInput: React.ForwardRefExoticComponent<Pick<import("../../../components/Input").InputProps, "children" | "size" | "name" | "tabIndex" | "color" | "style" | "cite" | "data" | "form" | "label" | "p" | "slot" | "span" | "summary" | "title" | "pattern" | "start" | "hidden" | "content" | "default" | "flex" | "wrap" | "open" | "padding" | "multiple" | "disabled" | "checked" | "download" | "list" | "order" | "target" | "rows" | "src" | "className" | "onTransitionEnd" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEndCapture" | "opacity" | "value" | "key" | "sizes" | "variant" | "tx" | "as" | "css" | "m" | "margin" | "mt" | "marginTop" | "mr" | "marginRight" | "mb" | "marginBottom" | "ml" | "marginLeft" | "mx" | "marginX" | "my" | "marginY" | "pt" | "paddingTop" | "pr" | "paddingRight" | "pb" | "paddingBottom" | "pl" | "paddingLeft" | "px" | "paddingX" | "py" | "paddingY" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "display" | "verticalAlign" | "overflow" | "overflowX" | "overflowY" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "fontStyle" | "textAlign" | "bg" | "backgroundColor" | "alignItems" | "alignContent" | "justifyItems" | "justifyContent" | "flexWrap" | "flexDirection" | "flexGrow" | "flexShrink" | "flexBasis" | "justifySelf" | "alignSelf" | "sx" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "srcSet" | "step" | "type" | "useMap" | "wmode"> & React.RefAttributes<HTMLInputElement>>;
5
5
  export default AdaptableDateInput;
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+ export declare const AdaptableDateInlineInput: React.ForwardRefExoticComponent<Pick<Omit<import("../../../components/Input").InputProps, "onChange" | "value"> & {
3
+ onChange: (value: string) => void;
4
+ value: string;
5
+ }, "children" | "size" | "name" | "tabIndex" | "color" | "style" | "cite" | "data" | "form" | "label" | "p" | "slot" | "span" | "summary" | "title" | "pattern" | "start" | "hidden" | "content" | "default" | "flex" | "wrap" | "open" | "padding" | "multiple" | "disabled" | "checked" | "download" | "list" | "order" | "target" | "rows" | "src" | "className" | "onTransitionEnd" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "id" | "lang" | "placeholder" | "spellCheck" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEndCapture" | "opacity" | "value" | "key" | "sizes" | "variant" | "tx" | "as" | "css" | "m" | "margin" | "mt" | "marginTop" | "mr" | "marginRight" | "mb" | "marginBottom" | "ml" | "marginLeft" | "mx" | "marginX" | "my" | "marginY" | "pt" | "paddingTop" | "pr" | "paddingRight" | "pb" | "paddingBottom" | "pl" | "paddingLeft" | "px" | "paddingX" | "py" | "paddingY" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "display" | "verticalAlign" | "overflow" | "overflowX" | "overflowY" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "fontStyle" | "textAlign" | "bg" | "backgroundColor" | "alignItems" | "alignContent" | "justifyItems" | "justifyContent" | "flexWrap" | "flexDirection" | "flexGrow" | "flexShrink" | "flexBasis" | "justifySelf" | "alignSelf" | "sx" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "muted" | "nonce" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "srcDoc" | "srcLang" | "srcSet" | "step" | "type" | "useMap" | "wmode"> & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,42 @@
1
+ import * as React from 'react';
2
+ import { isValid, parse } from 'date-fns';
3
+ import { useState } from 'react';
4
+ import Input from '../../../components/Input';
5
+ import { useAdaptable } from '../../AdaptableContext';
6
+ export const AdaptableDateInlineInput = React.forwardRef((props, ref) => {
7
+ var _a;
8
+ const [hasFocus, setHasFocus] = useState(false);
9
+ const dateInputOptions = useAdaptable().adaptableOptions.userInterfaceOptions.dateInputOptions;
10
+ const dateProps = {
11
+ format: dateInputOptions.dateFormat,
12
+ locale: dateInputOptions.locale,
13
+ };
14
+ const [inputValue, setInputValue] = useState(() => {
15
+ return props.value;
16
+ });
17
+ React.useEffect(() => {
18
+ if (hasFocus) {
19
+ return;
20
+ }
21
+ setInputValue(props.value);
22
+ }, [props.value]);
23
+ const handleInputChange = (e) => {
24
+ setInputValue(e.currentTarget.value);
25
+ const date = parse(e.currentTarget.value, dateProps.format, new Date());
26
+ if (isValid(date)) {
27
+ props.onChange(e.currentTarget.value);
28
+ }
29
+ else {
30
+ props.onChange(undefined);
31
+ }
32
+ };
33
+ return (React.createElement(Input, Object.assign({}, props, { onFocus: (event) => {
34
+ var _a;
35
+ (_a = props.onFocus) === null || _a === void 0 ? void 0 : _a.call(props, event);
36
+ setHasFocus(true);
37
+ }, onBlur: (event) => {
38
+ var _a;
39
+ (_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, event);
40
+ setHasFocus(false);
41
+ }, ref: ref, value: inputValue, onChange: (e) => handleInputChange(e), placeholder: (_a = props.placeholder) !== null && _a !== void 0 ? _a : dateProps.format, style: props.style, disabled: props.disabled })));
42
+ });
@@ -14,12 +14,13 @@ import { ObjectFactory } from '../../../Utilities/ObjectFactory';
14
14
  import HelpBlock from '../../../components/HelpBlock';
15
15
  import { Flex } from 'rebass';
16
16
  import Radio from '../../../components/Radio';
17
- import Helper from '../../../Utilities/Helpers/Helper';
17
+ import Helper, { cloneObject } from '../../../Utilities/Helpers/Helper';
18
18
  import AdaptableInput from '../AdaptableInput';
19
19
  import { renderWithAdaptableContext } from '../../renderWithAdaptableContext';
20
20
  import { CheckBox } from '../../../components/CheckBox';
21
21
  import { runIfNotResolvedIn } from '../../../Utilities/runIfNotResolvedIn';
22
22
  import { getDefaultColumnFilterPredicate } from './getDefaultColumnFilterPredicate';
23
+ import { AdaptableDateInlineInput } from '../AdaptableInput/AdaptableDateInlineInput';
23
24
  const panelStyle = {
24
25
  width: '100%',
25
26
  minWidth: 150,
@@ -174,13 +175,20 @@ class FilterFormComponent extends React.Component {
174
175
  this.changeColumnPredicateInput(newCheckedValue, 0);
175
176
  } })));
176
177
  }
177
- return (_a = predicateDef.inputs) === null || _a === void 0 ? void 0 : _a.map((predicateInput, index) => (React.createElement(Flex, { key: index, flexDirection: "row" },
178
- React.createElement(AdaptableInput, { onMouseDown: (event) => {
179
- if (predicateInput.type === 'date') {
180
- // This prevents the ag-grid dropdown closing when a date is selected
181
- event.stopPropagation();
182
- }
183
- }, disabled: this.isFilterDisabled(), type: predicateInput.type, autoFocus: index === 0, value: filter.Predicate.Inputs[index], onChange: (e) => this.changeColumnPredicateInput(e.target.value, index), mb: 1, flex: 1, fontSize: 2 }))));
178
+ return (_a = predicateDef.inputs) === null || _a === void 0 ? void 0 : _a.map((predicateInput, index) => {
179
+ var _a, _b;
180
+ const showDatePicker = (_b = (_a = this.props.api.optionsApi) === null || _a === void 0 ? void 0 : _a.getColumnFilterOptions()) === null || _b === void 0 ? void 0 : _b.showDatePicker;
181
+ if (predicateInput.type === 'date' && !showDatePicker) {
182
+ return (React.createElement(AdaptableDateInlineInput, { value: filter.Predicate.Inputs[index], onChange: (value) => this.changeColumnPredicateInput(value, index) }));
183
+ }
184
+ return (React.createElement(Flex, { key: index, flexDirection: "row" },
185
+ React.createElement(AdaptableInput, { onMouseDown: (event) => {
186
+ if (predicateInput.type === 'date') {
187
+ // This prevents the ag-grid dropdown closing when a date is selected
188
+ event.stopPropagation();
189
+ }
190
+ }, disabled: this.isFilterDisabled(), type: predicateInput.type, autoFocus: index === 0, value: filter.Predicate.Inputs[index], onChange: (e) => this.changeColumnPredicateInput(e.target.value, index), mb: 1, flex: 1, fontSize: 2 })));
191
+ });
184
192
  }
185
193
  isFilterDisabled() {
186
194
  var _a;
@@ -255,12 +263,12 @@ class FilterFormComponent extends React.Component {
255
263
  }
256
264
  changeColumnPredicateInput(value, index) {
257
265
  const { editedColumnFilter } = this.state;
258
- editedColumnFilter.Predicate.Inputs[index] = value;
259
- this.setState({ editedColumnFilter });
266
+ const newEditedColumnFilter = cloneObject(editedColumnFilter);
267
+ newEditedColumnFilter.Predicate.Inputs[index] = value;
268
+ this.setState({ editedColumnFilter: newEditedColumnFilter });
260
269
  if (this.props.api.optionsApi.getColumnFilterOptions().autoApplyFilter) {
261
- this.props.onSetColumnFilter(editedColumnFilter);
270
+ this.props.onSetColumnFilter(newEditedColumnFilter);
262
271
  }
263
- // this.props.onSetColumnFilter(editedColumnFilter);
264
272
  }
265
273
  }
266
274
  function mapStateToProps(state, ownProps) {
@@ -15,6 +15,7 @@ import { getDefaultColumnFilterPredicate } from './getDefaultColumnFilterPredica
15
15
  import { isAdaptableIcon } from '../../../components/Icon';
16
16
  import { QuickFilterValues } from './QuickFilterValues';
17
17
  import { AdaptableIconComponent } from '../AdaptableIconComponent';
18
+ import { AdaptableDateInlineInput } from '../AdaptableInput/AdaptableDateInlineInput';
18
19
  class QuickFilterFormComponent extends React.Component {
19
20
  constructor(props) {
20
21
  super(props);
@@ -136,17 +137,23 @@ class QuickFilterFormComponent extends React.Component {
136
137
  } })));
137
138
  }
138
139
  return (_a = predicateDef === null || predicateDef === void 0 ? void 0 : predicateDef.inputs) === null || _a === void 0 ? void 0 : _a.map((predicateInput, index) => {
139
- var _a, _b;
140
+ var _a, _b, _c, _d, _e, _f;
141
+ const showDatePicker = (_b = (_a = this.props.api.optionsApi) === null || _a === void 0 ? void 0 : _a.getColumnFilterOptions()) === null || _b === void 0 ? void 0 : _b.showDatePicker;
142
+ const value = (_d = (_c = filter.Predicate.Inputs) === null || _c === void 0 ? void 0 : _c[index]) !== null && _d !== void 0 ? _d : '';
143
+ const onKeyDownCapture = (e) => {
144
+ if (e.nativeEvent.key === 'Escape') {
145
+ e.nativeEvent.preventDefault();
146
+ e.nativeEvent.stopPropagation();
147
+ this.clearFilter();
148
+ }
149
+ };
150
+ if (predicateInput.type === 'date' && !showDatePicker) {
151
+ return (React.createElement(AdaptableDateInlineInput, { value: value, onKeyDownCapture: onKeyDownCapture, onChange: (value) => this.changeColumnPredicateInput(value, index) }));
152
+ }
140
153
  return (React.createElement(AdaptableInput, { disabled: this.isFilterDisabled(), key: index, type: predicateInput.type === 'number' ? 'text' : predicateInput.type,
141
154
  // autoFocus has to be FALSE because if the input receives focus in the init phase,
142
155
  // it may scroll the AG Grid header viewport into view and de-synchronize it (relative to the content viewport)
143
- autoFocus: false, value: (_b = (_a = filter.Predicate.Inputs) === null || _a === void 0 ? void 0 : _a[index]) !== null && _b !== void 0 ? _b : '', onChange: (e) => this.changeColumnPredicateInput(e.target.value, index), onKeyDownCapture: (e) => {
144
- if (e.nativeEvent.key === 'Escape') {
145
- e.nativeEvent.preventDefault();
146
- e.nativeEvent.stopPropagation();
147
- this.clearFilter();
148
- }
149
- }, style: {
156
+ autoFocus: false, value: (_f = (_e = filter.Predicate.Inputs) === null || _e === void 0 ? void 0 : _e[index]) !== null && _f !== void 0 ? _f : '', onChange: (e) => this.changeColumnPredicateInput(e.target.value, index), onKeyDownCapture: onKeyDownCapture, style: {
150
157
  width: '100%',
151
158
  padding: 'var(--ab-space-1)',
152
159
  borderRadius: 0,
@@ -49,7 +49,7 @@ const QueryViewPanelComponent = (props) => {
49
49
  paddingTop: 6,
50
50
  overflow: 'hidden',
51
51
  zIndex: 100,
52
- }, placehoder: "Grid Filter", onChange: (x) => setExpression(x.target.value), value: expression })),
52
+ }, placeholder: "Grid Filter", onChange: (x) => setExpression(x.target.value), value: expression })),
53
53
  isExpressionValid && (React.createElement(ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
54
54
  gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
55
55
  ' ',
@@ -75,7 +75,7 @@ const QueryViewPanelComponent = (props) => {
75
75
  zIndex: 100,
76
76
  height: '100%',
77
77
  overflow: 'hidden',
78
- }, placehoder: "Grid Filter", onChange: (x) => setExpression(x.target.value), value: expression }))));
78
+ }, placeholder: "Grid Filter", onChange: (x) => setExpression(x.target.value), value: expression }))));
79
79
  };
80
80
  const saveButton = (React.createElement(ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: disabled || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
81
81
  const suspendButton = (React.createElement(ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
@@ -170,7 +170,7 @@ const ColumnRow = (props) => {
170
170
  React.createElement(FormRow, { label: "ColumnId" },
171
171
  React.createElement(Tag, null, props.column.columnId)),
172
172
  React.createElement(FormRow, { label: "Header" },
173
- React.createElement(Input, { "data-name": "column-header", className: "ab-Layout-Wizard__ColumnRow__Input", placehoder: "Custom name (optional)", onChange: () => {
173
+ React.createElement(Input, { "data-name": "column-header", className: "ab-Layout-Wizard__ColumnRow__Input", placeholder: "Custom name (optional)", onChange: () => {
174
174
  props.onColumnNameChange(props.column.columnId, event.target.value);
175
175
  }, value: customHeader })),
176
176
  React.createElement(FormRow, { label: "Width" },
@@ -1137,6 +1137,13 @@ export class AdaptableAgGrid {
1137
1137
  const currentLayout = removeUuidAndSource(_currentLayout);
1138
1138
  const allAgGridFlattenedColDefs = this.agGridAdapter.getFlattenedColDefs(agGridColDefs);
1139
1139
  const allAgGridColDefIds = allAgGridFlattenedColDefs.map((colDef) => colDef.colId);
1140
+ const { columnApi } = this.api;
1141
+ // also add the row group columns, if they are specified in the layout
1142
+ currentLayout.Columns.forEach((colId) => {
1143
+ if (columnApi.isAutoRowGroupColumn(colId)) {
1144
+ allAgGridColDefIds.push(colId);
1145
+ }
1146
+ });
1140
1147
  const getColDef = (colId) => allAgGridFlattenedColDefs.find((colDef) => colDef.colId === colId);
1141
1148
  agGridState.columnVisibility = {
1142
1149
  hiddenColIds: allAgGridFlattenedColDefs
@@ -2210,17 +2217,6 @@ export class AdaptableAgGrid {
2210
2217
  const colId2 = colState2.colId;
2211
2218
  const originalIndex1 = columnsStateIndexes[colId1];
2212
2219
  const originalIndex2 = columnsStateIndexes[colId2];
2213
- const isRowGroup1 = this.api.columnApi.isAutoRowGroupColumn(colId1);
2214
- const isRowGroup2 = this.api.columnApi.isAutoRowGroupColumn(colId2);
2215
- if (isRowGroup1 && isRowGroup2) {
2216
- return 1;
2217
- }
2218
- if (isRowGroup1) {
2219
- return -1;
2220
- }
2221
- if (isRowGroup2) {
2222
- return 1;
2223
- }
2224
2220
  if (newVisibleColumnsMap[colId1] != null && newVisibleColumnsMap[colId2] == null) {
2225
2221
  return -1;
2226
2222
  }