@adaptabletools/adaptable 17.0.0-canary.0 → 17.0.0-canary.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/base.css +1203 -1207
  2. package/base.css.map +1 -1
  3. package/index.css +28 -1989
  4. package/index.css.map +1 -1
  5. package/package.json +9 -110
  6. package/src/AdaptableInterfaces/AdaptableNoCodeWizard.d.ts +2 -2
  7. package/src/AdaptableInterfaces/IAdaptable.d.ts +16 -11
  8. package/src/AdaptableOptions/ActionRowOptions.d.ts +25 -3
  9. package/src/AdaptableOptions/AdaptableFrameworkComponent.d.ts +3 -3
  10. package/src/AdaptableOptions/AdaptableOptions.d.ts +10 -1
  11. package/src/AdaptableOptions/AdaptablePlugin.d.ts +1 -1
  12. package/src/AdaptableOptions/AlertOptions.d.ts +2 -2
  13. package/src/AdaptableOptions/ColumnFilterOptions.d.ts +110 -91
  14. package/src/AdaptableOptions/DataChangeHistoryOptions.d.ts +1 -1
  15. package/src/AdaptableOptions/DateInputOptions.d.ts +1 -1
  16. package/src/AdaptableOptions/EditOptions.d.ts +2 -2
  17. package/src/AdaptableOptions/ExportOptions.d.ts +3 -3
  18. package/src/AdaptableOptions/ExpressionOptions.d.ts +2 -2
  19. package/src/AdaptableOptions/Fdc3Options.d.ts +10 -4
  20. package/src/AdaptableOptions/GridFilterOptions.d.ts +18 -0
  21. package/src/AdaptableOptions/LayoutOptions.d.ts +1 -1
  22. package/src/AdaptableOptions/MenuOptions.d.ts +10 -4
  23. package/src/AdaptableOptions/NotificationsOptions.d.ts +1 -1
  24. package/src/AdaptableOptions/QuickSearchOptions.d.ts +4 -4
  25. package/src/AdaptableOptions/UserInterfaceOptions.d.ts +1 -16
  26. package/src/Api/ColumnApi.d.ts +4 -0
  27. package/src/Api/ColumnFilterApi.d.ts +2 -5
  28. package/src/Api/DashboardApi.d.ts +0 -11
  29. package/src/Api/EventApi.d.ts +2 -30
  30. package/src/Api/Events/ActionRowSubmitted.d.ts +1 -5
  31. package/src/Api/Events/AdaptableSearchState.d.ts +2 -7
  32. package/src/Api/Events/Fdc3MessageInfo.d.ts +1 -1
  33. package/src/Api/Events/GridFilterApplied.d.ts +2 -1
  34. package/src/Api/ExportApi.d.ts +0 -4
  35. package/src/Api/GridFilterApi.d.ts +26 -8
  36. package/src/Api/Implementation/ColumnApiImpl.d.ts +1 -0
  37. package/src/Api/Implementation/ColumnApiImpl.js +4 -0
  38. package/src/Api/Implementation/ColumnFilterApiImpl.d.ts +1 -1
  39. package/src/Api/Implementation/ColumnFilterApiImpl.js +3 -3
  40. package/src/Api/Implementation/ConfigApiImpl.js +1 -2
  41. package/src/Api/Implementation/DashboardApiImpl.d.ts +0 -2
  42. package/src/Api/Implementation/DashboardApiImpl.js +0 -14
  43. package/src/Api/Implementation/ExportApiImpl.d.ts +0 -1
  44. package/src/Api/Implementation/ExportApiImpl.js +0 -3
  45. package/src/Api/Implementation/GridApiImpl.js +2 -2
  46. package/src/Api/Implementation/GridFilterApiImpl.d.ts +6 -1
  47. package/src/Api/Implementation/GridFilterApiImpl.js +22 -3
  48. package/src/Api/Implementation/NamedQueryApiImpl.d.ts +2 -5
  49. package/src/Api/Implementation/NamedQueryApiImpl.js +2 -2
  50. package/src/Api/Implementation/OptionsApiImpl.d.ts +2 -1
  51. package/src/Api/Implementation/OptionsApiImpl.js +3 -0
  52. package/src/Api/Implementation/UserInterfaceApiImpl.js +2 -2
  53. package/src/Api/Internal/ActionRowInternalApi.d.ts +1 -0
  54. package/src/Api/Internal/ActionRowInternalApi.js +17 -3
  55. package/src/Api/Internal/AlertInternalApi.d.ts +1 -7
  56. package/src/Api/Internal/ColumnFilterInternalApi.d.ts +2 -2
  57. package/src/Api/Internal/ColumnFilterInternalApi.js +9 -9
  58. package/src/Api/Internal/ColumnInternalApi.d.ts +0 -10
  59. package/src/Api/Internal/ColumnInternalApi.js +0 -28
  60. package/src/Api/Internal/Fdc3InternalApi.d.ts +2 -2
  61. package/src/Api/Internal/FormatColumnInternalApi.js +6 -6
  62. package/src/Api/Internal/GridFilterInternalApi.d.ts +1 -1
  63. package/src/Api/Internal/GridFilterInternalApi.js +5 -5
  64. package/src/Api/Internal/GridInternalApi.js +31 -9
  65. package/src/Api/Internal/LayoutInternalApi.js +8 -0
  66. package/src/Api/Internal/PredicateInternalApi.js +3 -3
  67. package/src/Api/Internal/StyledColumnInternalApi.d.ts +0 -3
  68. package/src/Api/Internal/StyledColumnInternalApi.js +0 -27
  69. package/src/Api/NamedQueryApi.d.ts +6 -5
  70. package/src/Api/OptionsApi.d.ts +5 -1
  71. package/src/PredefinedConfig/AlertState.d.ts +6 -6
  72. package/src/PredefinedConfig/CalculatedColumnState.d.ts +1 -1
  73. package/src/PredefinedConfig/ChartingState.d.ts +4 -1
  74. package/src/PredefinedConfig/Common/AdaptableAlert.d.ts +2 -2
  75. package/src/PredefinedConfig/Common/AdaptableColumn.d.ts +1 -1
  76. package/src/PredefinedConfig/Common/AdaptableComparerFunction.d.ts +2 -2
  77. package/src/PredefinedConfig/Common/AdaptableForm.d.ts +2 -2
  78. package/src/PredefinedConfig/Common/AdaptableFormat.d.ts +1 -1
  79. package/src/PredefinedConfig/Common/AdaptableIcon.d.ts +2 -2
  80. package/src/PredefinedConfig/Common/AdaptableMessageType.d.ts +1 -1
  81. package/src/PredefinedConfig/Common/AdaptableObject.d.ts +1 -1
  82. package/src/PredefinedConfig/Common/AdaptablePredicate.d.ts +3 -3
  83. package/src/PredefinedConfig/Common/AdaptablePredicate.js +45 -58
  84. package/src/PredefinedConfig/Common/AdaptableQuery.d.ts +1 -1
  85. package/src/PredefinedConfig/Common/AdaptableScope.d.ts +5 -5
  86. package/src/PredefinedConfig/Common/AggregationColumns.d.ts +1 -1
  87. package/src/PredefinedConfig/Common/ColumnFilter.d.ts +2 -2
  88. package/src/PredefinedConfig/Common/Entitlement.d.ts +1 -1
  89. package/src/PredefinedConfig/Common/Fdc3Context.d.ts +133 -37
  90. package/src/PredefinedConfig/Common/Fdc3Intent.d.ts +4 -4
  91. package/src/PredefinedConfig/Common/Schedule.d.ts +2 -2
  92. package/src/PredefinedConfig/Common/Types.d.ts +15 -15
  93. package/src/PredefinedConfig/ExportState.d.ts +4 -4
  94. package/src/PredefinedConfig/FlashingCellState.d.ts +4 -4
  95. package/src/PredefinedConfig/FormatColumnState.d.ts +4 -27
  96. package/src/PredefinedConfig/NotesState.d.ts +2 -2
  97. package/src/PredefinedConfig/PredefinedConfig.d.ts +0 -5
  98. package/src/PredefinedConfig/ShortcutState.d.ts +1 -1
  99. package/src/PredefinedConfig/StyledColumnState.d.ts +8 -13
  100. package/src/PredefinedConfig/SystemState.d.ts +3 -3
  101. package/src/PredefinedConfig/TeamSharingState.d.ts +3 -3
  102. package/src/PredefinedConfig/ToolPanelState.d.ts +1 -1
  103. package/src/PredefinedConfig/Uuid.d.ts +1 -1
  104. package/src/Redux/ActionsReducers/GridRedux.d.ts +6 -1
  105. package/src/Redux/ActionsReducers/GridRedux.js +18 -0
  106. package/src/Redux/ActionsReducers/LayoutRedux.d.ts +37 -16
  107. package/src/Redux/ActionsReducers/LayoutRedux.js +69 -16
  108. package/src/Redux/Store/AdaptableReduxMerger.d.ts +1 -1
  109. package/src/Redux/Store/AdaptableStore.d.ts +2 -2
  110. package/src/Redux/Store/AdaptableStore.js +46 -19
  111. package/src/Strategy/AdaptableModuleBase.d.ts +0 -1
  112. package/src/Strategy/AdaptableModuleBase.js +0 -30
  113. package/src/Strategy/AlertModule.js +1 -1
  114. package/src/Strategy/ChartingModule.js +8 -5
  115. package/src/Strategy/ColumnFilterModule.d.ts +2 -0
  116. package/src/Strategy/ColumnFilterModule.js +78 -40
  117. package/src/Strategy/CustomSortModule.js +1 -1
  118. package/src/Strategy/FlashingCellModule.js +1 -1
  119. package/src/Strategy/Interface/IModule.d.ts +3 -3
  120. package/src/Strategy/LayoutModule.js +5 -0
  121. package/src/Strategy/StyledColumnModule.js +2 -53
  122. package/src/Utilities/Constants/GeneralConstants.d.ts +3 -0
  123. package/src/Utilities/Constants/GeneralConstants.js +3 -0
  124. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +31 -23
  125. package/src/Utilities/Defaults/DefaultSettingsPanel.d.ts +1 -1
  126. package/src/Utilities/Defaults/DefaultSettingsPanel.js +2 -2
  127. package/src/Utilities/Emitter.d.ts +2 -2
  128. package/src/Utilities/Emitter.js +2 -2
  129. package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.d.ts +3 -3
  130. package/src/Utilities/ExpressionFunctions/aggregatedScalarExpressionFunctions.d.ts +3 -3
  131. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.d.ts +1 -1
  132. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +55 -5
  133. package/src/Utilities/ExpressionFunctions/dateUtils.d.ts +1 -0
  134. package/src/Utilities/ExpressionFunctions/dateUtils.js +9 -0
  135. package/src/Utilities/ExpressionFunctions/deepMap.d.ts +3 -3
  136. package/src/Utilities/ExpressionFunctions/deepMap.js +7 -7
  137. package/src/Utilities/ExpressionFunctions/expressionFunctionUtils.d.ts +1 -1
  138. package/src/Utilities/ExpressionFunctions/groupingMap.d.ts +7 -7
  139. package/src/Utilities/ExpressionFunctions/observableExpressionFunctions.d.ts +1 -1
  140. package/src/Utilities/ExpressionFunctions/scalarAggregationHelper.d.ts +7 -7
  141. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.d.ts +1 -1
  142. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +11 -1
  143. package/src/Utilities/Extensions/TypeExtensions.d.ts +8 -8
  144. package/src/Utilities/Helpers/AdaptableHelper.js +4 -0
  145. package/src/Utilities/ObjectFactory.js +1 -1
  146. package/src/Utilities/Services/EntitlementService.d.ts +0 -1
  147. package/src/Utilities/Services/EntitlementService.js +0 -8
  148. package/src/Utilities/Services/Interface/IAlertService.d.ts +3 -3
  149. package/src/Utilities/Services/Interface/IEntitlementService.d.ts +0 -6
  150. package/src/Utilities/Services/Interface/IMetamodelService.d.ts +1 -1
  151. package/src/Utilities/Services/LicenseService/index.js +181 -1
  152. package/src/Utilities/Services/MetamodelService.js +1 -1
  153. package/src/Utilities/Services/ModuleService.js +1 -1
  154. package/src/Utilities/license/LicenseDetails.d.ts +1 -1
  155. package/src/Utilities/license/decode.js +65 -1
  156. package/src/Utilities/license/hashing.js +43 -1
  157. package/src/Utilities/logDeprecation.d.ts +5 -3
  158. package/src/View/AdaptablePopover/index.d.ts +1 -0
  159. package/src/View/AdaptablePopover/index.js +1 -1
  160. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/GridOptionsForm.js +1 -1
  161. package/src/View/Alert/AlertEmptyView.js +1 -1
  162. package/src/View/Alert/Utilities/getAvailablePredicates.js +1 -1
  163. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.d.ts +1 -1
  164. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +20 -4
  165. package/src/View/Alert/Wizard/AlertButtonsEditor.d.ts +1 -1
  166. package/src/View/Alert/Wizard/AlertButtonsEditor.js +21 -24
  167. package/src/View/Alert/Wizard/AlertMessageWizardSection.d.ts +1 -1
  168. package/src/View/Alert/Wizard/AlertNotificationWizardSection.d.ts +1 -1
  169. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +1 -1
  170. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +1 -1
  171. package/src/View/Alert/Wizard/AlertScopeWizardSection.d.ts +1 -1
  172. package/src/View/Alert/Wizard/AlertScopeWizardSection.js +1 -1
  173. package/src/View/Alert/Wizard/AlertTypeWizardSection.d.ts +1 -1
  174. package/src/View/Alert/Wizard/AlertWizard.js +1 -1
  175. package/src/View/Alert/Wizard/isValidAlertRules.js +1 -1
  176. package/src/View/BulkUpdate/BulkUpdatePopup.js +3 -9
  177. package/src/View/BulkUpdate/BulkUpdateViewPanel.js +2 -2
  178. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.d.ts +1 -1
  179. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.d.ts +1 -1
  180. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.d.ts +1 -1
  181. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +9 -18
  182. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.d.ts +1 -1
  183. package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.d.ts +1 -1
  184. package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.js +2 -2
  185. package/src/View/CellSummary/CellSummaryStatusBarSubPanelPopover.js +5 -1
  186. package/src/View/CellSummary/CellSummaryViewPanel.js +5 -5
  187. package/src/View/ColumnInfo/ColumnInfo.js +7 -8
  188. package/src/View/Components/AdaptableDateInput/index.d.ts +2 -2
  189. package/src/View/Components/AdaptableInput/index.d.ts +1 -1
  190. package/src/View/Components/AdaptableObjectList/AdaptableObjectCompactList.js +2 -2
  191. package/src/View/Components/Buttons/ButtonBase/index.d.ts +1 -1
  192. package/src/View/Components/Buttons/ButtonOpen.d.ts +5 -0
  193. package/src/View/Components/Buttons/ButtonOpen.js +7 -0
  194. package/src/View/Components/Buttons/ButtonUnsuspend.d.ts +8 -0
  195. package/src/View/Components/Buttons/ButtonUnsuspend.js +17 -0
  196. package/src/View/Components/CellPopup/index.d.ts +1 -1
  197. package/src/View/Components/ColumnSelector/index.d.ts +1 -1
  198. package/src/View/Components/EntityRulesEditor/index.d.ts +2 -2
  199. package/src/View/Components/EntityRulesEditor/index.js +11 -3
  200. package/src/View/Components/ExternalRenderer.d.ts +1 -1
  201. package/src/View/Components/FilterForm/FilterForm.js +24 -24
  202. package/src/View/Components/FilterForm/QuickFilterForm.js +3 -3
  203. package/src/View/Components/FilterForm/QuickFilterValues.d.ts +2 -2
  204. package/src/View/Components/FilterForm/QuickFilterValues.js +2 -2
  205. package/src/View/Components/FilterForm/Waiting.d.ts +1 -1
  206. package/src/View/Components/Forms/AdaptableFormControlTextClear.d.ts +1 -1
  207. package/src/View/Components/Popups/AdaptablePopup/AdaptablePopupModuleView.js +1 -1
  208. package/src/View/Components/Popups/AdaptablePopup/useMenuItems.js +2 -2
  209. package/src/View/Components/PredicateEditor/PredicateEditor.js +10 -10
  210. package/src/View/Components/RangesComponent.js +11 -8
  211. package/src/View/Components/Selectors/ColumnSelector.d.ts +12 -17
  212. package/src/View/Components/Selectors/ColumnSelector.js +23 -42
  213. package/src/View/Components/Selectors/ColumnSelectorOld.d.ts +18 -0
  214. package/src/View/Components/Selectors/ColumnSelectorOld.js +46 -0
  215. package/src/View/Components/Selectors/ColumnValueSelector.d.ts +4 -23
  216. package/src/View/Components/Selectors/ColumnValueSelector.js +34 -126
  217. package/src/View/Components/Selectors/PermittedValuesSelector.d.ts +13 -0
  218. package/src/View/Components/Selectors/PermittedValuesSelector.js +46 -0
  219. package/src/View/Components/StyleComponent.d.ts +2 -3
  220. package/src/View/Components/StyleComponent.js +37 -40
  221. package/src/View/Components/ToolPanel/ToolPanelPopup.js +2 -2
  222. package/src/View/Components/ToolPanel/ToolPanelWrapper.d.ts +1 -1
  223. package/src/View/Components/ValueSelector/index.d.ts +2 -2
  224. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.d.ts +1 -1
  225. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.d.ts +1 -1
  226. package/src/View/CustomSort/Wizard/CustomSortWizard.js +1 -1
  227. package/src/View/Dashboard/DashboardPopup.js +4 -4
  228. package/src/View/Dashboard/DashboardToolbarFactory.js +0 -1
  229. package/src/View/Dashboard/PinnedDashboard.js +6 -3
  230. package/src/View/Dashboard/PinnedToolbarsSelector.js +1 -1
  231. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +3 -1
  232. package/src/View/DataImport/DataImportPopup.js +1 -1
  233. package/src/View/DataImport/DataImportWizard/DataImportWizard.d.ts +1 -1
  234. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.d.ts +1 -1
  235. package/src/View/DataSet/DataSetViewPanel.js +3 -2
  236. package/src/View/Export/ExportViewPanel.js +12 -9
  237. package/src/View/Export/Wizard/ReportColumnsWizardSection.d.ts +1 -1
  238. package/src/View/Export/Wizard/ReportNameWizardSection.d.ts +1 -1
  239. package/src/View/Export/Wizard/ReportRowsWizardSection.d.ts +1 -1
  240. package/src/View/Filter/FilterViewPanel.js +1 -1
  241. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +1 -1
  242. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.d.ts +1 -1
  243. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +2 -2
  244. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.d.ts +1 -1
  245. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.d.ts +1 -1
  246. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +8 -8
  247. package/src/View/FlashingCell/Wizard/isValidFlashingCellRules.js +1 -1
  248. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +1 -1
  249. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +10 -9
  250. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +1 -1
  251. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.d.ts +1 -1
  252. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.d.ts +1 -1
  253. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +1 -1
  254. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +3 -1
  255. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +1 -1
  256. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +7 -17
  257. package/src/View/GridFilter/GridFilterExpressionEditor.js +62 -9
  258. package/src/View/GridFilter/GridFilterPopup.js +36 -6
  259. package/src/View/GridFilter/GridFilterStatusbar.js +0 -1
  260. package/src/View/GridFilter/GridFilterViewPanel.d.ts +2 -26
  261. package/src/View/GridFilter/GridFilterViewPanel.js +49 -150
  262. package/src/View/GridFilter/NamedQuerySelector.d.ts +16 -0
  263. package/src/View/GridFilter/NamedQuerySelector.js +50 -0
  264. package/src/View/GridFilter/useGridFilterExpressionEditor.d.ts +24 -0
  265. package/src/View/GridFilter/useGridFilterExpressionEditor.js +123 -0
  266. package/src/View/GridFilter/useGridFilterOptionsForExpressionEditor.d.ts +4 -0
  267. package/src/View/GridFilter/useGridFilterOptionsForExpressionEditor.js +27 -0
  268. package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +5 -3
  269. package/src/View/Layout/LayoutViewPanel.js +4 -3
  270. package/src/View/Layout/SaveLayoutButton.js +2 -1
  271. package/src/View/Layout/Wizard/LayoutWizard.js +10 -0
  272. package/src/View/Layout/Wizard/sections/FilterSection.js +15 -17
  273. package/src/View/Layout/Wizard/sections/GridFilterSection.d.ts +9 -0
  274. package/src/View/Layout/Wizard/sections/GridFilterSection.js +37 -0
  275. package/src/View/License/LicenseWatermark.js +61 -1
  276. package/src/View/NamedQuery/EditCurrentQueryButton.js +1 -1
  277. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +1 -1
  278. package/src/View/NamedQuery/Wizard/NamedQueryWizard.js +2 -2
  279. package/src/View/QuickSearch/QuickSearchPopup.js +1 -1
  280. package/src/View/QuickSearch/useQuickSearchDebounced.d.ts +1 -1
  281. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReminder.js +5 -2
  282. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReport.d.ts +1 -1
  283. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsReport.js +6 -5
  284. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +6 -7
  285. package/src/View/Shortcut/Wizard/ShortcutWizard.js +4 -3
  286. package/src/View/SmartEdit/SmartEditViewPanel.js +7 -5
  287. package/src/View/SpecialColumnSettingsWizardStep.js +4 -1
  288. package/src/View/StateManagement/StateManagementPopup.js +6 -6
  289. package/src/View/StatusBar/StatusBarPopup.js +1 -1
  290. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +16 -8
  291. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +20 -23
  292. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +2 -3
  293. package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.d.ts +1 -1
  294. package/src/View/StyledColumn/Wizard/StyledColumnWizardColumnSection.js +7 -5
  295. package/src/View/StyledColumn/Wizard/StyledColumnWizardSettingsSection.d.ts +1 -1
  296. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +4 -4
  297. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +0 -8
  298. package/src/View/StyledColumn/Wizard/StyledColumnWizardTypeSection.js +2 -9
  299. package/src/View/SystemStatus/SystemStatusViewPanel.js +1 -1
  300. package/src/View/SystemStatus/Utilities/getStatusItemStyle.js +1 -1
  301. package/src/View/Theme/ThemeEditor.d.ts +1 -1
  302. package/src/View/Theme/ThemeViewPanel.js +4 -3
  303. package/src/View/UIHelper.d.ts +1 -1
  304. package/src/View/Wizard/ObjectTagsWizardSection.d.ts +1 -1
  305. package/src/View/Wizard/OnePageAdaptableWizard.d.ts +1 -1
  306. package/src/View/Wizard/OnePageWizards.d.ts +2 -2
  307. package/src/agGrid/Adaptable.d.ts +20 -17
  308. package/src/agGrid/Adaptable.js +193 -190
  309. package/src/agGrid/AdaptableLogger.js +15 -15
  310. package/src/agGrid/CheckboxRenderer.d.ts +5 -0
  311. package/src/agGrid/CheckboxRenderer.js +5 -1
  312. package/src/agGrid/ColumnSetupInfo.d.ts +1 -1
  313. package/src/agGrid/agGridHelper.d.ts +0 -1
  314. package/src/agGrid/agGridHelper.js +16 -14
  315. package/src/agGrid/editors/AdaptableDateEditor/InternalAdaptableDateEditor.d.ts +2 -2
  316. package/src/agGrid/editors/AdaptableNumberEditor/InternalAdaptableNumberEditor.d.ts +2 -2
  317. package/src/components/CheckBox/index.d.ts +1 -1
  318. package/src/components/ColorPicker/ColorPicker.d.ts +2 -2
  319. package/src/components/ColorPicker/ColorPicker.js +1 -1
  320. package/src/components/ContainerProps.d.ts +2 -2
  321. package/src/components/Dashboard/Dashboard.d.ts +2 -2
  322. package/src/components/Dashboard/DashboardTab.d.ts +1 -1
  323. package/src/components/Dashboard/DashboardToolbar.d.ts +1 -1
  324. package/src/components/Datepicker/index.d.ts +2 -2
  325. package/src/components/Dialog/index.d.ts +2 -2
  326. package/src/components/Dropdown/index.d.ts +2 -2
  327. package/src/components/DropdownButton/DropdownButtonItem.d.ts +1 -1
  328. package/src/components/DropdownButton/index.d.ts +1 -1
  329. package/src/components/DropdownButton/renderItem.d.ts +1 -1
  330. package/src/components/DropdownButton/useExpanded.d.ts +1 -1
  331. package/src/components/EllipsisContainer/index.d.ts +1 -1
  332. package/src/components/EmptyContent/index.d.ts +1 -1
  333. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
  334. package/src/components/ExpressionEditor/NamedQueryContext.d.ts +1 -1
  335. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.js +45 -15
  336. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.d.ts +7 -2
  337. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +48 -33
  338. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.d.ts +1 -1
  339. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +6 -6
  340. package/src/components/ExpressionEditor/QueryBuilder/booleanExpressions.js +2 -0
  341. package/src/components/ExpressionEditor/QueryBuilder/utils.d.ts +2 -1
  342. package/src/components/ExpressionEditor/QueryBuilder/utils.js +30 -0
  343. package/src/components/ExpressionEditor/index.d.ts +2 -1
  344. package/src/components/ExpressionEditor/index.js +81 -59
  345. package/src/components/FormLayout/index.d.ts +4 -4
  346. package/src/components/Input/NumberInput.d.ts +1 -1
  347. package/src/components/Input/index.d.ts +2 -2
  348. package/src/components/List/ListGroupItem/index.d.ts +2 -2
  349. package/src/components/Modal/Backdrop.d.ts +2 -2
  350. package/src/components/OverlayTrigger/index.d.ts +1 -1
  351. package/src/components/Panel/index.d.ts +1 -1
  352. package/src/components/Radio/index.d.ts +1 -1
  353. package/src/components/ResizeObserver/index.d.ts +1 -1
  354. package/src/components/Select/Select.d.ts +30 -0
  355. package/src/components/Select/Select.js +128 -0
  356. package/src/components/Select/index.d.ts +1 -0
  357. package/src/components/Select/index.js +1 -0
  358. package/src/components/SelectableList/index.d.ts +1 -1
  359. package/src/components/Tabs/index.d.ts +3 -3
  360. package/src/components/Textarea/index.d.ts +1 -1
  361. package/src/components/Toggle/Toggle.d.ts +1 -1
  362. package/src/components/WarningBox/index.d.ts +4 -0
  363. package/src/components/WarningBox/index.js +7 -0
  364. package/src/components/WindowModal/WindowModal.d.ts +2 -2
  365. package/src/components/icons/DefaultIcon.d.ts +1 -1
  366. package/src/components/icons/index.js +2 -0
  367. package/src/components/icons/resume.d.ts +3 -0
  368. package/src/components/icons/resume.js +4 -0
  369. package/src/components/utils/useContainerScrollObserver/index.d.ts +1 -1
  370. package/src/components/utils/uuid.d.ts +1 -1
  371. package/src/metamodel/adaptable-metamodel-model.d.ts +2 -2
  372. package/src/metamodel/adaptable.metamodel.d.ts +330 -27
  373. package/src/metamodel/adaptable.metamodel.js +9435 -1
  374. package/src/parser/src/predicate/mapExpressionToQlPredicate.js +1 -1
  375. package/src/parser/src/predicate/mapQlPredicateToExpression.js +3 -0
  376. package/src/parser/src/predicate/types.d.ts +2 -2
  377. package/src/parser/src/types.d.ts +23 -11
  378. package/src/renderReactRoot.d.ts +2 -4
  379. package/src/renderReactRoot.js +5 -46
  380. package/src/types.d.ts +6 -6
  381. package/themes/dark.css +1 -1
  382. package/themes/dark.css.map +1 -1
  383. package/themes/light.css +1 -1
  384. package/themes/light.css.map +1 -1
  385. package/tsconfig.esm.tsbuildinfo +1 -0
  386. package/publishTimestamp.d.ts +0 -2
  387. package/publishTimestamp.js +0 -1
  388. package/src/AdaptableOptions/FilterOptions.d.ts +0 -216
  389. package/src/AdaptableOptions/FinancePluginOptions.d.ts +0 -6
  390. package/src/AdaptableOptions/FinancePluginOptions.js +0 -1
  391. package/src/Api/Events/ChexboxColumnClicked.d.ts +0 -24
  392. package/src/Api/Events/ChexboxColumnClicked.js +0 -1
  393. package/src/Api/Events/QueryRun.d.ts +0 -15
  394. package/src/Api/Events/QueryRun.js +0 -1
  395. package/src/PredefinedConfig/ConditionalStyleState.d.ts +0 -41
  396. package/src/PredefinedConfig/ConditionalStyleState.js +0 -1
  397. package/version.d.ts +0 -2
  398. package/version.js +0 -1
  399. /package/src/AdaptableOptions/{FilterOptions.js → GridFilterOptions.js} +0 -0
