@adaptabletools/adaptable 16.0.10-canary.0 → 16.1.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/agGrid.d.ts +4 -0
  2. package/agGrid.js +4 -0
  3. package/base.css +2 -0
  4. package/base.css.map +1 -1
  5. package/bundle.cjs.js +162 -161
  6. package/index.css +4 -0
  7. package/index.css.map +1 -1
  8. package/package.json +1 -1
  9. package/publishTimestamp.d.ts +1 -1
  10. package/publishTimestamp.js +1 -1
  11. package/src/AdaptableOptions/AdaptableFrameworkComponent.d.ts +12 -1
  12. package/src/AdaptableOptions/AdaptableOptions.d.ts +5 -0
  13. package/src/AdaptableOptions/ChartingOptions.d.ts +44 -39
  14. package/src/AdaptableOptions/DataImportOptions.d.ts +57 -0
  15. package/src/AdaptableOptions/DataImportOptions.js +2 -0
  16. package/src/AdaptableOptions/MenuOptions.d.ts +147 -8
  17. package/src/AdaptableOptions/MenuOptions.js +75 -0
  18. package/src/Api/AdaptableApi.d.ts +5 -0
  19. package/src/Api/DataImportApi.d.ts +9 -0
  20. package/src/Api/DataImportApi.js +2 -0
  21. package/src/Api/Implementation/AdaptableApiImpl.d.ts +2 -0
  22. package/src/Api/Implementation/AdaptableApiImpl.js +2 -0
  23. package/src/Api/Implementation/DataImportApiImpl.d.ts +10 -0
  24. package/src/Api/Implementation/DataImportApiImpl.js +14 -0
  25. package/src/Api/Implementation/ExpressionApiImpl.js +1 -1
  26. package/src/Api/Implementation/OptionsApiImpl.d.ts +1 -0
  27. package/src/Api/Implementation/OptionsApiImpl.js +3 -0
  28. package/src/Api/Implementation/UserInterfaceApiImpl.d.ts +5 -1
  29. package/src/Api/Implementation/UserInterfaceApiImpl.js +22 -0
  30. package/src/Api/Internal/ChartingInternalApi.js +15 -15
  31. package/src/Api/Internal/DataImportInternalApi.d.ts +4 -0
  32. package/src/Api/Internal/DataImportInternalApi.js +49 -0
  33. package/src/Api/OptionsApi.d.ts +5 -0
  34. package/src/Api/UserInterfaceApi.d.ts +14 -0
  35. package/src/PredefinedConfig/Common/AdaptableIcon.d.ts +1 -1
  36. package/src/PredefinedConfig/Common/Menu.d.ts +1 -6
  37. package/src/PredefinedConfig/Common/Types.d.ts +4 -4
  38. package/src/PredefinedConfig/Common/Types.js +2 -0
  39. package/src/Strategy/ChartingModule.js +1 -1
  40. package/src/Strategy/DataImportModule.d.ts +11 -0
  41. package/src/Strategy/DataImportModule.js +36 -0
  42. package/src/Strategy/Fdc3Module.js +3 -2
  43. package/src/Strategy/LayoutModule.js +1 -0
  44. package/src/Utilities/Constants/ModuleConstants.d.ts +3 -0
  45. package/src/Utilities/Constants/ModuleConstants.js +4 -1
  46. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +2 -0
  47. package/src/Utilities/Defaults/DefaultSettingsPanel.js +1 -0
  48. package/src/Utilities/Helpers/AdaptableHelper.js +2 -0
  49. package/src/Utilities/Interface/MessagePopups.d.ts +2 -2
  50. package/src/Utilities/Services/ModuleService.js +2 -0
  51. package/src/View/AdaptableViewFactory.js +2 -0
  52. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/ExternalChartingWizard.js +1 -1
  53. package/src/View/Components/ExternalRenderer.d.ts +1 -0
  54. package/src/View/Components/ExternalRenderer.js +2 -1
  55. package/src/View/Components/Panels/PanelWithImage.js +3 -3
  56. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopup.js +1 -1
  57. package/src/View/Components/Popups/AdaptablePopup/Navigation.js +4 -1
  58. package/src/View/Components/Popups/AdaptablePopup/useMenuItems.js +3 -0
  59. package/src/View/Components/Popups/WindowPopups/WindowPopups.d.ts +1 -0
  60. package/src/View/Components/Popups/WindowPopups/WindowPopups.js +12 -2
  61. package/src/View/DataImport/DataImportPopup.d.ts +6 -0
  62. package/src/View/DataImport/DataImportPopup.js +32 -0
  63. package/src/View/DataImport/DataImportWizard/DataImportWizard.d.ts +8 -0
  64. package/src/View/DataImport/DataImportWizard/DataImportWizard.js +176 -0
  65. package/src/View/DataImport/DataImportWizard/index.d.ts +1 -0
  66. package/src/View/DataImport/DataImportWizard/index.js +4 -0
  67. package/src/View/DataImport/DataImportWizard/sections/DataPreview.d.ts +10 -0
  68. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +154 -0
  69. package/src/View/DataImport/DataImportWizard/sections/ImportSection.d.ts +9 -0
  70. package/src/View/DataImport/DataImportWizard/sections/ImportSection.js +24 -0
  71. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadFileSection.d.ts +8 -0
  72. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadFileSection.js +11 -0
  73. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.d.ts +13 -0
  74. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.js +23 -0
  75. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.d.ts +8 -0
  76. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.js +13 -0
  77. package/src/View/DataImport/DataImportWizard/sections/UploadSection/index.d.ts +1 -0
  78. package/src/View/DataImport/DataImportWizard/sections/UploadSection/index.js +4 -0
  79. package/src/View/DataImport/DataImportWizard/sections/ValidationSection.d.ts +11 -0
  80. package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +35 -0
  81. package/src/View/DataImport/systemFileHandlers.d.ts +3 -0
  82. package/src/View/DataImport/systemFileHandlers.js +44 -0
  83. package/src/View/Wizard/OnePageAdaptableWizard.d.ts +1 -0
  84. package/src/View/Wizard/OnePageWizards.d.ts +1 -0
  85. package/src/View/Wizard/OnePageWizards.js +2 -2
  86. package/src/agGrid/agGridHelper.js +2 -0
  87. package/src/agGrid/agGridMenuHelper.d.ts +20 -9
  88. package/src/agGrid/agGridMenuHelper.js +288 -133
  89. package/src/components/FileDroppable/index.d.ts +2 -1
  90. package/src/components/FileDroppable/index.js +8 -7
  91. package/src/components/icons/import.d.ts +3 -0
  92. package/src/components/icons/import.js +7 -0
  93. package/src/components/icons/index.js +2 -0
  94. package/src/metamodel/adaptable.metamodel.d.ts +171 -2
  95. package/src/metamodel/adaptable.metamodel.js +1 -1
  96. package/src/parser/src/index.d.ts +2 -2
  97. package/src/parser/src/index.js +4 -4
  98. package/src/parser/src/tokenizer.d.ts +1 -1
  99. package/src/parser/src/tokenizer.js +14 -6
  100. package/src/parser/src/types.d.ts +2 -2
  101. package/src/types.d.ts +5 -4
  102. package/version.d.ts +1 -1
  103. package/version.js +1 -1
