@adaptabletools/adaptable 22.0.0-canary.1 → 22.0.0-canary.11

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 (394) hide show
  1. package/agGrid.d.ts +9 -9
  2. package/agGrid.js +1 -0
  3. package/index.css +1280 -1400
  4. package/index.css.map +1 -1
  5. package/index.d.ts +66 -0
  6. package/index.js +73 -0
  7. package/package.json +3 -3
  8. package/src/AdaptableInterfaces/IAdaptable.d.ts +6 -6
  9. package/src/AdaptableOptions/ActionColumnOptions.d.ts +2 -2
  10. package/src/AdaptableOptions/AdaptablePlugin.js +6 -1
  11. package/src/AdaptableOptions/ColumnOptions.d.ts +2 -2
  12. package/src/AdaptableOptions/ContainerOptions.d.ts +55 -15
  13. package/src/AdaptableOptions/CustomSortOptions.d.ts +4 -0
  14. package/src/AdaptableOptions/DashboardOptions.d.ts +1 -2
  15. package/src/AdaptableOptions/ExportOptions.d.ts +1 -2
  16. package/src/AdaptableOptions/FilterOptions.d.ts +3 -0
  17. package/src/AdaptableOptions/ToolPanelOptions.d.ts +1 -2
  18. package/src/AdaptableState/AdaptableState.d.ts +2 -0
  19. package/src/AdaptableState/AlertState.d.ts +5 -2
  20. package/src/AdaptableState/ChartingState.d.ts +2 -2
  21. package/src/AdaptableState/Common/AdaptableAlert.d.ts +2 -2
  22. package/src/AdaptableState/Common/AdaptableButton.d.ts +2 -2
  23. package/src/AdaptableState/Common/AdaptableColumn.d.ts +16 -10
  24. package/src/AdaptableState/Common/AdaptableColumnContext.d.ts +9 -0
  25. package/src/AdaptableState/Common/AdaptableFlashingCell.d.ts +2 -2
  26. package/src/AdaptableState/Common/AdaptableObject.d.ts +20 -2
  27. package/src/AdaptableState/Common/AdaptableRowContext.d.ts +11 -0
  28. package/src/AdaptableState/Common/AdaptableStyle.d.ts +8 -0
  29. package/src/AdaptableState/Common/BaseContext.d.ts +2 -0
  30. package/src/AdaptableState/Common/ColumnHighlightInfo.d.ts +18 -0
  31. package/src/AdaptableState/Common/DataUpdateConfig.d.ts +17 -0
  32. package/src/AdaptableState/Common/NamedObject.d.ts +10 -0
  33. package/src/AdaptableState/Common/NamedObject.js +1 -0
  34. package/src/AdaptableState/Common/RowDataChangedInfo.d.ts +3 -0
  35. package/src/AdaptableState/Common/RowSummary.d.ts +1 -1
  36. package/src/AdaptableState/Common/Schedule.d.ts +8 -5
  37. package/src/AdaptableState/Common/SystemStatusMessageInfo.d.ts +2 -2
  38. package/src/AdaptableState/Common/TransposeConfig.d.ts +12 -10
  39. package/src/AdaptableState/CustomSortState.d.ts +5 -1
  40. package/src/AdaptableState/DashboardState.d.ts +1 -1
  41. package/src/AdaptableState/ExportState.d.ts +1 -1
  42. package/src/AdaptableState/FlashingCellState.d.ts +6 -2
  43. package/src/AdaptableState/FormatColumnState.d.ts +5 -9
  44. package/src/AdaptableState/InitialState.d.ts +10 -1
  45. package/src/AdaptableState/InternalState.d.ts +2 -0
  46. package/src/AdaptableState/LayoutState.d.ts +7 -3
  47. package/src/AdaptableState/NamedQueryState.d.ts +1 -1
  48. package/src/AdaptableState/PlusMinusState.d.ts +5 -1
  49. package/src/AdaptableState/Selection/GridCell.d.ts +9 -0
  50. package/src/AdaptableState/ShortcutState.d.ts +5 -1
  51. package/src/AdaptableState/StyledColumnState.d.ts +1 -1
  52. package/src/AdaptableState/ThemeState.d.ts +1 -1
  53. package/src/AdaptableState/UserInterfaceState.d.ts +14 -0
  54. package/src/AdaptableState/UserInterfaceState.js +1 -0
  55. package/src/Api/AlertApi.d.ts +6 -0
  56. package/src/Api/CustomSortApi.d.ts +12 -3
  57. package/src/Api/DataSetApi.d.ts +1 -1
  58. package/src/Api/FlashingCellApi.d.ts +6 -0
  59. package/src/Api/FormatColumnApi.d.ts +10 -4
  60. package/src/Api/GridApi.d.ts +27 -12
  61. package/src/Api/Implementation/ActionColumnApiImpl.js +1 -0
  62. package/src/Api/Implementation/AdaptableApiImpl.js +52 -0
  63. package/src/Api/Implementation/AlertApiImpl.d.ts +1 -0
  64. package/src/Api/Implementation/AlertApiImpl.js +6 -6
  65. package/src/Api/Implementation/ApiBase.d.ts +1 -1
  66. package/src/Api/Implementation/ApiBase.js +2 -1
  67. package/src/Api/Implementation/CalculatedColumnApiImpl.js +1 -0
  68. package/src/Api/Implementation/ChartingApiImpl.js +6 -2
  69. package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -1
  70. package/src/Api/Implementation/ColumnApiImpl.js +1 -0
  71. package/src/Api/Implementation/ColumnFilterApiImpl.js +1 -0
  72. package/src/Api/Implementation/CommentsApiImpl.js +1 -0
  73. package/src/Api/Implementation/CustomSortApiImpl.d.ts +6 -1
  74. package/src/Api/Implementation/CustomSortApiImpl.js +6 -2
  75. package/src/Api/Implementation/DashboardApiImpl.js +1 -0
  76. package/src/Api/Implementation/DataChangeHistoryApiImpl.js +12 -15
  77. package/src/Api/Implementation/DataImportApiImpl.js +1 -0
  78. package/src/Api/Implementation/DataSetApiImpl.js +1 -0
  79. package/src/Api/Implementation/EntitlementApiImpl.js +1 -0
  80. package/src/Api/Implementation/EventApiImpl.js +16 -14
  81. package/src/Api/Implementation/ExportApiImpl.js +1 -0
  82. package/src/Api/Implementation/ExpressionApiImpl.js +1 -0
  83. package/src/Api/Implementation/Fdc3ApiImpl.js +1 -0
  84. package/src/Api/Implementation/FilterApiImpl.js +3 -0
  85. package/src/Api/Implementation/FlashingCellApiImpl.d.ts +1 -0
  86. package/src/Api/Implementation/FlashingCellApiImpl.js +4 -0
  87. package/src/Api/Implementation/FormatColumnApiImpl.d.ts +6 -5
  88. package/src/Api/Implementation/FormatColumnApiImpl.js +7 -5
  89. package/src/Api/Implementation/FreeTextColumnApiImpl.js +1 -0
  90. package/src/Api/Implementation/GridApiImpl.d.ts +11 -10
  91. package/src/Api/Implementation/GridApiImpl.js +39 -21
  92. package/src/Api/Implementation/GridFilterApiImpl.js +1 -0
  93. package/src/Api/Implementation/LayoutApiImpl.d.ts +1 -0
  94. package/src/Api/Implementation/LayoutApiImpl.js +5 -1
  95. package/src/Api/Implementation/LayoutHelpers.js +7 -0
  96. package/src/Api/Implementation/NamedQueryApiImpl.js +3 -2
  97. package/src/Api/Implementation/NoteApiImpl.js +1 -0
  98. package/src/Api/Implementation/PlusMinusApiImpl.d.ts +1 -0
  99. package/src/Api/Implementation/PlusMinusApiImpl.js +3 -0
  100. package/src/Api/Implementation/PredicateApiImpl.js +1 -0
  101. package/src/Api/Implementation/RowFormApiImpl.js +1 -0
  102. package/src/Api/Implementation/ScheduleApiImpl.d.ts +1 -0
  103. package/src/Api/Implementation/ScheduleApiImpl.js +4 -0
  104. package/src/Api/Implementation/ShortcutApiImpl.d.ts +1 -0
  105. package/src/Api/Implementation/ShortcutApiImpl.js +3 -0
  106. package/src/Api/Implementation/StyledColumnApiImpl.js +1 -0
  107. package/src/Api/Implementation/SystemStatusApiImpl.js +8 -9
  108. package/src/Api/Implementation/TeamSharingApiImpl.js +1 -0
  109. package/src/Api/Implementation/ThemeApiImpl.js +1 -0
  110. package/src/Api/Implementation/UserInterfaceApiImpl.d.ts +5 -0
  111. package/src/Api/Implementation/UserInterfaceApiImpl.js +15 -1
  112. package/src/Api/Internal/CalculatedColumnInternalApi.js +2 -2
  113. package/src/Api/Internal/ColumnInternalApi.js +1 -1
  114. package/src/Api/Internal/FormatColumnInternalApi.d.ts +0 -10
  115. package/src/Api/Internal/FormatColumnInternalApi.js +1 -19
  116. package/src/Api/Internal/FreeTextColumnInternalApi.js +2 -2
  117. package/src/Api/Internal/LayoutInternalApi.js +1 -1
  118. package/src/Api/Internal/NamedQueryInternalApi.js +4 -4
  119. package/src/Api/LayoutApi.d.ts +6 -0
  120. package/src/Api/PlusMinusApi.d.ts +6 -0
  121. package/src/Api/ScheduleApi.d.ts +6 -0
  122. package/src/Api/ShortcutApi.d.ts +6 -0
  123. package/src/Api/UserInterfaceApi.d.ts +17 -0
  124. package/src/Redux/ActionsReducers/FormatColumnRedux.d.ts +8 -0
  125. package/src/Redux/ActionsReducers/FormatColumnRedux.js +15 -0
  126. package/src/Redux/ActionsReducers/InternalRedux.d.ts +15 -0
  127. package/src/Redux/ActionsReducers/InternalRedux.js +36 -0
  128. package/src/Redux/ActionsReducers/LayoutRedux.d.ts +1 -1
  129. package/src/Redux/ActionsReducers/NoteRedux.js +1 -1
  130. package/src/Redux/ActionsReducers/UserInterfaceRedux.d.ts +11 -0
  131. package/src/Redux/ActionsReducers/UserInterfaceRedux.js +21 -0
  132. package/src/Redux/Store/AdaptableReduxLocalStorageEngine.js +6 -0
  133. package/src/Redux/Store/AdaptableStore.js +113 -57
  134. package/src/Strategy/AdaptableModuleBase.js +4 -0
  135. package/src/Strategy/AlertModule.js +5 -0
  136. package/src/Strategy/BulkUpdateModule.js +8 -8
  137. package/src/Strategy/CalculatedColumnModule.js +1 -0
  138. package/src/Strategy/CellSummaryModule.js +1 -1
  139. package/src/Strategy/CustomSortModule.js +4 -0
  140. package/src/Strategy/DataChangeHistoryModule.js +1 -0
  141. package/src/Strategy/FlashingCellModule.js +6 -0
  142. package/src/Strategy/FormatColumnModule.js +4 -0
  143. package/src/Strategy/FreeTextColumnModule.js +1 -0
  144. package/src/Strategy/LayoutModule.js +6 -5
  145. package/src/Strategy/PlusMinusModule.js +7 -1
  146. package/src/Strategy/QuickSearchModule.js +1 -1
  147. package/src/Strategy/ScheduleModule.js +5 -0
  148. package/src/Strategy/SettingsPanelModule.js +11 -7
  149. package/src/Strategy/ShortcutModule.js +6 -0
  150. package/src/Strategy/SmartEditModule.js +10 -10
  151. package/src/Strategy/TeamSharingModule.js +10 -10
  152. package/src/Strategy/Utilities/FormatColumn/getFormatColumnSettingsViewItems.js +0 -3
  153. package/src/Utilities/Constants/DocumentationLinkConstants.d.ts +3 -3
  154. package/src/Utilities/Constants/DocumentationLinkConstants.js +3 -3
  155. package/src/Utilities/ExpressionFunctions/deepMap.js +31 -31
  156. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +3 -3
  157. package/src/Utilities/Extensions/StringExtensions.d.ts +2 -0
  158. package/src/Utilities/Extensions/StringExtensions.js +16 -0
  159. package/src/Utilities/Helpers/FormatHelper.js +9 -2
  160. package/src/Utilities/Helpers/StyleHelper.js +14 -0
  161. package/src/Utilities/MenuItem.js +18 -0
  162. package/src/Utilities/ObjectFactory.js +16 -3
  163. package/src/Utilities/Services/AggregatedScalarLiveValue.js +8 -0
  164. package/src/Utilities/Services/AlertService.js +6 -4
  165. package/src/Utilities/Services/AnnotationsService.js +4 -1
  166. package/src/Utilities/Services/CalculatedColumnExpressionService.js +2 -1
  167. package/src/Utilities/Services/ChartingService.js +1 -0
  168. package/src/Utilities/Services/DataService.js +11 -3
  169. package/src/Utilities/Services/Fdc3Service.js +9 -7
  170. package/src/Utilities/Services/FlashingCellService.js +5 -0
  171. package/src/Utilities/Services/LicenseService/index.js +1 -1
  172. package/src/Utilities/Services/MetamodelService.js +2 -2
  173. package/src/Utilities/Services/ModuleService.js +5 -6
  174. package/src/Utilities/Services/QueryLanguageService.js +6 -5
  175. package/src/Utilities/Services/RowFormService.js +1 -0
  176. package/src/Utilities/Services/RowSummaryService.js +10 -7
  177. package/src/Utilities/Services/TeamSharingService.js +3 -1
  178. package/src/Utilities/Services/ThemeService.js +13 -15
  179. package/src/Utilities/Services/ValidationService.js +2 -1
  180. package/src/Utilities/createAgStatusPanelComponent.js +3 -0
  181. package/src/Utilities/logDeprecation.js +3 -4
  182. package/src/Utilities/resolveContainerElement.d.ts +23 -0
  183. package/src/Utilities/resolveContainerElement.js +44 -0
  184. package/src/View/AdaptablePopover/index.d.ts +1 -0
  185. package/src/View/AdaptablePopover/index.js +1 -1
  186. package/src/View/Alert/ActiveAlertsPanel.js +8 -0
  187. package/src/View/Alert/AlertViewPanel.js +13 -9
  188. package/src/View/Alert/Utilities/getAlertButtonStyle.d.ts +1 -0
  189. package/src/View/Alert/Utilities/getAlertButtonStyle.js +8 -0
  190. package/src/View/Alert/Utilities/getDefaultAlertDefinition.d.ts +1 -0
  191. package/src/View/Alert/Wizard/AlertTypeWizardSection.d.ts +5 -2
  192. package/src/View/Alert/Wizard/AlertTypeWizardSection.js +47 -12
  193. package/src/View/Alert/Wizard/AlertWizard.js +14 -10
  194. package/src/View/Alert/Wizard/isValidAlertRules.js +1 -1
  195. package/src/View/BulkUpdate/BulkUpdateViewPanel.js +24 -11
  196. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +2 -2
  197. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +2 -2
  198. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +1 -1
  199. package/src/View/CellSummary/CellSummaryViewPanel.js +16 -17
  200. package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +2 -2
  201. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +2 -2
  202. package/src/View/Components/AdaptableDateInput/index.js +1 -1
  203. package/src/View/Components/Buttons/ButtonApply.js +1 -1
  204. package/src/View/Components/Buttons/ButtonBase/index.js +9 -9
  205. package/src/View/Components/Buttons/ButtonClear.d.ts +1 -0
  206. package/src/View/Components/Buttons/EntityListActionButtons.d.ts +1 -2
  207. package/src/View/Components/Buttons/EntityListActionButtons.js +18 -18
  208. package/src/View/Components/Buttons/SuspendToggleButton/SuspendToggleButton.d.ts +1 -2
  209. package/src/View/Components/CellPopup/index.js +1 -1
  210. package/src/View/Components/ColumnFilter/FloatingFilter.js +41 -3
  211. package/src/View/Components/ColumnFilter/components/ColumnFilterInput.js +1 -1
  212. package/src/View/Components/ColumnFilter/components/ColumnFilterMenu.js +54 -2
  213. package/src/View/Components/ColumnFilter/components/FloatingFilterValues.js +1 -1
  214. package/src/View/Components/EntityRulesEditor/Utilities.js +5 -5
  215. package/src/View/Components/NewScopeComponent.js +3 -3
  216. package/src/View/Components/Panels/PanelDashboard/index.js +8 -8
  217. package/src/View/Components/Panels/PanelToolPanel/index.js +7 -7
  218. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopup.js +2 -1
  219. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupBody.js +1 -1
  220. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupDialog.d.ts +1 -1
  221. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupDialog.js +1 -8
  222. package/src/View/Components/Popups/AdaptablePopupConfirmation.js +1 -1
  223. package/src/View/Components/Popups/WindowPopups/WindowPopups.js +36 -1
  224. package/src/View/Components/Selectors/BulkUpdateValueSelector.js +19 -18
  225. package/src/View/Components/StyleComponent.d.ts +1 -0
  226. package/src/View/Components/StyleComponent.js +94 -24
  227. package/src/View/Components/ToolPanel/AdaptableToolPanel.js +2 -0
  228. package/src/View/Components/WizardSummaryPage.js +1 -1
  229. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.d.ts +2 -1
  230. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +41 -15
  231. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +1 -1
  232. package/src/View/CustomSort/Wizard/CustomSortWizard.js +4 -4
  233. package/src/View/Dashboard/CustomToolbar.js +1 -1
  234. package/src/View/Dashboard/DashboardPopup.js +4 -5
  235. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -0
  236. package/src/View/DataChangeHistory/DataChangeHistoryViewPanel.js +1 -1
  237. package/src/View/Export/ExportDestinationPicker.js +1 -1
  238. package/src/View/Export/ExportStatusBar.js +4 -2
  239. package/src/View/Export/ExportViewPanel.js +25 -18
  240. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.d.ts +2 -1
  241. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +34 -14
  242. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +14 -10
  243. package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +1 -1
  244. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +46 -51
  245. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +2 -2
  246. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +20 -9
  247. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
  248. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +3 -3
  249. package/src/View/GridFilter/GridFilterExpressionEditor.js +6 -1
  250. package/src/View/GridFilter/GridFilterViewPanel.js +33 -70
  251. package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +57 -65
  252. package/src/View/Layout/LayoutViewPanel.js +1 -1
  253. package/src/View/Layout/TransposedPopup.js +144 -138
  254. package/src/View/Layout/Wizard/sections/AggregationsSection.js +1 -1
  255. package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
  256. package/src/View/Layout/Wizard/sections/GridFilterSection.js +1 -1
  257. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +3 -3
  258. package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +8 -0
  259. package/src/View/Layout/Wizard/sections/RowSummarySection.js +1 -1
  260. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +2 -2
  261. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +35 -12
  262. package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +20 -15
  263. package/src/View/QuickSearch/QuickSearchPopup.js +4 -1
  264. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsIPushPull.js +12 -1
  265. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsOpenFin.js +12 -1
  266. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReminder.js +14 -4
  267. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReport.js +12 -1
  268. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.d.ts +2 -1
  269. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.js +19 -10
  270. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.d.ts +2 -1
  271. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +25 -4
  272. package/src/View/Shortcut/Wizard/ShortcutWizard.js +18 -14
  273. package/src/View/SmartEdit/SmartEditViewPanel.js +1 -0
  274. package/src/View/StateManagement/handleExportState.js +1 -1
  275. package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +1 -1
  276. package/src/View/Theme/ThemePopup.js +13 -16
  277. package/src/View/UIHelper.d.ts +4 -1
  278. package/src/View/UIHelper.js +23 -14
  279. package/src/agGrid/Adaptable.js +15 -11
  280. package/src/agGrid/AdaptableAgGrid.d.ts +12 -8
  281. package/src/agGrid/AdaptableAgGrid.js +257 -111
  282. package/src/agGrid/AdaptableFilterHandler.js +4 -0
  283. package/src/agGrid/AdaptableLogger.d.ts +3 -0
  284. package/src/agGrid/AdaptableLogger.js +10 -0
  285. package/src/agGrid/AgGridAdapter.js +19 -9
  286. package/src/agGrid/AgGridColumnAdapter.d.ts +1 -0
  287. package/src/agGrid/AgGridColumnAdapter.js +20 -22
  288. package/src/agGrid/AgGridExportAdapter.js +15 -14
  289. package/src/agGrid/AgGridFilterAdapter.js +4 -0
  290. package/src/agGrid/AgGridFloatingFilterAdapter.js +4 -1
  291. package/src/agGrid/AgGridMenuAdapter.js +10 -1
  292. package/src/agGrid/AgGridModulesAdapter.js +2 -1
  293. package/src/agGrid/AgGridOptionsService.js +3 -0
  294. package/src/agGrid/AgGridThemeAdapter.js +4 -2
  295. package/src/agGrid/cellRenderers/ActionColumnRenderer.js +5 -0
  296. package/src/agGrid/cellRenderers/BadgeRenderer.js +2 -0
  297. package/src/agGrid/cellRenderers/PercentBarRenderer.js +1 -0
  298. package/src/agGrid/editors/AdaptableDateEditor/index.js +6 -3
  299. package/src/agGrid/editors/AdaptableNumberEditor/index.js +16 -12
  300. package/src/agGrid/editors/AdaptablePercentageEditor/index.js +17 -13
  301. package/src/agGrid/index.d.ts +6 -0
  302. package/src/agGrid/index.js +6 -0
  303. package/src/components/CheckBox/index.js +1 -1
  304. package/src/components/ColorPicker/ColorPicker.js +5 -4
  305. package/src/components/Dashboard/DashboardToolbar.js +1 -1
  306. package/src/components/Datepicker/index.js +1 -1
  307. package/src/components/Dropdown/Arrows.js +1 -1
  308. package/src/components/ExpressionEditor/DataTableEditor.js +3 -3
  309. package/src/components/ExpressionEditor/EditorInput.js +19 -3
  310. package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
  311. package/src/components/FormLayout/index.js +1 -1
  312. package/src/components/OverlayTrigger/index.js +1 -1
  313. package/src/components/Select/Select.js +79 -16
  314. package/src/components/Tree/TreeDropdown/index.js +2 -2
  315. package/src/components/overlayBaseZIndex.js +1 -1
  316. package/src/components/utils/useContainerScrollObserver/index.js +17 -14
  317. package/src/devTools/index.js +54 -53
  318. package/src/env.js +2 -2
  319. package/src/layout-manager/src/LMEmitter.js +11 -11
  320. package/src/layout-manager/src/LMLogger.js +7 -0
  321. package/src/layout-manager/src/LayoutManagerModel.d.ts +1 -0
  322. package/src/layout-manager/src/index.js +81 -58
  323. package/src/layout-manager/src/normalizeLayoutModel.js +3 -0
  324. package/src/metamodel/adaptable.metamodel.d.ts +177 -8
  325. package/src/metamodel/adaptable.metamodel.js +1 -1
  326. package/src/migration/AdaptableUpgradeHelper.js +8 -3
  327. package/src/migration/VersionUpgrade.js +1 -0
  328. package/src/migration/VersionUpgrade17.js +5 -6
  329. package/src/migration/VersionUpgrade20.js +4 -4
  330. package/src/migration/VersionUpgrade22.d.ts +21 -0
  331. package/src/migration/VersionUpgrade22.js +187 -0
  332. package/src/parser/src/ExpressionEvaluationError.js +1 -0
  333. package/src/types.d.ts +9 -7
  334. package/themes/dark.css +30 -30
  335. package/themes/light.css +4 -2
  336. package/tsconfig.esm.tsbuildinfo +1 -1
  337. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.js +0 -632
  338. package/src/View/Alert/AlertEntityRow.d.ts +0 -11
  339. package/src/View/Alert/AlertEntityRow.js +0 -28
  340. package/src/View/CalculatedColumn/CalculatedColumnSummary.d.ts +0 -21
  341. package/src/View/CalculatedColumn/CalculatedColumnSummary.js +0 -58
  342. package/src/View/Components/Buttons/ButtonFunction.d.ts +0 -7
  343. package/src/View/Components/Buttons/ButtonFunction.js +0 -8
  344. package/src/View/Components/Buttons/ButtonGeneral.d.ts +0 -5
  345. package/src/View/Components/Buttons/ButtonGeneral.js +0 -7
  346. package/src/View/Components/Buttons/ButtonPreviewDelete.d.ts +0 -4
  347. package/src/View/Components/Buttons/ButtonPreviewDelete.js +0 -5
  348. package/src/View/Components/Buttons/ButtonShow.d.ts +0 -5
  349. package/src/View/Components/Buttons/ButtonShow.js +0 -7
  350. package/src/View/Components/Buttons/ButtonShowChart.d.ts +0 -5
  351. package/src/View/Components/Buttons/ButtonShowChart.js +0 -7
  352. package/src/View/Components/Buttons/ButtonUndo.d.ts +0 -5
  353. package/src/View/Components/Buttons/ButtonUndo.js +0 -7
  354. package/src/View/Components/ExpressionWizard.d.ts +0 -24
  355. package/src/View/Components/ExpressionWizard.js +0 -77
  356. package/src/View/Components/FilterForm/Waiting.d.ts +0 -10
  357. package/src/View/Components/FilterForm/Waiting.js +0 -14
  358. package/src/View/Components/Panels/PanelFooter.d.ts +0 -10
  359. package/src/View/Components/Panels/PanelFooter.js +0 -9
  360. package/src/View/Components/Panels/PanelWithTwoButtons.d.ts +0 -12
  361. package/src/View/Components/Panels/PanelWithTwoButtons.js +0 -15
  362. package/src/View/Components/Panels/ToolPanelSettingsPanel.d.ts +0 -8
  363. package/src/View/Components/Panels/ToolPanelSettingsPanel.js +0 -26
  364. package/src/View/Components/Selectors/ColumnSelectorOld.d.ts +0 -18
  365. package/src/View/Components/Selectors/ColumnSelectorOld.js +0 -45
  366. package/src/View/Components/SharedProps/WizardScopeState.d.ts +0 -4
  367. package/src/View/Components/WizardSummaryRow.d.ts +0 -9
  368. package/src/View/Components/WizardSummaryRow.js +0 -11
  369. package/src/View/CustomSort/CustomSortSummary.d.ts +0 -23
  370. package/src/View/CustomSort/CustomSortSummary.js +0 -105
  371. package/src/View/DataImport/DataImportWizard/sections/ImportSection.d.ts +0 -9
  372. package/src/View/DataImport/DataImportWizard/sections/ImportSection.js +0 -19
  373. package/src/View/Export/Wizard/ReportColumnTypeWizard.d.ts +0 -19
  374. package/src/View/Export/Wizard/ReportColumnTypeWizard.js +0 -68
  375. package/src/View/Export/Wizard/ReportRowTypeWizard.d.ts +0 -19
  376. package/src/View/Export/Wizard/ReportRowTypeWizard.js +0 -68
  377. package/src/View/Export/Wizard/ReportSettingsWizard.d.ts +0 -21
  378. package/src/View/Export/Wizard/ReportSettingsWizard.js +0 -56
  379. package/src/View/Export/Wizard/ReportSummaryWizard.d.ts +0 -15
  380. package/src/View/Export/Wizard/ReportSummaryWizard.js +0 -35
  381. package/src/View/Filter/FilterSummary.d.ts +0 -18
  382. package/src/View/Filter/FilterSummary.js +0 -48
  383. package/src/View/FormatColumn/FormatColumnSummary.d.ts +0 -22
  384. package/src/View/FormatColumn/FormatColumnSummary.js +0 -90
  385. package/src/View/FreeTextColumn/FreeTextColumnSummary.d.ts +0 -22
  386. package/src/View/FreeTextColumn/FreeTextColumnSummary.js +0 -88
  387. package/src/View/GridInfo/GridInfoPopup/AdaptableOptionsComponent.d.ts +0 -7
  388. package/src/View/GridInfo/GridInfoPopup/AdaptableOptionsComponent.js +0 -94
  389. package/src/View/PlusMinus/PlusMinusSummary.d.ts +0 -22
  390. package/src/View/PlusMinus/PlusMinusSummary.js +0 -95
  391. package/src/View/Wizard/WizardLegend.d.ts +0 -12
  392. package/src/View/Wizard/WizardLegend.js +0 -23
  393. /package/src/{View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.d.ts → AdaptableState/Common/AdaptableRowContext.js} +0 -0
  394. /package/src/{View/Components/SharedProps/WizardScopeState.js → AdaptableState/Common/ColumnHighlightInfo.js} +0 -0
