@adaptabletools/adaptable 23.0.0-canary.4 → 23.0.0-canary.5

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 (248) hide show
  1. package/index.css +116 -61
  2. package/package.json +9 -4
  3. package/src/AdaptableOptions/EditOptions.d.ts +2 -2
  4. package/src/AdaptableState/Common/AggregationColumns.d.ts +14 -6
  5. package/src/AdaptableState/Common/AggregationColumns.js +27 -2
  6. package/src/AdaptableState/Common/ColumnScope.d.ts +4 -0
  7. package/src/AdaptableState/Common/Enums.d.ts +5 -5
  8. package/src/AdaptableState/Common/Enums.js +4 -4
  9. package/src/AdaptableState/PlusMinusState.d.ts +3 -3
  10. package/src/AdaptableState/ShortcutState.d.ts +2 -6
  11. package/src/AdaptableState/StyledColumnState.d.ts +3 -5
  12. package/src/AdaptableState/ThemeState.d.ts +33 -28
  13. package/src/Api/EventApi.d.ts +14 -1
  14. package/src/Api/Events/ThemeChanged.d.ts +6 -0
  15. package/src/Api/Events/ThemeSelected.d.ts +11 -0
  16. package/src/Api/Events/ThemeSelected.js +1 -0
  17. package/src/Api/Implementation/EventApiImpl.js +4 -0
  18. package/src/Api/Implementation/LayoutApiImpl.d.ts +0 -2
  19. package/src/Api/Implementation/LayoutApiImpl.js +0 -14
  20. package/src/Api/Implementation/LayoutHelpers.d.ts +2 -0
  21. package/src/Api/Implementation/LayoutHelpers.js +17 -7
  22. package/src/Api/Implementation/ThemeApiImpl.d.ts +3 -2
  23. package/src/Api/Implementation/ThemeApiImpl.js +19 -15
  24. package/src/Api/Internal/EventInternalApi.d.ts +2 -0
  25. package/src/Api/Internal/EventInternalApi.js +8 -1
  26. package/src/Api/Internal/StyledColumnInternalApi.d.ts +4 -4
  27. package/src/Api/Internal/StyledColumnInternalApi.js +4 -4
  28. package/src/Api/Internal/ThemeInternalApi.d.ts +0 -1
  29. package/src/Api/Internal/ThemeInternalApi.js +0 -10
  30. package/src/Api/LayoutApi.d.ts +1 -8
  31. package/src/Api/ThemeApi.d.ts +6 -2
  32. package/src/Redux/ActionsReducers/ThemeRedux.d.ts +3 -3
  33. package/src/Strategy/FormatColumnModule.js +14 -7
  34. package/src/Strategy/LayoutModule.js +13 -8
  35. package/src/Strategy/StyledColumnModule.js +64 -36
  36. package/src/Utilities/Constants/ReduxConstants.d.ts +2 -2
  37. package/src/Utilities/Constants/ReduxConstants.js +1 -14
  38. package/src/Utilities/Helpers/FormatHelper.js +20 -1
  39. package/src/Utilities/Helpers/SparklineOptionsHelper.d.ts +7 -0
  40. package/src/Utilities/Helpers/SparklineOptionsHelper.js +65 -0
  41. package/src/Utilities/Helpers/StyledColumnGradientHelper.d.ts +23 -1
  42. package/src/Utilities/Helpers/StyledColumnGradientHelper.js +204 -0
  43. package/src/Utilities/Helpers/ThemeHelpers.d.ts +5 -0
  44. package/src/Utilities/Helpers/ThemeHelpers.js +38 -0
  45. package/src/Utilities/Helpers/percentBarPreviewHelper.d.ts +19 -0
  46. package/src/Utilities/Helpers/percentBarPreviewHelper.js +143 -0
  47. package/src/Utilities/ObjectFactory.d.ts +1 -3
  48. package/src/Utilities/ObjectFactory.js +0 -8
  49. package/src/Utilities/Services/ThemeService.js +1 -1
  50. package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +17 -16
  51. package/src/View/Alert/Wizard/AlertButtonsEditor.js +114 -103
  52. package/src/View/Alert/Wizard/AlertMessageWizardSection.js +13 -14
  53. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +55 -55
  54. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +3 -2
  55. package/src/View/Alert/Wizard/AlertScheduledWizardSection.js +2 -2
  56. package/src/View/Alert/Wizard/AlertScopeWizardSection.js +31 -39
  57. package/src/View/Alert/Wizard/AlertTypeWizardSection.js +3 -4
  58. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +9 -13
  59. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +30 -17
  60. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +7 -9
  61. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +3 -3
  62. package/src/View/CellSummary/CellSummaryViewPanel.js +1 -1
  63. package/src/View/Charting/ChartingWizard/AgChargingWizard/AgChargingWizard.js +3 -10
  64. package/src/View/Charting/ChartingWizard/AgChargingWizard/PreviewChartSection.js +1 -1
  65. package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +32 -41
  66. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/ExternalChartingWizard.js +4 -31
  67. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.d.ts +5 -0
  68. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.js +21 -0
  69. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.d.ts +1 -0
  70. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +10 -7
  71. package/src/View/Comments/CommentsEditor.js +1 -1
  72. package/src/View/Components/ModuleProfile.js +1 -1
  73. package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +0 -1
  74. package/src/View/Components/Popups/WindowPopups/windowFactory.js +0 -1
  75. package/src/View/Components/RangesComponent.d.ts +7 -2
  76. package/src/View/Components/RangesComponent.js +94 -22
  77. package/src/View/Components/StyleComponent.d.ts +1 -0
  78. package/src/View/Components/StyleComponent.js +1 -1
  79. package/src/View/Components/ValueSelector/index.js +70 -57
  80. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +8 -13
  81. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +8 -8
  82. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -1
  83. package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +11 -12
  84. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.js +6 -4
  85. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.js +3 -2
  86. package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +5 -15
  87. package/src/View/Export/Wizard/ReportColumnsWizardSection.js +24 -26
  88. package/src/View/Export/Wizard/ReportNameWizardSection.js +10 -13
  89. package/src/View/Export/Wizard/ReportRowsWizardSection.js +20 -22
  90. package/src/View/Export/Wizard/ScheduledReportSettings.d.ts +2 -0
  91. package/src/View/Export/Wizard/ScheduledReportSettings.js +13 -13
  92. package/src/View/Export/Wizard/ScheduledReportWizard.js +4 -5
  93. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +8 -6
  94. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +21 -22
  95. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +20 -11
  96. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +21 -5
  97. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +4 -4
  98. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +7 -0
  99. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +117 -12
  100. package/src/View/FormatColumn/Wizard/FormatColumnPreview.d.ts +15 -0
  101. package/src/View/FormatColumn/Wizard/FormatColumnPreview.js +66 -0
  102. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +4 -0
  103. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +30 -0
  104. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +13 -8
  105. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
  106. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +3 -1
  107. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +62 -13
  108. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +5 -3
  109. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.d.ts +2 -0
  110. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.js +15 -0
  111. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.d.ts +10 -0
  112. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.js +53 -0
  113. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +2 -3
  114. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +33 -68
  115. package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +15 -11
  116. package/src/View/Layout/TransposedPopup.js +2 -2
  117. package/src/View/Layout/Wizard/LayoutWizard.js +3 -3
  118. package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +2 -3
  119. package/src/View/Layout/Wizard/sections/AggregationsSection.js +115 -26
  120. package/src/View/Layout/Wizard/sections/ColumnsSection.js +79 -79
  121. package/src/View/Layout/Wizard/sections/FilterSection.js +31 -32
  122. package/src/View/Layout/Wizard/sections/GridFilterSection.js +11 -11
  123. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.d.ts +1 -2
  124. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +101 -52
  125. package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +9 -8
  126. package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +4 -4
  127. package/src/View/Layout/Wizard/sections/RowGroupingSection.js +36 -33
  128. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +2 -2
  129. package/src/View/Layout/Wizard/sections/RowSummarySection.js +95 -73
  130. package/src/View/Layout/Wizard/sections/SettingsSection.js +4 -5
  131. package/src/View/Layout/Wizard/sections/SortSection.js +2 -2
  132. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  133. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +9 -14
  134. package/src/View/NamedQuery/Wizard/NamedQueryWizard.js +1 -3
  135. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.d.ts +4 -0
  136. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.js +43 -13
  137. package/src/View/PlusMinus/Wizard/PlusMinusScopeWizardSection.js +11 -18
  138. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.d.ts +2 -6
  139. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +6 -22
  140. package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +15 -21
  141. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +2 -2
  142. package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +11 -18
  143. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +17 -6
  144. package/src/View/Shortcut/Wizard/ShortcutWizard.js +3 -3
  145. package/src/View/Shortcut/shortcutOperations.d.ts +3 -0
  146. package/src/View/Shortcut/shortcutOperations.js +28 -0
  147. package/src/View/SpecialColumnSettingsWizardStep.js +9 -8
  148. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.d.ts +5 -0
  149. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +24 -15
  150. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +10 -2
  151. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +96 -16
  152. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.d.ts +14 -0
  153. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +45 -24
  154. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.d.ts +2 -3
  155. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +108 -33
  156. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +21 -13
  157. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.d.ts +5 -0
  158. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +121 -23
  159. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.d.ts +1 -0
  160. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +34 -11
  161. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.d.ts +5 -0
  162. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +86 -12
  163. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.d.ts +5 -0
  164. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +121 -34
  165. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.d.ts +1 -0
  166. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +55 -75
  167. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.d.ts +5 -0
  168. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.js +16 -0
  169. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.js +7 -13
  170. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarColumnComparisonPreview.js +5 -5
  171. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarRangesPreview.js +4 -3
  172. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.d.ts +5 -4
  173. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.js +12 -14
  174. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.d.ts +5 -0
  175. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.js +16 -0
  176. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.d.ts +3 -0
  177. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +31 -3
  178. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.d.ts +9 -0
  179. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +58 -0
  180. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.d.ts +10 -0
  181. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.js +30 -0
  182. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.d.ts +10 -0
  183. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.js +91 -0
  184. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.d.ts +8 -0
  185. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.js +52 -0
  186. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.d.ts +8 -0
  187. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +53 -0
  188. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.d.ts +18 -0
  189. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.js +58 -0
  190. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.d.ts +10 -0
  191. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.js +126 -0
  192. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardRangesSection.js +12 -5
  193. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.d.ts +1 -5
  194. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +52 -29
  195. package/src/View/SystemStatus/Utilities/getStatusItemStyle.js +1 -1
  196. package/src/View/Theme/ThemePopup.d.ts +2 -14
  197. package/src/View/Theme/ThemePopup.js +1 -36
  198. package/src/View/UIHelper.js +1 -1
  199. package/src/View/Wizard/OnePageAdaptableWizard.js +7 -21
  200. package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
  201. package/src/agGrid/AdaptableAgGrid.js +35 -25
  202. package/src/agGrid/AgGridAdapter.d.ts +1 -1
  203. package/src/agGrid/AgGridAdapter.js +27 -17
  204. package/src/agGrid/AgGridColumnAdapter.js +9 -15
  205. package/src/agGrid/AgGridMenuAdapter.d.ts +0 -1
  206. package/src/agGrid/AgGridMenuAdapter.js +20 -37
  207. package/src/agGrid/buildValueAggregationMenuItem.d.ts +19 -0
  208. package/src/agGrid/buildValueAggregationMenuItem.js +111 -0
  209. package/src/agGrid/cellRenderers/IconRenderer.d.ts +6 -0
  210. package/src/agGrid/cellRenderers/IconRenderer.js +43 -15
  211. package/src/agGrid/createAgGridIcon.d.ts +10 -0
  212. package/src/agGrid/createAgGridIcon.js +16 -0
  213. package/src/components/DragAndDropContext/UnusedPanel.js +1 -1
  214. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
  215. package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
  216. package/src/components/Input/NumberInput.js +1 -1
  217. package/src/components/Panel/index.js +1 -1
  218. package/src/components/SimpleButton/index.js +4 -4
  219. package/src/components/Toggle/Toggle.js +1 -1
  220. package/src/components/Toggle/ToggleGroup.js +1 -1
  221. package/src/env.js +2 -2
  222. package/src/layout-manager/src/index.js +2 -9
  223. package/src/metamodel/adaptable.metamodel.d.ts +39 -29
  224. package/src/metamodel/adaptable.metamodel.js +1 -1
  225. package/src/types.d.ts +5 -4
  226. package/themes/dark.css +1 -68
  227. package/themes/light.css +1 -5
  228. package/tsconfig.esm.tsbuildinfo +1 -1
  229. package/src/Aggregation/ParameterizedAggregationRegistry.d.ts +0 -35
  230. package/src/Aggregation/ParameterizedAggregationRegistry.js +0 -63
  231. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.d.ts +0 -3
  232. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.js +0 -55
  233. package/src/Aggregation/parameterizedAggregationColumnMenu.d.ts +0 -8
  234. package/src/Aggregation/parameterizedAggregationColumnMenu.js +0 -137
  235. package/src/Aggregation/parameterizedAggregationHeader.d.ts +0 -13
  236. package/src/Aggregation/parameterizedAggregationHeader.js +0 -60
  237. package/src/Aggregation/parameterizedAggregationHelpers.d.ts +0 -23
  238. package/src/Aggregation/parameterizedAggregationHelpers.js +0 -111
  239. package/src/Aggregation/parameterizedAggregationWizardHelpers.d.ts +0 -9
  240. package/src/Aggregation/parameterizedAggregationWizardHelpers.js +0 -66
  241. package/src/Aggregation/validateParameterizedAggregations.d.ts +0 -4
  242. package/src/Aggregation/validateParameterizedAggregations.js +0 -20
  243. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.d.ts +0 -12
  244. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.js +0 -43
  245. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.d.ts +0 -5
  246. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.js +0 -28
  247. package/src/View/Theme/VariantSelector.d.ts +0 -8
  248. package/src/View/Theme/VariantSelector.js +0 -20
