@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
@@ -30,8 +30,7 @@ const PermittedValuesSelector = function (props) {
30
30
  })();
31
31
  }, [props.columnId, filter]);
32
32
  const isCreatable = props.allowNewValues && ['String', 'Number'].includes(columnType);
33
- const handleOnChange = (value) => {
34
- // convert numbers
33
+ const handleSingleValueChange = (value) => {
35
34
  if (isCreatable) {
36
35
  if (columnType === 'Number') {
37
36
  let num = parseFloat(value);
@@ -46,6 +45,29 @@ const PermittedValuesSelector = function (props) {
46
45
  props.onChange(value);
47
46
  }
48
47
  };
49
- return (React.createElement(Select_1.Select, { className: props.className, disabled: props.disabled, "data-name": "permitted-values-selector", placeholder: props.placeholder || (props.allowNewValues ? 'Select or type new value' : 'Select value'), isCreatable: isCreatable, isClearable: true, options: options, isLoding: isLoading, onInputChange: setFilter, onChange: handleOnChange, value: props.value }));
48
+ const handleMultiValueChange = (values) => {
49
+ if (isCreatable) {
50
+ if (columnType === 'Number') {
51
+ const nums = values.map((v) => parseFloat(v)).filter((v) => !isNaN(v));
52
+ props.onChange(nums);
53
+ }
54
+ else {
55
+ props.onChange(values);
56
+ }
57
+ }
58
+ else {
59
+ props.onChange(values);
60
+ }
61
+ };
62
+ const handleOnChange = (value) => {
63
+ // convert numbers
64
+ if (props.isMulti) {
65
+ handleMultiValueChange(value);
66
+ }
67
+ else {
68
+ handleSingleValueChange(value);
69
+ }
70
+ };
71
+ return (React.createElement(Select_1.Select, { isMulti: props.isMulti, className: props.className, disabled: props.disabled, "data-name": "permitted-values-selector", placeholder: props.placeholder || (props.allowNewValues ? 'Select or type new value' : 'Select value'), isCreatable: isCreatable, isClearable: true, options: options, isLoding: isLoading, onInputChange: setFilter, onChange: handleOnChange, value: props.value }));
50
72
  };
51
73
  exports.PermittedValuesSelector = PermittedValuesSelector;
@@ -44,10 +44,7 @@ const ToolPanelWrapper = (props) => {
44
44
  const isMinimised = visibilityMode === 'collapsed';
45
45
  const isConfigurable =
46
46
  // only module toolPanels are configurable
47
- !!moduleInfo &&
48
- toolPanelName !== 'OpenFin' &&
49
- toolPanelName !== 'IPushPull' &&
50
- toolPanelName !== 'Glue42';
47
+ !!moduleInfo && toolPanelName !== 'OpenFin' && toolPanelName !== 'IPushPull';
51
48
  const isToolPanelModuleConfigurable = api.internalApi
52
49
  .getModuleService()
53
50
  .getModuleById(ModuleConstants_1.ToolPanelModuleId)
@@ -11,7 +11,7 @@ const ModuleToolbarWrapper = (props) => {
11
11
  const moduleName = props.moduleInfo.ModuleName;
12
12
  const moduleFriendlyName = props.moduleInfo.FriendlyName;
13
13
  const { api } = (0, AdaptableContext_1.useAdaptable)();
14
- const isConfigurable = moduleName !== 'OpenFin' && moduleName !== 'IPushPull' && moduleName !== 'Glue42';
14
+ const isConfigurable = moduleName !== 'OpenFin' && moduleName !== 'IPushPull';
15
15
  return (React.createElement(PanelDashboard_1.PanelDashboard, { className: `ab-DashboardToolbar__${moduleName}`, "data-name": `ab-DashboardToolbar__${moduleName}`, headerText: moduleFriendlyName, showConfigureButton: isConfigurable, onConfigure: () => {
16
16
  const maxWidth = api.internalApi.getModuleService().getPopupMaxWidth(moduleName);
17
17
  const popupParams = maxWidth
@@ -11,7 +11,8 @@ const PinnedDashboard = (props) => {
11
11
  var _a;
12
12
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
13
13
  const dashboardState = (0, react_redux_1.useSelector)((state) => state.Dashboard);
14
- const pinnedToolbars = ((_a = dashboardState.PinnedToolbars) !== null && _a !== void 0 ? _a : []).filter((tb) => adaptable.api.internalApi.getModuleService().isModuleAvailable(tb));
14
+ const pinnedToolbars = ((_a = dashboardState.PinnedToolbars) !== null && _a !== void 0 ? _a : []).filter((tb) => adaptable.api.dashboardApi.internalApi.isToolbarCustom(tb) ||
15
+ adaptable.api.internalApi.getModuleService().isModuleAvailable(tb));
15
16
  if (!pinnedToolbars || pinnedToolbars.length == 0) {
16
17
  return React.createElement(React.Fragment, null);
17
18
  }
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataPreview = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const lodash_1 = require("lodash");
5
+ const flatten_1 = tslib_1.__importDefault(require("lodash/flatten"));
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const HelpBlock_1 = tslib_1.__importDefault(require("../../../../components/HelpBlock"));
8
8
  const icons_1 = require("../../../../components/icons");
@@ -130,7 +130,7 @@ const DataPreview = (props) => {
130
130
  };
131
131
  return (React.createElement(InfiniteTable_1.DataSource, { data: props.data, primaryKey: primaryKey, onDataMutations: (params) => {
132
132
  const newRowData = [...props.data];
133
- const mutationsList = (0, lodash_1.flatten)(Array.from(params.mutations.values()));
133
+ const mutationsList = (0, flatten_1.default)(Array.from(params.mutations.values()));
134
134
  if (!mutationsList.length) {
135
135
  return;
136
136
  }
@@ -6,6 +6,7 @@ const React = tslib_1.__importStar(require("react"));
6
6
  const react_1 = require("react");
7
7
  const rebass_1 = require("rebass");
8
8
  const ExpressionEditor_1 = require("../../../components/ExpressionEditor");
9
+ const ExpressionPreview_1 = require("../../../components/ExpressionEditor/ExpressionPreview");
9
10
  const Radio_1 = tslib_1.__importDefault(require("../../../components/Radio"));
10
11
  const Tabs_1 = require("../../../components/Tabs");
11
12
  const Tag_1 = require("../../../components/Tag");
@@ -32,7 +33,8 @@ const renderReportRowsSummary = (report) => {
32
33
  report.ReportRowScope === 'ExpressionRows' ? (React.createElement(React.Fragment, null,
33
34
  "Include Rows matching the query:",
34
35
  ' ',
35
- React.createElement(Tag_1.Tag, null, api.internalApi.getAdaptableQueryExpressionText(report.Query)))) : null));
36
+ React.createElement(Tag_1.Tag, null,
37
+ React.createElement(ExpressionPreview_1.ExpressionPreview, { query: report.Query })))) : null));
36
38
  };
37
39
  exports.renderReportRowsSummary = renderReportRowsSummary;
38
40
  const ReportRowsWizardSection = (props) => {
@@ -99,7 +99,7 @@ const GridFilterExpressionEditor = (props) => {
99
99
  } }, "CLOSE")),
100
100
  React.createElement(rebass_1.Box, { flex: 1 }),
101
101
  React.createElement(SimpleButton_1.default, { disabled: actionsDisabled, onClick: handleSaveQuery, icon: "save" }, "Save Query"),
102
- React.createElement(SimpleButton_1.default, { variant: "raised", tone: "accent", "data-name": "action-run", margin: 1, onClick: () => {
102
+ React.createElement(SimpleButton_1.default, { variant: "raised", tone: "accent", "data-name": "action-run", margin: 1, icon: "play", onClick: () => {
103
103
  var _a;
104
104
  if (namedQuery) {
105
105
  onAddNamedQuery({
@@ -9,6 +9,7 @@ const FieldWrap_1 = tslib_1.__importDefault(require("../../components/FieldWrap"
9
9
  const FormLayout_1 = tslib_1.__importStar(require("../../components/FormLayout"));
10
10
  const Input_1 = tslib_1.__importDefault(require("../../components/Input"));
11
11
  const Panel_1 = tslib_1.__importDefault(require("../../components/Panel"));
12
+ const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions"));
12
13
  const ButtonClear_1 = require("../Components/Buttons/ButtonClear");
13
14
  const ButtonExpand_1 = require("../Components/Buttons/ButtonExpand");
14
15
  const ButtonInvalid_1 = require("../Components/Buttons/ButtonInvalid");
@@ -20,27 +21,28 @@ const PopupPanel_1 = require("../Components/Popups/AdaptablePopup/PopupPanel");
20
21
  const NamedQuerySelector_1 = require("./NamedQuerySelector");
21
22
  const useGridFilterExpressionEditor_1 = require("./useGridFilterExpressionEditor");
22
23
  const GridFilterPopup = () => {
23
- const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
24
+ const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, gridFilterHelpPage, gridFilterLinkDisabled, isReadOnly, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
24
25
  const handleEnter = (e) => {
25
26
  if (e.key === 'Enter') {
26
27
  runQuery();
27
28
  }
28
29
  };
29
- const disabled = isSuspended || gridFilterAccessLevel === 'ReadOnly';
30
- return (React.createElement(PopupPanel_1.PopupPanel, { className: "ab-GridFilter", headerText: "Grid Filter", glyphicon: "grid-filter" },
30
+ const disabled = isReadOnly || isSuspended || gridFilterAccessLevel === 'ReadOnly';
31
+ return (React.createElement(PopupPanel_1.PopupPanel, { className: "ab-GridFilter", headerText: "Grid Filter", glyphicon: "grid-filter", infoLink: gridFilterHelpPage, infoLinkDisabled: gridFilterLinkDisabled },
31
32
  React.createElement(Panel_1.default, { bodyProps: { height: '100%' }, height: "100%" },
32
33
  React.createElement(FormLayout_1.default, null,
33
34
  React.createElement(FormLayout_1.FormRow, { label: "Expression" },
34
35
  React.createElement(FieldWrap_1.default, { marginRight: 1, width: "100%" },
35
- React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Open Expression Editor", marginLeft: 1 }),
36
+ React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", marginLeft: 1 }),
36
37
  React.createElement(Input_1.default, { 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 } }),
37
- isExpressionValid ? (React.createElement(ButtonPlay_1.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_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
38
+ isExpressionValid && (React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
39
+ gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
38
40
  ' ',
39
- (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== '' && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))),
41
+ StringExtensions_1.default.IsNotNullOrEmpty(expression) && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))),
40
42
  React.createElement(FormLayout_1.FormRow, { label: "" },
41
43
  React.createElement(rebass_1.Flex, { justifyContent: "space-around" },
42
- React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }, "Save"),
43
- isSuspended ? (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Resume")) : (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: isSuspended || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Suspend")),
44
+ React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: disabled || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }, "Save"),
45
+ isSuspended ? (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Resume")) : (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }, "Suspend")),
44
46
  React.createElement(DropdownButton_1.default, { disabled: disabled, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns", icon: "list", iconPosition: "start" }, "Columns"),
45
47
  React.createElement(NamedQuerySelector_1.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")))))));
46
48
  };
@@ -8,6 +8,7 @@ const DropdownButton_1 = tslib_1.__importDefault(require("../../components/Dropd
8
8
  const FieldWrap_1 = tslib_1.__importDefault(require("../../components/FieldWrap"));
9
9
  const icons_1 = require("../../components/icons");
10
10
  const Input_1 = tslib_1.__importDefault(require("../../components/Input"));
11
+ const StringExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/StringExtensions"));
11
12
  const ButtonClear_1 = require("../Components/Buttons/ButtonClear");
12
13
  const ButtonExpand_1 = require("../Components/Buttons/ButtonExpand");
13
14
  const ButtonInvalid_1 = require("../Components/Buttons/ButtonInvalid");
@@ -18,33 +19,35 @@ const ButtonUnsuspend_1 = require("../Components/Buttons/ButtonUnsuspend");
18
19
  const NamedQuerySelector_1 = require("./NamedQuerySelector");
19
20
  const useGridFilterExpressionEditor_1 = require("./useGridFilterExpressionEditor");
20
21
  const QueryViewPanelComponent = (props) => {
21
- const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, isAdaptableReady, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
22
+ const { cachedQueries, expression, setExpression, isExpressionNamedQuery, isExpressionValid, isSuspended, gridFilter, isAdaptableReady, namedQueries, availableColumns, runQuery, onExpand, clearQuery, namedQueryModuleAccessLevel, saveQuery, suspendGridFilter, unSuspendGridFilter, setGridFilterExpression, gridFilterAccessLevel, isReadOnly, } = (0, useGridFilterExpressionEditor_1.useGridFilterExpressionEditor)();
22
23
  if (!isAdaptableReady) {
23
24
  return null;
24
25
  }
25
26
  const elementType = props.viewType === 'Toolbar' ? 'DashboardToolbar' : 'ToolPanel';
27
+ const disabled = isReadOnly || isSuspended || gridFilterAccessLevel === 'ReadOnly';
26
28
  const handleEnter = (e) => {
27
29
  if (e.key === 'Enter') {
28
30
  runQuery();
29
31
  }
30
32
  };
31
- const buttonExpand = (React.createElement(ButtonExpand_1.ButtonExpand, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Open Expression Editor", marginLeft: 1 }));
33
+ const buttonExpand = (React.createElement(ButtonExpand_1.ButtonExpand, { disabled: disabled, accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", onClick: onExpand, tooltip: "Edit the Expression in UI", marginLeft: 1 }));
32
34
  const renderTextInput = () => {
33
35
  return props.viewType === 'Toolbar' ? (React.createElement(FieldWrap_1.default, { marginRight: 1, width: 500 },
34
36
  buttonExpand,
35
- React.createElement(Input_1.default, { 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 } }),
36
- isExpressionValid ? (React.createElement(ButtonPlay_1.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_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
37
+ React.createElement(Input_1.default, { 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 } }),
38
+ isExpressionValid && (React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: '', accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || expression == '' || expression == (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression), marginRight: 1 })),
39
+ gridFilter && !isExpressionValid && (React.createElement(ButtonInvalid_1.ButtonInvalid, { variant: "text", tone: "neutral", tooltip: "Invalid Grid Filter", marginRight: 1 })),
37
40
  ' ',
38
- (gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== '' && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))) : (React.createElement(FieldWrap_1.default, null,
41
+ StringExtensions_1.default.IsNotNullOrEmpty(expression) && (React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel })))) : (React.createElement(FieldWrap_1.default, null,
39
42
  ' ',
40
43
  buttonExpand,
41
- React.createElement(Input_1.default, { 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%' } })));
44
+ React.createElement(Input_1.default, { disabled: disabled, type: "text", "data-name": "grid-filter-input", placeholder: "Grid Filter", spellCheck: false, value: expression, onChange: (x) => setExpression(x.target.value), style: { width: '100%' } })));
42
45
  };
43
- const saveButton = (React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: isSuspended || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
44
- const suspendButton = (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
45
- const unSuspendButton = (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
46
+ const saveButton = (React.createElement(ButtonSave_1.ButtonSave, { onClick: () => saveQuery(), tooltip: "Save as Named Query", accessLevel: namedQueryModuleAccessLevel, disabled: disabled || !isExpressionValid || isExpressionNamedQuery || expression == '', variant: "text", tone: "neutral", marginRight: 1 }));
47
+ const suspendButton = (React.createElement(ButtonPause_1.ButtonPause, { onClick: () => suspendGridFilter(), tooltip: "Suspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
48
+ const unSuspendButton = (React.createElement(ButtonUnsuspend_1.ButtonUnsuspend, { onClick: () => unSuspendGridFilter(), tooltip: "Unsuspend Grid Filter", accessLevel: gridFilterAccessLevel, disabled: disabled || !isExpressionValid, variant: "text", tone: "neutral", marginRight: 1 }));
46
49
  const namedQuerySelector = (React.createElement(NamedQuerySelector_1.NamedQuerySelector, { namedQueries: namedQueries, cachedQueries: cachedQueries, currentQuery: gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression, onSelect: (query) => runQuery(query), setGridFilterExpression: (query) => setGridFilterExpression(query) }));
47
- const columnsDropdown = (React.createElement(DropdownButton_1.default, { disabled: isSuspended, accessLevel: gridFilterAccessLevel, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns" },
50
+ const columnsDropdown = (React.createElement(DropdownButton_1.default, { disabled: disabled, accessLevel: gridFilterAccessLevel, variant: "text", items: availableColumns, marginRight: 1, tooltip: "Pick Columns" },
48
51
  React.createElement(icons_1.Icon, { name: 'list' })));
49
52
  const renderButtons = () => {
50
53
  return props.viewType === 'Toolbar' ? (React.createElement(React.Fragment, null,
@@ -53,7 +56,7 @@ const QueryViewPanelComponent = (props) => {
53
56
  columnsDropdown,
54
57
  namedQuerySelector,
55
58
  ' ')) : (React.createElement(React.Fragment, null,
56
- React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: isSuspended || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
59
+ React.createElement(ButtonPlay_1.ButtonPlay, { onClick: () => runQuery(), tooltip: "Run Grid Filter", accessLevel: gridFilterAccessLevel, variant: "text", tone: "neutral", disabled: disabled || !isExpressionValid || expression == '' || expression == gridFilter, marginRight: 1 }),
57
60
  ' ',
58
61
  React.createElement(ButtonClear_1.ButtonClear, { onClick: () => clearQuery(), tooltip: "Clear Grid Filter", accessLevel: gridFilterAccessLevel, disabled: expression == '' }),
59
62
  ' ',
@@ -48,7 +48,7 @@ const NamedQuerySelector = (props) => {
48
48
  cachedQueries ? (React.createElement(React.Fragment, null,
49
49
  React.createElement(Panel_1.default, { mt: 2, header: "Recent Grid Filters" },
50
50
  React.createElement(rebass_1.Flex, { flexDirection: "column" }, cachedQueries.map((cachedQuery, index) => {
51
- return (React.createElement(SimpleButton_1.default, { mb: 2, variant: "text", key: index, onClick: cachedQuery.onClick }, cachedQuery.label));
51
+ return (React.createElement(SimpleButton_1.default, { disabled: props.disabled, mb: 2, variant: "text", key: index, onClick: cachedQuery.onClick }, cachedQuery.label));
52
52
  }))))) : null),
53
53
  ] },
54
54
  React.createElement(SimpleButton_1.default, { disabled: props.disabled, variant: "text", icon: "folder-open" }, props.children))) : (React.createElement(ButtonOpen_1.ButtonOpen, { tooltip: "Load Named Query", disabled: true }));
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { CachedQuery } from '../../PredefinedConfig/NamedQueryState';
3
3
  export declare const useGridFilterExpressionEditor: () => {
4
+ isReadOnly: boolean;
4
5
  namedQueryModuleAccessLevel: import("../../types").AccessLevel;
5
6
  cachedQueries: CachedQuery[];
6
7
  expression: string;
@@ -21,4 +22,6 @@ export declare const useGridFilterExpressionEditor: () => {
21
22
  unSuspendGridFilter: () => void;
22
23
  setGridFilterExpression: (expression: string) => void;
23
24
  gridFilterAccessLevel: import("../../types").AccessLevel;
25
+ gridFilterHelpPage: string;
26
+ gridFilterLinkDisabled: boolean;
24
27
  };
@@ -13,10 +13,11 @@ const useGridFilterExpressionEditor = () => {
13
13
  var _a, _b, _c;
14
14
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
15
15
  const dispatch = (0, react_redux_1.useDispatch)();
16
- const gridFilter = (0, react_redux_1.useSelector)((state) => {
17
- var _a;
18
- return (_a = state.Layout.Layouts.find((l) => l.Name == state.Layout.CurrentLayout)) === null || _a === void 0 ? void 0 : _a.GridFilter;
16
+ const currentLayout = (0, react_redux_1.useSelector)((state) => {
17
+ return state.Layout.Layouts.find((l) => l.Name == state.Layout.CurrentLayout);
19
18
  });
19
+ const isReadOnly = Boolean(currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.IsReadOnly);
20
+ const gridFilter = currentLayout === null || currentLayout === void 0 ? void 0 : currentLayout.GridFilter;
20
21
  const [isAdaptableReady, setIsAdaptableReady] = React.useState(false);
21
22
  const [expression, setExpression] = React.useState(() => {
22
23
  return adaptable.api.gridFilterApi.getCurrentGridFilterExpression();
@@ -27,14 +28,17 @@ const useGridFilterExpressionEditor = () => {
27
28
  const onAddCachedQuery = (cachedQuery) => {
28
29
  dispatch(SystemRedux.SystemCachedQueryAdd(cachedQuery));
29
30
  };
31
+ const gridFilterHelpPage = adaptable.ModuleService.getModuleById('GridFilter').moduleInfo.HelpPage;
32
+ const gridFilterLinkDisabled = !adaptable.api.internalApi.isDocumentationLinksDisplayed();
30
33
  React.useEffect(() => {
31
34
  adaptable.api.eventApi.on('AdaptableReady', () => {
32
35
  setIsAdaptableReady(true);
33
36
  });
34
37
  }, []);
35
38
  React.useEffect(() => {
39
+ var _a;
36
40
  if ((gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) != expression) {
37
- setExpression(gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression);
41
+ setExpression((_a = gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression) !== null && _a !== void 0 ? _a : '');
38
42
  }
39
43
  }, [gridFilter === null || gridFilter === void 0 ? void 0 : gridFilter.Expression]);
40
44
  const isExpressionValid = expression == '' ||
@@ -45,7 +49,11 @@ const useGridFilterExpressionEditor = () => {
45
49
  let availableColumns = adaptable.api.columnApi.getColumns().map((col) => {
46
50
  return {
47
51
  label: col.friendlyName,
48
- onClick: () => setExpression(expression + `[${col.columnId}]`),
52
+ onClick: () => {
53
+ // Bogdan - im sure there is a better way to do this check with fancy operators i dont know
54
+ const newExp = StringExtensions_1.default.IsNotNullOrEmpty(expression) ? expression : '';
55
+ setExpression(newExp + `[${col.columnId}]`);
56
+ },
49
57
  };
50
58
  });
51
59
  const clearQuery = () => {
@@ -101,6 +109,7 @@ const useGridFilterExpressionEditor = () => {
101
109
  adaptable.api.gridFilterApi.unSuspendGridFilter();
102
110
  };
103
111
  return {
112
+ isReadOnly,
104
113
  namedQueryModuleAccessLevel,
105
114
  cachedQueries,
106
115
  expression,
@@ -115,7 +124,7 @@ const useGridFilterExpressionEditor = () => {
115
124
  availableColumns,
116
125
  runQuery,
117
126
  clearQuery,
118
- onExpand: () => adaptable.api.gridFilterApi.openExpressionEditorForGridFilter(expression),
127
+ onExpand: () => adaptable.api.gridFilterApi.openUIEditorForGridFilter(expression),
119
128
  saveQuery,
120
129
  suspendGridFilter,
121
130
  unSuspendGridFilter,
@@ -123,6 +132,8 @@ const useGridFilterExpressionEditor = () => {
123
132
  adaptable.api.gridFilterApi.setGridFilterExpression(expression);
124
133
  },
125
134
  gridFilterAccessLevel,
135
+ gridFilterHelpPage,
136
+ gridFilterLinkDisabled,
126
137
  };
127
138
  };
128
139
  exports.useGridFilterExpressionEditor = useGridFilterExpressionEditor;
@@ -4,28 +4,10 @@ exports.useGridFilterOptionsForExpressionEditorProps = void 0;
4
4
  const AdaptableContext_1 = require("../AdaptableContext");
5
5
  const useGridFilterOptionsForExpressionEditorProps = () => {
6
6
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
7
- const gridfilterOptions = adaptable.api.optionsApi.getGridFilterOptions();
8
- switch (gridfilterOptions.availableFilterEditors) {
9
- case 'Both':
10
- return {
11
- showQueryBuilder: true,
12
- showExpressionEditor: true,
13
- };
14
- case 'QueryBuilder':
15
- return {
16
- showQueryBuilder: true,
17
- showExpressionEditor: false,
18
- };
19
- case 'ExpressionEditor':
20
- return {
21
- showQueryBuilder: false,
22
- showExpressionEditor: true,
23
- };
24
- default:
25
- return {
26
- showQueryBuilder: true,
27
- showExpressionEditor: true,
28
- };
29
- }
7
+ const gridFilterEditors = adaptable.api.optionsApi.getGridFilterOptions().availableFilterEditors;
8
+ return {
9
+ showQueryBuilder: gridFilterEditors.includes('QueryBuilder'),
10
+ showExpressionEditor: gridFilterEditors.includes('ExpressionEditor'),
11
+ };
30
12
  };
31
13
  exports.useGridFilterOptionsForExpressionEditorProps = useGridFilterOptionsForExpressionEditorProps;
@@ -4,7 +4,6 @@ exports.GridInfoPopup = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const React = tslib_1.__importStar(require("react"));
6
6
  const rebass_1 = require("rebass");
7
- const package_json_1 = require("../../../../package.json");
8
7
  const Panel_1 = tslib_1.__importDefault(require("../../../components/Panel"));
9
8
  const Tabs_1 = require("../../../components/Tabs");
10
9
  const ArrayExtensions_1 = tslib_1.__importDefault(require("../../../Utilities/Extensions/ArrayExtensions"));
@@ -14,6 +13,8 @@ const AdaptableObjectCollection_1 = require("../../Components/AdaptableObjectCol
14
13
  const AdaptableObjectRow_1 = require("../../Components/AdaptableObjectRow");
15
14
  const PopupPanel_1 = require("../../Components/Popups/AdaptablePopup/PopupPanel");
16
15
  const AdaptableObjectsSummary_1 = require("./AdaptableObjectsSummary");
16
+ const env_1 = tslib_1.__importDefault(require("../../../env"));
17
+ const version = env_1.default.VERSION;
17
18
  const GridInfoPopup = (props) => {
18
19
  const CreateGridSummaries = (colItems) => {
19
20
  var _a;
@@ -36,7 +37,7 @@ const GridInfoPopup = (props) => {
36
37
  : null;
37
38
  const selectedRowInfo = props.api.gridApi.getSelectedRowInfo();
38
39
  if ((_a = props.api.optionsApi.getUserInterfaceOptions()) === null || _a === void 0 ? void 0 : _a.showAdapTableVersion) {
39
- returnRows.push(createReadOnlyColItem(colItems, 'AdapTable Version', package_json_1.version));
40
+ returnRows.push(createReadOnlyColItem(colItems, 'AdapTable Version', version));
40
41
  }
41
42
  returnRows.push(createReadOnlyColItem(colItems, 'Sorted Columns', ArrayExtensions_1.default.IsNotNullOrEmpty(sorts) ? sorts.join('; ') : 'None'));
42
43
  returnRows.push(createReadOnlyColItem(colItems, 'Column Filters', columnFilterDescription));
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ import { Layout } from '../../../types';
3
+ export declare const getGridFilterViewItems: (layout: Layout) => {
4
+ name: string;
5
+ view: JSX.Element;
6
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGridFilterViewItems = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const ExpressionPreview_1 = require("../../../components/ExpressionEditor/ExpressionPreview");
7
+ const Tag_1 = require("../../../components/Tag");
8
+ const getGridFilterViewItems = (layout) => {
9
+ var _a;
10
+ return {
11
+ name: 'Grid Filters',
12
+ view: (React.createElement(Tag_1.Tag, null,
13
+ React.createElement(ExpressionPreview_1.ExpressionPreview, { query: { BooleanExpression: (_a = layout.GridFilter) === null || _a === void 0 ? void 0 : _a.Expression } }))),
14
+ };
15
+ };
16
+ exports.getGridFilterViewItems = getGridFilterViewItems;
@@ -58,7 +58,7 @@ const FilterSection = (props) => {
58
58
  React.createElement(Tabs_1.Tabs.Content, null,
59
59
  React.createElement(FormLayout_1.default, { mb: 2 },
60
60
  React.createElement(FormLayout_1.FormRow, { label: "Add Column Filter" },
61
- React.createElement(ColumnSelector_1.ColumnSelector, { filterColumn: (column) => column.filterable && !layoutFilters.some((f) => f.ColumnId === column.columnId), value: "none", onChange: (option) => {
61
+ React.createElement(ColumnSelector_1.ColumnSelector, { filterColumn: (column) => column.filterable && !layoutFilters.some((f) => f.ColumnId === column.columnId), placeholder: "Select column to create filter", onChange: (option) => {
62
62
  props.onChange(Object.assign(Object.assign({}, layout), { ColumnFilters: [
63
63
  ...layoutFilters,
64
64
  {
@@ -34,11 +34,11 @@ const GridFilterSection = (props) => {
34
34
  const { data: layout } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
35
35
  const initialData = React.useMemo(() => api.internalApi.getQueryPreviewData(), []);
36
36
  const expressionEditorProps = (0, useGridFilterOptionsForExpressionEditor_1.useGridFilterOptionsForExpressionEditorProps)();
37
+ const expressionEditorContent = (React.createElement(ExpressionEditor_1.ExpressionEditor, Object.assign({}, expressionEditorProps, { allowSaveNamedQuery: false, type: 'boolean', module: ModuleConstants_1.GridFilterModuleId, value: (_b = (_a = layout === null || layout === void 0 ? void 0 : layout.GridFilter) === null || _a === void 0 ? void 0 : _a.Expression) !== null && _b !== void 0 ? _b : '', onChange: (expression) => {
38
+ props.onChange(Object.assign(Object.assign({}, layout), { GridFilter: Object.assign(Object.assign({}, layout.GridFilter), { Expression: expression }) }));
39
+ }, initialData: initialData, columns: api.columnApi.getQueryableColumns(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api })));
37
40
  return (React.createElement(Tabs_1.Tabs, { style: { height: '100%' } },
38
41
  React.createElement(Tabs_1.Tabs.Tab, null, "Grid Filters"),
39
- React.createElement(Tabs_1.Tabs.Content, null,
40
- React.createElement(ExpressionEditor_1.ExpressionEditor, Object.assign({}, expressionEditorProps, { allowSaveNamedQuery: false, type: 'boolean', module: ModuleConstants_1.GridFilterModuleId, value: (_b = (_a = layout === null || layout === void 0 ? void 0 : layout.GridFilter) === null || _a === void 0 ? void 0 : _a.Expression) !== null && _b !== void 0 ? _b : '', onChange: (expression) => {
41
- props.onChange(Object.assign(Object.assign({}, layout), { GridFilter: Object.assign(Object.assign({}, layout.GridFilter), { Expression: expression }) }));
42
- }, initialData: initialData, columns: api.columnApi.getQueryableColumns(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api })))));
42
+ React.createElement(Tabs_1.Tabs.Content, null, expressionEditorContent)));
43
43
  };
44
44
  exports.GridFilterSection = GridFilterSection;
@@ -9,7 +9,7 @@ const EditGridFilterButton = () => {
9
9
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
10
10
  const handleClick = React.useCallback((event) => {
11
11
  event.stopPropagation();
12
- adaptable.api.gridFilterApi.openExpressionEditorForGridFilter();
12
+ adaptable.api.gridFilterApi.openUIEditorForGridFilter();
13
13
  }, []);
14
14
  return React.createElement(SimpleButton_1.default, { variant: "text", iconSize: 15, onClick: handleClick, icon: "edit" });
15
15
  };
@@ -30,7 +30,7 @@ exports.renderNamedQueryExpressionSummary = renderNamedQueryExpressionSummary;
30
30
  const NamedQueryExpressionWizardSection = (props) => {
31
31
  const { data, moduleInfo, api } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
32
32
  const initialData = (0, react_1.useMemo)(() => api.internalApi.getQueryPreviewData(), []);
33
- return (React.createElement(ExpressionEditor_1.ExpressionEditor, { allowSaveNamedQuery: false, type: 'boolean', module: moduleInfo.ModuleName, value: data.BooleanExpression, onChange: (BooleanExpression) => {
33
+ return (React.createElement(ExpressionEditor_1.ExpressionEditor, { allowSaveNamedQuery: false, showQueryBuilder: true, type: 'boolean', module: moduleInfo.ModuleName, value: data.BooleanExpression, onChange: (BooleanExpression) => {
34
34
  props.onChange(Object.assign(Object.assign({}, data), { BooleanExpression }));
35
35
  }, initialData: initialData, columns: api.columnApi.getQueryableColumns(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api }));
36
36
  };
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ export declare const NoteEditor: React.FunctionComponent<{
3
+ note?: string | null;
4
+ onNoteChange: (note: string) => void;
5
+ onClose: () => void;
6
+ editMode: boolean;
7
+ isReadonly: boolean;
8
+ }>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoteEditor = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const throttle_1 = tslib_1.__importDefault(require("lodash/throttle"));
6
+ const React = tslib_1.__importStar(require("react"));
7
+ const Textarea_1 = tslib_1.__importDefault(require("../../components/Textarea"));
8
+ const NoteEditor = ({ note, onNoteChange, onClose, editMode, isReadonly }) => {
9
+ const textAreaRef = React.useRef(null);
10
+ const [liveValue, setLiveValue] = React.useState(note || '');
11
+ const throttledOnChange = React.useMemo(() => {
12
+ const throttled = (0, throttle_1.default)((value) => onNoteChange(value), 300);
13
+ return (value) => {
14
+ setLiveValue(value);
15
+ throttled(value);
16
+ };
17
+ }, []);
18
+ React.useEffect(() => {
19
+ var _a;
20
+ if (editMode) {
21
+ (_a = textAreaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
22
+ }
23
+ }, [editMode]);
24
+ if (note === undefined || note === null) {
25
+ return null;
26
+ }
27
+ return (React.createElement(Textarea_1.default, { readOnly: isReadonly, ref: textAreaRef, width: "100%", minWidth: 180, minHeight: 120, value: liveValue, onBlur: () => onClose(), onKeyDown: (event) => {
28
+ if (event.key === 'Escape') {
29
+ onClose();
30
+ }
31
+ }, onChange: (event) => throttledOnChange(event.target.value) }));
32
+ };
33
+ exports.NoteEditor = NoteEditor;
@@ -1,2 +1,2 @@
1
- /// <reference types="react" />
2
- export declare const NotePopup: () => JSX.Element;
1
+ import * as React from 'react';
2
+ export declare const NotesPopup: React.FunctionComponent;