@@ -19,7 +19,7 @@ export const isAggregationsSectionValid = (data) => {
19
19
  AggFunc.type === 'weightedAverage')?.AggFunc
20
20
  : null;
21
21
  if (weightedAvg && !weightedAvg.weightedColumnId) {
22
- return 'The Weighted Average Aggregation requires a Weighted Column';
22
+ return 'Weighted Average requires a weight column to be selected.';
23
23
  }
24
24
  return true;
25
25
  };
@@ -13,7 +13,7 @@ import { Box } from '../../../../components/Flex';
13
13
  export const isColumnFiltersValid = (layout) => {
14
14
  const invalidColumnFilters = (layout.ColumnFilters ?? [])?.filter((columnFilter) => !columnFilter?.Predicates[0]?.PredicateId);
15
15
  if (invalidColumnFilters.length > 0) {
16
- return 'Please select a Predicate for each Column Filter';
16
+ return 'Please select a predicate for each column filter.';
17
17
  }
18
18
  return true;
19
19
  };
@@ -13,7 +13,7 @@ export const isGridFiltersValid = (layout, api) => {
13
13
  return true;
14
14
  }
15
15
  return (api.internalApi.getQueryLanguageService().validateBoolean(expression, GridFilterModuleId)
16
- .isValid || 'Invalid Expression');
16
+ .isValid || 'The expression is not valid.');
17
17
  };