@@ -2,11 +2,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { CheckBox } from '../../../../components/CheckBox';
4
4
  import FormLayout, { FormRow } from '../../../../components/FormLayout';
5
- import { Tabs } from '../../../../components/Tabs';
5
+ import { Card } from '../../../../components/Card';
6
6
  import { Tag } from '../../../../components/Tag';
7
- import { validateTableLayoutAggregations } from '../../../../Aggregation/validateParameterizedAggregations';
8
- import { getParameterizedAggregationDisplayName } from '../../../../Aggregation/parameterizedAggregationHeader';
9
- import { buildAggregationColumnsMap } from '../../../../Aggregation/parameterizedAggregationWizardHelpers';
7
+ import { getDisplayAggFuncNames, } from '../../../../AdaptableState/Common/AggregationColumns';
10
8
  import { useAdaptable } from '../../../AdaptableContext';
11
9
  import { ValueSelector } from '../../../Components/ValueSelector';
12
10
  import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptableWizard';
@@ -16,15 +14,24 @@ import ArrayExtensions from '../../../../Utilities/Extensions/ArrayExtensions';
16
14
  import StringExtensions from '../../../../Utilities/Extensions/StringExtensions';
17
15
  import { Box, Flex } from '../../../../components/Flex';
18
16
  import { SingleSelect } from '../../../../components/NewSelect';