@@ -1,13 +1,16 @@
1
1
  import * as React from 'react';
2
2
  import { useDispatch } from 'react-redux';
3
- import { Flex, Text } from 'rebass';
3
+ import { Box, Flex } from 'rebass';
4
4
  import { ExpressionEditor } from '../../components/ExpressionEditor';
5
5
  import { NamedQueryContext, } from '../../components/ExpressionEditor/NamedQueryContext';
6
6
  import SimpleButton from '../../components/SimpleButton';
7
7
  import * as QueryRedux from '../../Redux/ActionsReducers/NamedQueryRedux';
8
+ import { PopupShowForm } from '../../Redux/ActionsReducers/PopupRedux';
8
9
  import { GridFilterModuleId } from '../../Utilities/Constants/ModuleConstants';
9
10
  import { IsNotNullOrEmpty, IsNullOrEmpty } from '../../Utilities/Extensions/StringExtensions';
11
+ import Helper from '../../Utilities/Helpers/Helper';
10
12
  import { useAdaptable } from '../AdaptableContext';
13
+ import { useGridFilterOptionsForExpressionEditorProps } from './useGridFilterOptionsForExpressionEditor';
11
14
  export const GridFilterExpressionEditor = (props) => {
12
15
  const dispatch = useDispatch();
13
16
  const { api } = useAdaptable();
@@ -16,15 +19,68 @@ export const GridFilterExpressionEditor = (props) => {
16
19
  const isExpressionValid = api.internalApi
17
20
  .getQueryLanguageService()
18
21
  .validateBoolean(expression, GridFilterModuleId).isValid;
22
+ const isExistingNamedQuery = Helper.objectExists(api.namedQueryApi.getNamedQueries().find((q) => q.BooleanExpression == expression));
19
23
  const initialData = React.useMemo(() => api.internalApi.getQueryPreviewData(), []);
20
24
  const namedQueryValidationError = namedQuery
21
- ? api.namedQueryApi.isValidNamedQueryName(namedQuery).message
25
+ ? api.namedQueryApi.isValidNamedQuery(namedQuery).message
22
26
  : '';
23
27
  const hasNamedQueryError = IsNotNullOrEmpty(namedQueryValidationError);
24
28
  const onRunQuery = (expression) => {
25
29
  api.gridFilterApi.setGridFilterExpression(expression);
26
30
  };
27
31
  const onAddNamedQuery = (namedQuery) => dispatch(QueryRedux.NamedQueryAdd(namedQuery));
32
+ const handleSaveQuery = () => {
33
+ dispatch(PopupShowForm({
34
+ Id: 'save_query_form',
35
+ Form: {
36
+ title: 'Save as Named Query',
37
+ fields: [
38
+ {
39
+ name: 'name',
40
+ label: 'Name',
41
+ fieldType: 'text',
42
+ },
43
+ ],
44
+ buttons: [
45
+ {
46
+ label: 'Cancel',
47
+ buttonStyle: {
48
+ variant: 'text',
49
+ tone: 'none',
50
+ },
51
+ },
52
+ {
53
+ label: 'Save',
54
+ buttonStyle: {
55
+ variant: 'raised',
56
+ tone: 'accent',
57
+ },
58
+ disabled: (button, context) => {
59
+ if (context.formData.name === '') {
60
+ return true;
61
+ }
62
+ const testQuery = {
63
+ Name: context.formData.name,
64
+ BooleanExpression: expression,
65
+ };
66
+ const namedQueryValidationResult = api.namedQueryApi.isValidNamedQuery(testQuery);
67
+ if (!namedQueryValidationResult.valid) {
68
+ return true;
69
+ }
70
+ },
71
+ onClick: (button, context) => {
72
+ onAddNamedQuery({
73
+ Name: context.formData.name,
74
+ BooleanExpression: expression,
75
+ });
76
+ },
77
+ },
78
+ ],
79
+ },
80
+ }));
81
+ };
82
+ const expressionEditorProps = useGridFilterOptionsForExpressionEditorProps();
83
+ const actionsDisabled = !isExpressionValid || IsNullOrEmpty(expression) || hasNamedQueryError || isExistingNamedQuery;
28
84
  return (React.createElement(NamedQueryContext.Provider, { value: {
29
85
  namedQuery: namedQuery,
30
86
  setNamedQuery: (newQuery) => {
@@ -32,16 +88,13 @@ export const GridFilterExpressionEditor = (props) => {
32
88
  },
33
89
  } },
34
90
  React.createElement(Flex, { height: "100%", flexDirection: "column" },
35
- React.createElement(ExpressionEditor, { showQueryBuilder: true, type: 'boolean', module: GridFilterModuleId, value: expression, onChange: (expression) => setExpression(expression), initialData: initialData, columns: api.columnApi.getQueryableColumns(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api }),
91
+ React.createElement(ExpressionEditor, Object.assign({}, expressionEditorProps, { type: 'boolean', module: GridFilterModuleId, value: expression, onChange: (expression) => setExpression(expression), initialData: initialData, columns: api.columnApi.getQueryableColumns(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api })),
36
92
  React.createElement(Flex, { flexDirection: "row", padding: 1, alignItems: "center" },
37
93
  props.onDismiss && (React.createElement(SimpleButton, { margin: 1, variant: "text", "data-name": "action-close", onClick: () => {
38
94
  props.onDismiss();
39
95
  } }, "CLOSE")),
40
- React.createElement(Text, { fontSize: 2, mr: 3, style: {
41
- flex: 1,
42
- color: 'var(--ab-color-error)',
43
- textAlign: 'end',
44
- } }, namedQueryValidationError),
96
+ React.createElement(Box, { flex: 1 }),
97
+ React.createElement(SimpleButton, { disabled: actionsDisabled, onClick: handleSaveQuery, icon: "save" }, "Save Query"),
45
98
  React.createElement(SimpleButton, { variant: "raised", tone: "accent", "data-name": "action-run", margin: 1, onClick: () => {
46
99
  var _a;
47
100
  if (namedQuery) {
@@ -52,5 +105,5 @@ export const GridFilterExpressionEditor = (props) => {
52
105
  }
53
106
  onRunQuery(expression);
54
107
  (_a = props === null || props === void 0 ? void 0 : props.onDismiss) === null || _a === void 0 ? void 0 : _a.call(props);
55
- }, disabled: !isExpressionValid || IsNullOrEmpty(expression) || hasNamedQueryError }, "Apply Grid Filter")))));
108
+ }, disabled: actionsDisabled }, "Apply Grid Filter")))));
56
109
  };
