@adaptabletools/adaptable-cjs 17.0.0-canary.3 → 18.0.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/base.css +1264 -1202
  2. package/base.css.map +1 -1
  3. package/index.css +2099 -22
  4. package/index.css.map +1 -1
  5. package/package.json +5 -4
  6. package/src/AdaptableInterfaces/IAdaptable.d.ts +3 -0
  7. package/src/AdaptableOptions/AdaptableOptions.d.ts +5 -0
  8. package/src/AdaptableOptions/AlertOptions.d.ts +7 -7
  9. package/src/AdaptableOptions/ColumnFilterOptions.d.ts +9 -9
  10. package/src/AdaptableOptions/CommentsOptions.d.ts +28 -0
  11. package/src/AdaptableOptions/EditOptions.d.ts +6 -6
  12. package/src/AdaptableOptions/GridFilterOptions.d.ts +13 -8
  13. package/src/AdaptableOptions/GroupingOptions.d.ts +9 -9
  14. package/src/AdaptableOptions/InteropioPluginOptions.d.ts +10 -0
  15. package/src/AdaptableOptions/MenuOptions.d.ts +18 -4
  16. package/src/AdaptableOptions/MenuOptions.js +14 -6
  17. package/src/AdaptableOptions/NotesOptions.d.ts +2 -9
  18. package/src/Api/AdaptableApi.d.ts +6 -1
  19. package/src/Api/CommentApi.d.ts +58 -0
  20. package/src/Api/EventApi.d.ts +48 -12
  21. package/src/Api/Events/CalculatedColumnChanged.d.ts +19 -0
  22. package/src/Api/Events/CellSelectionChanged.d.ts +11 -0
  23. package/src/Api/Events/CommentsChangedInfo.d.ts +5 -0
  24. package/src/Api/Events/LiveDataChanged.d.ts +3 -3
  25. package/src/Api/Events/RowSelectionChanged.d.ts +11 -0
  26. package/src/Api/GridApi.d.ts +0 -6
  27. package/src/Api/GridFilterApi.d.ts +2 -2
  28. package/src/Api/Implementation/AdaptableApiImpl.d.ts +6 -6
  29. package/src/Api/Implementation/AdaptableApiImpl.js +2 -0
  30. package/src/Api/Implementation/CommentsApiImpl.d.ts +15 -0
  31. package/src/Api/Implementation/CommentsApiImpl.js +46 -0
  32. package/src/Api/Implementation/ExpressionApiImpl.d.ts +1 -1
  33. package/src/Api/Implementation/ExpressionApiImpl.js +3 -4
  34. package/src/Api/Implementation/GridApiImpl.d.ts +0 -1
  35. package/src/Api/Implementation/GridApiImpl.js +0 -4
  36. package/src/Api/Implementation/GridFilterApiImpl.d.ts +1 -1
  37. package/src/Api/Implementation/GridFilterApiImpl.js +1 -1
  38. package/src/Api/Implementation/NotesApiImpl.d.ts +2 -6
  39. package/src/Api/Implementation/NotesApiImpl.js +1 -15
  40. package/src/Api/Implementation/OptionsApiImpl.d.ts +2 -0
  41. package/src/Api/Implementation/OptionsApiImpl.js +3 -0
  42. package/src/Api/Implementation/PluginsApiImpl.d.ts +2 -6
  43. package/src/Api/Implementation/PluginsApiImpl.js +3 -15
  44. package/src/Api/Implementation/ScheduleApiImpl.d.ts +1 -12
  45. package/src/Api/Implementation/ScheduleApiImpl.js +0 -36
  46. package/src/Api/Implementation/ThemeApiImpl.d.ts +1 -0
  47. package/src/Api/Implementation/ThemeApiImpl.js +3 -0
  48. package/src/Api/Internal/ActionRowInternalApi.js +1 -1
  49. package/src/Api/Internal/AdaptableInternalApi.d.ts +2 -0
  50. package/src/Api/Internal/AdaptableInternalApi.js +3 -0
  51. package/src/Api/Internal/CalculatedColumnInternalApi.d.ts +2 -0
  52. package/src/Api/Internal/CalculatedColumnInternalApi.js +16 -0
  53. package/src/Api/Internal/DashboardInternalApi.d.ts +1 -0
  54. package/src/Api/Internal/DashboardInternalApi.js +5 -0
  55. package/src/Api/Internal/DataImportInternalApi.js +2 -0
  56. package/src/Api/Internal/DataSetInternalApi.js +2 -1
  57. package/src/Api/Internal/GridInternalApi.d.ts +3 -1
  58. package/src/Api/Internal/GridInternalApi.js +32 -9
  59. package/src/Api/Internal/LayoutInternalApi.d.ts +2 -2
  60. package/src/Api/Internal/LayoutInternalApi.js +11 -11
  61. package/src/Api/InteropioPluginApi.d.ts +10 -0
  62. package/src/Api/{NotesAPi.d.ts → NotesApi.d.ts} +19 -21
  63. package/src/Api/OptionsApi.d.ts +5 -0
  64. package/src/Api/PluginsApi.d.ts +3 -13
  65. package/src/Api/ScheduleApi.d.ts +1 -48
  66. package/src/Api/ThemeApi.d.ts +5 -0
  67. package/src/PredefinedConfig/AdaptableState.d.ts +4 -2
  68. package/src/PredefinedConfig/CellAddress.d.ts +13 -0
  69. package/src/PredefinedConfig/CellAddress.js +5 -0
  70. package/src/PredefinedConfig/CommentState.d.ts +48 -0
  71. package/src/PredefinedConfig/CommentState.js +2 -0
  72. package/src/PredefinedConfig/Common/AdaptableIcon.d.ts +1 -1
  73. package/src/PredefinedConfig/Common/AdaptablePredicate.js +2 -1
  74. package/src/PredefinedConfig/Common/Enums.d.ts +0 -1
  75. package/src/PredefinedConfig/Common/Enums.js +0 -1
  76. package/src/PredefinedConfig/Common/Schedule.d.ts +1 -1
  77. package/src/PredefinedConfig/Common/Types.d.ts +5 -5
  78. package/src/PredefinedConfig/Common/Types.js +0 -2
  79. package/src/PredefinedConfig/NotesState.d.ts +0 -13
  80. package/src/PredefinedConfig/PredefinedConfig.d.ts +3 -0
  81. package/src/PredefinedConfig/ScheduleState.d.ts +0 -5
  82. package/src/PredefinedConfig/SystemState.d.ts +5 -6
  83. package/src/PredefinedConfig/ThemeState.d.ts +1 -1
  84. package/src/Redux/ActionsReducers/CommentsRedux.d.ts +79 -0
  85. package/src/Redux/ActionsReducers/CommentsRedux.js +189 -0
  86. package/src/Redux/ActionsReducers/NotesRedux.js +1 -2
  87. package/src/Redux/ActionsReducers/PluginsRedux.d.ts +0 -48
  88. package/src/Redux/ActionsReducers/PluginsRedux.js +1 -49
  89. package/src/Redux/ActionsReducers/PlusMinusRedux.d.ts +16 -0
  90. package/src/Redux/ActionsReducers/PlusMinusRedux.js +47 -1
  91. package/src/Redux/ActionsReducers/ScheduleRedux.d.ts +0 -53
  92. package/src/Redux/ActionsReducers/ScheduleRedux.js +2 -90
  93. package/src/Redux/ActionsReducers/SystemRedux.d.ts +23 -12
  94. package/src/Redux/ActionsReducers/SystemRedux.js +55 -23
  95. package/src/Redux/Store/AdaptableStore.d.ts +2 -2
  96. package/src/Redux/Store/AdaptableStore.js +107 -46
  97. package/src/Strategy/CommentsModule.d.ts +16 -0
  98. package/src/Strategy/CommentsModule.js +82 -0
  99. package/src/Strategy/LayoutModule.d.ts +12 -4
  100. package/src/Strategy/LayoutModule.js +19 -14
  101. package/src/Strategy/NotesModule.d.ts +0 -13
  102. package/src/Strategy/NotesModule.js +9 -88
  103. package/src/Strategy/PlusMinusModule.js +2 -0
  104. package/src/Strategy/ScheduleModule.js +0 -23
  105. package/src/Strategy/Utilities/Export/getExportRowsViewItems.d.ts +2 -1
  106. package/src/Strategy/Utilities/Export/getExportRowsViewItems.js +14 -5
  107. package/src/Strategy/Utilities/getExpressionViewItems.js +8 -2
  108. package/src/Utilities/Constants/ConfigConstants.d.ts +1 -0
  109. package/src/Utilities/Constants/ConfigConstants.js +2 -1
  110. package/src/Utilities/Constants/GeneralConstants.d.ts +1 -0
  111. package/src/Utilities/Constants/GeneralConstants.js +8 -3
  112. package/src/Utilities/Constants/ModuleConstants.d.ts +3 -3
  113. package/src/Utilities/Constants/ModuleConstants.js +4 -4
  114. package/src/Utilities/Defaults/DefaultAdaptableOptions.js +3 -3
  115. package/src/Utilities/Defaults/DefaultSettingsPanel.js +1 -0
  116. package/src/Utilities/ExpressionFunctions/aggregatedBooleanExpressionFunctions.js +7 -1
  117. package/src/Utilities/ExpressionFunctions/booleanExpressionFunctions.js +6 -0
  118. package/src/Utilities/ExpressionFunctions/dateUtils.d.ts +1 -0
  119. package/src/Utilities/ExpressionFunctions/dateUtils.js +18 -1
  120. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.d.ts +1 -1
  121. package/src/Utilities/ExpressionFunctions/scalarExpressionFunctions.js +12 -12
  122. package/src/Utilities/Extensions/ArrayExtensions.d.ts +2 -0
  123. package/src/Utilities/Extensions/ArrayExtensions.js +8 -1
  124. package/src/Utilities/Helpers/PreviewHelper.js +5 -2
  125. package/src/Utilities/ObjectFactory.d.ts +19 -22
  126. package/src/Utilities/ObjectFactory.js +51 -60
  127. package/src/Utilities/Services/CellPopupService.d.ts +23 -0
  128. package/src/Utilities/Services/CellPopupService.js +138 -0
  129. package/src/Utilities/Services/Interface/IReportService.d.ts +1 -1
  130. package/src/Utilities/Services/Interface/IThemeService.d.ts +8 -0
  131. package/src/Utilities/Services/ModuleService.js +1 -3
  132. package/src/Utilities/Services/ReportService.d.ts +1 -1
  133. package/src/Utilities/Services/ThemeService.d.ts +3 -0
  134. package/src/Utilities/Services/ThemeService.js +33 -1
  135. package/src/Utilities/Services/ValidationService.js +11 -11
  136. package/src/View/AdaptableView.js +3 -3
  137. package/src/View/AdaptableViewFactory.js +4 -2
  138. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/ColumnsList.js +2 -2
  139. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/EntitlementsForm.js +1 -1
  140. package/src/View/AdaptableWizardView/AdaptableConfigurationDialog/FinanceForm/FinanceForm.js +1 -1
  141. package/src/View/Alert/Wizard/AlertButtonsEditor.js +2 -2
  142. package/src/View/Alert/Wizard/AlertRulesWizardSection.d.ts +1 -1
  143. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +4 -3
  144. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +1 -1
  145. package/src/View/CalculatedColumn/Wizard/CalculatedColumnWizard.js +1 -1
  146. package/src/View/Charting/useChartingElements.js +8 -3
  147. package/src/View/Comments/CommentsEditor.d.ts +7 -0
  148. package/src/View/Comments/CommentsEditor.js +100 -0
  149. package/src/View/Comments/CommentsPopup.d.ts +2 -0
  150. package/src/View/Comments/CommentsPopup.js +87 -0
  151. package/src/View/Components/AdaptableObjectList/AdaptableObjectList.js +2 -1
  152. package/src/View/Components/CellPopup/index.js +1 -1
  153. package/src/View/Components/FilterForm/FilterForm.js +8 -2
  154. package/src/View/Components/FilterForm/ListBoxFilterForm.js +1 -3
  155. package/src/View/Components/FilterForm/QuickFilterForm.js +5 -4
  156. package/src/View/Components/FilterForm/QuickFilterValues.d.ts +2 -2
  157. package/src/View/Components/FilterForm/QuickFilterValues.js +4 -3
  158. package/src/View/Components/Popups/GridCellPopup/GridCellPopup.d.ts +5 -0
  159. package/src/View/Components/Popups/GridCellPopup/GridCellPopup.js +67 -0
  160. package/src/View/Components/Popups/GridCellPopup/index.d.ts +1 -0
  161. package/src/View/Components/Popups/GridCellPopup/index.js +5 -0
  162. package/src/View/Components/Selectors/ColumnSelector.d.ts +1 -0
  163. package/src/View/Components/Selectors/ColumnSelector.js +2 -1
  164. package/src/View/Components/Selectors/PermittedValuesSelector.d.ts +5 -4
  165. package/src/View/Components/Selectors/PermittedValuesSelector.js +25 -3
  166. package/src/View/Components/ToolPanel/ToolPanelWrapper.js +1 -4
  167. package/src/View/Dashboard/ModuleToolbarWrapper.js +1 -1
  168. package/src/View/Dashboard/PinnedDashboard.js +2 -1
  169. package/src/View/DataImport/DataImportWizard/sections/DataPreview.js +2 -2
  170. package/src/View/Export/Wizard/ReportRowsWizardSection.js +3 -1
  171. package/src/View/GridFilter/GridFilterExpressionEditor.js +1 -1
  172. package/src/View/GridFilter/GridFilterPopup.js +10 -8
  173. package/src/View/GridFilter/GridFilterViewPanel.js +14 -11
  174. package/src/View/GridFilter/NamedQuerySelector.js +1 -1
  175. package/src/View/GridFilter/useGridFilterExpressionEditor.d.ts +3 -0
  176. package/src/View/GridFilter/useGridFilterExpressionEditor.js +17 -6
  177. package/src/View/GridFilter/useGridFilterOptionsForExpressionEditor.js +5 -23
  178. package/src/View/GridInfo/GridInfoPopup/GridInfoPopup.js +3 -2
  179. package/src/View/Layout/Wizard/getGridFilterPreview.d.ts +6 -0
  180. package/src/View/Layout/Wizard/getGridFilterPreview.js +16 -0
  181. package/src/View/Layout/Wizard/sections/FilterSection.js +1 -1
  182. package/src/View/Layout/Wizard/sections/GridFilterSection.js +4 -4
  183. package/src/View/NamedQuery/EditCurrentQueryButton.js +1 -1
  184. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  185. package/src/View/Notes/NoteEditor.d.ts +8 -0
  186. package/src/View/Notes/NoteEditor.js +33 -0
  187. package/src/View/Notes/NotesPopup.d.ts +2 -2
  188. package/src/View/Notes/NotesPopup.js +78 -55
  189. package/src/View/PlusMinus/MovePlusMinus.d.ts +7 -0
  190. package/src/View/PlusMinus/MovePlusMinus.js +27 -0
  191. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsSummary.js +0 -9
  192. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsWizard.js +0 -4
  193. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/isSettingsValid.js +2 -8
  194. package/src/View/Schedule/Wizard/ScheduleWizard.js +0 -8
  195. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +3 -1
  196. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +1 -2
  197. package/src/agGrid/Adaptable.d.ts +7 -0
  198. package/src/agGrid/Adaptable.js +49 -35
  199. package/src/agGrid/BadgeRenderer.js +9 -5
  200. package/src/agGrid/agGridHelper.d.ts +2 -1
  201. package/src/agGrid/agGridHelper.js +15 -3
  202. package/src/agGrid/agGridMenuHelper.d.ts +2 -0
  203. package/src/agGrid/agGridMenuHelper.js +73 -25
  204. package/src/components/Datepicker/index.js +4 -4
  205. package/src/components/ExpressionEditor/ExpressionPreview.d.ts +7 -0
  206. package/src/components/ExpressionEditor/ExpressionPreview.js +25 -0
  207. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilder.js +2 -2
  208. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.d.ts +6 -0
  209. package/src/components/ExpressionEditor/QueryBuilder/QueryBuilderInputs.js +40 -11
  210. package/src/components/ExpressionEditor/QueryBuilder/QueryPredicateBuilder.js +14 -2
  211. package/src/components/ExpressionEditor/QueryBuilder/booleanExpressions.js +1 -0
  212. package/src/components/ExpressionEditor/QueryBuilder/utils.js +1 -1
  213. package/src/components/ExpressionEditor/index.js +4 -7
  214. package/src/components/InputGroup/InputGroup.d.ts +7 -0
  215. package/src/components/InputGroup/InputGroup.js +12 -0
  216. package/src/components/InputGroup/index.d.ts +1 -0
  217. package/src/components/InputGroup/index.js +4 -0
  218. package/src/components/OverlayTrigger/index.js +7 -2
  219. package/src/components/Select/Select.d.ts +1 -2
  220. package/src/components/Select/Select.js +63 -23
  221. package/src/components/Toastify/index.d.ts +2 -2
  222. package/src/components/Toastify/index.js +1 -1
  223. package/src/components/icons/comments.d.ts +3 -0
  224. package/src/components/icons/comments.js +7 -0
  225. package/src/components/icons/index.js +3 -1
  226. package/src/env.d.ts +3 -1
  227. package/src/env.js +3 -1
  228. package/src/metamodel/adaptable.metamodel.d.ts +72 -158
  229. package/src/metamodel/adaptable.metamodel.js +128 -260
  230. package/src/parser/src/parser.d.ts +2 -0
  231. package/src/parser/src/parser.js +1880 -705
  232. package/src/parser/src/predicate/mapQlPredicateToExpression.js +5 -2
  233. package/src/parser/src/predicate/types.d.ts +1 -1
  234. package/src/parser/src/types.d.ts +1 -1
  235. package/src/renderReactRoot.js +15 -0
  236. package/src/themes/index.js +4 -0
  237. package/src/types.d.ts +10 -13
  238. package/themes/dark.css +4 -4
  239. package/themes/dark.css.map +1 -1
  240. package/themes/light.css +1 -1
  241. package/themes/light.css.map +1 -1
  242. package/tsconfig.cjs.tsbuildinfo +1 -1
  243. package/src/AdaptableOptions/FinsemblePluginOptions.d.ts +0 -35
  244. package/src/AdaptableOptions/Glue42PluginOptions.d.ts +0 -25
  245. package/src/AdaptableOptions/Glue42WebPluginOptions.d.ts +0 -10
  246. package/src/Api/Events/SelectionChanged.d.ts +0 -16
  247. package/src/Api/FinsembleApi.d.ts +0 -10
  248. package/src/Api/Glue42Api.d.ts +0 -75
  249. package/src/Api/Glue42WebApi.d.ts +0 -10
  250. package/src/PredefinedConfig/Glue42State.d.ts +0 -46
  251. package/src/View/Notes/NotesListing.d.ts +0 -2
  252. package/src/View/Notes/NotesListing.js +0 -88
  253. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsGlue42.d.ts +0 -9
  254. package/src/View/Schedule/Wizard/ScheduleSettingsWizard/ScheduleSettingsGlue42.js +0 -25
  255. package/src/bundle-dependencies/bundles/react-toastify/components/CloseButton.d.ts +0 -9
  256. package/src/bundle-dependencies/bundles/react-toastify/components/Icons.d.ts +0 -24
  257. package/src/bundle-dependencies/bundles/react-toastify/components/ProgressBar.d.ts +0 -59
  258. package/src/bundle-dependencies/bundles/react-toastify/components/Toast.d.ts +0 -3
  259. package/src/bundle-dependencies/bundles/react-toastify/components/ToastContainer.d.ts +0 -3
  260. package/src/bundle-dependencies/bundles/react-toastify/components/Transitions.d.ts +0 -6
  261. package/src/bundle-dependencies/bundles/react-toastify/components/index.d.ts +0 -6
  262. package/src/bundle-dependencies/bundles/react-toastify/core/eventManager.d.ts +0 -39
  263. package/src/bundle-dependencies/bundles/react-toastify/core/index.d.ts +0 -2
  264. package/src/bundle-dependencies/bundles/react-toastify/core/toast.d.ts +0 -41
  265. package/src/bundle-dependencies/bundles/react-toastify/hooks/index.d.ts +0 -2
  266. package/src/bundle-dependencies/bundles/react-toastify/hooks/useToast.d.ts +0 -10
  267. package/src/bundle-dependencies/bundles/react-toastify/hooks/useToastContainer.d.ts +0 -23
  268. package/src/bundle-dependencies/bundles/react-toastify/index.d.ts +0 -5
  269. package/src/bundle-dependencies/bundles/react-toastify/index.js +0 -1
  270. package/src/bundle-dependencies/bundles/react-toastify/inject-style.d.ts +0 -8
  271. package/src/bundle-dependencies/bundles/react-toastify/types/index.d.ts +0 -269
  272. package/src/bundle-dependencies/bundles/react-toastify/utils/collapseToast.d.ts +0 -5
  273. package/src/bundle-dependencies/bundles/react-toastify/utils/constant.d.ts +0 -23
  274. package/src/bundle-dependencies/bundles/react-toastify/utils/cssTransition.d.ts +0 -43
  275. package/src/bundle-dependencies/bundles/react-toastify/utils/index.d.ts +0 -5
  276. package/src/bundle-dependencies/bundles/react-toastify/utils/mapper.d.ts +0 -2
  277. package/src/bundle-dependencies/bundles/react-toastify/utils/propValidator.d.ts +0 -9
  278. /package/src/AdaptableOptions/{FinsemblePluginOptions.js → CommentsOptions.js} +0 -0
  279. /package/src/AdaptableOptions/{Glue42PluginOptions.js → InteropioPluginOptions.js} +0 -0
  280. /package/src/{AdaptableOptions/Glue42WebPluginOptions.js → Api/CommentApi.js} +0 -0
  281. /package/src/Api/Events/{SelectionChanged.js → CalculatedColumnChanged.js} +0 -0
  282. /package/src/Api/{FinsembleApi.js → Events/CellSelectionChanged.js} +0 -0
  283. /package/src/Api/{Glue42Api.js → Events/CommentsChangedInfo.js} +0 -0
  284. /package/src/Api/{Glue42WebApi.js → Events/RowSelectionChanged.js} +0 -0
  285. /package/src/Api/Internal/{ExpressionnternalApi.d.ts → ExpressionInternalApi.d.ts} +0 -0
  286. /package/src/Api/Internal/{ExpressionnternalApi.js → ExpressionInternalApi.js} +0 -0
  287. /package/src/Api/{NotesAPi.js → InteropioPluginApi.js} +0 -0
  288. /package/src/{PredefinedConfig/Glue42State.js → Api/NotesApi.js} +0 -0