19
- import { ParameterizedAggFuncPicker } from './ParameterizedAggFuncPicker';
20
- export const isAggregationsSectionValid = validateTableLayoutAggregations;
17
+ const WEIGHTED_AVERAGE_AGG_FN_NAME = 'weightedAvg';
18
+ export const isAggregationsSectionValid = (data) => {
19
+ const weightedAvg = data.TableAggregationColumns
20
+ ? (data.TableAggregationColumns || []).find(({ AggFunc }) => typeof AggFunc === 'object' &&
21
+ AggFunc.type === 'weightedAverage')?.AggFunc
22
+ : null;
23
+ if (weightedAvg && !weightedAvg.weightedColumnId) {
24
+ return 'Weighted Average requires a weight column to be selected.';
25
+ }
26
+ return true;
27
+ };
21
28
  export const AggregationsSectionSummary = () => {
22
29
  const adaptable = useAdaptable();
23
30
  const { data: layout } = useOnePageAdaptableWizardContext();
24
31
  const entries = layout.TableAggregationColumns || [];
25
32
  let content = null;
26
33
  if (entries.length) {
27
- content = (_jsx(FormLayout, { children: entries.map(({ ColumnId, AggFunc }) => (_jsx(FormRow, { label: adaptable.api.columnApi.getFriendlyNameForColumnId(ColumnId), children: _jsx(Tag, { children: getParameterizedAggregationDisplayName(adaptable.api, AggFunc, ColumnId) }) }, ColumnId))) }));
34
+ content = (_jsx(FormLayout, { children: entries.map(({ ColumnId, AggFunc }) => (_jsx(FormRow, { label: adaptable.api.columnApi.getFriendlyNameForColumnId(ColumnId), children: _jsx(Tag, { children: typeof AggFunc === 'object' ? AggFunc.type : AggFunc }) }, ColumnId))) }));
28
35
  }
29
36
  else {
30
37
  content = _jsx(Tag, { children: "No Aggregations" });
@@ -33,7 +40,73 @@ export const AggregationsSectionSummary = () => {
33
40
  };
34
41
  const ColumnRow = (props) => {
35
42
  const aggValue = props.layout?.TableAggregationColumns?.find((agg) => agg.ColumnId === props.column.columnId)?.AggFunc;
36
- return (_jsxs(Flex, { alignItems: "center", children: [props.column.friendlyName, _jsx(ColumnGroupTag, { column: props.column }), _jsx(ParameterizedAggFuncPicker, { column: props.column, aggValue: aggValue, aggregationColumnsMap: props.aggregationColumnsMap, numberColumns: props.numberColumns, aggregationEntries: props.layout.TableAggregationColumns || [], onChangeEntries: props.onChangeAggFunction })] }));
43
+ const aggFunctionNames = getDisplayAggFuncNames(props.column);
44
+ const currentAggFnName = props.aggregationColumnsMap[props.column.columnId];
45
+ const updateAggFunc = (fnName) => {
46
+ let aggCols = [...(props.layout.TableAggregationColumns || [])];
47
+ const AggFuncValue = fnName === WEIGHTED_AVERAGE_AGG_FN_NAME
48
+ ? {
49
+ type: 'weightedAverage',
50
+ weightedColumnId: null,
51
+ }
52
+ : fnName;
53
+ let found = false;
54
+ aggCols = aggCols.map(({ ColumnId, AggFunc }) => {
55
+ if (ColumnId === props.column.columnId) {
56
+ found = true;
57
+ return {
58
+ ColumnId,
59
+ AggFunc: AggFuncValue,
60
+ };
61
+ }
62
+ return { ColumnId, AggFunc };
63
+ });
64
+ if (!found) {
65
+ aggCols.push({
66
+ ColumnId: props.column.columnId,
67
+ AggFunc: AggFuncValue,
68
+ });
69
+ }
70
+ props.onChangeAggFunction(aggCols);
71
+ };
72
+ const updateWeightedColumn = (weightedColumnId) => {
73
+ let aggCols = [...(props.layout.TableAggregationColumns || [])];
74
+ const AggFuncValue = {
75
+ type: 'weightedAverage',
76
+ weightedColumnId: weightedColumnId,
77
+ };
78
+ let found = false;
79
+ aggCols = aggCols.map(({ ColumnId, AggFunc }) => {
80
+ if (ColumnId === props.column.columnId) {
81
+ found = true;
82
+ return {
83
+ ColumnId,
84
+ AggFunc: AggFuncValue,
85
+ };
86
+ }
87
+ return { ColumnId, AggFunc };
88
+ });
89
+ if (!found) {
90
+ aggCols.push({
91
+ ColumnId: props.column.columnId,
92
+ AggFunc: AggFuncValue,
93
+ });
94
+ }
95
+ props.onChangeAggFunction(aggCols);
96
+ };
97
+ const weightColumnId = typeof aggValue === 'object' && aggValue.type === 'weightedAverage'
98
+ ? aggValue.weightedColumnId
99
+ : null;
100
+ const weightColumnOptions = props.numberColumns
101
+ .filter((col) => col.columnId !== props.column.columnId)
102
+ .map((col) => ({
103
+ label: col.friendlyName,
104
+ value: col.columnId,
105
+ }));
106
+ return (_jsxs(Flex, { alignItems: "center", children: [props.column.friendlyName, _jsx(ColumnGroupTag, { column: props.column }), aggValue && (_jsx(SingleSelect, { className: "twa:min-w-[140px] twa:ml-2", value: currentAggFnName, items: aggFunctionNames.map((fnName) => ({
107
+ label: fnName,
108
+ value: fnName,
109
+ })), onValueChange: updateAggFunc })), currentAggFnName === WEIGHTED_AVERAGE_AGG_FN_NAME && (_jsxs(Flex, { className: "twa:bg-primary twa:ml-3", alignItems: "center", children: [_jsx(Box, { children: "Weight" }), _jsx(SingleSelect, { className: "twa:min-w-[140px] twa:ml-2", placeholder: "Select Weight", value: weightColumnId, items: weightColumnOptions, onValueChange: updateWeightedColumn })] }))] }));
37
110
  };
38
111
  export const AggregationsSection = (props) => {
39
112
  const adaptable = useAdaptable();
@@ -43,6 +116,8 @@ export const AggregationsSection = (props) => {
43
116
  const numberColumns = adaptable.api.columnApi.getNumericColumns();
44
117
  const allAggregatableColumnIds = allAggregableColumns.map((col) => col.columnId);
45
118
  (layout.TableAggregationColumns || []).forEach((agg) => {
119
+ // we need to also display the columns currently aggregated,
120
+ // even if they are not aggregatable
46
121
  if (!allAggregatableColumnIds.includes(agg.ColumnId)) {
47
122
  allAggregatableColumnIds.push(agg.ColumnId);
48
123
  }
@@ -77,28 +152,42 @@ export const AggregationsSection = (props) => {
77
152
  acc[col.columnId] = col;
78
153
  return acc;
79
154
  }, {});
80
- return buildAggregationColumnsMap(layout.TableAggregationColumns || [], allColumnsMap);
81
- }, [layout, allColumns]);
155
+ return (layout.TableAggregationColumns || []).reduce((acc, { ColumnId: colId, AggFunc }) => {
156
+ let fn = AggFunc;
157
+ let fnName = '';
158
+ if (typeof fn === 'boolean') {
159
+ fnName = allColumnsMap[colId].aggregationFunction;
160
+ }
161
+ if (typeof fn === 'object' && fn.type === 'weightedAverage') {
162
+ fnName = WEIGHTED_AVERAGE_AGG_FN_NAME;
163
+ }
164
+ else if (typeof fn === 'string') {
165
+ fnName = fn;
166
+ }
167
+ acc[colId] = fnName;
168
+ return acc;
169
+ }, {});
170
+ }, [layout]);
82
171
  const handleSuppressAggFuncInHeader = (checked) => {
83
172
  props.onChange({
84
173
  ...layout,
85
174
  SuppressAggFuncInHeader: checked,
86
175
  });
87
176
  };
88
- return (_jsxs(Tabs, { style: { height: '100%' }, children: [_jsx(Tabs.Tab, { children: "Column Aggregations" }), _jsxs(Tabs.Content, { children: [_jsx(Flex, { children: _jsxs(FormLayout, { children: [_jsx(FormRow, { label: 'Omit Aggregation from Header', children: _jsx(CheckBox, { checked: layout.SuppressAggFuncInHeader, onChange: handleSuppressAggFuncInHeader }) }), _jsx(FormRow, { label: 'Grand Total Row', children: _jsx(SingleSelect, { className: "twa:w-[180px]", items: [
89
- {
90
- label: 'Off',
91
- value: null,
92
- },
93
- ].concat(['top', 'bottom', 'pinnedTop', 'pinnedBottom'].map((position) => {
94
- return {
95
- label: StringExtensions.CamelCaseToHumanText(position),
96
- value: position,
97
- };
98
- })), placeholder: "Off", value: layout.GrandTotalRow, onValueChange: (value) => {
99
- props.onChange({
100
- ...layout,
101
- GrandTotalRow: value,
102
- });
103
- } }) })] }) }), _jsx(ValueSelector, { showFilterInput: true, filter: columnFilter, toIdentifier: (option) => `${option.columnId}`, toLabel: (option) => option.friendlyName ?? option.columnId, toListLabel: (column) => (_jsx(ColumnRow, { onChangeAggFunction: handleAggregationChange, layout: layout, column: column, aggregationColumnsMap: aggregationColumnsMap, numberColumns: numberColumns })), options: sortedAggregableColumns, value: (layout.TableAggregationColumns || []).map((agg) => agg.ColumnId), allowReorder: () => true, onChange: handleColumnsSelectionChange })] })] }));
177
+ return (_jsxs(Box, { className: "twa:h-full twa:min-h-0 twa:p-2 twa:gap-2 twa:overflow-hidden twa:grid twa:grid-cols-2", children: [_jsxs(Card, { shadow: false, className: "twa:h-full twa:overflow-hidden twa:flex twa:flex-col", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Aggregation Columns" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Select a column and an aggregation function" })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0 twa:overflow-hidden twa:p-1", children: _jsx(ValueSelector, { style: { minHeight: 0 }, showFilterInput: true, filter: columnFilter, toIdentifier: (option) => `${option.columnId}`, toLabel: (option) => option.friendlyName ?? option.columnId, toListLabel: (column) => (_jsx(ColumnRow, { onChangeAggFunction: handleAggregationChange, layout: layout, column: column, aggregationColumnsMap: aggregationColumnsMap, numberColumns: numberColumns })), options: sortedAggregableColumns, value: (layout.TableAggregationColumns || []).map((agg) => agg.ColumnId), allowReorder: () => true, onChange: handleColumnsSelectionChange }) })] }), _jsxs(Box, { className: "twa:h-full twa:min-h-0 twa:overflow-y-auto twa:flex twa:flex-col twa:gap-2", children: [_jsxs(Card, { shadow: false, children: [_jsx(Card.Title, { children: _jsx(Box, { className: "twa:font-medium", children: "Omit Aggregation from Header" }) }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(CheckBox, { checked: layout.SuppressAggFuncInHeader, onChange: handleSuppressAggFuncInHeader, children: "Do not show aggregation function names in column headers" }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Grand Total Row" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Set position of the grand total row in the grid" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(SingleSelect, { className: "twa:w-[180px]", items: [
178
+ {
179
+ label: 'Off',
180
+ value: null,
181
+ },
182
+ ].concat(['top', 'bottom', 'pinnedTop', 'pinnedBottom'].map((position) => {
183
+ return {
184
+ label: StringExtensions.CamelCaseToHumanText(position),
185
+ value: position,
186
+ };
187
+ })), placeholder: "Off", value: layout.GrandTotalRow, onValueChange: (value) => {
188
+ props.onChange({
189
+ ...layout,
190
+ GrandTotalRow: value,
191
+ });
192
+ } }) })] })] })] }));
104
193
  };