@@ -1,4 +1,4 @@
1
- import { GridOptions, MenuItemDef, GetContextMenuItemsParams, GetMainMenuItems, GetMainMenuItemsParams, GetContextMenuItems, Column } from '@ag-grid-community/core';
1
+ import { Column, GetContextMenuItems, GetContextMenuItemsParams, GetMainMenuItems, GetMainMenuItemsParams, GridOptions, MenuItemDef } from '@ag-grid-community/core';
2
2
  import { AdaptableMenuItem, ColumnMenuContext, ContextMenuContext, UserMenuItem } from '../PredefinedConfig/Common/Menu';
3
3
  import { AdaptableColumn } from '../PredefinedConfig/Common/AdaptableColumn';
4
4
  import { IAdaptable } from '../AdaptableInterfaces/IAdaptable';
@@ -7,22 +7,25 @@ export declare class agGridMenuHelper {
7
7
  private gridOptions;
8
8
  constructor(adaptable: IAdaptable, gridOptions: GridOptions);
9
9
  destroy(): void;
10
- buildColumnMenu(params: GetMainMenuItemsParams, originalgetMainMenuItems: GetMainMenuItems): (string | MenuItemDef)[];
11
- buildContextMenu(params: GetContextMenuItemsParams, originalgetContextMenuItems: GetContextMenuItems): (string | MenuItemDef)[];
12
- createRemoveGroupsMenuItem(x: AdaptableMenuItem): MenuItemDef;
13
- createAgGridMenuDefFromAdaptableMenu(adaptableMenuItem: AdaptableMenuItem): MenuItemDef;
10
+ buildColumnMenu(params: GetMainMenuItemsParams, originalGetMainMenuItems: GetMainMenuItems): (string | MenuItemDef)[];
11
+ buildContextMenu(params: GetContextMenuItemsParams, originalGetContextMenuItems: GetContextMenuItems): (string | MenuItemDef)[];
12
+ private createAdaptableColumnMenuItems;
13
+ private mapCustomMenuItemToAgGridMenuDefinition;
14
+ private mapAdaptableMenuItemToAgGridMenuDefinition;
15
+ private mapUserMenuItemToAgGridMenuDefinition;
16
+ private logMenuDeprecation;
17
+ private createAgGridMenuDefFromAdaptableMenu;
14
18
  createAgGridColumnMenuDefFromUserMenu(menuItem: UserMenuItem<ColumnMenuContext>, menuContext: ColumnMenuContext): MenuItemDef;
15
19
  createAgGridContextMenuDefFromUserMenu(menuItem: UserMenuItem<ContextMenuContext>, menuContext: ContextMenuContext): MenuItemDef;
16
20
  private mapAdaptableIconToAgGridIcon;
17
21
  createAdaptableColumnMenuItemFromUserMenu(menuItem: UserMenuItem<ColumnMenuContext>, menuContext: ColumnMenuContext): AdaptableMenuItem;
18
22
  createAgGridColumnMenuItems(originalgetMainMenuItems: GetMainMenuItems, params: GetMainMenuItemsParams): (string | MenuItemDef)[] | undefined;
19
- createGroupedColumnMenuItem(): MenuItemDef | undefined;
20
- createAdaptableColumnMenuItems(adaptableColumn: AdaptableColumn, menuContext: ColumnMenuContext): MenuItemDef[];
23
+ private createAdaptableColumnMenuItems_DEPRECATED;
21
24
  createUserColumnMenuItems(menuContext: ColumnMenuContext): MenuItemDef[];
22
25
  createColumnMenuContextObject(adaptableColumn: AdaptableColumn, agGridColumn: Column): ColumnMenuContext;
23
26
  createContextMenuContextObject(params: GetContextMenuItemsParams, adaptableColumn: AdaptableColumn): ContextMenuContext;
24
- createAgGridContextMenuItems(originalgetContextMenuItems: GetContextMenuItems, params: GetContextMenuItemsParams): (string | MenuItemDef)[] | undefined;
25
- createAdaptableContextMenuItems(menuContext: ContextMenuContext): AdaptableMenuItem[];
27
+ private createAgGridContextMenuItems;
28
+ private createAdaptableContextMenuItems;
26
29
  createAgGridAdaptableContextMenuItems(adaptableMenuItems: AdaptableMenuItem[], menuContext: ContextMenuContext): MenuItemDef[];
27
30
  createAgGridUserContextMenuItems(userContextMenuItems: UserMenuItem<ContextMenuContext>[], menuContext: ContextMenuContext): MenuItemDef[];
28
31
  private getAdaptableMenuItemsColumnHeader;
@@ -30,4 +33,12 @@ export declare class agGridMenuHelper {
30
33
  private getLabelFromUserContextMenuItem;
31
34
  private getUserMenuItemsColumnHeader;
32
35
  buildStandaloneColumnHeader(adaptableColumn: AdaptableColumn): AdaptableMenuItem[];
36
+ /**
37
+ * !!! This should be deleted once MenuOptions loses all the deprecated options
38
+ */
39
+ private buildContextMenuDeprecated;
40
+ /**
41
+ * !!! This should be deleted once MenuOptions loses all the deprecated options
42
+ */
43
+ private buildColumnMenuDeprecated;
33
44
  }
@@ -6,6 +6,8 @@ const ArrayExtensions_1 = require("../Utilities/Extensions/ArrayExtensions");
6
6
  const icons_1 = require("../components/icons");
7
7
  const flatten_1 = tslib_1.__importDefault(require("lodash/flatten"));
8
8
  const Icon_1 = require("../components/Icon");
9
+ const logDeprecation_1 = require("../Utilities/logDeprecation");
10
+ const MenuOptions_1 = require("../AdaptableOptions/MenuOptions");
9
11
  // tslint:disable-next-line: class-name
10
12
  class agGridMenuHelper {
11
13
  constructor(adaptable, gridOptions) {
@@ -16,139 +18,183 @@ class agGridMenuHelper {
16
18
  this.adaptable = null;
17
19
  this.gridOptions = null;
18
20
  }
19
- buildColumnMenu(params, originalgetMainMenuItems) {
20
- // couldnt find a way to listen for menu close. There is a Menu Item Select, but you can also close menu from filter and clicking outside menu....
21
- const colId = params.column.getColId();
22
- let agGridColumnMenuItems = [];
23
- let adaptableColumnMenuItems = [];
24
- let userColumnMenuItems = [];
21
+ buildColumnMenu(params, originalGetMainMenuItems) {
22
+ var _a;
25
23
  const menuOptions = this.adaptable.adaptableOptions.menuOptions;
26
- //First get Ag Grid Column Items
27
- agGridColumnMenuItems.push(...this.createAgGridColumnMenuItems(originalgetMainMenuItems, params));
28
- let showAdaptableColumnMenu = menuOptions.showAdaptableColumnMenu;
29
- let hasAdaptableColumnMenuItems = showAdaptableColumnMenu == null || showAdaptableColumnMenu !== false;
30
- if (hasAdaptableColumnMenuItems) {
31
- agGridColumnMenuItems.push('separator');
24
+ this.logMenuDeprecation(menuOptions);
25
+ const agGridMenuItems = (params.defaultItems ? [...params.defaultItems] : []);
26
+ if (!params.column) {
27
+ // return only AG Grid context if the Adaptable column is not found (should not happen)
28
+ return agGridMenuItems;
32
29
  }
33
- const adaptableColumn = this.adaptable.api.columnApi.getColumnWithColumnId(colId);
30
+ const adaptableColumn = this.adaptable.api.columnApi.getColumnWithColumnId((_a = params.column) === null || _a === void 0 ? void 0 : _a.getColId());
34
31
  const menuContext = this.createColumnMenuContextObject(adaptableColumn, params.column);
35
- // then Get Adaptable Menu Items
36
- if (menuContext.isRowGroupColumn) {
37
- let groupedMenuItem = this.createGroupedColumnMenuItem();
38
- if (groupedMenuItem) {
39
- adaptableColumnMenuItems.push(groupedMenuItem);
40
- }
41
- }
42
- // if (adaptableColumn != undefined) {
43
- if (hasAdaptableColumnMenuItems) {
44
- adaptableColumnMenuItems.push(...this.createAdaptableColumnMenuItems(adaptableColumn, menuContext));
45
- }
46
- // }
47
- // Finally get all the User Menu Items
48
- userColumnMenuItems.push(...this.createUserColumnMenuItems(menuContext));
49
- const map = {
50
- aggrid: agGridColumnMenuItems,
51
- adaptable: adaptableColumnMenuItems,
52
- user: userColumnMenuItems,
53
- };
54
- const menuItemsArray = menuOptions.columnMenuOrder;
55
- let arr = [];
56
- if (menuItemsArray != null && typeof menuItemsArray === 'function') {
57
- arr = menuItemsArray({
58
- adaptableApi: this.adaptable.api,
59
- userName: this.adaptable.adaptableOptions.userName,
60
- adaptableId: this.adaptable.adaptableOptions.adaptableId,
61
- column: adaptableColumn,
62
- });
63
- }
64
- else {
65
- arr = menuItemsArray;
32
+ const adaptableMenuItems = this.createAdaptableColumnMenuItems(menuContext);
33
+ // sort Adaptable menu items by default order
34
+ adaptableMenuItems.sort((first, second) => {
35
+ const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER.indexOf(first.module);
36
+ const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER.indexOf(second.module);
37
+ return firstPriority - secondPriority;
38
+ });
39
+ // 1. first check if there is a custom column menu defined
40
+ if (typeof menuOptions.customColumnMenu === 'function') {
41
+ const defaultAgGridMenuItems = agGridMenuItems.map((itemName) => ({
42
+ menuType: 'AgGrid',
43
+ name: itemName,
44
+ }));
45
+ const defaultAdaptableMenuItems = adaptableMenuItems.map((adaptableItem) => (Object.assign({ menuType: 'Adaptable' }, adaptableItem)));
46
+ const customMenuItems = menuOptions
47
+ .customColumnMenu(Object.assign(Object.assign({}, menuContext), { defaultAgGridMenuItems,
48
+ defaultAdaptableMenuItems }))
49
+ .filter(Boolean);
50
+ return customMenuItems
51
+ .map((customMenuItem) => this.mapCustomMenuItemToAgGridMenuDefinition(customMenuItem, menuContext))
52
+ .filter(Boolean);
66
53
  }
67
- return (0, flatten_1.default)(arr.map((c) => {
68
- return map[c];
69
- }));
54
+ // !! Uncomment once the deprecated options are removed
55
+ // 2. if not, return the default context menu
56
+ // const defaultContextMenu: (string | MenuItemDef)[] = [
57
+ // ...agGridMenuItems,
58
+ // 'separator',
59
+ // ...adaptableMenuItems.map((adaptableItem) =>
60
+ // this.mapAdaptableMenuItemToAgGridMenuDefinition(adaptableItem)
61
+ // ),
62
+ // ];
63
+ // return defaultContextMenu;
64
+ return this.buildColumnMenuDeprecated(params, originalGetMainMenuItems);
70
65
  }
71
- buildContextMenu(params, originalgetContextMenuItems) {
66
+ buildContextMenu(params, originalGetContextMenuItems) {
67
+ var _a;
72
68
  // we do this in order to refresh the internal state of selected cells (technically query the AG Grid cellRanges)
73
69
  // (right-click selected the current cell, but this was not reflected in the internal state of the selected cells)
74
70
  this.adaptable.setSelectedCells();
75
- let agGridContextMenuItems = [];
76
- let adaptableContextMenuItems = [];
77
- let userContextMenuItems = [];
78
71
  const menuOptions = this.adaptable.adaptableOptions.menuOptions;
79
- let showAdaptableContextMenu = menuOptions.showAdaptableContextMenu;
80
- let hasAdaptableContextMenuItems = showAdaptableContextMenu == null || showAdaptableContextMenu !== false;
81
- let userDefinedContextMenuItems = menuOptions.contextMenuItems;
82
- let hasUserDefinedContextMenuItems = ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(userDefinedContextMenuItems);
83
- const agGridMenuItems = this.createAgGridContextMenuItems(originalgetContextMenuItems, params);
84
- if (agGridMenuItems === null || agGridMenuItems === void 0 ? void 0 : agGridMenuItems.length) {
85
- agGridContextMenuItems.push(...agGridMenuItems);
86
- if (hasAdaptableContextMenuItems || hasUserDefinedContextMenuItems) {
87
- agGridContextMenuItems.push('separator');
88
- }
72
+ this.logMenuDeprecation(menuOptions);
73
+ const agGridMenuItems = (params.defaultItems ? [...params.defaultItems] : []);
74
+ if (!params.column) {
75
+ // return only AG Grid context if the Adaptable column is not found (should not happen)
76
+ return agGridMenuItems;
89
77
  }
90
- const adaptableMenuItems = [];
91
- const agGridColumn = params.column;
92
- let adaptableColumn;
93
- if (agGridColumn) {
94
- adaptableColumn = this.adaptable.api.columnApi.getColumnWithColumnId(agGridColumn.getColId());
95
- // if (adaptableColumn != undefined) {
96
- let menuContext = this.createContextMenuContextObject(params, adaptableColumn);
97
- // keep it simple for now - if its a grouped cell then don't add the shipped menu items
98
- // if (adaptableColumn && !params.node.group) {
99
- const allAdaptableMenuItems = this.createAdaptableContextMenuItems(menuContext);
100
- if (ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(allAdaptableMenuItems)) {
101
- adaptableMenuItems.push(...allAdaptableMenuItems);
102
- }
103
- // }
104
- // create agGrid Menu items based on Adaptable Menu Items - user can decide whether to show or not
105
- if (ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(adaptableMenuItems) && hasAdaptableContextMenuItems) {
106
- adaptableContextMenuItems.push(...this.createAgGridAdaptableContextMenuItems(adaptableMenuItems, menuContext));
107
- }
108
- // create agGrid Menu items based on User Menu Items - user can decide whether to show or not
109
- if (hasUserDefinedContextMenuItems) {
110
- userContextMenuItems.push(...this.createAgGridUserContextMenuItems(userDefinedContextMenuItems, menuContext));
78
+ const adaptableColumn = this.adaptable.api.columnApi.getColumnWithColumnId((_a = params.column) === null || _a === void 0 ? void 0 : _a.getColId());
79
+ const menuContext = this.createContextMenuContextObject(params, adaptableColumn);
80
+ const adaptableMenuItems = this.createAdaptableContextMenuItems(menuContext);
81
+ // sort Adaptable menu items by default order
82
+ adaptableMenuItems.sort((first, second) => {
83
+ const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(first.module);
84
+ const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(second.module);
85
+ return firstPriority - secondPriority;
86
+ });
87
+ // 1. first check if there is a custom context menu defined
88
+ if (typeof menuOptions.customContextMenu === 'function') {
89
+ const defaultAgGridMenuItems = agGridMenuItems.map((itemName) => ({
90
+ menuType: 'AgGrid',
91
+ name: itemName,
92
+ }));
93
+ const defaultAdaptableMenuItems = adaptableMenuItems.map((adaptableItem) => (Object.assign({ menuType: 'Adaptable' }, adaptableItem)));
94
+ const customMenuItems = menuOptions
95
+ .customContextMenu(Object.assign(Object.assign({}, menuContext), { defaultAgGridMenuItems,
96
+ defaultAdaptableMenuItems }))
97
+ .filter(Boolean);
98
+ return customMenuItems
99
+ .map((customMenuItem) => this.mapCustomMenuItemToAgGridMenuDefinition(customMenuItem, menuContext))
100
+ .filter(Boolean);
101
+ }
102
+ // !! Uncomment once the deprecated options are removed
103
+ // 2. if not, return the default context menu
104
+ // const defaultContextMenu: (string | MenuItemDef)[] = [
105
+ // ...agGridMenuItems,
106
+ // 'separator',
107
+ // ...adaptableMenuItems.map((adaptableItem) =>
108
+ // this.mapAdaptableMenuItemToAgGridMenuDefinition(adaptableItem)
109
+ // ),
110
+ // ];
111
+ // return defaultContextMenu;
112
+ return this.buildContextMenuDeprecated(params, originalGetContextMenuItems);
113
+ }
114
+ createAdaptableColumnMenuItems(menuContext) {
115
+ let contextMenuItems = [];
116
+ this.adaptable.adaptableModules.forEach((s) => {
117
+ let menuItems = s.addColumnMenuItems(menuContext.adaptableColumn);
118
+ if (menuItems) {
119
+ contextMenuItems.push(...menuItems.filter(Boolean).filter((item) => item.isVisible !== false));
111
120
  }
121
+ });
122
+ return contextMenuItems;
123
+ }
124
+ mapCustomMenuItemToAgGridMenuDefinition(customMenuItem, menuContext) {
125
+ var _a;
126
+ if (customMenuItem === '-') {
127
+ return 'separator';
112
128
  }
113
- const map = {
114
- aggrid: agGridContextMenuItems,
115
- adaptable: adaptableContextMenuItems,
116
- user: userContextMenuItems,
117
- };
118
- const menuItemsArray = menuOptions.contextMenuOrder;
119
- let arr = [];
120
- if (menuItemsArray != null && typeof menuItemsArray === 'function') {
121
- arr = menuItemsArray({
122
- adaptableApi: this.adaptable.api,
123
- userName: this.adaptable.adaptableOptions.userName,
124
- adaptableId: this.adaptable.adaptableOptions.adaptableId,
125
- column: adaptableColumn,
126
- });
129
+ if (customMenuItem.menuType === 'Group') {
130
+ return {
131
+ name: customMenuItem.label,
132
+ icon: this.mapAdaptableIconToAgGridIcon(customMenuItem.icon, {
133
+ fill: 'var(--ab-color-text-on-primary)',
134
+ }),
135
+ disabled: customMenuItem.disabled,
136
+ subMenu: !customMenuItem.disabled
137
+ ? (_a = customMenuItem.subMenuItems) === null || _a === void 0 ? void 0 : _a.map((subMenuItem) => this.mapCustomMenuItemToAgGridMenuDefinition(subMenuItem, menuContext)).filter(Boolean)
138
+ : undefined,
139
+ };
127
140
  }
128
- else {
129
- arr = menuItemsArray;
141
+ if (customMenuItem.menuType === 'AgGrid') {
142
+ return customMenuItem.name;
130
143
  }
131
- return (0, flatten_1.default)(arr.map((c) => {
132
- return map[c];
133
- }));
144
+ if (customMenuItem.menuType === 'Adaptable') {
145
+ return this.mapAdaptableMenuItemToAgGridMenuDefinition(customMenuItem);
146
+ }
147
+ if (customMenuItem.menuType === 'User') {
148
+ return this.mapUserMenuItemToAgGridMenuDefinition(customMenuItem, menuContext);
149
+ }
150
+ }
151
+ mapAdaptableMenuItemToAgGridMenuDefinition(adaptableMenuItem) {
152
+ var _a;
153
+ return {
154
+ name: adaptableMenuItem.label,
155
+ action: adaptableMenuItem.onClick
156
+ ? adaptableMenuItem.onClick
157
+ : adaptableMenuItem.reduxAction
158
+ ? () => this.adaptable.api.internalApi.dispatchReduxAction(adaptableMenuItem.reduxAction)
159
+ : undefined,
160
+ icon: this.mapAdaptableIconToAgGridIcon(adaptableMenuItem.icon, {
161
+ fill: 'var(--ab-color-text-on-primary)',
162
+ }),
163
+ subMenu: (_a = adaptableMenuItem.subItems) === null || _a === void 0 ? void 0 : _a.map((subMenuItem) => this.mapAdaptableMenuItemToAgGridMenuDefinition(subMenuItem)),
164
+ };
134
165
  }
135
- //}
136
- // return flatten(
137
- // arr.map((c) => {
138
- // return map[c];
139
- // })
140
- // );
141
- createRemoveGroupsMenuItem(x) {
166
+ mapUserMenuItemToAgGridMenuDefinition(userMenuItem, menuContext) {
167
+ var _a;
168
+ if (userMenuItem.hidden) {
169
+ return;
170
+ }
142
171
  return {
143
- name: x.label,
144
- action: x.onClick
145
- ? x.onClick
146
- : () => this.adaptable.api.internalApi.dispatchReduxAction(x.reduxAction),
147
- icon: this.mapAdaptableIconToAgGridIcon(x.icon, {
172
+ name: userMenuItem.label,
173
+ action: () => (userMenuItem.onClick ? userMenuItem.onClick(menuContext) : null),
174
+ icon: this.mapAdaptableIconToAgGridIcon(userMenuItem.icon, {
148
175
  fill: 'var(--ab-color-text-on-primary)',
149
176
  }),
177
+ disabled: userMenuItem.disabled,
178
+ subMenu: (_a = userMenuItem.subMenuItems) === null || _a === void 0 ? void 0 : _a.map((subMenuItem) => {
179
+ return this.mapCustomMenuItemToAgGridMenuDefinition(subMenuItem, menuContext);
180
+ }).filter(Boolean),
150
181
  };
151
182
  }
183
+ logMenuDeprecation(menuOptions) {
184
+ const deprecatedProps = [
185
+ 'contextMenuItems',
186
+ 'contextMenuOrder',
187
+ 'showAdaptableContextMenu',
188
+ 'columnMenuItems',
189
+ 'columnMenuOrder',
190
+ 'showAdaptableColumnMenu',
191
+ ];
192
+ deprecatedProps.forEach((propName) => {
193
+ if (menuOptions[propName]) {
194
+ (0, logDeprecation_1.logDeprecation)(this.adaptable.logger, 'MenuOptions', propName, 'customContextMenu');
195
+ }
196
+ });
197
+ }
152
198
  createAgGridMenuDefFromAdaptableMenu(adaptableMenuItem) {
153
199
  const subMenuItems = ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(adaptableMenuItem.subItems)
154
200
  ? adaptableMenuItem.subItems.map((amu) => {
@@ -224,6 +270,7 @@ class agGridMenuHelper {
224
270
  createAdaptableColumnMenuItemFromUserMenu(menuItem, menuContext) {
225
271
  const fn = menuItem.onClick;
226
272
  let adaptableMenuItem = {
273
+ module: 'General',
227
274
  label: this.getLabelFromUserColumnMenuItem(menuItem, menuContext),
228
275
  reduxAction: null,
229
276
  onClick: () => (fn ? fn(menuContext) : null),
@@ -238,25 +285,16 @@ class agGridMenuHelper {
238
285
  ? originalgetMainMenuItems(params)
239
286
  : params.defaultItems.slice(0);
240
287
  }
241
- createGroupedColumnMenuItem() {
242
- if (this.adaptable.adaptableOptions.menuOptions.showUngroupColumnMenuItem) {
243
- let groupedCols = this.gridOptions.columnApi.getRowGroupColumns();
244
- let ungroupMenuItem = {
245
- label: groupedCols.length == 1 ? 'Ungroup Column' : 'Ungroup All',
246
- onClick: () => this.gridOptions.columnApi.setRowGroupColumns([]),
247
- isVisible: true,
248
- icon: {
249
- name: 'undo',
250
- },
251
- };
252
- let menuItem = this.createAgGridMenuDefFromAdaptableMenu(ungroupMenuItem);
253
- return menuItem;
254
- }
255
- }
256
- createAdaptableColumnMenuItems(adaptableColumn, menuContext) {
288
+ createAdaptableColumnMenuItems_DEPRECATED(adaptableColumn, menuContext) {
257
289
  let columnMenuItems = [];
258
290
  // First get all the Module based Adaptable Menu Items
259
291
  const adaptableMenuItems = this.getAdaptableMenuItemsColumnHeader(adaptableColumn, menuContext);
292
+ // sort Adaptable menu items by default order
293
+ adaptableMenuItems.sort((first, second) => {
294
+ const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER.indexOf(first.module);
295
+ const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER.indexOf(second.module);
296
+ return firstPriority - secondPriority;
297
+ });
260
298
  // And then convert them into Menu Item Defs
261
299
  adaptableMenuItems.forEach((adaptableMenuItem) => {
262
300
  let menuItem = this.createAgGridMenuDefFromAdaptableMenu(adaptableMenuItem);
@@ -339,18 +377,18 @@ class agGridMenuHelper {
339
377
  : [];
340
378
  }
341
379
  createAdaptableContextMenuItems(menuContext) {
342
- let columnMenuItems = [];
380
+ let contextMenuItems = [];
343
381
  this.adaptable.adaptableModules.forEach((s) => {
344
382
  let menuItems = s.addContextMenuItems(menuContext);
345
383
  if (menuItems) {
346
- columnMenuItems.push(...menuItems);
384
+ contextMenuItems.push(...menuItems.filter(Boolean).filter((item) => item.isVisible !== false));
347
385
  }
348
386
  });
349
387
  this.adaptable._emitSync('CreateAdaptableContextMenuItems', {
350
- items: columnMenuItems,
388
+ items: contextMenuItems,
351
389
  menuContext: menuContext,
352
390
  });
353
- return columnMenuItems;
391
+ return contextMenuItems;
354
392
  }
355
393
  createAgGridAdaptableContextMenuItems(adaptableMenuItems, menuContext) {
356
394
  // here we create agGrid Menu items based on Adaptable Menu Items
@@ -449,5 +487,122 @@ class agGridMenuHelper {
449
487
  }
450
488
  return returnMenuItems;
451
489
  }
490
+ /**
491
+ * !!! This should be deleted once MenuOptions loses all the deprecated options
492
+ */
493
+ buildContextMenuDeprecated(params, originalGetContextMenuItems) {
494
+ let agGridContextMenuItems = [];
495
+ let adaptableContextMenuItems = [];
496
+ let userContextMenuItems = [];
497
+ const menuOptions = this.adaptable.adaptableOptions.menuOptions;
498
+ let showAdaptableContextMenu = menuOptions.showAdaptableContextMenu;
499
+ let hasAdaptableContextMenuItems = showAdaptableContextMenu == null || showAdaptableContextMenu !== false;
500
+ let userDefinedContextMenuItems = menuOptions.contextMenuItems;
501
+ let hasUserDefinedContextMenuItems = ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(userDefinedContextMenuItems);
502
+ const agGridMenuItems = this.createAgGridContextMenuItems(originalGetContextMenuItems, params);
503
+ if (agGridMenuItems === null || agGridMenuItems === void 0 ? void 0 : agGridMenuItems.length) {
504
+ agGridContextMenuItems.push(...agGridMenuItems);
505
+ if (hasAdaptableContextMenuItems || hasUserDefinedContextMenuItems) {
506
+ agGridContextMenuItems.push('separator');
507
+ }
508
+ }
509
+ const adaptableMenuItems = [];
510
+ const agGridColumn = params.column;
511
+ let adaptableColumn;
512
+ if (agGridColumn) {
513
+ adaptableColumn = this.adaptable.api.columnApi.getColumnWithColumnId(agGridColumn.getColId());
514
+ // if (adaptableColumn != undefined) {
515
+ let menuContext = this.createContextMenuContextObject(params, adaptableColumn);
516
+ // keep it simple for now - if its a grouped cell then don't add the shipped menu items
517
+ // if (adaptableColumn && !params.node.group) {
518
+ const allAdaptableMenuItems = this.createAdaptableContextMenuItems(menuContext);
519
+ if (ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(allAdaptableMenuItems)) {
520
+ adaptableMenuItems.push(...allAdaptableMenuItems);
521
+ }
522
+ adaptableMenuItems.sort((first, second) => {
523
+ const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(first.module);
524
+ const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(second.module);
525
+ return firstPriority - secondPriority;
526
+ });
527
+ // }
528
+ // create agGrid Menu items based on Adaptable Menu Items - user can decide whether to show or not
529
+ if (ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(adaptableMenuItems) && hasAdaptableContextMenuItems) {
530
+ adaptableContextMenuItems.push(...this.createAgGridAdaptableContextMenuItems(adaptableMenuItems, menuContext));
531
+ }
532
+ // create agGrid Menu items based on User Menu Items - user can decide whether to show or not
533
+ if (hasUserDefinedContextMenuItems) {
534
+ userContextMenuItems.push(...this.createAgGridUserContextMenuItems(userDefinedContextMenuItems, menuContext));
535
+ }
536
+ }
537
+ const map = {
538
+ aggrid: agGridContextMenuItems,
539
+ adaptable: adaptableContextMenuItems,
540
+ user: userContextMenuItems,
541
+ };
542
+ const menuItemsArray = menuOptions.contextMenuOrder;
543
+ let arr = [];
544
+ if (menuItemsArray != null && typeof menuItemsArray === 'function') {
545
+ arr = menuItemsArray({
546
+ adaptableApi: this.adaptable.api,
547
+ userName: this.adaptable.adaptableOptions.userName,
548
+ adaptableId: this.adaptable.adaptableOptions.adaptableId,
549
+ column: adaptableColumn,
550
+ });
551
+ }
552
+ else {
553
+ arr = menuItemsArray;
554
+ }
555
+ return (0, flatten_1.default)(arr.map((c) => {
556
+ return map[c];
557
+ }));
558
+ }
559
+ /**
560
+ * !!! This should be deleted once MenuOptions loses all the deprecated options
561
+ */
562
+ buildColumnMenuDeprecated(params, originalgetMainMenuItems) {
563
+ // couldnt find a way to listen for menu close. There is a Menu Item Select, but you can also close menu from filter and clicking outside menu....
564
+ const colId = params.column.getColId();
565
+ let agGridColumnMenuItems = [];
566
+ let adaptableColumnMenuItems = [];
567
+ let userColumnMenuItems = [];
568
+ const menuOptions = this.adaptable.adaptableOptions.menuOptions;
569
+ //First get Ag Grid Column Items
570
+ agGridColumnMenuItems.push(...this.createAgGridColumnMenuItems(originalgetMainMenuItems, params));
571
+ let showAdaptableColumnMenu = menuOptions.showAdaptableColumnMenu;
572
+ let hasAdaptableColumnMenuItems = showAdaptableColumnMenu == null || showAdaptableColumnMenu !== false;
573
+ if (hasAdaptableColumnMenuItems) {
574
+ agGridColumnMenuItems.push('separator');
575
+ }
576
+ const adaptableColumn = this.adaptable.api.columnApi.getColumnWithColumnId(colId);
577
+ const menuContext = this.createColumnMenuContextObject(adaptableColumn, params.column);
578
+ // if (adaptableColumn != undefined) {
579
+ if (hasAdaptableColumnMenuItems) {
580
+ adaptableColumnMenuItems.push(...this.createAdaptableColumnMenuItems_DEPRECATED(adaptableColumn, menuContext));
581
+ }
582
+ // }
583
+ // Finally get all the User Menu Items
584
+ userColumnMenuItems.push(...this.createUserColumnMenuItems(menuContext));
585
+ const map = {
586
+ aggrid: agGridColumnMenuItems,
587
+ adaptable: adaptableColumnMenuItems,
588
+ user: userColumnMenuItems,
589
+ };
590
+ const menuItemsArray = menuOptions.columnMenuOrder;
591
+ let arr = [];
592
+ if (menuItemsArray != null && typeof menuItemsArray === 'function') {
593
+ arr = menuItemsArray({
594
+ adaptableApi: this.adaptable.api,
595
+ userName: this.adaptable.adaptableOptions.userName,
596
+ adaptableId: this.adaptable.adaptableOptions.adaptableId,
597
+ column: adaptableColumn,
598
+ });
599
+ }
600
+ else {
601
+ arr = menuItemsArray;
602
+ }
603
+ return (0, flatten_1.default)(arr.map((c) => {
604
+ return map[c];
605
+ }));
606
+ }
452
607
  }
453
608
  exports.agGridMenuHelper = agGridMenuHelper;
@@ -12,8 +12,9 @@ interface FileDroppableProps extends FlexProps {
12
12
  toJSON?: (str: string) => Promise<any> | any;
13
13
  readFile?: (file: File, toJSON?: (str: string) => Promise<any> | any) => Promise<any>;
14
14
  onDropSuccess?: (json: any, file: File) => void;
15
+ file?: File;
15
16
  }
16
- export declare const readJSONFile: (file: File, toJSON?: (str: string) => Promise<any> | any) => Promise<unknown>;
17
+ export declare const readJSONFile: (file: File, toJSON?: (str: string) => Promise<any> | any) => Promise<Record<string, unknown>[]>;
17
18
  declare const FileDroppable: {
18
19
  (props: FileDroppableProps): JSX.Element;
19
20
  defaultProps: {};
@@ -15,7 +15,7 @@ const initialState = {
15
15
  dragOver: false,
16
16
  message: null,
17
17
  };
18
- const stop = (e) => {
18
+ const preventEventPropagation = (e) => {
19
19
  e.preventDefault();
20
20
  e.stopPropagation();
21
21
  };
@@ -40,7 +40,8 @@ const readJSONFile = async (file, toJSON) => {
40
40
  };
41
41
  exports.readJSONFile = readJSONFile;
42
42
  const FileDroppable = (props) => {
43
- const { onDropSuccess, message, fileAccept = '.json', helpText = 'AdapTable No Code Version', defaultText = 'Click here to select a JSON file to load or drag it here', dragOverText = 'Drop file here to start Adaptable Wizard', icon = React.createElement(icons_1.Icon, { name: "paperclip", size: 48 }) } = props, domProps = tslib_1.__rest(props, ["onDropSuccess", "message", "fileAccept", "helpText", "defaultText", "dragOverText", "icon"]);
43
+ var _a;
44
+ const { onDropSuccess, message, fileAccept = '.json', helpText = 'AdapTable No Code Version', defaultText = 'Click here to select a JSON file to load or drag it here', dragOverText = 'Drop file here to start Adaptable Wizard', icon = React.createElement(icons_1.Icon, { name: "paperclip", size: 48 }), value } = props, domProps = tslib_1.__rest(props, ["onDropSuccess", "message", "fileAccept", "helpText", "defaultText", "dragOverText", "icon", "value"]);
44
45
  const [state, dispatch] = (0, react_1.useReducer)(reducer_1.default, initialState);
45
46
  const onDragEnter = (e) => {
46
47
  dispatch({
@@ -48,7 +49,7 @@ const FileDroppable = (props) => {
48
49
  });
49
50
  };
50
51
  const onDragLeave = (event) => {
51
- stop(event);
52
+ preventEventPropagation(event);
52
53
  if (domRef.current != event.target &&
53
54
  (0, contains_1.default)(domRef.current, event.target)) {
54
55
  return;
@@ -59,7 +60,7 @@ const FileDroppable = (props) => {
59
60
  };
60
61
  const onDrop = async (e) => {
61
62
  let files;
62
- stop(e);
63
+ preventEventPropagation(e);
63
64
  let nativeEvent = e.nativeEvent;
64
65
  if (nativeEvent && nativeEvent.dataTransfer) {
65
66
  files = nativeEvent.dataTransfer.files;
@@ -98,10 +99,10 @@ const FileDroppable = (props) => {
98
99
  }
99
100
  };
100
101
  const domRef = (0, react_1.useRef)();
101
- let form = (React.createElement("form", { onSubmit: stop },
102
+ let form = (React.createElement("form", { onSubmit: preventEventPropagation },
102
103
  React.createElement(SimpleButton_1.default, { style: { cursor: 'pointer' }, variant: "outlined" },
103
104
  React.createElement("div", null, state.dragOver ? dragOverText : defaultText),
104
- React.createElement("input", { type: "file", onChange: onDrop, accept: fileAccept, style: {
105
+ React.createElement("input", { type: "file", onChange: onDrop, accept: fileAccept, value: (_a = props === null || props === void 0 ? void 0 : props.file) === null || _a === void 0 ? void 0 : _a.name, style: {
105
106
  opacity: 0,
106
107
  position: 'absolute',
107
108
  cursor: 'pointer',
@@ -114,7 +115,7 @@ const FileDroppable = (props) => {
114
115
  zIndex: 1,
115
116
  } }))));
116
117
  const msg = message || state.message;
117
- return (React.createElement(rebass_1.Flex, Object.assign({}, domProps, { flexDirection: "column", className: (0, join_1.default)(props.className, 'ab-FileDroppable', state.dragOver ? 'ab-FileDroppable--drag-over' : ''), alignItems: "center", justifyContent: "center", onDragEnter: onDragEnter, onDragLeave: onDragLeave, onDrop: onDrop, onDragOver: stop, ref: domRef }),
118
+ return (React.createElement(rebass_1.Flex, Object.assign({}, domProps, { flexDirection: "column", className: (0, join_1.default)(props.className, 'ab-FileDroppable', state.dragOver ? 'ab-FileDroppable--drag-over' : ''), alignItems: "center", justifyContent: "center", onDragEnter: onDragEnter, onDragLeave: onDragLeave, onDrop: onDrop, onDragOver: preventEventPropagation, ref: domRef }),
118
119
  props.children,
119
120
  helpText || icon ? (React.createElement(rebass_1.Flex, { flexDirection: "column" },
120
121
  helpText ? (React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "center", margin: 2 },
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ declare const _default: (props: any) => JSX.Element;
3
+ export default _default;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const React = tslib_1.__importStar(require("react"));
5
+ const DefaultIcon_1 = tslib_1.__importDefault(require("./DefaultIcon"));
6
+ exports.default = (props) => (React.createElement(DefaultIcon_1.default, Object.assign({}, props, { viewBox: "0 -960 960 960" }),
7
+ React.createElement("path", { d: "M440-200h80v-167l64 64 56-57-160-160-160 160 57 56 63-63v167ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z" })));