@@ -13,11 +13,49 @@ class agGridMenuHelper {
13
13
  constructor(adaptable, gridOptions) {
14
14
  this.adaptable = adaptable;
15
15
  this.gridOptions = gridOptions;
16
+ this.buildGroupedModuleItems = (sortedMenuItems, adaptableMenuItems) => {
17
+ return sortedMenuItems
18
+ .map((moduleOrGroup) => {
19
+ if (typeof moduleOrGroup === 'object') {
20
+ const submenuItems = this.buildGroupedModuleItems(moduleOrGroup.modules, adaptableMenuItems);
21
+ // if there is only one item in the submenu, we don't need to show the submenu
22
+ if (submenuItems.length === 1) {
23
+ return submenuItems[0];
24
+ }
25
+ return {
26
+ label: moduleOrGroup.title,
27
+ icon: moduleOrGroup.icon,
28
+ subItems: submenuItems,
29
+ };
30
+ }
31
+ else {
32
+ return adaptableMenuItems.find((menuItem) => menuItem.module === moduleOrGroup);
33
+ }
34
+ })
35
+ .filter((menuItem) => {
36
+ if (!menuItem) {
37
+ return false;
38
+ }
39
+ if (menuItem.subItems && menuItem.subItems.length === 0) {
40
+ return false;
41
+ }
42
+ return true;
43
+ });
44
+ };
16
45
  }
17
46
  destroy() {
18
47
  this.adaptable = null;
19
48
  this.gridOptions = null;
20
49
  }
50
+ mapAdaptableMenuItemToSystemMenuItems(adaptableMenuItems) {
51
+ return (adaptableMenuItems !== null && adaptableMenuItems !== void 0 ? adaptableMenuItems : []).map((menuItem) => {
52
+ let subItems = menuItem.subItems;
53
+ if (subItems && subItems.length > 0) {
54
+ subItems = subItems.map((subItem) => this.mapAdaptableMenuItemToSystemMenuItems(subItem.subItems));
55
+ }
56
+ return Object.assign(Object.assign({}, menuItem), { menuType: 'Adaptable', subItems });
57
+ });
58
+ }
21
59
  buildColumnMenu(params, originalGetMainMenuItems) {
22
60
  var _a;
23
61
  const menuOptions = this.adaptable.adaptableOptions.menuOptions;
@@ -31,11 +69,7 @@ class agGridMenuHelper {
31
69
  const menuContext = this.createColumnMenuContextObject(adaptableColumn, params.column);
32
70
  const adaptableMenuItems = this.createAdaptableColumnMenuItems(menuContext);
33
71
  // sort Adaptable menu items by default order
34
- adaptableMenuItems.sort((first, second) => {
35
- const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER.indexOf(first.module);
36
- const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER.indexOf(second.module);
37
- return firstPriority - secondPriority;
38
- });
72
+ const structuredAdaptableMenuItems = this.buildGroupedModuleItems(MenuOptions_1.DEFAULT_ADAPTABLE_COLUMN_MENU_ORDER, adaptableMenuItems);
39
73
  // 1. first check if there is a custom column menu defined
40
74
  if (typeof menuOptions.customColumnMenu === 'function') {
41
75
  const defaultAgGridMenuItems = agGridMenuItems.map((itemName) => ({
@@ -45,7 +79,7 @@ class agGridMenuHelper {
45
79
  const defaultAdaptableMenuItems = adaptableMenuItems.map((adaptableItem) => (Object.assign({ menuType: 'Adaptable' }, adaptableItem)));
46
80
  const customMenuItems = menuOptions
47
81
  .customColumnMenu(Object.assign(Object.assign({}, menuContext), { defaultAgGridMenuItems,
48
- defaultAdaptableMenuItems }))
82
+ defaultAdaptableMenuItems, structuredAdaptableMenuItems: this.mapAdaptableMenuItemToSystemMenuItems(structuredAdaptableMenuItems) }))
49
83
  .filter(Boolean);
50
84
  return customMenuItems
51
85
  .map((customMenuItem) => this.mapCustomMenuItemToAgGridMenuDefinition(customMenuItem, menuContext))
@@ -58,7 +92,7 @@ class agGridMenuHelper {
58
92
  const defaultContextMenu = [
59
93
  ...agGridMenuItems,
60
94
  'separator',
61
- ...adaptableMenuItems.map((adaptableItem) => this.mapAdaptableMenuItemToAgGridMenuDefinition(adaptableItem)),
95
+ ...structuredAdaptableMenuItems.map((adaptableItem) => this.mapAdaptableMenuItemToAgGridMenuDefinition(adaptableItem)),
62
96
  ];
63
97
  return defaultContextMenu;
64
98
  }
@@ -78,11 +112,7 @@ class agGridMenuHelper {
78
112
  const menuContext = this.createContextMenuContextObject(params, adaptableColumn);
79
113
  const adaptableMenuItems = this.createAdaptableContextMenuItems(menuContext);
80
114
  // sort Adaptable menu items by default order
81
- adaptableMenuItems.sort((first, second) => {
82
- const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(first.module);
83
- const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(second.module);
84
- return firstPriority - secondPriority;
85
- });
115
+ const structuredAdaptableMenuItems = this.buildGroupedModuleItems(MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE, adaptableMenuItems);
86
116
  // 1. first check if there is a custom context menu defined
87
117
  if (typeof menuOptions.customContextMenu === 'function') {
88
118
  const defaultAgGridMenuItems = agGridMenuItems.map((itemName) => ({
@@ -92,7 +122,7 @@ class agGridMenuHelper {
92
122
  const defaultAdaptableMenuItems = adaptableMenuItems.map((adaptableItem) => (Object.assign({ menuType: 'Adaptable' }, adaptableItem)));
93
123
  const customMenuItems = menuOptions
94
124
  .customContextMenu(Object.assign(Object.assign({}, menuContext), { defaultAgGridMenuItems,
95
- defaultAdaptableMenuItems }))
125
+ defaultAdaptableMenuItems, structuredAdaptableMenuItems: this.mapAdaptableMenuItemToSystemMenuItems(structuredAdaptableMenuItems) }))
96
126
  .filter(Boolean);
97
127
  return customMenuItems
98
128
  .map((customMenuItem) => this.mapCustomMenuItemToAgGridMenuDefinition(customMenuItem, menuContext))
@@ -105,7 +135,7 @@ class agGridMenuHelper {
105
135
  const defaultContextMenu = [
106
136
  ...agGridMenuItems,
107
137
  'separator',
108
- ...adaptableMenuItems.map((adaptableItem) => this.mapAdaptableMenuItemToAgGridMenuDefinition(adaptableItem)),
138
+ ...structuredAdaptableMenuItems.map((adaptableItem) => this.mapAdaptableMenuItemToAgGridMenuDefinition(adaptableItem)),
109
139
  ];
110
140
  return defaultContextMenu;
111
141
  }
@@ -346,12 +376,30 @@ class agGridMenuHelper {
346
376
  let isSingleSelectedColumn = false;
347
377
  let isSelectedCell = false;
348
378
  let isSelectedRow = false;
349
- let clickedCell = undefined;
350
- if (adaptableColumn) {
351
- clickedCell = this.adaptable.getGridCellFromRowNode(params.node, adaptableColumn.columnId);
379
+ // row group columns dont provide an AdapTable Column so return bare minimum
380
+ if (!adaptableColumn) {
381
+ return {
382
+ isSelectedCell: false,
383
+ isSelectedRow: false,
384
+ gridCell: undefined,
385
+ adaptableColumn: undefined,
386
+ agGridColumn: params.column,
387
+ rowNode: params.node,
388
+ isGroupedNode: params.node ? params.node.group : false,
389
+ isSingleSelectedColumn: false,
390
+ isSingleSelectedCell: false,
391
+ primaryKeyValue: undefined,
392
+ adaptableApi: this.adaptable.api,
393
+ userName: this.adaptable.adaptableOptions.userName,
394
+ adaptableId: this.adaptable.adaptableOptions.adaptableId,
395
+ selectedCellInfo: undefined,
396
+ selectedRowInfo: undefined,
397
+ isRowGroupColumn: this.adaptable.api.columnApi.isAutoRowGroupColumn(params.column.getColId()),
398
+ };
352
399
  }
353
- let selectedCellInfo = this.adaptable.api.gridApi.getSelectedCellInfo();
354
- if (clickedCell && selectedCellInfo) {
400
+ const clickedCell = this.adaptable.getGridCellFromRowNode(params.node, adaptableColumn.columnId);
401
+ const selectedCellInfo = this.adaptable.api.gridApi.getSelectedCellInfo();
402
+ if (selectedCellInfo) {
355
403
  let matchedCell = selectedCellInfo.gridCells.find((gc) => gc != null &&
356
404
  gc.column == clickedCell.column &&
357
405
  gc.primaryKeyValue == clickedCell.primaryKeyValue);
@@ -360,9 +408,9 @@ class agGridMenuHelper {
360
408
  isSingleSelectedColumn = ArrayExtensions_1.ArrayExtensions.CorrectLength(selectedCellInfo.columns, 1);
361
409
  }
362
410
  }
363
- let selectedRowInfo = this.adaptable.api.gridApi.getSelectedRowInfo();
411
+ const selectedRowInfo = this.adaptable.api.gridApi.getSelectedRowInfo();
364
412
  if (selectedRowInfo) {
365
- let matchedPKValue = selectedRowInfo.gridRows.find((gr) => gr != null && gr.primaryKeyValue == clickedCell.primaryKeyValue);
413
+ const matchedPKValue = selectedRowInfo.gridRows.find((gr) => gr != null && gr.primaryKeyValue == clickedCell.primaryKeyValue);
366
414
  isSelectedRow = matchedPKValue != null;
367
415
  }
368
416
  return {
@@ -395,8 +443,8 @@ class agGridMenuHelper {
395
443
  }
396
444
  createAdaptableContextMenuItems(menuContext) {
397
445
  let contextMenuItems = [];
398
- this.adaptable.adaptableModules.forEach((s) => {
399
- let menuItems = s.addContextMenuItems(menuContext);
446
+ this.adaptable.adaptableModules.forEach((module) => {
447
+ let menuItems = module.addContextMenuItems(menuContext);
400
448
  if (menuItems) {
401
449
  contextMenuItems.push(...menuItems.filter(Boolean).filter((item) => item.isVisible !== false));
402
450
  }
@@ -537,8 +585,8 @@ class agGridMenuHelper {
537
585
  adaptableMenuItems.push(...allAdaptableMenuItems);
538
586
  }
539
587
  adaptableMenuItems.sort((first, second) => {
540
- const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(first.module);
541
- const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_ORDER.indexOf(second.module);
588
+ const firstPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE.indexOf(first.module);
589
+ const secondPriority = MenuOptions_1.DEFAULT_ADAPTABLE_CONTEXT_MENU_STRUCTURE.indexOf(second.module);
542
590
  return firstPriority - secondPriority;
543
591
  });
544
592
  // }
@@ -17,13 +17,13 @@ const DatepickerContext_1 = require("./DatepickerContext");
17
17
  const addDays_1 = tslib_1.__importDefault(require("date-fns/addDays"));
18
18
  const addBusinessDays_1 = tslib_1.__importDefault(require("date-fns/addBusinessDays"));
19
19
  const react_day_picker_1 = require("react-day-picker");
20
- const DatepickerOverlay = ({ onHide, children, onKeyDown, }) => {
20
+ const DatepickerOverlay = ({ onHide, children, onKeyDown, onMouseDown, }) => {
21
21
  const domRef = React.useRef(null);
22
22
  React.useEffect(() => {
23
23
  var _a;
24
24
  (_a = domRef.current) === null || _a === void 0 ? void 0 : _a.focus();
25
25
  }, []);
26
- return (React.createElement("div", { className: "ab-Datepicker-Overlay", ref: domRef, tabIndex: -1, onKeyDown: onKeyDown, onBlur: (e) => {
26
+ return (React.createElement("div", { className: "ab-Datepicker-Overlay", ref: domRef, tabIndex: -1, onKeyDown: onKeyDown, onMouseDown: onMouseDown, onBlur: (e) => {
27
27
  var _a;
28
28
  const { relatedTarget } = e;
29
29
  const node = domRef.current;
@@ -87,7 +87,7 @@ exports.Datepicker = React.forwardRef((props, ref) => {
87
87
  }, accessLevel: 'Full' })) : null;
88
88
  const calendarButton = (React.createElement(SimpleButton_1.default, { disabled: disabled, variant: "text", icon: "calendar", tooltip: "Date", iconSize: 20, px: 0, py: 0, onClick: () => setVisible(true) }));
89
89
  return (React.createElement(rebass_1.Flex, null,
90
- React.createElement(OverlayTrigger_1.default, { visible: visible, render: () => (React.createElement(DatepickerOverlay, { onHide: () => setVisible(false), onKeyDown: (e) => {
90
+ React.createElement(OverlayTrigger_1.default, { visible: visible, render: () => (React.createElement(DatepickerOverlay, { onMouseDown: props.onMouseDown, onHide: () => setVisible(false), onKeyDown: (e) => {
91
91
  if (e.key === 'Escape' || e.key === 'Enter') {
92
92
  setVisible(false, e.key);
93
93
  }
@@ -97,7 +97,7 @@ exports.Datepicker = React.forwardRef((props, ref) => {
97
97
  borderRadius: style === null || style === void 0 ? void 0 : style.borderRadius,
98
98
  width: style === null || style === void 0 ? void 0 : style.width,
99
99
  maxWidth: style === null || style === void 0 ? void 0 : style.maxWidth,
100
- }, onFocus: () => {
100
+ }, className: "ab-Datepicker", onFocus: () => {
101
101
  if (!visible) {
102
102
  setVisible(true);
103
103
  }
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import { AdaptableQuery } from '../../types';
3
+ interface ExpressionPreviewProps {
4
+ query: AdaptableQuery;
5
+ }
6
+ export declare const ExpressionPreview: React.FunctionComponent<ExpressionPreviewProps>;
7
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpressionPreview = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const AdaptableContext_1 = require("../../View/AdaptableContext");
7
+ const ExpressionPreview = (props) => {
8
+ var _a;
9
+ const adaptable = (0, AdaptableContext_1.useAdaptable)();
10
+ const displayColumnFriendlyNames = (_a = adaptable.api.optionsApi.getExpressionOptions()) === null || _a === void 0 ? void 0 : _a.displayColumnFriendlyNamesForExpressions;
11
+ if (!displayColumnFriendlyNames) {
12
+ return React.createElement(React.Fragment, null, adaptable.api.expressionApi.getAdaptableQueryExpression(props.query));
13
+ }
14
+ const expressionWithFriendlyNames = adaptable.api.expressionApi.getAdaptableQueryExpressionWithColumnFriendlyNames(props.query);
15
+ // '[Column Name] > 2' => ['[Column Name]', '>', '2']
16
+ // not the prettiest
17
+ const strWithMarkedGroupes = expressionWithFriendlyNames.replace(/\]/gi, '],').split(',');
18
+ return (React.createElement(React.Fragment, null, strWithMarkedGroupes.map((part, index) => {
19
+ const partEl = part.includes('[') ? React.createElement("i", null, part.replace(/[\[\]]/g, '')) : part;
20
+ return React.createElement(React.Fragment, { key: index },
21
+ "\u00A0",
22
+ partEl);
23
+ })));
24
+ };
25
+ exports.ExpressionPreview = ExpressionPreview;
@@ -110,9 +110,9 @@ const QueryBuilder = (props) => {
110
110
  } },
111
111
  React.createElement(QueryBuilderContext.Provider, { value: context },
112
112
  React.createElement(rebass_1.Box, { className: QUERY_BUILDER_CLASSNAME },
113
- React.createElement(HelpBlock_1.default, { mt: 2, mb: 2, p: 2, fontSize: 3 }, "Build the Grid Filter by adding Column Conditions and AND / OR Groups as required"),
113
+ React.createElement(HelpBlock_1.default, { "data-name": "query-builder-help", mt: 2, mb: 2, p: 2, fontSize: 3 }, "Build the Grid Filter by adding Column Conditions and AND / OR Groups as required"),
114
114
  errorOrEditor,
115
- React.createElement(Panel_1.default, { variant: "default", header: "AdapTableQL Expression", mt: 3 },
115
+ React.createElement(Panel_1.default, { "data-name": "query-builder-expression-preview", variant: "default", header: "AdapTableQL Expression", mt: 3 },
116
116
  React.createElement(rebass_1.Box, { className: `${QUERY_BUILDER_CLASSNAME}__expression`, minHeight: 48, my: 2, p: 3 }, expressionStr || 'Outputted Expression will display here'))))));
117
117
  };
118
118
  exports.QueryBuilder = QueryBuilder;
@@ -17,6 +17,12 @@ export declare const PrimiteValueInput: (props: {
17
17
  */
18
18
  lefthandColumnIdParam: string;
19
19
  }) => JSX.Element;
20
+ export declare const PrimitiveMultiValueInput: (props: {
21
+ inputType: ExpressionFunctionInputType;
22
+ value: any[];
23
+ onChange(values: any[]): void;
24
+ lefthandColumnIdParam: string;
25
+ }) => JSX.Element;
20
26
  export declare const ExpressionSelector: (props: {
21
27
  value: BooleanFunctionName;
22
28
  dataType: AdaptableColumn['dataType'];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CombinatorSelector = exports.ExpressionSelector = exports.PrimiteValueInput = exports.PrimitiveColumnSelector = void 0;
3
+ exports.CombinatorSelector = exports.ExpressionSelector = exports.PrimitiveMultiValueInput = exports.PrimiteValueInput = exports.PrimitiveColumnSelector = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
6
  const rebass_1 = require("rebass");
@@ -11,6 +11,7 @@ const PermittedValuesSelector_1 = require("../../../View/Components/Selectors/Pe
11
11
  const CheckBox_1 = require("../../CheckBox");
12
12
  const DropdownButton_1 = tslib_1.__importDefault(require("../../DropdownButton"));
13
13
  const icons_1 = require("../../icons");
14
+ const InputGroup_1 = require("../../InputGroup");
14
15
  const Select_1 = require("../../Select");
15
16
  const QueryBuilder_1 = require("./QueryBuilder");
16
17
  const utils_1 = require("./utils");
@@ -85,37 +86,65 @@ const PrimiteValueInput = (props) => {
85
86
  }
86
87
  const options = [
87
88
  {
88
- label: 'Column',
89
+ label: (react_1.default.createElement(rebass_1.Flex, null,
90
+ react_1.default.createElement(icons_1.Icon, { name: "columns" }),
91
+ react_1.default.createElement(rebass_1.Text, { ml: 2 }, "Column"))),
89
92
  icon: 'columns',
90
93
  value: 'column-name',
91
94
  },
92
95
  {
93
- label: 'Value',
96
+ label: (react_1.default.createElement(rebass_1.Flex, null,
97
+ react_1.default.createElement(icons_1.Icon, { name: "edit" }),
98
+ react_1.default.createElement(rebass_1.Text, { ml: 2 }, "Value"))),
94
99
  icon: 'edit',
95
100
  value: 'input-value',
96
101
  },
97
102
  ];
98
103
  const typeOption = options.find((option) => option.value === type);
99
- return (react_1.default.createElement(rebass_1.Flex, { "data-id": "query-input-wrapper", mr: 2 },
100
- react_1.default.createElement(rebass_1.Flex, null,
101
- react_1.default.createElement(Select_1.Select, { rederSingleValue: (value) => {
102
- return (react_1.default.createElement(react_1.default.Fragment, null, typeOption.value === 'column-name' ? react_1.default.createElement(icons_1.Icon, { name: "grid" }) : react_1.default.createElement(icons_1.Icon, { name: "edit" })));
103
- }, variant: "raised", value: typeOption.value, options: options, onChange: (value) => handleTypeChange(value) })),
104
+ return (react_1.default.createElement(InputGroup_1.InputGroup, { Component: rebass_1.Flex, "data-id": "query-input-wrapper", mr: 2 },
105
+ react_1.default.createElement(Select_1.Select, { renderSingleValue: (value) => {
106
+ return (react_1.default.createElement(react_1.default.Fragment, null, typeOption.value === 'column-name' ? react_1.default.createElement(icons_1.Icon, { name: "grid" }) : react_1.default.createElement(icons_1.Icon, { name: "edit" })));
107
+ }, value: typeOption.value, options: options, onChange: (value) => handleTypeChange(value) }),
104
108
  editor));
105
109
  };
106
110
  exports.PrimiteValueInput = PrimiteValueInput;
111
+ const PrimitiveMultiValueInput = (props) => {
112
+ return (react_1.default.createElement(PermittedValuesSelector_1.PermittedValuesSelector, { isMulti: true, allowNewValues: true, value: props.value, columnId: props.lefthandColumnIdParam, onChange: (value) => {
113
+ props.onChange(value);
114
+ } }));
115
+ };
116
+ exports.PrimitiveMultiValueInput = PrimitiveMultiValueInput;
117
+ const SymbolToIcon = (props) => {
118
+ switch (props.symbol) {
119
+ case '=':
120
+ return react_1.default.createElement(icons_1.Icon, { name: "equals" });
121
+ case '!=':
122
+ return react_1.default.createElement(icons_1.Icon, { name: "not-equal" });
123
+ case '>':
124
+ return react_1.default.createElement(icons_1.Icon, { name: "greater-than" });
125
+ case '>=':
126
+ return react_1.default.createElement(icons_1.Icon, { name: "greater-than-or-equal" });
127
+ case '<':
128
+ return react_1.default.createElement(icons_1.Icon, { name: "less-than" });
129
+ case '<=':
130
+ return react_1.default.createElement(icons_1.Icon, { name: "less-than-or-equal" });
131
+ default:
132
+ return react_1.default.createElement(react_1.default.Fragment, null, props.symbol);
133
+ }
134
+ };
107
135
  const ExpressionSelector = (props) => {
108
136
  var _a;
109
137
  const { getExpressions } = (0, QueryBuilder_1.useQueryBuilderContext)();
110
138
  const expressions = props.dataType ? getExpressions(props.dataType) : [];
111
- return (react_1.default.createElement(DropdownButton_1.default, { "data-id": "expression-selector", "data-value": props.value, variant: "raised", columns: ['label'], items: expressions.map((expression) => ({
112
- label: (0, mapQlPredicateToExpression_1.getQlPredicateSymbol)(expression),
139
+ return (react_1.default.createElement(DropdownButton_1.default, { "data-id": "expression-selector", "data-value": props.value, variant: "raised", tone: 'accent', columns: ['label'], items: expressions.map((expression) => ({
140
+ label: react_1.default.createElement(SymbolToIcon, { symbol: (0, mapQlPredicateToExpression_1.getQlPredicateSymbol)(expression) }),
113
141
  onClick: () => {
114
142
  if (expression !== props.value) {
115
143
  props.onExpressionChange(expression);
116
144
  }
117
145
  },
118
- })) }, (_a = (0, mapQlPredicateToExpression_1.getQlPredicateSymbol)(props.value)) !== null && _a !== void 0 ? _a : 'Select Operator'));
146
+ })) },
147
+ react_1.default.createElement(SymbolToIcon, { symbol: (_a = (0, mapQlPredicateToExpression_1.getQlPredicateSymbol)(props.value)) !== null && _a !== void 0 ? _a : 'Select Operator' })));
119
148
  };
120
149
  exports.ExpressionSelector = ExpressionSelector;
121
150
  const CombinatorSelector = (props) => {
@@ -145,12 +145,24 @@ const PrimitiveFunctionEditor = (props) => {
145
145
  }, value: props.predicate.operator })),
146
146
  react_1.default.createElement(rebass_1.Flex, { flex: 1, ml: 2 }, restOfFunctionInputDataTypes.map((type, index) => {
147
147
  var _a;
148
- return (react_1.default.createElement(QueryBuilderInputs_1.PrimiteValueInput, { key: type + index, inputType: type, lefthandColumnIdParam: columnId, value: (_a = restOfArgs[index]) !== null && _a !== void 0 ? _a : null, onChange: (value) => {
148
+ let value = restOfArgs[index];
149
+ const commonProps = {
150
+ key: type + index,
151
+ lefthandColumnIdParam: columnId,
152
+ inputType: type,
153
+ };
154
+ if (type.includes('[]')) {
155
+ return (react_1.default.createElement(QueryBuilderInputs_1.PrimitiveMultiValueInput, Object.assign({}, commonProps, { value: restOfArgs, onChange: (values) => {
156
+ const args = [...props.predicate.args.slice(0, 1), ...values];
157
+ props.onChange(Object.assign(Object.assign({}, props.predicate), { args }));
158
+ } })));
159
+ }
160
+ return (react_1.default.createElement(QueryBuilderInputs_1.PrimiteValueInput, Object.assign({}, commonProps, { value: (_a = restOfArgs[index]) !== null && _a !== void 0 ? _a : null, onChange: (value) => {
149
161
  const args = [...props.predicate.args];
150
162
  // +1 because col is the first argument
151
163
  args[index + 1] = value;
152
164
  props.onChange(Object.assign(Object.assign({}, props.predicate), { args }));
153
- } }));
165
+ } })));
154
166
  }))),
155
167
  react_1.default.createElement(rebass_1.Box, { flex: 1 }),
156
168
  react_1.default.createElement(QueryPredicateButtons, Object.assign({}, props))));
@@ -14,4 +14,5 @@ exports.booleanExpressionsAvailableInQueryBuilder = [
14
14
  'ENDS_WITH',
15
15
  'IS_HOLIDAY',
16
16
  'IS_WORKDAY',
17
+ 'IN',
17
18
  ];
@@ -80,7 +80,7 @@ const getFunctionsForColumnType = (dataType, availableBooleanFunctions) => {
80
80
  const functionDef = booleanExpressionFunctions_1.booleanExpressionFunctions[boolFnName];
81
81
  const inputs = functionDef.inputs;
82
82
  let matchingInputTypes = [];
83
- if (Array.isArray(inputs[0])) {
83
+ if (inputs && Array.isArray(inputs[0])) {
84
84
  matchingInputTypes = inputs.find((input) => input[0] === columnType);
85
85
  }
86
86
  else {
@@ -32,6 +32,7 @@ function ExpressionEditor(props) {
32
32
  const { type, module } = props;
33
33
  const [data, setData] = (0, react_1.useState)(props.initialData);
34
34
  const [showColumnIds, setShowColumnIds] = (0, react_1.useState)(false);
35
+ const [inlineQuery, setInlineQuery] = (0, react_1.useState)(false);
35
36
  const [showNamedQueries, setShowNamedQueries] = (0, react_1.useState)(false);
36
37
  const baseClassName = `ab-ExpressionEditor`;
37
38
  const [selectedFunction, setSelectedFunction] = (0, react_1.useState)(null);
@@ -97,12 +98,8 @@ function ExpressionEditor(props) {
97
98
  setData(updateColValue(data, column, new Date(e.target.value)));
98
99
  }, style: { width: '100%' }, disabled: column.readOnly })) : column.dataType === 'Boolean' ? (React.createElement(CheckBox_1.CheckBox, { "data-name": "column-input", "data-value": column.columnId, checked: getColValue(column), onChange: (checked) => setData(updateColValue(data, column, checked)), disabled: column.readOnly })) : null))))));
99
100
  const namedQueries = (React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start", style: { marginTop: 2 } },
100
- React.createElement(CheckBox_1.CheckBox, { checked: showColumnIds, onChange: (checked) => setShowColumnIds(checked), style: {
101
- float: 'right',
102
- margin: 0,
103
- paddingTop: 'var(--ab-space-1)',
104
- paddingBottom: 'var(--ab-space-1)',
105
- } }, 'Show Column IDs'),
101
+ React.createElement(CheckBox_1.CheckBox, { checked: showColumnIds, onChange: (checked) => setShowColumnIds(checked) }, "Show Column IDs"),
102
+ React.createElement(CheckBox_1.CheckBox, { checked: inlineQuery, onChange: (checked) => setInlineQuery(checked) }, "Inline Query"),
106
103
  props.namedQueries.map((namedQuery) => (React.createElement(rebass_1.Flex, { key: namedQuery.Uuid, flexDirection: "column", alignItems: "start", style: {
107
104
  padding: 3,
108
105
  marginTop: 'var(--ab-space-2)',
@@ -113,7 +110,7 @@ function ExpressionEditor(props) {
113
110
  React.createElement(EditorButton_1.default, { width: "100%", height: "100%", style: {
114
111
  background: 'var(--ab-color-primary)',
115
112
  cursor: 'grab',
116
- }, data: `QUERY("${namedQuery.Name}")`, "data-name": "column", icon: "drag" },
113
+ }, data: inlineQuery ? namedQuery.BooleanExpression : `QUERY("${namedQuery.Name}")`, "data-name": "column", icon: "drag" },
117
114
  React.createElement(rebass_1.Flex, { flexDirection: "column", alignItems: "start" }, namedQuery.Name)),
118
115
  React.createElement(rebass_1.Flex, { alignItems: "start", style: {
119
116
  padding: 5,
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ type InputGroupProps<T extends React.ComponentType<any>> = {
3
+ Component?: T;
4
+ children: React.ReactNode;
5
+ } & React.ComponentProps<T>;
6
+ export declare const InputGroup: <T extends React.ComponentType<any>>({ Component, children, ...rest }: InputGroupProps<T>) => JSX.Element;
7
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InputGroup = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const InputGroup = (_a) => {
7
+ var _b;
8
+ var { Component = 'div', children } = _a, rest = tslib_1.__rest(_a, ["Component", "children"]);
9
+ const Comp = Component;
10
+ return (React.createElement(Comp, Object.assign({}, rest, { className: `ab-cmp-input-group ${(_b = rest.className) !== null && _b !== void 0 ? _b : ''}` }), children));
11
+ };
12
+ exports.InputGroup = InputGroup;
@@ -0,0 +1 @@
1
+ export * from './InputGroup';
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./InputGroup"), exports);
@@ -4,6 +4,7 @@ exports.getConstrainRect = exports.getConstrainElement = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
+ const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
7
8
  const batchUpdate_1 = tslib_1.__importDefault(require("../utils/batchUpdate"));
8
9
  const selectParent_1 = tslib_1.__importDefault(require("../utils/selectParent"));
9
10
  const useProperty_1 = tslib_1.__importDefault(require("../utils/useProperty"));
@@ -72,7 +73,11 @@ const OverlayTrigger = React.forwardRef((props, ref) => {
72
73
  const overlayRef = (0, react_1.useRef)(null);
73
74
  const [visible, doSetVisible] = (0, useProperty_1.default)(props, 'visible', false);
74
75
  const hideTimeoutRef = (0, react_1.useRef)(null);
75
- const setVisible = React.useCallback((visible) => {
76
+ const setVisible = React.useCallback(
77
+ // visible state may quickly change from true -> false -> true
78
+ // when moving the mouse cursor from the trigger to the overlay
79
+ // for this case we debounce the visible change for a very small amount of time
80
+ (0, debounce_1.default)((visible) => {
76
81
  onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(visible);
77
82
  if (!visible) {
78
83
  hideTimeoutRef.current = setTimeout(() => {
@@ -86,7 +91,7 @@ const OverlayTrigger = React.forwardRef((props, ref) => {
86
91
  hideTimeoutRef.current = null;
87
92
  }
88
93
  doSetVisible(true);
89
- }, []);
94
+ }, 50), []);
90
95
  const prevVisible = (0, usePrevious_1.default)(visible, false);
91
96
  ensurePortalElement();
92
97
  const onShow = React.useCallback((event) => {
@@ -17,14 +17,13 @@ export type SelectProps<SelectValue extends unknown, IsMulti extends boolean = f
17
17
  placeholder?: string;
18
18
  'data-name'?: string;
19
19
  'data-id'?: string;
20
- rederSingleValue?: (option: SelectOption<SelectValue>) => React.ReactNode;
20
+ renderSingleValue?: (option: SelectOption<SelectValue>) => React.ReactNode;
21
21
  className?: string;
22
22
  isLoding?: boolean;
23
23
  onFocus?: () => void;
24
24
  accessLevel?: AccessLevel;
25
25
  style?: React.CSSProperties;
26
26
  onInputChange?: (value: string) => void;
27
- variant?: 'default' | 'raised';
28
27
  size?: 'small' | 'normal';
29
28
  isCreatable?: boolean;
30
29
  };