@@ -2,7 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { DataSource, InfiniteTableGrid, } from '../../../../components/InfiniteTable';
3
3
  import * as React from 'react';
4
4
  import Input from '../../../../components/Input';
5
- import { Tabs } from '../../../../components/Tabs';
5
+ import { Card } from '../../../../components/Card';
6
6
  import { isValidOrderForColumnGroups, } from '../../../../AdaptableState/Common/AdaptableColumn';
7
7
  import { useAdaptable } from '../../../AdaptableContext';
8
8
  import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptableWizard';
@@ -373,87 +373,87 @@ export const ColumnsSection = (props) => {
373
373
  .map((col) => col.columnId)
374
374
  : currentOrder.map((col) => col.columnId);
375
375
  const visibleIdsCurrentlyDisplayed = visibleIds.filter((colId) => currentlyDisplayedColumnIds.includes(colId));
376
- return (_jsxs(Tabs, { className: "twa:h-full", children: [_jsx(Tabs.Tab, { children: "Columns" }), _jsx(Tabs.Content, { children: _jsxs(Box, { className: "twa:gap-2 twa:overflow-hidden twa:grid twa:grid-cols-2 twa:h-full", children: [_jsx(Box, { className: "twa:gap-2 twa:focus:outline-none twa:flex-1 twa:max-h-full twa:overflow-hidden", "data-name": "columns-container", tabIndex: -1, onKeyDown: (event) => {
377
- const scrollIntoView = (columnId) => {
378
- const el = event.currentTarget.querySelector(`[data-id="${columnId}"]`);
379
- el?.scrollIntoView({ block: 'nearest' });
380
- const input = el?.querySelector('input[type="checkbox"]');
381
- input?.focus();
382
- };
383
- if (event.key === 'ArrowDown') {
384
- event.preventDefault();
385
- event.stopPropagation();
386
- const index = currentlyDisplayedColumnIds.indexOf(selectedColumnId);
387
- if (index === -1) {
388
- return;
376
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full", children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2 twa:gap-3 twa:border-b twa:mb-2 twa:border-b-foreground/20", children: [_jsx(Box, { className: "twa:text-4 twa:font-medium twa:shrink-0", children: "Columns" }), _jsx(Flex, { flexDirection: "column", className: "twa:flex-1 twa:min-w-0 twa:text-xs twa:opacity-70 twa:font-normal twa:gap-0.5", children: _jsx(Box, { children: "Drag to reorder and use checkboxes to show or hide columns; click a column to edit in right side panel" }) })] }), _jsxs(Box, { className: "twa:flex-1 twa:min-h-0 twa:p-2 twa:gap-2 twa:overflow-hidden twa:grid twa:grid-cols-2", children: [_jsx(Card, { shadow: false, className: "twa:h-full twa:overflow-hidden twa:flex twa:flex-col", children: _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0 twa:overflow-hidden twa:p-1", children: _jsx(Box, { className: "twa:gap-2 twa:focus:outline-none twa:flex-1 twa:max-h-full twa:overflow-hidden twa:h-full", "data-name": "columns-container", tabIndex: -1, onKeyDown: (event) => {
377
+ const scrollIntoView = (columnId) => {
378
+ const el = event.currentTarget.querySelector(`[data-id="${columnId}"]`);
379
+ el?.scrollIntoView({ block: 'nearest' });
380
+ const input = el?.querySelector('input[type="checkbox"]');
381
+ input?.focus();
382
+ };
383
+ if (event.key === 'ArrowDown') {
384
+ event.preventDefault();
385
+ event.stopPropagation();
386
+ const index = currentlyDisplayedColumnIds.indexOf(selectedColumnId);
387
+ if (index === -1) {
388
+ return;
389
+ }
390
+ const nextColumnId = currentlyDisplayedColumnIds[index + 1];
391
+ const nextColumn = colIdToCol[nextColumnId];
392
+ if (nextColumn) {
393
+ setSelectedColumnId(nextColumn.columnId);
394
+ scrollIntoView(nextColumn.columnId);
395
+ }
389
396
  }
390
- const nextColumnId = currentlyDisplayedColumnIds[index + 1];
391
- const nextColumn = colIdToCol[nextColumnId];
392
- if (nextColumn) {
393
- setSelectedColumnId(nextColumn.columnId);
394
- scrollIntoView(nextColumn.columnId);
397
+ if (event.key === 'ArrowUp') {
398
+ event.preventDefault();
399
+ event.stopPropagation();
400
+ const index = currentlyDisplayedColumnIds.indexOf(selectedColumnId);
401
+ if (index === -1) {
402
+ return;
403
+ }
404
+ const previousColumnId = currentlyDisplayedColumnIds[index - 1];
405
+ const previousColumn = colIdToCol[previousColumnId];
406
+ if (previousColumn) {
407
+ setSelectedColumnId(previousColumn.columnId);
408
+ scrollIntoView(previousColumn.columnId);
409
+ }
395
410
  }
396
- }
397
- if (event.key === 'ArrowUp') {
398
- event.preventDefault();
399
- event.stopPropagation();
400
- const index = currentlyDisplayedColumnIds.indexOf(selectedColumnId);
401
- if (index === -1) {
402
- return;
411
+ if (event.key === ' ') {
412
+ const target = event.target;
413
+ if (target.tagName === 'INPUT' &&
414
+ target.type === 'checkbox') {
415
+ return;
416
+ }
417
+ event.preventDefault();
418
+ event.stopPropagation();
419
+ const selectedColumn = colIdToCol[selectedColumnId];
420
+ if (!selectedColumn) {
421
+ return;
422
+ }
423
+ const visible = isColumnVisible({ columnId: selectedColumnId, layout });
424
+ handleColumnVisibilityChange(selectedColumnId, !visible);
403
425
  }
404
- const previousColumnId = currentlyDisplayedColumnIds[index - 1];
405
- const previousColumn = colIdToCol[previousColumnId];
406
- if (previousColumn) {
407
- setSelectedColumnId(previousColumn.columnId);
408
- scrollIntoView(previousColumn.columnId);
409
- }
410
- }
411
- if (event.key === ' ') {
412
- const target = event.target;
413
- if (target.tagName === 'INPUT' &&
414
- target.type === 'checkbox') {
415
- return;
416
- }
417
- event.preventDefault();
418
- event.stopPropagation();
419
- const selectedColumn = colIdToCol[selectedColumnId];
420
- if (!selectedColumn) {
421
- return;
422
- }
423
- const visible = isColumnVisible({ columnId: selectedColumnId, layout });
424
- handleColumnVisibilityChange(selectedColumnId, !visible);
425
- }
426
- }, children: _jsxs(Box, { className: "twa:flex twa:flex-col twa:gap-2 twa:h-full twa:overflow-hidden twa:p-1", children: [_jsx(AdaptableFormControlTextClear, { value: searchInputValue, OnTextChange: setSearchInputValue, placeholder: "Search Columns...", className: "twa:w-full twa:p-1" }), _jsx(Box, { className: clsx('twa:font-bold', 'twa:border-b twa:border-primarydark/30 twa:rounded-standard'), children: _jsx(CheckBox, { checked: currentlyDisplayedColumnIds.length
427
- ? currentlyDisplayedColumnIds.length === visibleIdsCurrentlyDisplayed.length
428
- ? true
429
- : visibleIdsCurrentlyDisplayed.length
430
- ? null
431
- : false
432
- : false, onChange: (checked) => {
433
- handleColumnVisibilityChange(currentlyDisplayedColumnIds, checked);
434
- }, children: "Select All" }) }), _jsx(ReorderDraggable, { className: "twa:overflow-y-auto", toIdentifier: (option) => `${option.columnId}`, isOptionDraggable: (option) => {
435
- return option.moveable;
436
- }, optionClassName: (option) => {
437
- const baseCls = 'ab-Layout-Wizard__ColumnRow twa:cursor-pointer twa:rounded-standard';
438
- if (selectedColumnId !== option.columnId) {
439
- return baseCls;
440
- }
441
- return clsx(baseCls, 'twa:after:border-accent twa:relative twa:after:border-2 twa:after:rounded-standard twa:after:pointer-events-none twa:after:inset-0 twa:after:absolute twa:after:bg-accent/15');
442
- }, order: currentOrder, onOptionClick: (option, event) => {
443
- if (event.ctrlKey || option.columnId === selectedColumnId) {
444
- setSelectedColumnId(null);
445
- }
446
- else {
447
- setSelectedColumnId(option.columnId);
448
- const row = event.target.closest?.(`[data-id="${option.columnId}"]`);
449
- const input = row?.querySelector('input[type="checkbox"]');
450
- input?.focus();
451
- }
452
- }, renderOption: (option) => {
453
- return (_jsx(ColumnRow, { onColumnNameChange: handleColumnNameChange, onColumnWidthChange: handleColumnWidthChange, onColumnFlexChange: handleColumnFlexChange, onColumnMinWidthChange: handleColumnMinWidthChange, onColumnMaxWidthChange: handleColumnMaxWidthChange, onColumnVisibilityChange: handleColumnVisibilityChange, onPinChange: handlePinChange, onCheckboxFocus: setSelectedColumnId, layout: layout, column: option }));
454
- }, onChange: handleColumnsChange })] }) }), currentOrderIds.length ? (_jsx(ColumnPropertiesEditor, { column: selectedColumnId && currentOrderIds.includes(selectedColumnId)
455
- ? colIdToCol[selectedColumnId] ?? null
456
- : null, layout: layout, onPinChange: handlePinChange, onColumnNameChange: handleColumnNameChange, onColumnWidthChange: handleColumnWidthChange, onColumnFlexChange: handleColumnFlexChange, onColumnMinWidthChange: handleColumnMinWidthChange, onColumnMaxWidthChange: handleColumnMaxWidthChange, onColumnVisibilityChange: handleColumnVisibilityChange })) : null] }) })] }));
426
+ }, children: _jsxs(Box, { className: "twa:flex twa:flex-col twa:gap-2 twa:h-full twa:overflow-hidden twa:p-1", children: [_jsx(AdaptableFormControlTextClear, { value: searchInputValue, OnTextChange: setSearchInputValue, placeholder: "Search Columns...", className: "twa:w-full twa:p-1" }), _jsx(Box, { className: clsx('twa:font-bold', 'twa:border-b twa:border-primarydark/30 twa:rounded-standard'), children: _jsx(CheckBox, { checked: currentlyDisplayedColumnIds.length
427
+ ? currentlyDisplayedColumnIds.length === visibleIdsCurrentlyDisplayed.length
428
+ ? true
429
+ : visibleIdsCurrentlyDisplayed.length
430
+ ? null
431
+ : false
432
+ : false, onChange: (checked) => {
433
+ handleColumnVisibilityChange(currentlyDisplayedColumnIds, checked);
434
+ }, children: "Select All" }) }), _jsx(ReorderDraggable, { className: "twa:overflow-y-auto", toIdentifier: (option) => `${option.columnId}`, isOptionDraggable: (option) => {
435
+ return option.moveable;
436
+ }, optionClassName: (option) => {
437
+ const baseCls = 'ab-Layout-Wizard__ColumnRow twa:cursor-pointer twa:rounded-standard';
438
+ if (selectedColumnId !== option.columnId) {
439
+ return baseCls;
440
+ }
441
+ return clsx(baseCls, 'twa:after:border-accent twa:relative twa:after:border-2 twa:after:rounded-standard twa:after:pointer-events-none twa:after:inset-0 twa:after:absolute twa:after:bg-accent/15');
442
+ }, order: currentOrder, onOptionClick: (option, event) => {
443
+ if (event.ctrlKey || option.columnId === selectedColumnId) {
444
+ setSelectedColumnId(null);
445
+ }
446
+ else {
447
+ setSelectedColumnId(option.columnId);
448
+ const row = event.target.closest?.(`[data-id="${option.columnId}"]`);
449
+ const input = row?.querySelector('input[type="checkbox"]');
450
+ input?.focus();
451
+ }
452
+ }, renderOption: (option) => {
453
+ return (_jsx(ColumnRow, { onColumnNameChange: handleColumnNameChange, onColumnWidthChange: handleColumnWidthChange, onColumnFlexChange: handleColumnFlexChange, onColumnMinWidthChange: handleColumnMinWidthChange, onColumnMaxWidthChange: handleColumnMaxWidthChange, onColumnVisibilityChange: handleColumnVisibilityChange, onPinChange: handlePinChange, onCheckboxFocus: setSelectedColumnId, layout: layout, column: option }));
454
+ }, onChange: handleColumnsChange })] }) }) }) }), currentOrderIds.length ? (_jsx(ColumnPropertiesEditor, { column: selectedColumnId && currentOrderIds.includes(selectedColumnId)
455
+ ? colIdToCol[selectedColumnId] ?? null
456
+ : null, layout: layout, onPinChange: handlePinChange, onColumnNameChange: handleColumnNameChange, onColumnWidthChange: handleColumnWidthChange, onColumnFlexChange: handleColumnFlexChange, onColumnMinWidthChange: handleColumnMinWidthChange, onColumnMaxWidthChange: handleColumnMaxWidthChange, onColumnVisibilityChange: handleColumnVisibilityChange })) : null] })] }));
457
457
  };