@@ -1,12 +1,42 @@
1
1
  import * as React from 'react';
2
+ import { Flex } from 'rebass';
3
+ import DropdownButton from '../../components/DropdownButton';
4
+ import FieldWrap from '../../components/FieldWrap';
5
+ import FormLayout, { FormRow } from '../../components/FormLayout';
6
+ import Input from '../../components/Input';
2
7
  import Panel from '../../components/Panel';
3
- import { useAdaptable } from '../AdaptableContext';
8
+ import { ButtonClear } from '../Components/Buttons/ButtonClear';
9
+ import { ButtonExpand } from '../Components/Buttons/ButtonExpand';
10
+ import { ButtonInvalid } from '../Components/Buttons/ButtonInvalid';
11
+ import { ButtonPause } from '../Components/Buttons/ButtonPause';
12
+ import { ButtonPlay } from '../Components/Buttons/ButtonPlay';
13
+ import { ButtonSave } from '../Components/Buttons/ButtonSave';
14
+ import { ButtonUnsuspend } from '../Components/Buttons/ButtonUnsuspend';
4
15
  import { PopupPanel } from '../Components/Popups/AdaptablePopup/PopupPanel';
5
- import { GridFilterExpressionEditor } from './GridFilterExpressionEditor';
16
+ import { NamedQuerySelector } from './NamedQuerySelector';
17
+ import { useGridFilterExpressionEditor } from './useGridFilterExpressionEditor';
6
18
  export const GridFilterPopup = () => {
7
- const adaptable = useAdaptable();
8
- const gridFilter = adaptable.api.gridFilterApi.getCurrentGridFilterExpression();
19
+ const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, } = useGridFilterExpressionEditor();
20
+ const handleEnter = (e) => {
21
+ if (e.key === 'Enter') {
22
+ runQuery();
23
+ }
24
+ };
25
+ const disabled = isSuspended || gridFilterAccessLevel === 'ReadOnly';
9
26
  return (React.createElement(PopupPanel, { className: "ab-GridFilter", headerText: "Grid Filter", glyphicon: "grid-filter" },
10
- React.createElement(Panel, { flex: 1 },
11
- React.createElement(GridFilterExpressionEditor, { expression: gridFilter }))));
27
+ React.createElement(Panel, { bodyProps: { height: '100%' }, height: "100%" },
28
+ React.createElement(FormLayout, null,
29
+ React.createElement(FormRow, { label: "Expression" },
30
+ React.createElement(FieldWrap, { marginRight: 1, width: "100%" },
31
+ React.createElement(ButtonExpand, { disabled: disabled, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Open Expression Editor", marginLeft: 1 }),
32
+ React.createElement(Input, { onKeyDown: handleEnter, disabled: disabled, type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { fontFamily: 'monospace', fontSize: 12 } }),
33
+ isExpressionValid ? (React.createElement(ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })) : (React.createElement(ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
34
+ ' ',
35
+ (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== '' && (React.createElement(ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))),
36
+ React.createElement(FormRow, { label: "" },
37
+ React.createElement(Flex, { justifyContent: "space-around" },
38
+ React.createElement(ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }, "Save"),
39
+ isSuspended ? (React.createElement(ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Resume")) : (React.createElement(ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: isSuspended || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Suspend")),
40
+ React.createElement(DropdownButton, { disabled: disabled, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns", icon: "list", iconPosition: "start" }, "Columns"),
41
+ React.createElement(NamedQuerySelector, { disabled: disabled, namedQueries: namedQueries, cachedQueries: cachedQueries, currentQuery: gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression, onSelect: (query) => runQuery(query), setGridFilterExpression: (query) => setGridFilterExpression(query) }, "Named Queries")))))));
12
42
  };
@@ -6,7 +6,6 @@ export const GridFilterStatusbar = (props) => {
6
6
  const currentLayoutName = useSelector((state) => state.Layout.CurrentLayout);
7
7
  const currentLayout = useSelector((state) => state.Layout.Layouts).find((layout) => layout.Name === currentLayoutName);
8
8
  const query = (_b = (_a = currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.GridFilter) === null || _a === void 0 ? void 0 : _a.Expression) !== null && _b !== void 0 ? _b : '';
9
- console.log('currentLayout', currentLayout);
10
9
  let text = query;
11
10
  let popover = null;
12
11
  if (query.length > queryMaxLength) {
@@ -1,29 +1,5 @@
1
- import * as React from 'react';
2
- import { CachedQuery } from '../../PredefinedConfig/NamedQueryState';
3
- import * as PopupRedux from '../../Redux/ActionsReducers/PopupRedux';
4
- import * as SystemRedux from '../../Redux/ActionsReducers/SystemRedux';
5
- import { NamedQuery } from '../../types';
1
+ /// <reference types="react" />
6
2
  import { ViewPanelProps } from '../Components/SharedProps/ViewPanelProps';
7
3
  export interface QueryViewPanelComponentProps extends ViewPanelProps {
8
- CurrentQuery: string;
9
- NamedQueries: NamedQuery[];
10
- CachedQueries: CachedQuery[];
11
- onAddCachedQuery: (cachedQuery: CachedQuery) => SystemRedux.SystemCachedQueryAddAction;
12
- onShowNamedQueries: (value: string, popup: string) => PopupRedux.PopupShowScreenAction;
13
4
  }
14
- interface QueryViewPanelComponentState {
15
- isAdaptableReady: boolean;
16
- expression: string;
17
- }
18
- declare class QueryViewPanelComponent extends React.Component<QueryViewPanelComponentProps, QueryViewPanelComponentState> {
19
- constructor(props: QueryViewPanelComponentProps);
20
- componentDidMount(): void;
21
- componentDidUpdate(prevProps: QueryViewPanelComponentProps): void;
22
- render(): JSX.Element;
23
- private clearQuery;
24
- saveQuery(): void;
25
- onSelectedQueryChanged(queryName: string): void;
26
- runQuery(expression?: string): void;
27
- }
28
- export declare let GridFilterPanelControl: import("react-redux").ConnectedComponent<typeof QueryViewPanelComponent, import("react-redux").Omit<JSX.LibraryManagedAttributes<C, import("react-redux").GetProps<C>>, keyof QueryViewPanelComponentProps>>;
29
- export {};
5
+ export declare const GridFilterPanelControl: (props: QueryViewPanelComponentProps) => JSX.Element;
@@ -1,165 +1,64 @@
1
1
  import * as React from 'react';
2
- import { connect } from 'react-redux';
3
2
  import { Flex } from 'rebass';
4
3
  import DropdownButton from '../../components/DropdownButton';
5
4
  import FieldWrap from '../../components/FieldWrap';
6
5
  import { Icon } from '../../components/icons';
7
6
  import Input from '../../components/Input';
8
- import { SortOrder } from '../../PredefinedConfig/Common/Enums';
9
- import * as PopupRedux from '../../Redux/ActionsReducers/PopupRedux';
10
- import * as SystemRedux from '../../Redux/ActionsReducers/SystemRedux';
11
- import * as ModuleConstants from '../../Utilities/Constants/ModuleConstants';
12
- import { NamedQueryModuleId } from '../../Utilities/Constants/ModuleConstants';
13
- import { ArrayExtensions } from '../../Utilities/Extensions/ArrayExtensions';
14
- import StringExtensions from '../../Utilities/Extensions/StringExtensions';
15
7
  import { ButtonClear } from '../Components/Buttons/ButtonClear';
16
8
  import { ButtonExpand } from '../Components/Buttons/ButtonExpand';
17
9
  import { ButtonInvalid } from '../Components/Buttons/ButtonInvalid';
10
+ import { ButtonPause } from '../Components/Buttons/ButtonPause';
18
11
  import { ButtonPlay } from '../Components/Buttons/ButtonPlay';
19
12
  import { ButtonSave } from '../Components/Buttons/ButtonSave';
20
- class QueryViewPanelComponent extends React.Component {
21
- constructor(props) {
22
- super(props);
23
- this.state = {
24
- isAdaptableReady: false,
25
- expression: this.props.CurrentQuery || '',
26
- };
13
+ import { ButtonUnsuspend } from '../Components/Buttons/ButtonUnsuspend';
14
+ import { NamedQuerySelector } from './NamedQuerySelector';
15
+ import { useGridFilterExpressionEditor } from './useGridFilterExpressionEditor';
16
+ const QueryViewPanelComponent = (props) => {
17
+ const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, isAdaptableReady, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, } = useGridFilterExpressionEditor();
18
+ if (!isAdaptableReady) {
19
+ return null;
27
20
  }
28
- componentDidMount() {
29
- this.props.api.eventApi.on('AdaptableReady', () => {
30
- this.setState({ isAdaptableReady: true });
31
- });
32
- }
33
- componentDidUpdate(prevProps) {
34
- if (prevProps.CurrentQuery !== this.props.CurrentQuery) {
35
- this.setState({
36
- expression: this.props.CurrentQuery,
37
- });
38
- }
39
- }
40
- render() {
41
- if (this.state.isAdaptableReady === false) {
42
- return null;
43
- }
44
- const isExpressionValid = this.state.expression == '' ||
45
- this.props.api.internalApi
46
- .getQueryLanguageService()
47
- .validateBoolean(this.state.expression, NamedQueryModuleId).isValid;
48
- const isExpressionNamedQuery = this.props.NamedQueries.find((sq) => sq.BooleanExpression == this.state.expression) != null;
49
- let sortedNamedQueries = ArrayExtensions.sortArrayWithProperty(SortOrder.Asc, this.props.NamedQueries, 'Name');
50
- let availableSearches = [
51
- ...sortedNamedQueries.map((expression) => {
52
- return {
53
- label: expression.Name,
54
- icon: expression.BooleanExpression === this.props.CurrentQuery ? (React.createElement(Icon, { name: 'check' })) : null,
55
- onClick: () => this.runQuery(expression.BooleanExpression),
56
- };
57
- }),
58
- ...(ArrayExtensions.IsNotNullOrEmpty(this.props.CachedQueries) ? [{ separator: true }] : []),
59
- ...(ArrayExtensions.IsNotNullOrEmpty(this.props.CachedQueries)
60
- ? this.props.CachedQueries.slice(-5)
61
- .reverse()
62
- .map((item) => ({
63
- label: `Grid Filter at ${item.time.toLocaleTimeString('en-US')}`,
64
- icon: React.createElement(Icon, { name: 'history' }),
65
- onClick: () => this.props.api.gridFilterApi.setGridFilterExpression(item.expression),
66
- }))
67
- : []),
68
- ];
69
- let availableColumns = this.props.api.columnApi.getColumns().map((col) => {
70
- return {
71
- label: col.friendlyName,
72
- onClick: () => this.setState({
73
- expression: this.state.expression + `[${col.columnId}]`,
74
- }),
75
- };
76
- });
77
- const elementType = this.props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
78
- const handleEnter = (e) => {
79
- if (e.key === 'Enter') {
80
- this.runQuery();
81
- }
82
- };
83
- const renderTextInput = () => {
84
- return this.props.viewType === 'Toolbar' ? (React.createElement(FieldWrap, { marginRight: 1, width: 500 },
85
- React.createElement(ButtonExpand, { variant: "text", tone: "neutral", onClick: () => this.props.api.gridFilterApi.expandGridFilterEditor(this.state.expression), tooltip: "Expand", marginLeft: 1 }),
86
- React.createElement(Input, { type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: this.state.expression, onChange: (x) => this.setState({ expression: x.target.value }), style: { fontFamily: 'monospace', fontSize: 12 } }),
87
- isExpressionValid ? (React.createElement(ButtonPlay, { onClick: () => this.runQuery(), tooltip: '', accessLevel: 'Full', variant: "text", tone: "neutral", disabled: this.state.expression == '' || this.state.expression == this.props.CurrentQuery, marginRight: 1 })) : (React.createElement(ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
88
- ' ',
89
- this.props.CurrentQuery !== '' && (React.createElement(ButtonClear, { onClick: () => this.clearQuery(), tooltip: "Clear Grid Filter", accessLevel: 'Full' })))) : (React.createElement(Input, { type: "text", placeholder: "Grid Filter", spellCheck: false, value: this.state.expression, onChange: (x) => this.setState({ expression: x.target.value }), style: { width: '100%' } }));
90
- };
91
- const queryModuleAccessLevel = this.props.api.internalApi
92
- .getEntitlementService()
93
- .getEntitlementAccessLevelForModule(NamedQueryModuleId);
94
- const saveButton = (React.createElement(ButtonSave, { onClick: () => this.saveQuery(), tooltip: "Save as Named Query", accessLevel: queryModuleAccessLevel, disabled: !isExpressionValid || isExpressionNamedQuery || this.state.expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
95
- const renderButtons = () => {
96
- return this.props.viewType === 'Toolbar' ? (React.createElement(React.Fragment, null,
97
- saveButton,
98
- React.createElement(DropdownButton, { variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns" },
99
- React.createElement(Icon, { name: 'list' })),
100
- React.createElement(DropdownButton, { disabled: ArrayExtensions.IsNullOrEmpty(availableSearches), variant: "text", items: availableSearches, marginRight: 1, tooltip: "Load Named Query", icon: "folder-open" }),
101
- ' ')) : (React.createElement(React.Fragment, null,
102
- saveButton,
103
- React.createElement(ButtonExpand, { variant: "text", tone: "neutral", onClick: () => this.props.api.gridFilterApi.expandGridFilterEditor(this.state.expression), tooltip: "Expand", marginLeft: 1 }),
104
- React.createElement(ButtonClear, { onClick: () => this.clearQuery(), tooltip: "Clear Grid Filter", accessLevel: 'Full', disabled: this.state.expression == '' }),
105
- React.createElement(ButtonPlay, { onClick: () => this.runQuery(), tooltip: "Run Grid Filter", accessLevel: 'Full', variant: "text", tone: "neutral", disabled: !isExpressionValid ||
106
- this.state.expression == '' ||
107
- this.state.expression == this.props.CurrentQuery, marginRight: 1 }),
108
- React.createElement(DropdownButton, { variant: "text", disabled: ArrayExtensions.IsNullOrEmpty(availableSearches), items: availableSearches, marginRight: 1, tooltip: "Load Named Query", icon: "folder-open" })));
109
- };
110
- return (React.createElement(Flex, { onKeyDown: handleEnter, flexDirection: "row", className: `ab-${elementType}__Query__wrap`, flexWrap: this.props.viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
111
- React.createElement(Flex, null, renderTextInput()),
112
- React.createElement(Flex, null, renderButtons())));
113
- }
114
- clearQuery() {
115
- this.props.api.gridFilterApi.setGridFilterExpression('');
116
- }
117
- saveQuery() {
118
- this.props.onShowNamedQueries(this.state.expression, this.props.moduleInfo.Popup);
119
- }
120
- onSelectedQueryChanged(queryName) {
121
- this.props.api.gridFilterApi.setGridFilterExpression(queryName);
122
- }
123
- runQuery(expression = this.state.expression) {
124
- if (StringExtensions.IsNullOrEmpty(expression) &&
125
- StringExtensions.IsNotNullOrEmpty(this.props.CurrentQuery)) {
126
- // user pressed enter key with an empty input => clear existing current query
127
- this.props.api.gridFilterApi.setGridFilterExpression('');
128
- return;
129
- }
130
- if (!this.props.api.internalApi
131
- .getQueryLanguageService()
132
- .validateBoolean(expression, NamedQueryModuleId).isValid) {
133
- return;
21
+ const elementType = props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
22
+ const handleEnter = (e) => {
23
+ if (e.key === 'Enter') {
24
+ runQuery();
134
25
  }
135
- if (StringExtensions.IsNotNullOrEmpty(this.state.expression)) {
136
- let cachedQuery = {
137
- expression: this.state.expression,
138
- time: new Date(),
139
- };
140
- if (cachedQuery) {
141
- this.props.onAddCachedQuery(cachedQuery);
142
- }
143
- }
144
- this.props.api.gridFilterApi.setGridFilterExpression(expression);
145
- }
146
- }
147
- function mapStateToProps(state) {
148
- var _a, _b, _c;
149
- return {
150
- CurrentQuery: (_c = (_b = (_a = state.Layout.Layouts.find((l) => l.Name == state.Layout.CurrentLayout)) === null || _a === void 0 ? void 0 : _a.GridFilter) === null || _b === void 0 ? void 0 : _b.Expression) !== null && _c !== void 0 ? _c : '',
151
- NamedQueries: state.NamedQuery.NamedQueries,
152
- CachedQueries: state.System.CachedQueries,
153
26
  };
154
- }
155
- function mapDispatchToProps(dispatch) {
156
- return {
157
- onAddCachedQuery: (cachedQuery) => dispatch(SystemRedux.SystemCachedQueryAdd(cachedQuery)),
158
- onShowNamedQueries: (value, popup) => dispatch(PopupRedux.PopupShowScreen(ModuleConstants.NamedQueryModuleId, popup, {
159
- action: 'New',
160
- source: 'Toolbar',
161
- value,
162
- })),
27
+ const buttonExpand = (React.createElement(ButtonExpand, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Open Expression Editor", marginLeft: 1 }));
28
+ const renderTextInput = () => {
29
+ return props.viewType === 'Toolbar' ? (React.createElement(FieldWrap, { marginRight: 1, width: 500 },
30
+ buttonExpand,
31
+ React.createElement(Input, { disabled: isSuspended || gridFilterAccessLevel == 'ReadOnly', type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { fontFamily: 'monospace', fontSize: 12 } }),
32
+ isExpressionValid ? (React.createElement(ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })) : (React.createElement(ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
33
+ ' ',
34
+ (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== '' && (React.createElement(ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))) : (React.createElement(FieldWrap, null,
35
+ ' ',
36
+ buttonExpand,
37
+ React.createElement(Input, { disabled: isSuspended || gridFilterAccessLevel == 'ReadOnly', type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { width: '100%' } })));
38
+ };
39
+ const saveButton = (React.createElement(ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: isSuspended || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
40
+ const suspendButton = (React.createElement(ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
41
+ const unSuspendButton = (React.createElement(ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
42
+ const namedQuerySelector = (React.createElement(NamedQuerySelector, { namedQueries: namedQueries, cachedQueries: cachedQueries, currentQuery: gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression, onSelect: (query) => runQuery(query), setGridFilterExpression: (query) => setGridFilterExpression(query) }));
43
+ const columnsDropdown = (React.createElement(DropdownButton, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns" },
44
+ React.createElement(Icon, { name: 'list' })));
45
+ const renderButtons = () => {
46
+ return props.viewType === 'Toolbar' ? (React.createElement(React.Fragment, null,
47
+ saveButton,
48
+ isSuspended ? unSuspendButton : suspendButton,
49
+ columnsDropdown,
50
+ namedQuerySelector,
51
+ ' ')) : (React.createElement(React.Fragment, null,
52
+ React.createElement(ButtonPlay, { onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
53
+ ' ',
54
+ React.createElement(ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel, disabled: expression == '' }),
55
+ ' ',
56
+ saveButton,
57
+ isSuspended ? unSuspendButton : suspendButton,
58
+ namedQuerySelector));
163
59
  };
164
- }
165
- export let GridFilterPanelControl = connect(mapStateToProps, mapDispatchToProps)(QueryViewPanelComponent);
60
+ return (React.createElement(Flex, { onKeyDown: handleEnter, flexDirection: "row", className: `ab-${elementType}__Query__wrap`, flexWrap: props.viewType === 'ToolPanel' ? 'wrap' : 'nowrap' },
61
+ React.createElement(Flex, null, renderTextInput()),
62
+ React.createElement(Flex, null, renderButtons())));
63
+ };
64
+ export const GridFilterPanelControl = QueryViewPanelComponent;
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ import { CachedQuery } from '../../PredefinedConfig/NamedQueryState';
3
+ import { NamedQuery } from '../../types';
4
+ export declare const AvailableSearchLabel: (props: {
5
+ label: string;
6
+ expression: string;
7
+ }) => JSX.Element;
8
+ export declare const NamedQuerySelector: (props: {
9
+ namedQueries: NamedQuery[];
10
+ cachedQueries: CachedQuery[];
11
+ currentQuery: string;
12
+ onSelect: (query: string) => void;
13
+ setGridFilterExpression: (query: string) => void;
14
+ children?: any;
15
+ disabled?: boolean;
16
+ }) => JSX.Element;
@@ -0,0 +1,50 @@
1
+ import * as React from 'react';
2
+ import { Box, Flex } from 'rebass';
3
+ import { Icon } from '../../components/icons';
4
+ import Panel from '../../components/Panel';
5
+ import SimpleButton from '../../components/SimpleButton';
6
+ import { Tag } from '../../components/Tag';
7
+ import { SortOrder } from '../../PredefinedConfig/Common/Enums';
8
+ import ArrayExtensions from '../../Utilities/Extensions/ArrayExtensions';
9
+ import { AdaptablePopover } from '../AdaptablePopover';
10
+ import { ButtonOpen } from '../Components/Buttons/ButtonOpen';
11
+ export const AvailableSearchLabel = (props) => {
12
+ return (React.createElement(Flex, { flexDirection: "column", textAlign: "start", width: "100%", justifyContent: "space-around" },
13
+ React.createElement(Box, { mb: 2, flex: 1 }, props.label),
14
+ React.createElement(Tag, null, props.expression)));
15
+ };
16
+ export const NamedQuerySelector = (props) => {
17
+ var _a;
18
+ const sortedNamedQueries = (_a = ArrayExtensions.sortArrayWithProperty(SortOrder.Asc, props.namedQueries, 'Name')) !== null && _a !== void 0 ? _a : [];
19
+ const availableSearches = sortedNamedQueries.map((expression) => {
20
+ return {
21
+ label: (React.createElement(AvailableSearchLabel, { label: expression.Name, expression: expression.BooleanExpression })),
22
+ icon: expression.BooleanExpression === props.currentQuery ? React.createElement(Icon, { name: 'check' }) : null,
23
+ onClick: () => props.onSelect(expression.BooleanExpression),
24
+ };
25
+ });
26
+ const cachedQueries = ArrayExtensions.IsNotNullOrEmpty(props.cachedQueries)
27
+ ? props.cachedQueries
28
+ .slice(-3)
29
+ .reverse()
30
+ .map((item) => ({
31
+ label: (React.createElement(AvailableSearchLabel, { label: `Grid Filter at ${item.time.toLocaleTimeString('en-US')}`, expression: item.expression })),
32
+ icon: React.createElement(Icon, { name: 'history' }),
33
+ onClick: () => props.setGridFilterExpression(item.expression),
34
+ }))
35
+ : null;
36
+ return ArrayExtensions.IsNotNullOrEmpty(cachedQueries) ||
37
+ ArrayExtensions.IsNotNullOrEmpty(availableSearches) ? (React.createElement(AdaptablePopover, { tooltipText: "Load Named Query", showIcon: false, popoverMinWidth: 300, bodyText: [
38
+ React.createElement(Flex, { justifyContent: "stretch", flexDirection: "column" },
39
+ React.createElement(Panel, { header: "Named Queries" },
40
+ React.createElement(Flex, { flexDirection: "column" }, availableSearches.map((item, index) => {
41
+ return (React.createElement(SimpleButton, { mb: 2, variant: "text", key: index, onClick: item.onClick }, item.label));
42
+ }))),
43
+ cachedQueries ? (React.createElement(React.Fragment, null,
44
+ React.createElement(Panel, { mt: 2, header: "Recent Grid Filters" },
45
+ React.createElement(Flex, { flexDirection: "column" }, cachedQueries.map((cachedQuery, index) => {
46
+ return (React.createElement(SimpleButton, { mb: 2, variant: "text", key: index, onClick: cachedQuery.onClick }, cachedQuery.label));
47
+ }))))) : null),
48
+ ] },
49
+ React.createElement(SimpleButton, { disabled: props.disabled, variant: "text", icon: "folder-open" }, props.children))) : (React.createElement(ButtonOpen, { tooltip: "Load Named Query", disabled: true }));
50
+ };
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { CachedQuery } from '../../PredefinedConfig/NamedQueryState';
3
+ export declare const useGridFilterExpressionEditor: () => {
4
+ namedQueryModuleAccessLevel: import("../../types").AccessLevel;
5
+ cachedQueries: CachedQuery[];
6
+ expression: string;
7
+ setExpression: React.Dispatch<React.SetStateAction<string>>;
8
+ isExpressionNamedQuery: boolean;
9
+ isExpressionValid: boolean;
10
+ isSuspended: boolean;
11
+ gridFilter: import("../../types").GridFilter;
12
+ isAdaptableReady: boolean;
13
+ namedQueries: import("../../types").NamedQuery[];
14
+ onAddCachedQuery: (cachedQuery: CachedQuery) => void;
15
+ availableColumns: any[];
16
+ runQuery: (newExpression?: string) => void;
17
+ clearQuery: () => void;
18
+ onExpand: () => void;
19
+ saveQuery: () => void;
20
+ suspendGridFilter: () => void;
21
+ unSuspendGridFilter: () => void;
22
+ setGridFilterExpression: (expression: string) => void;
23
+ gridFilterAccessLevel: import("../../types").AccessLevel;
24
+ };