18
18
  export const GridFilterSectionSummary = () => {
19
19
  const { data: layout } = useOnePageAdaptableWizardContext();
@@ -216,7 +216,7 @@ export const isPivotAggregationsSectionValid = (data) => {
216
216
  .find((agg) => typeof agg === 'object' && agg.type === 'weightedAverage')
217
217
  : null;
218
218
  if (weightedAvg && !weightedAvg.weightedColumnId) {
219
- return 'The Weighted Average Aggregation requires a Weighted Column';
219
+ return 'Weighted Average requires a weight column to be selected.';
220
220
  }
221
221
  return true;
222
222
  };
@@ -303,12 +303,12 @@ export const PivotAggregationsSection = (props) => {
303
303
  }
304
304
  const firstAggFuncName = getAggFuncName(aggregationColumns[0].AggFunc);
305
305
  if (layout.PivotAggregationColumns?.some((aggCol) => getAggFuncName(aggCol.AggFunc) !== firstAggFuncName)) {
306
- return 'Requires identical aggregation on all columns';
306
+ return 'All columns must use the same aggregation function.';
307
307
  }
308
308
  // check that no Aggregation Total Column is enabled
309
309
  const hasAggregationTotalColumn = aggregationColumns.some((aggCol) => aggCol.Total !== false && aggCol.Total != null);
310
310
  if (hasAggregationTotalColumn) {
311
- return 'Can only be enabled when no Aggregation Total Column is present';
311
+ return 'This option is not available when an Aggregation Total Column is present.';
312
312
  }
313
313
  return true;
314
314
  };