458
458
  const hr = (_jsx("hr", { className: "twa:my-3 twa:mb-0 twa:w-full twa:h-[0.5px] twa:bg-input-border/50 twa:border-none" }));
459
459
  const ColumnPropertiesEditor = (props) => {
@@ -2,8 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { getLayoutFilterViewItems } from '../../../../Strategy/Utilities/Layout/getLayoutFilterViewItems';
4
4
  import * as ModuleConstants from '../../../../Utilities/Constants/ModuleConstants';
5
- import FormLayout, { FormRow } from '../../../../components/FormLayout';
6
- import { Tabs } from '../../../../components/Tabs';
7
5
  import { Tag } from '../../../../components/Tag';
8
6
  import { useAdaptable } from '../../../AdaptableContext';
9
7
  import { AdaptableObjectListItemView } from '../../../Components/AdaptableObjectList/AdaptableObjectList';
@@ -11,6 +9,7 @@ import { ColumnSelector } from '../../../Components/Selectors/ColumnSelector';
11
9
  import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptableWizard';
12
10
  import { LayoutColumnFilter } from '../../../Components/ColumnFilter/LayoutColumnFilter';
13
11
  import { Box } from '../../../../components/Flex';
12
+ import { Card } from '../../../../components/Card';
14
13
  export const isColumnFiltersValid = (layout) => {
15
14
  const invalidColumnFilters = (layout.ColumnFilters ?? [])?.filter((columnFilter) => !columnFilter?.Predicates[0]?.PredicateId);
16
15
  if (invalidColumnFilters.length > 0) {
@@ -41,34 +40,34 @@ export const FilterSection = (props) => {
41
40
  ColumnFilters: layoutFilters.map((layoutFilter) => layoutFilter.ColumnId === columnFilter.ColumnId ? { ...columnFilter } : layoutFilter),
42
41
  });
43
42
  }, [layout.ColumnFilters]);
44
- return (_jsxs(Tabs, { className: "twa:h-full", children: [_jsx(Tabs.Tab, { children: "Column Filters" }), _jsxs(Tabs.Content, { children: [_jsx(FormLayout, { className: "twa:mb-2", children: _jsx(FormRow, { label: "Add Column Filter", children: _jsx(ColumnSelector, { filterColumn: (column) => column.filterable && !layoutFilters.some((f) => f.ColumnId === column.columnId), placeholder: "Select Column to create Filter", onChange: (option) => {
45
- props.onChange({
46
- ...layout,
47
- ColumnFilters: [
48
- ...layoutFilters,
49
- {
50
- ColumnId: option,
51
- Predicates: [],
52
- },
53
- ],
54
- });
55
- } }) }) }), layoutFilters?.length > 0 && (_jsx(Box, { className: "twa:p-0", as: "ul", children: layoutFilters.map((columnFilter) => {
56
- const moduleItems = filterModule.toView(columnFilter).items;
57
- const column = adaptable.api.columnApi.getColumnWithColumnId(columnFilter.ColumnId);
58
- const columnGroupItems = column?.columnGroup && column.columnGroup.groupCount > 1
59
- ? [{ name: 'Column Group', values: [column.columnGroup.friendlyName] }]
60
- : [];
61
- const items = [
62
- moduleItems[0],
63
- ...columnGroupItems,
64
- ...moduleItems.slice(1),
65
- {
66
- name: 'Column Filter',
67
- view: (_jsx(LayoutColumnFilter, { columnFilter: columnFilter, onColumnFilterChange: (columnFilter) => {
68
- handlePredicateEdit(columnFilter);
69
- } })),
70
- },
71
- ];
72
- return (_jsx(AdaptableObjectListItemView, { module: filterModule, abObject: columnFilter, entityType: "Column Filter", showActions: true, showEditButton: false, items: items, onDelete: () => handleDelete(columnFilter) }, columnFilter.ColumnId));
73
- }) }))] })] }));
43
+ return (_jsxs(Box, { className: "twa:gap-3 twa:p-3 twa:flex twa:flex-col", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Add Column Filter" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Select a column and then create a Filter" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(ColumnSelector, { filterColumn: (column) => column.filterable && !layoutFilters.some((f) => f.ColumnId === column.columnId), placeholder: "Select a Column", onChange: (option) => {
44
+ props.onChange({
45
+ ...layout,
46
+ ColumnFilters: [
47
+ ...layoutFilters,
48
+ {
49
+ ColumnId: option,
50
+ Predicates: [],
51
+ },
52
+ ],
53
+ });
54
+ } }) })] }), layoutFilters?.length > 0 && (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Column Filters" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Configure predicates for each column filter in this Layout" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Box, { className: "twa:p-0", as: "ul", children: layoutFilters.map((columnFilter) => {
55
+ const moduleItems = filterModule.toView(columnFilter).items;
56
+ const column = adaptable.api.columnApi.getColumnWithColumnId(columnFilter.ColumnId);
57
+ const columnGroupItems = column?.columnGroup && column.columnGroup.groupCount > 1
58
+ ? [{ name: 'Column Group', values: [column.columnGroup.friendlyName] }]
59
+ : [];
60
+ const items = [
61
+ moduleItems[0],
62
+ ...columnGroupItems,
63
+ ...moduleItems.slice(1),
64
+ {
65
+ name: 'Column Filter',
66
+ view: (_jsx(LayoutColumnFilter, { columnFilter: columnFilter, onColumnFilterChange: (columnFilter) => {
67
+ handlePredicateEdit(columnFilter);
68
+ } })),
69
+ },
70
+ ];
71
+ return (_jsx(AdaptableObjectListItemView, { module: filterModule, abObject: columnFilter, entityType: "Column Filter", showActions: true, showEditButton: false, items: items, onDelete: () => handleDelete(columnFilter) }, columnFilter.ColumnId));
72
+ }) }) })] }))] }));
74
73
  };
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { useAdaptable } from '../../../AdaptableContext';
4
4
  import { useOnePageAdaptableWizardContext } from '../../../Wizard/OnePageAdaptableWizard';