@@ -7,6 +7,7 @@ import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptab
7
7
  import { columnFilter } from './Utilities';
8
8
  import ArrayExtensions from '../../../../Utilities/Extensions/ArrayExtensions';
9
9
  import { Box } from '../../../../components/Flex';
10
+ import { CheckBox } from '../../../../components/CheckBox';
10
11
  export const PivotColumnsSectionSummary = () => {
11
12
  const adaptable = useAdaptable();
12
13
  const { data: layout } = useOnePageAdaptableWizardContext();
@@ -28,5 +29,12 @@ export const PivotColumnsSection = (props) => {
28
29
  return (React.createElement(Tabs, { className: "twa:h-full" },
29
30
  React.createElement(Tabs.Tab, null, "Pivot Columns"),
30
31
  React.createElement(Tabs.Content, null,
32
+ React.createElement(Box, { className: "twa:mb-3 twa:px-2" },
33
+ React.createElement(CheckBox, { checked: !!layout.PivotResultColumnsOrder, onChange: (checked) => {
34
+ props.onChange({
35
+ ...layout,
36
+ PivotResultColumnsOrder: checked,
37
+ });
38
+ } }, "Persist Order of Pivot Result Columns")),
31
39
  React.createElement(ValueSelector, { showFilterInput: true, filter: columnFilter, toIdentifier: (option) => `${option.columnId}`, toLabel: (option) => option.friendlyName ?? option.columnId, options: sortedPivotColumns, value: layout.PivotColumns ?? [], allowReorder: true, onChange: handleColumnsChange }))));
32
40
  };
@@ -24,7 +24,7 @@ export const areSummaryRowsValid = (layout) => {
24
24
  layout.RowSummaries?.find((rowSummary) => {
25
25
  for (const [_, fn] of Object.entries(rowSummary.ColumnsMap ?? {})) {
26
26
  if (!fn) {
27
- valid = 'All row summary columns must have an aggregation function.';
27
+ valid = 'Each row summary column requires an aggregation function.';
28
28
  return true;
29
29
  }
30
30
  }
@@ -7,11 +7,11 @@ import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableW
7
7
  import { Box } from '../../../components/Flex';
8
8
  export const isValidNamedQueryExpression = (data, api) => {
9
9
  if (!data.BooleanExpression) {
10
- return 'Expression is empty';
10
+ return 'An expression is required.';
11
11
  }
12
12
  const valid = api.expressionApi.isValidBooleanExpression(data.BooleanExpression, NamedQueryModuleId);
13
13
  if (!valid) {
14
- return 'Query is not a valid Boolean Query';
14
+ return 'The query is not a valid Boolean expression.';
15
15
  }
16
16
  return valid;
17
17
  };
@@ -1,6 +1,5 @@
1
1
  import * as React from 'react';
2
2
  import Input from '../../../components/Input';
3
- import Radio from '../../../components/Radio';
4
3
  import FormLayout, { FormRow } from '../../../components/FormLayout';
5
4
  import { Tabs } from '../../../components/Tabs';
6
5
  import { useOnePageAdaptableWizardContext, } from '../../Wizard/OnePageAdaptableWizard';
@@ -12,15 +11,29 @@ import { Flex } from '../../../components/Flex';
12
11
  export const PlusMinusSettingsSummary = (props) => {
13
12
  const { data } = useOnePageAdaptableWizardContext();
14
13
  return (React.createElement(React.Fragment, null,
14
+ React.createElement(SummaryText, null,
15
+ "Name ",
16
+ React.createElement(Tag, null, data.Name || 'Not specified')),
15
17
  React.createElement(SummaryText, null,
16
18
  "Nudge Value ",
17
19
  React.createElement(Tag, null, data.NudgeValue ?? 'Not selected')),
20
+ React.createElement(SummaryText, null,
21
+ "Nudge Type ",
22
+ React.createElement(Tag, null, props.hasCondition ? 'Conditional' : 'Always Apply')),
18
23
  props.hasCondition && React.createElement(PlusMinusRuleSummary, null)));
19
24
  };
20
25
  export const isSettingsValid = (hasCondition) => (data, api, context) => {
26
+ if (!data.Name?.trim()) {
27
+ return 'A name is required.';
28
+ }
29
+ const allPlusMinusNudges = api.plusMinusApi.getAllPlusMinus();
30
+ const isDuplicateName = allPlusMinusNudges.some((nudge) => nudge.Name === data.Name && nudge.Uuid !== data.Uuid);
31
+ if (isDuplicateName) {
32
+ return 'A Plus/Minus Nudge with this name already exists.';
33
+ }
21
34
  if (hasCondition) {
22
35
  if (!data?.Rule?.BooleanExpression) {
23
- return 'No valid Rule is specified';
36
+ return 'A valid rule is required.';
24
37
  }
25
38
  const ruleValidation = isAdaptableRuleValid(data, api, context);
26
39
  if (typeof ruleValidation === 'string') {
@@ -28,15 +41,21 @@ export const isSettingsValid = (hasCondition) => (data, api, context) => {
28
41
  }
29
42
  }
30
43
  if (typeof data.NudgeValue !== 'number') {
31
- return 'Nudge value is not specified';
44
+ return 'A nudge value is required.';
32
45
  }
33
46
  if (data.NudgeValue === 0) {
34
- return 'Nudge value must be different than 0';
47
+ return 'Nudge value must not be zero.';
35
48
  }
36
49
  return true;
37
50
  };
38
51
  export const PlusMinusSettingsWizardSection = (props) => {
39
52
  const { data } = useOnePageAdaptableWizardContext();
53
+ const handleNameChange = (event) => {
54
+ props.onChange({
55
+ ...data,
56
+ Name: event.target.value,
57
+ });
58
+ };
40
59
  const handleNudgeValueChange = (event) => {
41
60
  const newValue = parseFloat(event.target.value);
42
61
  props.onChange({
@@ -45,15 +64,19 @@ export const PlusMinusSettingsWizardSection = (props) => {
45
64
  });
46
65
  };
47
66
  return (React.createElement(Flex, { flexDirection: "column", "data-name": "plus-minus-column-settings", className: "twa:h-full" },
48
- React.createElement(Tabs, { autoFocus: false, className: "twa:p-2" },
49
- React.createElement(Tabs.Tab, null, "Plus Minus Settings"),
67
+ React.createElement(Tabs, { className: "twa:p-2" },
68
+ React.createElement(Tabs.Tab, null, "Settings"),
50
69
  React.createElement(Tabs.Content, null,
51
70
  React.createElement(FormLayout, null,
71
+ React.createElement(FormRow, { label: "Name" },
72
+ React.createElement(Input, { "data-name": "plus-minus-name", className: "twa:flex-1 twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: data.Name ?? '' })),
52
73
  React.createElement(FormRow, { label: "Nudge Value" },
53
- React.createElement(Input, { "data-name": "nudge-value", className: "twa:flex-1 twa:mr-3", onChange: handleNudgeValueChange, placeholder: "Enter Number", type: "number", value: data.NudgeValue ?? '' })),
54
- React.createElement(FormRow, { label: "Nudge Type" },
55
- React.createElement(Flex, null,
56
- React.createElement(Radio, { "data-name": "nudge-type-always", value: "Always", checked: !props.hasCondition, onChange: () => props.onConditionChange(false) }, "Always Apply Nudge"),
57
- React.createElement(Radio, { "data-name": "nudge-type-condition", className: "twa:ml-3", value: "Expression", checked: props.hasCondition, onChange: () => props.onConditionChange(true) }, "Create a Rule")))))),
58
- props.hasCondition && (React.createElement(PlusMinusRuleWizardSection, { defaultPredicateId: "NonBlanks", onChange: props.onChange }))));
74
+ React.createElement(Input, { "data-name": "nudge-value", className: "twa:flex-1 twa:mr-3", onChange: handleNudgeValueChange, placeholder: "Enter Number", type: "number", value: data.NudgeValue ?? '' }))))),
75
+ React.createElement(Tabs, { className: "twa:p-2", selectedIndex: props.hasCondition ? 1 : 0, onSelectedIndexChange: (index) => props.onConditionChange(index === 1) },
76
+ React.createElement(Tabs.Tab, { "data-name": "nudge-type-always" }, "Always Apply"),
77
+ React.createElement(Tabs.Tab, { "data-name": "nudge-type-condition" }, "Conditional"),
78
+ React.createElement(Tabs.Content, null,
79
+ React.createElement(Flex, { className: "twa:text-2 twa:py-2" }, "The nudge value is always applied when using Plus/Minus")),
80
+ React.createElement(Tabs.Content, { className: "twa:p-0" },
81
+ React.createElement(PlusMinusRuleWizardSection, { defaultPredicateId: "NonBlanks", onChange: props.onChange })))));
59
82
  };
@@ -9,7 +9,7 @@ import * as PlusMinusRedux from '../../../Redux/ActionsReducers/PlusMinusRedux';
9
9
  import { ObjectTagsWizardSection, renderObjectTagsSummary, } from '../../Wizard/ObjectTagsWizardSection';
10
10
  import { Box } from '../../../components/Flex';
11
11
  export const PlusMinusWizard = (props) => {
12
- const [plusMinus, setPlusMinus] = React.useState(() => {
12
+ const [plusMinus, doSetPlusMinus] = React.useState(() => {
13
13
  const newPlusMinus = {
14
14
  ...(props.data ? props.data : ObjectFactory.CreateEmptyPlusMinusNudge()),
15
15
  Scope: props?.data?.Scope ?? { All: true },
@@ -22,19 +22,24 @@ export const PlusMinusWizard = (props) => {
22
22
  }
23
23
  return newPlusMinus;
24
24
  });
25
+ const setPlusMinus = React.useCallback((data) => {
26
+ doSetPlusMinus(data);
27
+ }, []);
25
28
  const [hasCondition, setHasCondition] = React.useState(() => {
26
29
  // true if on edit and it has a condition
27
30
  return Boolean(props?.data?.Rule);
28
31
  });
29
32
  React.useEffect(() => {
30
- const preparedData = { ...plusMinus };
31
- if (hasCondition) {
32
- preparedData.Rule = preparedData.Rule ?? { BooleanExpression: '' };
33
- }
34
- else {
35
- delete preparedData.Rule;
36
- }
37
- setPlusMinus(preparedData);
33
+ doSetPlusMinus((prev) => {
34
+ const preparedData = { ...prev };
35
+ if (hasCondition) {
36
+ preparedData.Rule = preparedData.Rule ?? { BooleanExpression: '' };
37
+ }
38
+ else {
39
+ delete preparedData.Rule;
40
+ }
41
+ return preparedData;
42
+ });
38
43
  }, [hasCondition]);
39
44
  const dispatch = useDispatch();
40
45
  const handleFinish = () => {
@@ -47,6 +52,12 @@ export const PlusMinusWizard = (props) => {
47
52
  props.onFinishWizard(plusMinus);
48
53
  };
49
54
  return (React.createElement(OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: plusMinus, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
55
+ {
56
+ title: 'Settings',
57
+ isValid: isSettingsValid(hasCondition),
58
+ renderSummary: () => React.createElement(PlusMinusSettingsSummary, { hasCondition: hasCondition }),
59
+ render: () => (React.createElement(PlusMinusSettingsWizardSection, { hasCondition: hasCondition, onConditionChange: setHasCondition, onChange: setPlusMinus })),
60
+ },
50
61
  {
51
62
  title: 'Target',
52
63
  isValid: isScopeValid,
@@ -59,12 +70,6 @@ export const PlusMinusWizard = (props) => {
59
70
  render: () => (React.createElement(Box, { className: "twa:p-2" },
60
71
  React.createElement(PlusMinusScopeWizardSection, { onChange: setPlusMinus }))),
61
72
  },
62
- {
63
- title: 'Settings',
64
- isValid: isSettingsValid(hasCondition),
65
- renderSummary: () => React.createElement(PlusMinusSettingsSummary, { hasCondition: hasCondition }),
66
- render: () => (React.createElement(PlusMinusSettingsWizardSection, { hasCondition: hasCondition, onConditionChange: setHasCondition, onChange: setPlusMinus })),
67
- },
68
73
  {
69
74
  details: 'Select Plus/Minus Tags',
70
75
  title: 'Tags',
@@ -35,7 +35,10 @@ const QuickSearchPopupComponent = (props) => {
35
35
  React.createElement(Card, null,
36
36
  React.createElement(Card.Title, null, "Behaviour"),
37
37
  React.createElement(Card.Body, { className: "twa:p-1", gap: 2 },
38
- React.createElement(HelpBlock, { className: "twa:text-2 twa:w-fit" }, "Filters the Grid to only show rows with matching cells; use with care as can cause performance issues"),
38
+ React.createElement(HelpBlock, { className: "twa:text-2 twa:w-fit" },
39
+ "Filter Grid when searching to only show rows with matching cells; ",
40
+ React.createElement("b", null, "use with care"),
41
+ " as can cause performance issues"),
39
42
  React.createElement(CheckBox, { "data-name": "filter-quick-search-results", value: "existing", checked: state.RunQueryAfterQuickSearch, disabled: StringExtensions.IsNotNullOrEmpty(searchText), onChange: onQuickSearchBehaviourChange }, "Filter using Quick Search Results"))),
40
43
  React.createElement(Card.Title, { border: false, className: "twa:pt-3" }, "Cell Matching Style"),
41
44
  React.createElement(Card, null,
@@ -1,11 +1,18 @@
1
1
  import * as React from 'react';
2
2
  import { Tabs } from '../../../../components/Tabs';
3
3
  import FormLayout, { FormRow } from '../../../../components/FormLayout';
4
+ import Input from '../../../../components/Input';
4
5
  import Radio from '../../../../components/Radio';
5
6
  import DropdownButton from '../../../../components/DropdownButton';
6
7
  import { FormDescriptionText } from '../../../Wizard/OnePageAdaptableWizard';
7
8
  import { Box } from '../../../../components/Flex';
8
9
  export const ScheduleSettingsIPushPull = (props) => {
10
+ const handleNameChange = (event) => {
11
+ props.onChange({
12
+ ...props.iPushPull,
13
+ Name: event.target.value,
14
+ });
15
+ };
9
16
  const reportOptions = props.allReports.map((report) => ({
10
17
  label: report.Name,
11
18
  value: report.Name,
@@ -45,9 +52,13 @@ export const ScheduleSettingsIPushPull = (props) => {
45
52
  });
46
53
  return (React.createElement(Box, { "data-name": "schedule-settings-ipushpull" },
47
54
  React.createElement(Tabs, { autoFocus: false },
48
- React.createElement(Tabs.Tab, null, "Ipushpull Schedule Settings"),
55
+ React.createElement(Tabs.Tab, null, "Settings"),
49
56
  React.createElement(Tabs.Content, null,
50
57
  React.createElement(FormLayout, null,
58
+ React.createElement(FormRow, { label: "Name" },
59
+ React.createElement(Input, { "data-name": "schedule-name", className: "twa:w-[300px]", onChange: handleNameChange, placeholder: "Enter Schedule Name", type: "string", value: props.iPushPull?.Name ?? '' })),
60
+ React.createElement(FormRow, { label: "" },
61
+ React.createElement(Box, { className: "twa:h-2" })),
51
62
  React.createElement(FormRow, { label: "Select Report" },
52
63
  React.createElement(DropdownButton, { "data-name": "report-name", disabled: props.allReports.length == 0, items: reportOptions, className: "twa:w-[300px]" }, props?.iPushPull?.IPushPullReport?.ReportName || 'Select Report')),
53
64
  React.createElement(FormRow, { label: "Select Folder" },
@@ -1,9 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { Tabs } from '../../../../components/Tabs';
3
3
  import FormLayout, { FormRow } from '../../../../components/FormLayout';
4
+ import Input from '../../../../components/Input';
4
5
  import DropdownButton from '../../../../components/DropdownButton';
5
6
  import { Box } from '../../../../components/Flex';
6
7
  export const ScheduleSettingsOpenFin = (props) => {
8
+ const handleNameChange = (event) => {
9
+ props.onChange({
10
+ ...props.openFin,
11
+ Name: event.target.value,
12
+ });
13
+ };
7
14
  const reportOptions = props.allReports.map((report) => ({
8
15
  label: report.Name,
9
16
  value: report.Name,
@@ -17,9 +24,13 @@ export const ScheduleSettingsOpenFin = (props) => {
17
24
  }));
18
25
  return (React.createElement(Box, { "data-name": "schedule-settings-openfin" },
19
26
  React.createElement(Tabs, { autoFocus: false },
20
- React.createElement(Tabs.Tab, null, "OpenFin Schedule Settings"),
27
+ React.createElement(Tabs.Tab, null, "Settings"),
21
28
  React.createElement(Tabs.Content, null,
22
29
  React.createElement(FormLayout, null,
30
+ React.createElement(FormRow, { label: "Name" },
31
+ React.createElement(Input, { "data-name": "schedule-name", className: "twa:w-[300px]", onChange: handleNameChange, placeholder: "Enter Schedule Name", type: "string", value: props.openFin?.Name ?? '' })),
32
+ React.createElement(FormRow, { label: "" },
33
+ React.createElement(Box, { className: "twa:h-2" })),
23
34
  React.createElement(FormRow, { label: "Select Report" },
24
35
  React.createElement(DropdownButton, { "data-name": "select-report", columns: ['label'], className: "twa:w-[300px]", disabled: props.allReports.length == 0, items: reportOptions }, props?.openFin?.OpenFinReport?.ReportName || 'Select Report')))))));
25
36
  };
@@ -17,16 +17,22 @@ export const ScheduleSettingsReminder = (props) => {
17
17
  });
18
18
  },
19
19
  }));
20
+ const handleNameChange = (event) => {
21
+ props.onChange({
22
+ ...props.reminderSchedule,
23
+ Name: event.target.value,
24
+ });
25
+ };
20
26
  const handleHeaderChange = (event) => {
21
27
  props.onChange({
22
28
  ...props.reminderSchedule,
23
- Header: event.target?.value,
29
+ Header: event.target.value,
24
30
  });
25
31
  };
26
32
  const handleMessageChange = (event) => {
27
33
  props.onChange({
28
34
  ...props.reminderSchedule,
29
- Message: event.target?.value,
35
+ Message: event.target.value,
30
36
  });
31
37
  };
32
38
  const handleDisplayNotificationChange = (checked) => {
@@ -41,11 +47,15 @@ export const ScheduleSettingsReminder = (props) => {
41
47
  DisplaySystemStatusMessage: checked,
42
48
  });
43
49
  };
44
- return (React.createElement(Box, { "data-name": "schedule-settings-remainder" },
50
+ return (React.createElement(Box, { "data-name": "schedule-settings-reminder" },
45
51
  React.createElement(Tabs, { autoFocus: false },
46
- React.createElement(Tabs.Tab, null, "Reminder Schedule Settings"),
52
+ React.createElement(Tabs.Tab, null, "Settings"),
47
53
  React.createElement(Tabs.Content, null,
48
54
  React.createElement(FormLayout, null,
55
+ React.createElement(FormRow, { label: "Name" },
56
+ React.createElement(Input, { "data-name": "schedule-name", className: "twa:w-[300px]", onChange: handleNameChange, placeholder: "Enter Reminder Name", type: "string", value: props.reminderSchedule?.Name ?? '' })),
57
+ React.createElement(FormRow, { label: "" },
58
+ React.createElement(Box, { className: "twa:h-2" })),
49
59
  React.createElement(FormRow, { label: "Header" },
50
60
  React.createElement(Input, { "data-name": "header", className: "twa:w-[300px]", onChange: handleHeaderChange, placeholder: "Enter Reminder Header", type: "string", value: props.reminderSchedule?.Header })),
51
61
  React.createElement(FormRow, { label: "Message" },
@@ -1,9 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import FormLayout, { FormRow } from '../../../../components/FormLayout';
3
+ import Input from '../../../../components/Input';
3
4
  import { Select } from '../../../../components/Select';
4
5
  import { Tabs } from '../../../../components/Tabs';
5
6
  import { Box } from '../../../../components/Flex';
6
7
  export const ScheduleSettingsReport = (props) => {
8
+ const handleNameChange = (event) => {
9
+ props.onChange({
10
+ ...props.report,
11
+ Name: event.target.value,
12
+ });
13
+ };
7
14
  const reportOptions = props.allReports.map((report) => ({
8
15
  label: report.Name,
9
16
  value: report.Name,
@@ -30,9 +37,13 @@ export const ScheduleSettingsReport = (props) => {
30
37
  }));
31
38
  return (React.createElement(Box, { "data-name": "schedule-settings-report" },
32
39
  React.createElement(Tabs, { autoFocus: false, className: "twa:mb-3" },
33
- React.createElement(Tabs.Tab, null, "Report Settings"),
40
+ React.createElement(Tabs.Tab, null, "Settings"),
34
41
  React.createElement(Tabs.Content, null,
35
42
  React.createElement(FormLayout, null,
43
+ React.createElement(FormRow, { label: "Name" },
44
+ React.createElement(Input, { "data-name": "schedule-name", className: "twa:w-[300px]", onChange: handleNameChange, placeholder: "Enter Schedule Name", type: "string", value: props.report?.Name ?? '' })),
45
+ React.createElement(FormRow, { label: "" },
46
+ React.createElement(Box, { className: "twa:h-2" })),
36
47
  React.createElement(FormRow, { label: "Export" },
37
48
  React.createElement(Box, { className: "twa:max-w-[300px]" },
38
49
  React.createElement(Select, { "data-name": "select-report", options: reportOptions, value: props?.report?.ReportName, placeholder: "Select Export", onChange: (value) => props.onChange({
@@ -1,2 +1,3 @@
1
+ import { AdaptableApi } from '../../../../Api/AdaptableApi';
1
2
  import { BaseSchedule } from '../../../../AdaptableState/Common/Schedule';
2
- export declare const isSettingsValid: (schedule: BaseSchedule) => true | "Message type not selected" | "Reminder header not specified" | "Reminder message not specified" | "Report source not specified" | "Report format not selected" | "Report not selected" | "Report folder not selected" | "Report page not selected";
3
+ export declare const isSettingsValid: (schedule: BaseSchedule, api: AdaptableApi) => true | "A name is required." | "A Schedule with this name already exists." | "Please select a message type." | "A reminder header is required." | "A reminder message is required." | "Please select a report." | "Please select a report format." | "Please select a report folder." | "Please select a report page.";
@@ -1,43 +1,52 @@
1
1
  import { ScheduleType } from '../../../../AdaptableState/Common/Enums';
2
2
  import StringExtensions from '../../../../Utilities/Extensions/StringExtensions';
3
- export const isSettingsValid = (schedule) => {
3
+ export const isSettingsValid = (schedule, api) => {
4
+ // Validate Name - mandatory and unique
5
+ if (!schedule.Name?.trim()) {
6
+ return 'A name is required.';
7
+ }
8
+ const allSchedules = api.scheduleApi.getSchedules();
9
+ const isDuplicateName = allSchedules.some((s) => s.Name === schedule.Name && s.Uuid !== schedule.Uuid);
10
+ if (isDuplicateName) {
11
+ return 'A Schedule with this name already exists.';
12
+ }
4
13
  if (schedule.ScheduleType === ScheduleType.Reminder) {
5
14
  const reminder = schedule;
6
15
  if (!reminder.MessageType) {
7
- return 'Message type not selected';
16
+ return 'Please select a message type.';
8
17
  }
9
18
  if (StringExtensions.IsNullOrEmpty(reminder?.Header)) {
10
- return 'Reminder header not specified';
19
+ return 'A reminder header is required.';
11
20
  }
12
21
  if (StringExtensions.IsNullOrEmpty(reminder?.Message)) {
13
- return 'Reminder message not specified';
22
+ return 'A reminder message is required.';
14
23
  }
15
24
  }
16
25
  if (schedule.ScheduleType === ScheduleType.Report) {
17
26
  const report = schedule;
18
27
  if (StringExtensions.IsNullOrEmpty(report?.ReportName)) {
19
- return 'Report source not specified';
28
+ return 'Please select a report.';
20
29
  }
21
30
  if (StringExtensions.IsNullOrEmpty(report?.ReportFormat)) {
22
- return 'Report format not selected';
31
+ return 'Please select a report format.';
23
32
  }
24
33
  }
25
34
  if (schedule.ScheduleType === ScheduleType.ipushpull) {
26
35
  const ipushpull = schedule;
27
36
  if (StringExtensions.IsNullOrEmpty(ipushpull?.IPushPullReport?.ReportName)) {
28
- return 'Report not selected';
37
+ return 'Please select a report.';
29
38
  }
30
39
  if (StringExtensions.IsNullOrEmpty(ipushpull?.IPushPullReport?.Folder)) {
31
- return 'Report folder not selected';
40
+ return 'Please select a report folder.';
32
41
  }
33
42
  if (StringExtensions.IsNullOrEmpty(ipushpull?.IPushPullReport?.Page)) {
34
- return 'Report page not selected';
43
+ return 'Please select a report page.';
35
44
  }
36
45
  }
37
46
  if (schedule.ScheduleType === ScheduleType.OpenFin) {
38
47
  const openfin = schedule;
39
48
  if (StringExtensions.IsNullOrEmpty(openfin?.OpenFinReport?.ReportName)) {
40
- return 'Report not selected';
49
+ return 'Please select a report.';
41
50
  }
42
51
  }
43
52
  return true;
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { Shortcut } from '../../../AdaptableState/ShortcutState';
3
- export declare const isSettingsValid: (data: Shortcut) => string | true;
3
+ import { AdaptableApi } from '../../../types';
4
+ export declare const isSettingsValid: (data: Shortcut, api: AdaptableApi) => string | true;
4
5
  export declare const ShortcutSettingsSummary: React.FunctionComponent;
5
6
  interface ShortcutSettingsWizardProps {
6
7
  availableKeys: Array<string>;
@@ -9,7 +9,15 @@ import { Tag } from '../../../components/Tag';
9
9
  import HelpBlock from '../../../components/HelpBlock';
10
10
  import { Select } from '../../../components/Select';
11
11
  import { Box, Flex } from '../../../components/Flex';
12
- export const isSettingsValid = (data) => {
12
+ export const isSettingsValid = (data, api) => {
13
+ if (!data.Name?.trim()) {
14
+ return 'Name is required';
15
+ }
16
+ const allShortcuts = api.shortcutApi.getShortcuts();
17
+ const isDuplicateName = allShortcuts.some((s) => s.Name === data.Name && s.Uuid !== data.Uuid);
18
+ if (isDuplicateName) {
19
+ return 'A Shortcut already exists with that name';
20
+ }
13
21
  const shortcutKey = data.ShortcutKey && typeof data.ShortcutKey === 'string' ? '' : 'Shortcut key is not selected';
14
22
  const shortcutValue = typeof data.ShortcutValue === 'number' ? '' : 'Shortcut value is not specified';
15
23
  const shortcutOperation = data.ShortcutOperation && typeof data.ShortcutOperation === 'string'
@@ -21,6 +29,9 @@ export const isSettingsValid = (data) => {
21
29
  export const ShortcutSettingsSummary = () => {
22
30
  const { data: shortcut } = useOnePageAdaptableWizardContext();
23
31
  return (React.createElement(React.Fragment, null,
32
+ React.createElement(SummaryText, null,
33
+ "Name ",
34
+ React.createElement(Tag, null, shortcut.Name || 'Not specified')),
24
35
  React.createElement(SummaryText, null,
25
36
  "Shortcut Key ",
26
37
  React.createElement(Tag, null, shortcut.ShortcutKey || 'Not selected')),
@@ -33,6 +44,12 @@ export const ShortcutSettingsSummary = () => {
33
44
  };
34
45
  export const ShortcutSettingsWizard = (props) => {
35
46
  const { data: shortcut } = useOnePageAdaptableWizardContext();
47
+ const handleNameChange = (event) => {
48
+ props.onChange({
49
+ ...shortcut,
50
+ Name: event.target.value,
51
+ });
52
+ };
36
53
  const handleKeyChange = React.useCallback((ShortcutKey) => {
37
54
  props.onChange({
38
55
  ...shortcut,
@@ -63,17 +80,21 @@ export const ShortcutSettingsWizard = (props) => {
63
80
  React.createElement(Tabs.Tab, null, "Shortcut Settings"),
64
81
  React.createElement(Tabs.Content, null,
65
82
  React.createElement(FormLayout, null,
66
- React.createElement(FormRow, null,
83
+ React.createElement(FormRow, { label: "Name" },
84
+ React.createElement(Input, { "data-name": "shortcut-name", className: "twa:flex-1 twa:max-w-[200px] twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: shortcut.Name ?? '' })),
85
+ React.createElement(FormRow, { label: "" },
86
+ React.createElement(Box, { className: "twa:h-2" })),
87
+ React.createElement(FormRow, { label: "" },
67
88
  React.createElement(HelpBlock, { className: "twa:text-2 twa:mb-0" }, "Keyboard key that, when pressed, triggers the Shortcut")),
68
89
  React.createElement(FormRow, { label: "Key" },
69
90
  React.createElement(Flex, { flexDirection: "row" },
70
91
  React.createElement(Select, { "data-name": "shortcut-key", placeholder: "Select Key", options: optionKeys, onChange: (key) => handleKeyChange(key), value: shortcut.ShortcutKey || 'Select Key' }))),
71
- React.createElement(FormRow, null,
92
+ React.createElement(FormRow, { label: "" },
72
93
  React.createElement(HelpBlock, { className: "twa:text-2 twa:mb-0" }, "Mathematical operation performed on Cell's current value (using the Shortcut's 'value') - used to calculate the Cell's new total")),
73
94
  React.createElement(FormRow, { label: "Operation" },
74
95
  React.createElement(Flex, { flexDirection: "row" },
75
96
  React.createElement(Select, { "data-name": "shortcut-operation", placeholder: "Select Operation", options: optionActions, onChange: (operation) => handleOperationChange(operation), value: shortcut.ShortcutOperation }))),
76
- React.createElement(FormRow, null,
97
+ React.createElement(FormRow, { label: "" },
77
98
  React.createElement(HelpBlock, { className: "twa:text-2 twa:mb-0" }, "Number that is used - together with the 'Operation' and the current cell value - to calculate the new total for the cell")),
78
99
  React.createElement(FormRow, { label: "Value" },
79
100
  React.createElement(Flex, { flexDirection: "row" },
@@ -11,8 +11,9 @@ import { shortcutKeys } from '../shortcutKeys';
11
11
  import { useAdaptable } from '../../AdaptableContext';
12
12
  import { ObjectTagsWizardSection, renderObjectTagsSummary, } from '../../Wizard/ObjectTagsWizardSection';
13
13
  import { Box } from '../../../components/Flex';
14
+ import StringExtensions from '../../../Utilities/Extensions/StringExtensions';
14
15
  export const ShortcutWizard = (props) => {
15
- const [shortcut, setShortcut] = React.useState(() => {
16
+ const [shortcut, doSetShortcut] = React.useState(() => {
16
17
  const shortcut = props.data ? cloneObject(props.data) : ObjectFactory.CreateEmptyShortcut();
17
18
  shortcut.Scope = shortcut.Scope ?? { All: true };
18
19
  if (props.popupParams?.column && props.popupParams?.action === 'New') {
@@ -22,10 +23,13 @@ export const ShortcutWizard = (props) => {
22
23
  }
23
24
  return shortcut;
24
25
  });
26
+ const setShortcut = React.useCallback((data) => {
27
+ doSetShortcut(data);
28
+ }, []);
25
29
  const adaptable = useAdaptable();
26
30
  const availableKeys = React.useMemo(() => {
27
31
  const availableKeys = shortcutKeys.filter((key) => adaptable.api.shortcutApi.getShortcuts().every((shortcut) => shortcut.ShortcutKey !== key));
28
- if (shortcut) {
32
+ if (shortcut && StringExtensions.IsNotNullOrEmptyOrWhiteSpace(shortcut.ShortcutKey)) {
29
33
  availableKeys.push(shortcut.ShortcutKey);
30
34
  }
31
35
  availableKeys.sort();
@@ -42,18 +46,6 @@ export const ShortcutWizard = (props) => {
42
46
  props.onFinishWizard(shortcut);
43
47
  };
44
48
  return (React.createElement(OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: shortcut, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
45
- {
46
- title: 'Target',
47
- isValid: isScopeValid,
48
- details: 'Specify where Shortcut should be applied',
49
- renderSummary: () => renderScopeSummary(shortcut.Scope, {
50
- scopeWholeRow: 'Shortcut is triggered for all numeric cells',
51
- scopeColumns: 'Shortcut is triggered for cells in selected columns',
52
- scopeDataTypes: 'Shortcut is triggered for all numeric cells',
53
- }),
54
- render: () => (React.createElement(Box, { className: "twa:p-2" },
55
- React.createElement(ShortcutScopeWizardSection, { onChange: setShortcut }))),
56
- },
57
49
  {
58
50
  title: 'Settings',
59
51
  isValid: isSettingsValid,
@@ -69,6 +61,18 @@ export const ShortcutWizard = (props) => {
69
61
  render: () => (React.createElement(Box, { className: "twa:p-2" },
70
62
  React.createElement(ShortcutSettingsWizard, { availableKeys: props.availableKeys ?? availableKeys, onChange: setShortcut }))),
71
63
  },
64
+ {
65
+ title: 'Target',
66
+ isValid: isScopeValid,
67
+ details: 'Specify where Shortcut should be applied',
68
+ renderSummary: () => renderScopeSummary(shortcut.Scope, {
69
+ scopeWholeRow: 'Shortcut is triggered for all numeric cells',
70
+ scopeColumns: 'Shortcut is triggered for cells in selected columns',
71
+ scopeDataTypes: 'Shortcut is triggered for all numeric cells',
72
+ }),
73
+ render: () => (React.createElement(Box, { className: "twa:p-2" },
74
+ React.createElement(ShortcutScopeWizardSection, { onChange: setShortcut }))),
75
+ },
72
76
  {
73
77
  details: 'Select Shortcut Tags',
74
78
  title: 'Tags',