@@ -8,6 +8,7 @@ import { GridFilterModuleId } from '../../../../Utilities/Constants/ModuleConsta
8
8
  import StringExtensions from '../../../../Utilities/Extensions/StringExtensions';
9
9
  import { useGridFilterOptionsForExpressionEditorProps } from '../../../GridFilter/useGridFilterOptionsForExpressionEditor';
10
10
  import { Box } from '../../../../components/Flex';
11
+ import { Card } from '../../../../components/Card';
11
12
  export const isGridFiltersValid = (layout, api) => {
12
13
  const expression = layout?.GridFilter?.Expression;
13
14
  if (StringExtensions.IsNullOrEmpty(expression)) {
@@ -25,14 +26,13 @@ export const GridFilterSection = (props) => {
25
26
  const { data: layout } = useOnePageAdaptableWizardContext();
26
27
  const initialData = React.useMemo(() => api.internalApi.getQueryPreviewData(), []);
27
28
  const expressionEditorProps = useGridFilterOptionsForExpressionEditorProps();
28
- const expressionEditorContent = (_jsx(ExpressionEditor, { ...expressionEditorProps, allowSaveNamedQuery: false, type: 'boolean', module: GridFilterModuleId, value: layout?.GridFilter?.Expression ?? '', onChange: (expression) => {
29
- props.onChange({
30
- ...layout,
31
- GridFilter: {
32
- ...layout.GridFilter,
33
- Expression: expression,
34
- },
35
- });
36
- }, initialData: initialData, columns: api.columnApi.internalApi.getQueryableColumnsForUIEditor(), fields: api.expressionApi.internalApi.getAvailableFields(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api }));
37
- return _jsx("div", { children: expressionEditorContent });
29
+ return (_jsx(Box, { className: "twa:p-3", children: _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Grid Filter" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Define a boolean expression to filter rows across the entire grid in this Layout" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(ExpressionEditor, { ...expressionEditorProps, allowSaveNamedQuery: false, type: 'boolean', module: GridFilterModuleId, value: layout?.GridFilter?.Expression ?? '', onChange: (expression) => {
30
+ props.onChange({
31
+ ...layout,
32
+ GridFilter: {
33
+ ...layout.GridFilter,
34
+ Expression: expression,
35
+ },
36
+ });
37
+ }, initialData: initialData, columns: api.columnApi.internalApi.getQueryableColumnsForUIEditor(), fields: api.expressionApi.internalApi.getAvailableFields(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api }) })] }) }));
38
38
  };
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { PivotLayout } from '../../../../../types';
3
- import { validatePivotLayoutAggregations } from '../../../../Aggregation/validateParameterizedAggregations';
4
- export declare const isPivotAggregationsSectionValid: typeof validatePivotLayoutAggregations;
3
+ export declare const isPivotAggregationsSectionValid: (data: PivotLayout) => true | string;
5
4
  export declare const PivotAggregationsSectionSummary: React.FunctionComponent;
6
5
  interface PivotAggregationsSectionProps {
7
6
  onChange: (data: PivotLayout) => void;