@adaptabletools/adaptable-cjs 23.0.0-canary.4 → 23.0.0-canary.6

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 (250) hide show
  1. package/index.css +117 -62
  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 +30 -3
  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 +2 -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 +19 -8
  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 +12 -5
  34. package/src/Strategy/LayoutModule.js +13 -8
  35. package/src/Strategy/StyledColumnModule.js +58 -30
  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 +68 -0
  41. package/src/Utilities/Helpers/StyledColumnGradientHelper.d.ts +23 -1
  42. package/src/Utilities/Helpers/StyledColumnGradientHelper.js +212 -1
  43. package/src/Utilities/Helpers/ThemeHelpers.d.ts +5 -0
  44. package/src/Utilities/Helpers/ThemeHelpers.js +43 -0
  45. package/src/Utilities/Helpers/percentBarPreviewHelper.d.ts +19 -0
  46. package/src/Utilities/Helpers/percentBarPreviewHelper.js +155 -0
  47. package/src/Utilities/ObjectFactory.d.ts +1 -3
  48. package/src/Utilities/ObjectFactory.js +0 -9
  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 +113 -102
  52. package/src/View/Alert/Wizard/AlertMessageWizardSection.js +12 -13
  53. package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +54 -54
  54. package/src/View/Alert/Wizard/AlertRulesWizardSection.js +4 -3
  55. package/src/View/Alert/Wizard/AlertScheduledWizardSection.js +1 -1
  56. package/src/View/Alert/Wizard/AlertScopeWizardSection.js +29 -37
  57. package/src/View/Alert/Wizard/AlertTypeWizardSection.js +2 -3
  58. package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +9 -13
  59. package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +28 -15
  60. package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +7 -9
  61. package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +2 -2
  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 +26 -0
  69. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.d.ts +1 -0
  70. package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +9 -6
  71. package/src/View/Comments/CommentsEditor.js +1 -1
  72. package/src/View/Components/ColumnFilter/components/ColumnFilterInput.js +0 -1
  73. package/src/View/Components/ColumnFilter/components/ColumnFilterInputList.js +3 -1
  74. package/src/View/Components/ModuleProfile.js +1 -1
  75. package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +0 -1
  76. package/src/View/Components/Popups/WindowPopups/windowFactory.js +1 -2
  77. package/src/View/Components/RangesComponent.d.ts +7 -2
  78. package/src/View/Components/RangesComponent.js +94 -22
  79. package/src/View/Components/StyleComponent.d.ts +1 -0
  80. package/src/View/Components/StyleComponent.js +1 -1
  81. package/src/View/Components/ValueSelector/index.js +70 -57
  82. package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +8 -13
  83. package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +8 -8
  84. package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -1
  85. package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +11 -12
  86. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.js +5 -4
  87. package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.js +2 -1
  88. package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +4 -15
  89. package/src/View/Export/Wizard/ReportColumnsWizardSection.js +24 -27
  90. package/src/View/Export/Wizard/ReportNameWizardSection.js +8 -11
  91. package/src/View/Export/Wizard/ReportRowsWizardSection.js +19 -22
  92. package/src/View/Export/Wizard/ScheduledReportSettings.d.ts +2 -0
  93. package/src/View/Export/Wizard/ScheduledReportSettings.js +12 -12
  94. package/src/View/Export/Wizard/ScheduledReportWizard.js +2 -3
  95. package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +8 -6
  96. package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +19 -20
  97. package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +20 -11
  98. package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +19 -3
  99. package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +4 -4
  100. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +7 -0
  101. package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +120 -13
  102. package/src/View/FormatColumn/Wizard/FormatColumnPreview.d.ts +15 -0
  103. package/src/View/FormatColumn/Wizard/FormatColumnPreview.js +78 -0
  104. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +4 -0
  105. package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +34 -0
  106. package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +11 -6
  107. package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
  108. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +3 -1
  109. package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +64 -13
  110. package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +3 -1
  111. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.d.ts +2 -0
  112. package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.js +19 -0
  113. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.d.ts +10 -0
  114. package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.js +60 -0
  115. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +2 -3
  116. package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +35 -70
  117. package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +14 -10
  118. package/src/View/Layout/TransposedPopup.js +2 -2
  119. package/src/View/Layout/Wizard/LayoutWizard.js +3 -3
  120. package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +2 -3
  121. package/src/View/Layout/Wizard/sections/AggregationsSection.js +116 -26
  122. package/src/View/Layout/Wizard/sections/ColumnsSection.js +79 -79
  123. package/src/View/Layout/Wizard/sections/FilterSection.js +31 -32
  124. package/src/View/Layout/Wizard/sections/GridFilterSection.js +10 -10
  125. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.d.ts +1 -2
  126. package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +101 -51
  127. package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +9 -8
  128. package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +4 -4
  129. package/src/View/Layout/Wizard/sections/RowGroupingSection.js +36 -33
  130. package/src/View/Layout/Wizard/sections/RowSelectionSection.js +2 -2
  131. package/src/View/Layout/Wizard/sections/RowSummarySection.js +95 -73
  132. package/src/View/Layout/Wizard/sections/SettingsSection.js +3 -4
  133. package/src/View/Layout/Wizard/sections/SortSection.js +2 -2
  134. package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
  135. package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +7 -12
  136. package/src/View/NamedQuery/Wizard/NamedQueryWizard.js +1 -3
  137. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.d.ts +4 -0
  138. package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.js +45 -12
  139. package/src/View/PlusMinus/Wizard/PlusMinusScopeWizardSection.js +10 -17
  140. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.d.ts +2 -6
  141. package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +5 -21
  142. package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +15 -21
  143. package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +2 -2
  144. package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +10 -17
  145. package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +16 -5
  146. package/src/View/Shortcut/Wizard/ShortcutWizard.js +2 -2
  147. package/src/View/Shortcut/shortcutOperations.d.ts +3 -0
  148. package/src/View/Shortcut/shortcutOperations.js +32 -1
  149. package/src/View/SpecialColumnSettingsWizardStep.js +7 -6
  150. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.d.ts +5 -0
  151. package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +26 -16
  152. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +10 -2
  153. package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +100 -15
  154. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.d.ts +14 -0
  155. package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +48 -25
  156. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.d.ts +2 -3
  157. package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +109 -33
  158. package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +20 -12
  159. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.d.ts +5 -0
  160. package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +124 -23
  161. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.d.ts +1 -0
  162. package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +35 -11
  163. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.d.ts +5 -0
  164. package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +88 -11
  165. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.d.ts +5 -0
  166. package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +125 -35
  167. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.d.ts +1 -0
  168. package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +55 -74
  169. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.d.ts +5 -0
  170. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.js +20 -0
  171. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.js +6 -12
  172. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarColumnComparisonPreview.js +5 -5
  173. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarRangesPreview.js +2 -1
  174. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.d.ts +5 -4
  175. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.js +11 -13
  176. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.d.ts +5 -0
  177. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.js +20 -0
  178. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.d.ts +3 -0
  179. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +32 -3
  180. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.d.ts +9 -0
  181. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +64 -0
  182. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.d.ts +10 -0
  183. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.js +35 -0
  184. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.d.ts +10 -0
  185. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.js +96 -0
  186. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.d.ts +8 -0
  187. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.js +57 -0
  188. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.d.ts +8 -0
  189. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +58 -0
  190. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.d.ts +18 -0
  191. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.js +66 -0
  192. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.d.ts +10 -0
  193. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.js +133 -0
  194. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardRangesSection.js +12 -5
  195. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.d.ts +1 -5
  196. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +53 -29
  197. package/src/View/SystemStatus/Utilities/getStatusItemStyle.js +1 -1
  198. package/src/View/Theme/ThemePopup.d.ts +2 -14
  199. package/src/View/Theme/ThemePopup.js +1 -36
  200. package/src/View/UIHelper.js +1 -1
  201. package/src/View/Wizard/OnePageAdaptableWizard.js +6 -20
  202. package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
  203. package/src/agGrid/AdaptableAgGrid.js +34 -24
  204. package/src/agGrid/AgGridAdapter.d.ts +1 -1
  205. package/src/agGrid/AgGridAdapter.js +27 -17
  206. package/src/agGrid/AgGridColumnAdapter.js +9 -15
  207. package/src/agGrid/AgGridMenuAdapter.d.ts +0 -1
  208. package/src/agGrid/AgGridMenuAdapter.js +20 -37
  209. package/src/agGrid/buildValueAggregationMenuItem.d.ts +19 -0
  210. package/src/agGrid/buildValueAggregationMenuItem.js +114 -0
  211. package/src/agGrid/cellRenderers/IconRenderer.d.ts +6 -0
  212. package/src/agGrid/cellRenderers/IconRenderer.js +46 -17
  213. package/src/agGrid/createAgGridIcon.d.ts +10 -0
  214. package/src/agGrid/createAgGridIcon.js +19 -0
  215. package/src/components/DragAndDropContext/UnusedPanel.js +1 -1
  216. package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
  217. package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
  218. package/src/components/Input/NumberInput.js +1 -1
  219. package/src/components/Panel/index.js +1 -1
  220. package/src/components/SimpleButton/index.js +4 -4
  221. package/src/components/Toggle/Toggle.js +1 -1
  222. package/src/components/Toggle/ToggleGroup.js +1 -1
  223. package/src/env.js +2 -2
  224. package/src/layout-manager/src/index.js +2 -9
  225. package/src/metamodel/adaptable.metamodel.d.ts +39 -29
  226. package/src/metamodel/adaptable.metamodel.js +1 -1
  227. package/src/types.d.ts +5 -4
  228. package/themes/dark.css +1 -68
  229. package/themes/light.css +1 -5
  230. package/tsconfig.cjs.tsbuildinfo +1 -1
  231. package/src/Aggregation/ParameterizedAggregationRegistry.d.ts +0 -35
  232. package/src/Aggregation/ParameterizedAggregationRegistry.js +0 -74
  233. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.d.ts +0 -3
  234. package/src/Aggregation/definitions/weightedAverageAggregationDefinition.js +0 -58
  235. package/src/Aggregation/parameterizedAggregationColumnMenu.d.ts +0 -8
  236. package/src/Aggregation/parameterizedAggregationColumnMenu.js +0 -143
  237. package/src/Aggregation/parameterizedAggregationHeader.d.ts +0 -13
  238. package/src/Aggregation/parameterizedAggregationHeader.js +0 -65
  239. package/src/Aggregation/parameterizedAggregationHelpers.d.ts +0 -23
  240. package/src/Aggregation/parameterizedAggregationHelpers.js +0 -121
  241. package/src/Aggregation/parameterizedAggregationWizardHelpers.d.ts +0 -9
  242. package/src/Aggregation/parameterizedAggregationWizardHelpers.js +0 -74
  243. package/src/Aggregation/validateParameterizedAggregations.d.ts +0 -4
  244. package/src/Aggregation/validateParameterizedAggregations.js +0 -25
  245. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.d.ts +0 -12
  246. package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.js +0 -48
  247. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.d.ts +0 -5
  248. package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.js +0 -32
  249. package/src/View/Theme/VariantSelector.d.ts +0 -8
  250. package/src/View/Theme/VariantSelector.js +0 -25
@@ -1,11 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRuleValid = exports.PlusMinusRuleStepSummary = void 0;
3
4
  exports.PlusMinusRuleSummary = PlusMinusRuleSummary;
4
5
  exports.PlusMinusRuleWizardSection = PlusMinusRuleWizardSection;
5
6
  const jsx_runtime_1 = require("react/jsx-runtime");
6
7
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
7
8
  const EntityRulesEditor_1 = require("../../Components/EntityRulesEditor");
8
9
  const CodeBlock_1 = require("../../../components/CodeBlock");
10
+ const Utilities_1 = require("../../Components/EntityRulesEditor/Utilities");
11
+ const Flex_1 = require("../../../components/Flex");
12
+ const Card_1 = require("../../../components/Card");
13
+ const TypeRadio_1 = require("../../Wizard/TypeRadio");
14
+ const Tag_1 = require("../../../components/Tag");
9
15
  function PlusMinusRuleSummary() {
10
16
  const { data } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
11
17
  return ((0, jsx_runtime_1.jsx)(EntityRulesEditor_1.EntityRulesSummary, { data: data, renderPredicate: (contents) => {
@@ -14,22 +20,49 @@ function PlusMinusRuleSummary() {
14
20
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Apply Plus Minus when", ' ', (0, jsx_runtime_1.jsx)("b", { children: (0, jsx_runtime_1.jsx)(CodeBlock_1.CodeBlock, { children: contents }) })] }));
15
21
  } }));
16
22
  }
23
+ const PlusMinusRuleStepSummary = () => {
24
+ const { data } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
25
+ const hasCondition = Boolean(data.Rule);
26
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Nudge Type ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: hasCondition ? 'Conditional' : 'Always Apply' })] }), hasCondition ? (0, jsx_runtime_1.jsx)(PlusMinusRuleSummary, {}) : null] }));
27
+ };
28
+ exports.PlusMinusRuleStepSummary = PlusMinusRuleStepSummary;
29
+ const isRuleValid = (data, api, context) => {
30
+ if (!data.Rule) {
31
+ return true;
32
+ }
33
+ if (!data.Rule.BooleanExpression) {
34
+ return 'A valid rule is required.';
35
+ }
36
+ const ruleValidation = (0, Utilities_1.isAdaptableRuleValid)(data, api, context);
37
+ if (typeof ruleValidation === 'string') {
38
+ return ruleValidation;
39
+ }
40
+ return true;
41
+ };
42
+ exports.isRuleValid = isRuleValid;
17
43
  function PlusMinusRuleWizardSection(props) {
18
44
  const { data, moduleInfo } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
45
+ const hasCondition = Boolean(data.Rule);
46
+ const handleNudgeTypeChange = (conditional) => {
47
+ if (conditional) {
48
+ props.onChange({
49
+ ...data,
50
+ Rule: data.Rule ?? { BooleanExpression: '' },
51
+ });
52
+ return;
53
+ }
54
+ const preparedData = { ...data };
55
+ delete preparedData.Rule;
56
+ props.onChange(preparedData);
57
+ };
19
58
  const plusMinusNudge = {
20
59
  ...data,
21
60
  Rule: data?.Rule ?? { BooleanExpression: '' },
22
61
  };
23
- return ((0, jsx_runtime_1.jsx)(EntityRulesEditor_1.EntityRulesEditor, { module: moduleInfo.ModuleName,
24
- // min-height 0 so the container does not min-size from it's children
25
- // https://stackoverflow.com/questions/33605552/how-to-prevent-a-flex-item-height-to-overflow-due-to-its-content
26
- flexProps: { style: { minHeight: 0 } }, defaultPredicateId: props.defaultPredicateId, predicateDefs: [], showAggregation: false, showObservable: false, showPredicate: false, data: plusMinusNudge,
27
- // the cast is to convince TS that it still a PlusMinusNudge
28
- // even when Rule is not optional, the type is inferred from `plusMinusNudge`
29
- onChange: (plusMinus) => props.onChange(plusMinus), descriptions: {
30
- selectPredicate: null,
31
- useBooleanQuery: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Use an BooleanQuery if ", (0, jsx_runtime_1.jsx)("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex BooleanExpression"] })),
32
- useObservableQuery: null,
33
- useAggregationQuery: null,
34
- } }));
62
+ return ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: [(0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Nudge Type" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose whether the nudge is always applied or only when a condition is met" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { children: (0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { "data-name": "nudge-type-always", text: "Always Apply", description: "The nudge value is always applied when using Plus/Minus", checked: !hasCondition, onClick: () => handleNudgeTypeChange(false) }), (0, jsx_runtime_1.jsx)(TypeRadio_1.TypeRadio, { "data-name": "nudge-type-condition", text: "Conditional", description: "Apply the nudge only when the row matches a rule", checked: hasCondition, onClick: () => handleNudgeTypeChange(true) })] }) })] }), hasCondition ? ((0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Condition" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Build a rule that determines when the nudge should be applied" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:flex-1 twa:min-h-0", children: (0, jsx_runtime_1.jsx)(EntityRulesEditor_1.EntityRulesEditor, { module: moduleInfo.ModuleName, flexProps: { style: { minHeight: 0 } }, defaultPredicateId: props.defaultPredicateId, predicateDefs: [], showAggregation: false, showObservable: false, showPredicate: false, data: plusMinusNudge, onChange: (plusMinus) => props.onChange(plusMinus), descriptions: {
63
+ selectPredicate: null,
64
+ useBooleanQuery: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Use an BooleanQuery if ", (0, jsx_runtime_1.jsx)("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex BooleanExpression"] })),
65
+ useObservableQuery: null,
66
+ useAggregationQuery: null,
67
+ } }) })] })) : null] }));
35
68
  }
@@ -6,25 +6,18 @@ const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
8
8
  const NewScopeComponent_1 = require("../../Components/NewScopeComponent");
9
+ const Flex_1 = require("../../../components/Flex");
9
10
  const PlusMinusScopeWizardSection = (props) => {
10
11
  const { data, api } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
11
12
  const availableColumns = React.useMemo(() => api.columnApi.getNumericColumns(), []);
12
- return ((0, jsx_runtime_1.jsx)(NewScopeComponent_1.NewScopeComponent, { availableDataTypes: ['number'], scopeColumns: availableColumns, scope: data.Scope, descriptions: {
13
- rowScope: 'Matching rows will have the plus/minus applied',
14
- columnScope: 'Matching Columns will have the plus/minus applied',
15
- }, updateScope: (Scope) => {
16
- let preparedScope = Scope;
17
- if (Scope && 'DataTypes' in Scope && Scope.DataTypes.length === 0) {
18
- // default to checked
19
- preparedScope = {
20
- ...Scope,
21
- DataTypes: ['number'],
22
- };
23
- }
24
- props.onChange({
25
- ...data,
26
- Scope: preparedScope,
27
- });
28
- } }));
13
+ return ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:h-full", children: [(0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2 twa:gap-3 twa:border-b twa:mb-2 twa:border-b-foreground/20", children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-5 twa:font-medium", children: "Target" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Specify where the Plus/Minus Nudge should be applied (numeric columns only)" })] }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-2", children: (0, jsx_runtime_1.jsx)(NewScopeComponent_1.NewScopeComponent, { disableDataTypes: true, scopeColumns: availableColumns, scope: data.Scope, descriptions: {
14
+ rowScope: 'Matching rows will have the plus/minus applied',
15
+ columnScope: 'Selected Columns will have the plus/minus applied',
16
+ }, updateScope: (Scope) => {
17
+ props.onChange({
18
+ ...data,
19
+ Scope: Scope,
20
+ });
21
+ } }) })] }));
29
22
  };
30
23
  exports.PlusMinusScopeWizardSection = PlusMinusScopeWizardSection;
@@ -1,14 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { OnePageAdaptableWizardContextType } from '../../Wizard/OnePageAdaptableWizard';
3
3
  import { AdaptableApi, PlusMinusNudge } from '../../../types';
4
- export declare const PlusMinusSettingsSummary: React.FunctionComponent<{
5
- hasCondition: boolean;
6
- }>;
7
- export declare const isSettingsValid: (hasCondition: boolean) => (data: PlusMinusNudge, api: AdaptableApi, context: OnePageAdaptableWizardContextType<PlusMinusNudge>) => string | true;
4
+ export declare const PlusMinusSettingsSummary: React.FunctionComponent;
5
+ export declare const isSettingsValid: (data: PlusMinusNudge, api: AdaptableApi, _context: OnePageAdaptableWizardContextType<PlusMinusNudge>) => true | "A name is required." | "A Plus/Minus Nudge with this name already exists." | "A nudge value is required." | "Nudge value must not be zero." | "Increment and decrement keys cannot be the same for this nudge.";
8
6
  interface PlusMinusSettingsWizardSectionProps {
9
7
  onChange: (plusMinusNudge: PlusMinusNudge) => void;
10
- hasCondition: boolean;
11
- onConditionChange: (hasCondition: boolean) => void;
12
8
  }
13
9
  export declare const PlusMinusSettingsWizardSection: React.FunctionComponent<PlusMinusSettingsWizardSectionProps>;
14
10
  export {};
@@ -5,25 +5,18 @@ const tslib_1 = require("tslib");
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const Input_1 = tslib_1.__importDefault(require("../../../components/Input"));
8
- const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
9
- const Tabs_1 = require("../../../components/Tabs");
10
8
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
11
- const PlusMinusRuleWizardSection_1 = require("./PlusMinusRuleWizardSection");
12
- const Utilities_1 = require("../../Components/EntityRulesEditor/Utilities");
13
9
  const Tag_1 = require("../../../components/Tag");
14
10
  const Flex_1 = require("../../../components/Flex");
11
+ const Card_1 = require("../../../components/Card");
15
12
  const plusMinusTriggerKeys_1 = require("../../../Utilities/Helpers/plusMinusTriggerKeys");
16
- const plusMinusSettingsFormColumns = [
17
- { name: 'label', style: { textAlign: 'start' } },
18
- { name: 'children' },
19
- ];
20
- const PlusMinusSettingsSummary = (props) => {
13
+ const PlusMinusSettingsSummary = () => {
21
14
  const { data, api } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
22
15
  const { incrementKey, decrementKey } = (0, plusMinusTriggerKeys_1.resolvePlusMinusTriggerKeysForNudge)(data, api.optionsApi.getEditOptions().plusMinusOptions ?? {});
23
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Name ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: data.Name || 'Not specified' })] }), (0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Nudge Value ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: data.NudgeValue ?? 'Not selected' })] }), (0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Keys ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: incrementKey }), " / ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: decrementKey })] }), (0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Nudge Type ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: props.hasCondition ? 'Conditional' : 'Always Apply' })] }), props.hasCondition && (0, jsx_runtime_1.jsx)(PlusMinusRuleWizardSection_1.PlusMinusRuleSummary, {})] }));
16
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Name ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: data.Name || 'Not specified' })] }), (0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Nudge Value ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: data.NudgeValue ?? 'Not selected' })] }), (0, jsx_runtime_1.jsxs)(OnePageAdaptableWizard_1.SummaryText, { children: ["Keys ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: incrementKey }), " / ", (0, jsx_runtime_1.jsx)(Tag_1.Tag, { children: decrementKey })] })] }));
24
17
  };
25
18
  exports.PlusMinusSettingsSummary = PlusMinusSettingsSummary;
26
- const isSettingsValid = (hasCondition) => (data, api, context) => {
19
+ const isSettingsValid = (data, api, _context) => {
27
20
  if (!data.Name?.trim()) {
28
21
  return 'A name is required.';
29
22
  }
@@ -32,15 +25,6 @@ const isSettingsValid = (hasCondition) => (data, api, context) => {
32
25
  if (isDuplicateName) {
33
26
  return 'A Plus/Minus Nudge with this name already exists.';
34
27
  }
35
- if (hasCondition) {
36
- if (!data?.Rule?.BooleanExpression) {
37
- return 'A valid rule is required.';
38
- }
39
- const ruleValidation = (0, Utilities_1.isAdaptableRuleValid)(data, api, context);
40
- if (typeof ruleValidation === 'string') {
41
- return ruleValidation;
42
- }
43
- }
44
28
  if (typeof data.NudgeValue !== 'number') {
45
29
  return 'A nudge value is required.';
46
30
  }
@@ -131,6 +115,6 @@ const PlusMinusSettingsWizardSection = (props) => {
131
115
  commitDecrementKey(event.target.value);
132
116
  setDecrementEdit(undefined);
133
117
  };
134
- return ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", "data-name": "plus-minus-column-settings", className: "twa:h-full", children: [(0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { className: "twa:p-2", children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Settings" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsxs)(FormLayout_1.default, { columns: plusMinusSettingsFormColumns, sizes: ['minmax(140px, max-content)', '1fr'], children: [(0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Name", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "plus-minus-name", className: "twa:mr-3 twa:max-w-md twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: data.Name ?? '' }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Nudge Value", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "nudge-value", className: "twa:mr-3 twa:max-w-md twa:w-full", onChange: handleNudgeValueChange, placeholder: "Enter Number", type: "number", value: data.NudgeValue ?? '' }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Increment key", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "plus-minus-increment-key", className: "twa:mr-3 twa:max-w-md twa:w-full", onBlur: handleIncrementKeyBlur, onChange: handleIncrementKeyChange, onFocus: handleIncrementKeyFocus, value: incrementDisplayValue }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Decrement key", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "plus-minus-decrement-key", className: "twa:mr-3 twa:max-w-md twa:w-full", onBlur: handleDecrementKeyBlur, onChange: handleDecrementKeyChange, onFocus: handleDecrementKeyFocus, value: decrementDisplayValue }) })] }) })] }), (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { className: "twa:p-2", selectedIndex: props.hasCondition ? 1 : 0, onSelectedIndexChange: (index) => props.onConditionChange(index === 1), children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { "data-name": "nudge-type-always", children: "Always Apply" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { "data-name": "nudge-type-condition", children: "Conditional" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(Flex_1.Flex, { className: "twa:text-2 twa:py-2", children: "The nudge value is always applied when using Plus/Minus" }) }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { className: "twa:p-0", children: (0, jsx_runtime_1.jsx)(PlusMinusRuleWizardSection_1.PlusMinusRuleWizardSection, { defaultPredicateId: "NonBlanks", onChange: props.onChange }) })] })] }));
118
+ return ((0, jsx_runtime_1.jsx)(Flex_1.Box, { "data-name": "plus-minus-column-settings", children: (0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: [(0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Name" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Provide a unique name for the Plus/Minus Nudge" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "plus-minus-name", className: "twa:max-w-[300px] twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: data.Name ?? '' }) })] }), (0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Nudge Value" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Amount added to or subtracted from the cell value when Plus/Minus is used" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "nudge-value", className: "twa:max-w-[300px] twa:w-full", onChange: handleNudgeValueChange, placeholder: "Enter Number", type: "number", value: data.NudgeValue ?? '' }) })] }), (0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Trigger Keys" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Keyboard keys that trigger increment and decrement" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:gap-3", children: [(0, jsx_runtime_1.jsxs)(Flex_1.Box, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-2 twa:mb-1 twa:opacity-80", children: "Increment key" }), (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "plus-minus-increment-key", className: "twa:max-w-[300px] twa:w-full", onBlur: handleIncrementKeyBlur, onChange: handleIncrementKeyChange, onFocus: handleIncrementKeyFocus, value: incrementDisplayValue })] }), (0, jsx_runtime_1.jsxs)(Flex_1.Box, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-2 twa:mb-1 twa:opacity-80", children: "Decrement key" }), (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "plus-minus-decrement-key", className: "twa:max-w-[300px] twa:w-full", onBlur: handleDecrementKeyBlur, onChange: handleDecrementKeyChange, onFocus: handleDecrementKeyFocus, value: decrementDisplayValue })] })] }) })] })] }) }));
135
119
  };
136
120
  exports.PlusMinusSettingsWizardSection = PlusMinusSettingsWizardSection;
@@ -8,6 +8,7 @@ const OnePageAdaptableWizard_1 = require("../../../View/Wizard/OnePageAdaptableW
8
8
  const NewScopeComponent_1 = require("../../Components/NewScopeComponent");
9
9
  const PlusMinusScopeWizardSection_1 = require("./PlusMinusScopeWizardSection");
10
10
  const PlusMinusSettingsWizardSection_1 = require("./PlusMinusSettingsWizardSection");
11
+ const PlusMinusRuleWizardSection_1 = require("./PlusMinusRuleWizardSection");
11
12
  const ObjectFactory_1 = tslib_1.__importDefault(require("../../../Utilities/ObjectFactory"));
12
13
  const react_redux_1 = require("react-redux");
13
14
  const PlusMinusRedux = tslib_1.__importStar(require("../../../Redux/ActionsReducers/PlusMinusRedux"));
@@ -30,22 +31,6 @@ const PlusMinusWizard = (props) => {
30
31
  const setPlusMinus = React.useCallback((data) => {
31
32
  doSetPlusMinus(data);
32
33
  }, []);
33
- const [hasCondition, setHasCondition] = React.useState(() => {
34
- // true if on edit and it has a condition
35
- return Boolean(props?.data?.Rule);
36
- });
37
- React.useEffect(() => {
38
- doSetPlusMinus((prev) => {
39
- const preparedData = { ...prev };
40
- if (hasCondition) {
41
- preparedData.Rule = preparedData.Rule ?? { BooleanExpression: '' };
42
- }
43
- else {
44
- delete preparedData.Rule;
45
- }
46
- return preparedData;
47
- });
48
- }, [hasCondition]);
49
34
  const dispatch = (0, react_redux_1.useDispatch)();
50
35
  const handleFinish = () => {
51
36
  if (props.data) {
@@ -59,9 +44,17 @@ const PlusMinusWizard = (props) => {
59
44
  return ((0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageAdaptableWizard, { defaultCurrentSectionName: props.defaultCurrentSectionName, moduleInfo: props.moduleInfo, data: plusMinus, onHide: props.onCloseWizard, onFinish: handleFinish, sections: [
60
45
  {
61
46
  title: 'Settings',
62
- isValid: (0, PlusMinusSettingsWizardSection_1.isSettingsValid)(hasCondition),
63
- renderSummary: () => (0, jsx_runtime_1.jsx)(PlusMinusSettingsWizardSection_1.PlusMinusSettingsSummary, { hasCondition: hasCondition }),
64
- render: () => ((0, jsx_runtime_1.jsx)(PlusMinusSettingsWizardSection_1.PlusMinusSettingsWizardSection, { hasCondition: hasCondition, onConditionChange: setHasCondition, onChange: setPlusMinus })),
47
+ details: 'Provide details of the Plus/Minus Nudge',
48
+ isValid: PlusMinusSettingsWizardSection_1.isSettingsValid,
49
+ renderSummary: () => (0, jsx_runtime_1.jsx)(PlusMinusSettingsWizardSection_1.PlusMinusSettingsSummary, {}),
50
+ render: () => (0, jsx_runtime_1.jsx)(PlusMinusSettingsWizardSection_1.PlusMinusSettingsWizardSection, { onChange: setPlusMinus }),
51
+ },
52
+ {
53
+ title: 'Rule',
54
+ details: 'Choose when the nudge should be applied',
55
+ isValid: PlusMinusRuleWizardSection_1.isRuleValid,
56
+ renderSummary: () => (0, jsx_runtime_1.jsx)(PlusMinusRuleWizardSection_1.PlusMinusRuleStepSummary, {}),
57
+ render: () => ((0, jsx_runtime_1.jsx)(PlusMinusRuleWizardSection_1.PlusMinusRuleWizardSection, { defaultPredicateId: "NonBlanks", onChange: setPlusMinus })),
65
58
  },
66
59
  {
67
60
  title: 'Target',
@@ -70,9 +63,9 @@ const PlusMinusWizard = (props) => {
70
63
  renderSummary: () => (0, NewScopeComponent_1.renderScopeSummary)(plusMinus.Scope, {
71
64
  scopeWholeRow: 'Plus/Minus is applied for matching rows',
72
65
  scopeColumns: 'Plus/Minus is applied in cells in selected columns',
73
- scopeDataTypes: 'Plus/Minus is applied for cells with selected data type',
66
+ scopeDataTypes: '',
74
67
  }),
75
- render: () => ((0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:p-2", children: (0, jsx_runtime_1.jsx)(PlusMinusScopeWizardSection_1.PlusMinusScopeWizardSection, { onChange: setPlusMinus }) })),
68
+ render: () => (0, jsx_runtime_1.jsx)(PlusMinusScopeWizardSection_1.PlusMinusScopeWizardSection, { onChange: setPlusMinus }),
76
69
  },
77
70
  {
78
71
  details: 'Select Plus/Minus Tags',
@@ -83,6 +76,7 @@ const PlusMinusWizard = (props) => {
83
76
  },
84
77
  '-',
85
78
  {
79
+ details: 'Review the Plus/Minus Nudge',
86
80
  render: () => {
87
81
  return ((0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:p-2", children: (0, jsx_runtime_1.jsx)(OnePageAdaptableWizard_1.OnePageWizardSummary, {}) }));
88
82
  },
@@ -7,10 +7,10 @@ const React = tslib_1.__importStar(require("react"));
7
7
  const CheckBox_1 = require("../../../components/CheckBox");
8
8
  const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
9
9
  const Radio_1 = tslib_1.__importDefault(require("../../../components/Radio"));
10
- const Tabs_1 = require("../../../components/Tabs");
11
10
  const AdaptableInput_1 = tslib_1.__importDefault(require("../../Components/AdaptableInput"));
12
11
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
13
12
  const Flex_1 = require("../../../components/Flex");
13
+ const Card_1 = require("../../../components/Card");
14
14
  const NewSelect_1 = require("../../../components/NewSelect");
15
15
  const ObjectFactory_1 = tslib_1.__importDefault(require("../../../Utilities/ObjectFactory"));
16
16
  const ScheduleHelper_1 = require("../../../Utilities/Helpers/ScheduleHelper");
@@ -160,6 +160,6 @@ const ScheduleBuilderWizard = (props) => {
160
160
  commit({ customCron: value, preset: 'custom' });
161
161
  };
162
162
  const timeValue = `${`${hour}`.padStart(2, '0')}:${`${minute}`.padStart(2, '0')}`;
163
- return ((0, jsx_runtime_1.jsx)(Flex_1.Box, { "data-name": "schedule-setup", children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { autoFocus: false, children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Schedule" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsxs)(FormLayout_1.default, { children: [(0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { label: "Frequency", children: [(0, jsx_runtime_1.jsx)(Radio_1.default, { "data-name": "frequency-recurring", className: "twa:mr-2", value: "recurring", checked: !isOneOff, onChange: (checked) => checked && handleFrequencyChange(false), children: "Recurring" }), (0, jsx_runtime_1.jsx)(Radio_1.default, { "data-name": "frequency-one-off", checked: isOneOff, value: "oneoff", onChange: (checked) => checked && handleFrequencyChange(true), children: "One-off" })] }), isOneOff ? ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Date", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "one-off-date", className: "twa:w-[300px]", type: "date", placeholder: "Date", onChange: handleOneOffDateChange, value: oneOffDate }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Pattern", children: (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:max-w-[300px]", children: (0, jsx_runtime_1.jsx)(NewSelect_1.SingleSelect, { className: "twa:w-full", "data-name": "recurrence-preset", items: PRESET_OPTIONS, value: preset, placeholder: "Select pattern", onValueChange: handlePresetChange }) }) }), preset === 'selectedDays' && ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Days", children: daysMap.map((day) => ((0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": `day-${day.value}`, className: "twa:ml-2 twa:w-1/3", value: day.value, checked: selectedDays.includes(day.value), onChange: (checked) => handleDayChange(checked, day.value), children: day.label }, day.value))) })), preset === 'monthly' && ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Day of month", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "day-of-month", className: "twa:w-[120px]", type: "number", min: 1, max: 31, value: dayOfMonth, onChange: handleDayOfMonthChange }) })), preset === 'custom' && ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Cron expression", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "custom-cron", className: "twa:w-[300px]", placeholder: "minute hour day month weekday", value: customCron, onChange: handleCustomCronChange }) }))] })), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Time", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "time", className: "twa:w-[300px]", value: timeValue, type: "time", onChange: handleTimeChange }) })] }) })] }) }));
163
+ return ((0, jsx_runtime_1.jsx)(Flex_1.Box, { "data-name": "schedule-setup", children: (0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Schedule" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Configure when this should run" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { children: (0, jsx_runtime_1.jsxs)(FormLayout_1.default, { children: [(0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { label: "Frequency", children: [(0, jsx_runtime_1.jsx)(Radio_1.default, { "data-name": "frequency-recurring", className: "twa:mr-2", value: "recurring", checked: !isOneOff, onChange: (checked) => checked && handleFrequencyChange(false), children: "Recurring" }), (0, jsx_runtime_1.jsx)(Radio_1.default, { "data-name": "frequency-one-off", checked: isOneOff, value: "oneoff", onChange: (checked) => checked && handleFrequencyChange(true), children: "One-off" })] }), isOneOff ? ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Date", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "one-off-date", className: "twa:w-[300px]", type: "date", placeholder: "Date", onChange: handleOneOffDateChange, value: oneOffDate }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Pattern", children: (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:max-w-[300px]", children: (0, jsx_runtime_1.jsx)(NewSelect_1.SingleSelect, { className: "twa:w-full", "data-name": "recurrence-preset", items: PRESET_OPTIONS, value: preset, placeholder: "Select pattern", onValueChange: handlePresetChange }) }) }), preset === 'selectedDays' && ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Days", children: daysMap.map((day) => ((0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": `day-${day.value}`, className: "twa:ml-2 twa:w-1/3", value: day.value, checked: selectedDays.includes(day.value), onChange: (checked) => handleDayChange(checked, day.value), children: day.label }, day.value))) })), preset === 'monthly' && ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Day of month", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "day-of-month", className: "twa:w-[120px]", type: "number", min: 1, max: 31, value: dayOfMonth, onChange: handleDayOfMonthChange }) })), preset === 'custom' && ((0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Cron expression", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "custom-cron", className: "twa:w-[300px]", placeholder: "minute hour day month weekday", value: customCron, onChange: handleCustomCronChange }) }))] })), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Time", children: (0, jsx_runtime_1.jsx)(AdaptableInput_1.default, { "data-name": "time", className: "twa:w-[300px]", value: timeValue, type: "time", onChange: handleTimeChange }) })] }) })] }) }));
164
164
  };
165
165
  exports.ScheduleBuilderWizard = ScheduleBuilderWizard;
@@ -6,25 +6,18 @@ const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
8
8
  const NewScopeComponent_1 = require("../../Components/NewScopeComponent");
9
+ const Flex_1 = require("../../../components/Flex");
9
10
  const ShortcutScopeWizardSection = (props) => {
10
11
  const { data, api } = (0, OnePageAdaptableWizard_1.useOnePageAdaptableWizardContext)();
11
12
  const availableColumns = React.useMemo(() => api.columnApi.getNumericColumns(), []);
12
- return ((0, jsx_runtime_1.jsx)(NewScopeComponent_1.NewScopeComponent, { availableDataTypes: ['number'], scopeColumns: availableColumns, scope: data.Scope, descriptions: {
13
- rowScope: 'All Numeric Columns will have the Shortcut applied',
14
- columnScope: 'Selected Columns will have the Shortcut applied',
15
- }, updateScope: (Scope) => {
16
- let preparedScope = Scope;
17
- if (Scope && 'DataTypes' in Scope && Scope.DataTypes.length === 0) {
18
- // default to checked
19
- preparedScope = {
20
- ...Scope,
21
- DataTypes: ['number'],
22
- };
23
- }
24
- props.onChange({
25
- ...data,
26
- Scope: preparedScope,
27
- });
28
- } }));
13
+ return ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:h-full", children: [(0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2 twa:gap-3 twa:border-b twa:mb-2 twa:border-b-foreground/20", children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-5 twa:font-medium", children: "Target" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Specify where the Shortcut should be applied (numeric columns only)" })] }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-2", children: (0, jsx_runtime_1.jsx)(NewScopeComponent_1.NewScopeComponent, { disableDataTypes: true, scopeColumns: availableColumns, scope: data.Scope, descriptions: {
14
+ rowScope: 'All Numeric Columns will have the Shortcut applied',
15
+ columnScope: 'Selected Columns will have the Shortcut applied',
16
+ }, updateScope: (Scope) => {
17
+ props.onChange({
18
+ ...data,
19
+ Scope: Scope,
20
+ });
21
+ } }) })] }));
29
22
  };
30
23
  exports.ShortcutScopeWizardSection = ShortcutScopeWizardSection;
@@ -6,14 +6,12 @@ const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const React = tslib_1.__importStar(require("react"));
7
7
  const Input_1 = tslib_1.__importDefault(require("../../../components/Input"));
8
8
  const shortcutOperations_1 = require("../shortcutOperations");
9
- const FormLayout_1 = tslib_1.__importStar(require("../../../components/FormLayout"));
10
9
  const OnePageAdaptableWizard_1 = require("../../Wizard/OnePageAdaptableWizard");
11
- const Tabs_1 = require("../../../components/Tabs");
12
10
  const OnePageAdaptableWizard_2 = require("../../../View/Wizard/OnePageAdaptableWizard");
13
11
  const Tag_1 = require("../../../components/Tag");
14
- const HelpBlock_1 = tslib_1.__importDefault(require("../../../components/HelpBlock"));
15
12
  const Flex_1 = require("../../../components/Flex");
16
13
  const NewSelect_1 = require("../../../components/NewSelect");
14
+ const Card_1 = require("../../../components/Card");
17
15
  const isSettingsValid = (data, api) => {
18
16
  if (!data.Name?.trim()) {
19
17
  return 'Name is required';
@@ -64,12 +62,25 @@ const ShortcutSettingsWizard = (props) => {
64
62
  const optionActions = shortcutOperations_1.shortcutOperationList.map((operation) => ({
65
63
  value: operation,
66
64
  label: operation,
67
- // onClick: () => handleOperationChange(operation),
68
65
  }));
69
66
  const optionKeys = props.availableKeys.map((key) => ({
70
67
  value: key,
71
68
  label: key,
72
69
  }));
73
- return ((0, jsx_runtime_1.jsx)(Flex_1.Box, { "data-name": "shortcut-column-settings", children: (0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { autoFocus: false, children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Shortcut Settings" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsxs)(FormLayout_1.default, { children: [(0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Name", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "shortcut-name", className: "twa:flex-1 twa:w-60 twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: shortcut.Name ?? '' }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "", children: (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:h-2" }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "", children: (0, jsx_runtime_1.jsx)(HelpBlock_1.default, { className: "twa:text-2 twa:mb-0", children: "Keyboard key that, when pressed, triggers the Shortcut" }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Key", children: (0, jsx_runtime_1.jsx)(Flex_1.Flex, { flexDirection: "row", children: (0, jsx_runtime_1.jsx)(NewSelect_1.SingleSelect, { "data-name": "shortcut-key", ariaLabel: "Select Key", placeholder: "Select Key", items: optionKeys, className: "twa:w-30", onValueChange: (key) => handleKeyChange(key), value: shortcut.ShortcutKey || 'Select Key' }) }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "", children: (0, jsx_runtime_1.jsx)(HelpBlock_1.default, { className: "twa:text-2 twa:mb-0", children: "Mathematical operation performed on Cell's current value (using the Shortcut's 'value') - used to calculate the Cell's new total" }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Operation", children: (0, jsx_runtime_1.jsx)(Flex_1.Flex, { flexDirection: "row", children: (0, jsx_runtime_1.jsx)(NewSelect_1.SingleSelect, { "data-name": "shortcut-operation", placeholder: "Select Operation", ariaLabel: "Select Operation", className: "twa:w-30", items: optionActions, onValueChange: (operation) => handleOperationChange(operation), value: shortcut.ShortcutOperation }) }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "", children: (0, jsx_runtime_1.jsx)(HelpBlock_1.default, { className: "twa:text-2 twa:mb-0", children: "Number that is used - together with the 'Operation' and the current cell value - to calculate the new total for the cell" }) }), (0, jsx_runtime_1.jsx)(FormLayout_1.FormRow, { label: "Value", children: (0, jsx_runtime_1.jsx)(Flex_1.Flex, { flexDirection: "row", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "shortcut-value", className: "twa:flex-1 twa:w-30 twa:max-w-30 twa:mr-3", onChange: handleOperationValueChange, placeholder: "Enter Number", type: "number", value: shortcut.ShortcutValue ?? '' }) }) })] }) })] }) }));
70
+ const preview = React.useMemo(() => {
71
+ const { ShortcutOperation, ShortcutValue } = shortcut;
72
+ if (!ShortcutOperation || typeof ShortcutValue !== 'number') {
73
+ return null;
74
+ }
75
+ const result = (0, shortcutOperations_1.calculateShortcutResult)(shortcutOperations_1.SHORTCUT_PREVIEW_EXAMPLE_VALUE, ShortcutValue, ShortcutOperation);
76
+ if (result === null) {
77
+ return { error: 'Cannot divide by zero' };
78
+ }
79
+ return {
80
+ expression: `${shortcutOperations_1.SHORTCUT_PREVIEW_EXAMPLE_VALUE} ${(0, shortcutOperations_1.getShortcutOperationSymbol)(ShortcutOperation)} ${ShortcutValue}`,
81
+ result,
82
+ };
83
+ }, [shortcut.ShortcutOperation, shortcut.ShortcutValue]);
84
+ return ((0, jsx_runtime_1.jsx)(Flex_1.Box, { "data-name": "shortcut-column-settings", children: (0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: [(0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Name" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Provide a unique name for the Shortcut" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "shortcut-name", className: "twa:max-w-[300px] twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: shortcut.Name ?? '' }) })] }), (0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Key" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Keyboard key that, when pressed, triggers the Shortcut" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsx)(NewSelect_1.SingleSelect, { "data-name": "shortcut-key", ariaLabel: "Select Key", placeholder: "Select Key", items: optionKeys, className: "twa:max-w-[300px]", onValueChange: (key) => handleKeyChange(key), value: shortcut.ShortcutKey || undefined }) })] }), (0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Operation" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Mathematical operation performed on the cell's current value" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsx)(NewSelect_1.SingleSelect, { "data-name": "shortcut-operation", placeholder: "Select Operation", ariaLabel: "Select Operation", className: "twa:max-w-[300px]", items: optionActions, onValueChange: (operation) => handleOperationChange(operation), value: shortcut.ShortcutOperation }) })] }), (0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Value" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Number used with the operation and current cell value to calculate the new total" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { className: "twa:p-1", children: (0, jsx_runtime_1.jsx)(Input_1.default, { "data-name": "shortcut-value", className: "twa:max-w-[300px] twa:w-full", onChange: handleOperationValueChange, placeholder: "Enter Number", type: "number", value: shortcut.ShortcutValue ?? '' }) })] }), preview ? ((0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Example" }), (0, jsx_runtime_1.jsxs)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: ["If a cell contains ", shortcutOperations_1.SHORTCUT_PREVIEW_EXAMPLE_VALUE, ", pressing this Shortcut would change it to:"] })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { children: 'error' in preview ? ((0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-2 twa:text-error", children: preview.error })) : ((0, jsx_runtime_1.jsxs)(Flex_1.Box, { className: "twa:text-3 twa:font-medium", children: [preview.expression, " \u2192 ", preview.result] })) })] })) : null] }) }));
74
85
  };
75
86
  exports.ShortcutSettingsWizard = ShortcutSettingsWizard;
@@ -54,7 +54,7 @@ const ShortcutWizard = (props) => {
54
54
  {
55
55
  title: 'Settings',
56
56
  isValid: ShortcutSettingsWizard_1.isSettingsValid,
57
- details: ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["A Shortcut is a mathematical calculation (", (0, jsx_runtime_1.jsx)("b", { children: "Operation" }), ") which is applied with the defined operand ", (0, jsx_runtime_1.jsx)("b", { children: "Value" }), " on the edited cell content when the corresponding Shortcut ", (0, jsx_runtime_1.jsx)("b", { children: "Key" }), " is pressed."] })),
57
+ details: ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "Provide details of the Shortcut" })),
58
58
  renderSummary: () => (0, jsx_runtime_1.jsx)(ShortcutSettingsWizard_1.ShortcutSettingsSummary, {}),
59
59
  render: () => ((0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:p-2", children: (0, jsx_runtime_1.jsx)(ShortcutSettingsWizard_1.ShortcutSettingsWizard, { availableKeys: props.availableKeys ?? availableKeys, onChange: setShortcut }) })),
60
60
  },
@@ -65,7 +65,7 @@ const ShortcutWizard = (props) => {
65
65
  renderSummary: () => (0, NewScopeComponent_1.renderScopeSummary)(shortcut.Scope, {
66
66
  scopeWholeRow: 'Shortcut is triggered for all numeric cells',
67
67
  scopeColumns: 'Shortcut is triggered for cells in selected columns',
68
- scopeDataTypes: 'Shortcut is triggered for all numeric cells',
68
+ scopeDataTypes: '',
69
69
  }),
70
70
  render: () => ((0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:p-2", children: (0, jsx_runtime_1.jsx)(ShortcutScopeWizardSection_1.ShortcutScopeWizardSection, { onChange: setShortcut }) })),
71
71
  },
@@ -1,2 +1,5 @@
1
1
  import { MathOperation } from '../../AdaptableState/Common/Enums';
2
2
  export declare const shortcutOperationList: Array<MathOperation>;
3
+ export declare const SHORTCUT_PREVIEW_EXAMPLE_VALUE = 100;
4
+ export declare function getShortcutOperationSymbol(operation: MathOperation): string;
5
+ export declare function calculateShortcutResult(cellValue: number, shortcutValue: number, operation: MathOperation): number | null;
@@ -1,10 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.shortcutOperationList = void 0;
3
+ exports.SHORTCUT_PREVIEW_EXAMPLE_VALUE = exports.shortcutOperationList = void 0;
4
+ exports.getShortcutOperationSymbol = getShortcutOperationSymbol;
5
+ exports.calculateShortcutResult = calculateShortcutResult;
6
+ const tslib_1 = require("tslib");
4
7
  const Enums_1 = require("../../AdaptableState/Common/Enums");
8
+ const NumberExtensions_1 = tslib_1.__importDefault(require("../../Utilities/Extensions/NumberExtensions"));
5
9
  exports.shortcutOperationList = [
6
10
  Enums_1.MathOperation.Add,
7
11
  Enums_1.MathOperation.Subtract,
8
12
  Enums_1.MathOperation.Multiply,
9
13
  Enums_1.MathOperation.Divide,
10
14
  ];
15
+ exports.SHORTCUT_PREVIEW_EXAMPLE_VALUE = 100;
16
+ const shortcutOperationSymbols = {
17
+ [Enums_1.MathOperation.Add]: '+',
18
+ [Enums_1.MathOperation.Subtract]: '−',
19
+ [Enums_1.MathOperation.Multiply]: '×',
20
+ [Enums_1.MathOperation.Divide]: '÷',
21
+ };
22
+ function getShortcutOperationSymbol(operation) {
23
+ return shortcutOperationSymbols[operation];
24
+ }
25
+ function calculateShortcutResult(cellValue, shortcutValue, operation) {
26
+ if (operation === Enums_1.MathOperation.Divide && shortcutValue === 0) {
27
+ return null;
28
+ }
29
+ switch (operation) {
30
+ case Enums_1.MathOperation.Add:
31
+ return NumberExtensions_1.default.avoidJavascriptPrecisionIssues(cellValue + shortcutValue);
32
+ case Enums_1.MathOperation.Subtract:
33
+ return NumberExtensions_1.default.avoidJavascriptPrecisionIssues(cellValue - shortcutValue);
34
+ case Enums_1.MathOperation.Multiply:
35
+ return NumberExtensions_1.default.avoidJavascriptPrecisionIssues(cellValue * shortcutValue);
36
+ case Enums_1.MathOperation.Divide:
37
+ return NumberExtensions_1.default.avoidJavascriptPrecisionIssues(cellValue / shortcutValue);
38
+ default:
39
+ return null;
40
+ }
41
+ }
@@ -6,11 +6,12 @@ const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const chunk_1 = tslib_1.__importDefault(require("../Utilities/utils/chunk"));
7
7
  const CheckBox_1 = require("../components/CheckBox");
8
8
  const FormLayout_1 = tslib_1.__importStar(require("../components/FormLayout"));
9
- const Tabs_1 = require("../components/Tabs");
10
9
  const AdaptableContext_1 = require("./AdaptableContext");
11
10
  const Flex_1 = require("../components/Flex");
11
+ const Card_1 = require("../components/Card");
12
12
  const SpecialColumnSettingsWizardStep = (props) => {
13
13
  const adaptable = (0, AdaptableContext_1.useAdaptable)();
14
+ const behaviourSpellingVariant = adaptable.api.internalApi.getCorrectEnglishVariant('behaviours');
14
15
  const possibleColumnTypes = adaptable.api.columnApi.getColumnTypes() ?? [];
15
16
  const { Filterable, Resizable, Groupable, Sortable, Pivotable, Aggregatable, SuppressMenu, SuppressMovable, } = props.settings ?? {};
16
17
  const handleColumnTypeChange = (columnType, checked) => {
@@ -34,10 +35,10 @@ const SpecialColumnSettingsWizardStep = (props) => {
34
35
  ...values,
35
36
  });
36
37
  };
37
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { className: "twa:mt-2", autoFocus: false, children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Column Properties" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(Flex_1.Flex, { flexDirection: "column", children: (0, jsx_runtime_1.jsxs)(FormLayout_1.default, { className: "twa:w-full", columns: [
38
- { name: 'first', size: '30%' },
39
- { size: '30%', name: 'second' },
40
- { size: '30%', name: 'third' },
41
- ], children: [(0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [(0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "filterable", checked: Filterable, onChange: (Filterable) => onSettingsChange({ Filterable }), disabled: !adaptable.api.optionsApi.getFilterOptions().enableFilterOnSpecialColumns, children: "Filterable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "resizable", checked: Resizable, onChange: (Resizable) => onSettingsChange({ Resizable }), children: "Resizable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "groupable", checked: Groupable, onChange: (Groupable) => onSettingsChange({ Groupable }), children: "Groupable" })] }), (0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [(0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "sortable", checked: Sortable, onChange: (Sortable) => onSettingsChange({ Sortable }), children: "Sortable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "pivotable", checked: Pivotable, onChange: (Pivotable) => onSettingsChange({ Pivotable }), children: "Pivotable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "aggregatable", checked: Aggregatable, onChange: (Aggregatable) => onSettingsChange({ Aggregatable }), children: "Aggregatable" })] }), (0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [(0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "suppres-smenu", checked: SuppressMenu, onChange: (SuppressMenu) => onSettingsChange({ SuppressMenu }), children: "Suppress Menu" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "suppres-movable", checked: SuppressMovable, onChange: (SuppressMovable) => onSettingsChange({ SuppressMovable }), children: "Suppress Movable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { disabled: true, checked: props.isEditable, children: "Editable" })] })] }) }) })] }), Boolean(possibleColumnTypes?.length) && ((0, jsx_runtime_1.jsxs)(Tabs_1.Tabs, { className: "twa:mt-2", autoFocus: false, children: [(0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Tab, { children: "Column Types" }), (0, jsx_runtime_1.jsx)(Tabs_1.Tabs.Content, { children: (0, jsx_runtime_1.jsx)(FormLayout_1.default, { columns: [{ name: 'first', size: '30%' }, { name: 'second' }], children: (0, chunk_1.default)(possibleColumnTypes ?? [], 2)?.map(([first, second]) => ((0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [first && ((0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": first, onChange: (checked) => handleColumnTypeChange(first, checked), checked: props.settings?.ColumnTypes?.includes?.(first), children: first })), second && ((0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": second, onChange: (checked) => handleColumnTypeChange(second, checked), checked: props.settings?.ColumnTypes?.includes?.(second), children: second }))] }, first))) }) })] }))] }));
38
+ return ((0, jsx_runtime_1.jsxs)(Flex_1.Flex, { flexDirection: "column", className: "twa:gap-3", children: [(0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Column Properties" }), (0, jsx_runtime_1.jsxs)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: ["Choose which grid ", behaviourSpellingVariant, " apply to this Column"] })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { children: (0, jsx_runtime_1.jsxs)(FormLayout_1.default, { className: "twa:w-full", columns: [
39
+ { name: 'first', size: '30%' },
40
+ { size: '30%', name: 'second' },
41
+ { size: '30%', name: 'third' },
42
+ ], children: [(0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [(0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "filterable", checked: Filterable, onChange: (Filterable) => onSettingsChange({ Filterable }), disabled: !adaptable.api.optionsApi.getFilterOptions().enableFilterOnSpecialColumns, children: "Filterable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "resizable", checked: Resizable, onChange: (Resizable) => onSettingsChange({ Resizable }), children: "Resizable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "groupable", checked: Groupable, onChange: (Groupable) => onSettingsChange({ Groupable }), children: "Groupable" })] }), (0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [(0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "sortable", checked: Sortable, onChange: (Sortable) => onSettingsChange({ Sortable }), children: "Sortable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "pivotable", checked: Pivotable, onChange: (Pivotable) => onSettingsChange({ Pivotable }), children: "Pivotable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "aggregatable", checked: Aggregatable, onChange: (Aggregatable) => onSettingsChange({ Aggregatable }), children: "Aggregatable" })] }), (0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [(0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "suppres-smenu", checked: SuppressMenu, onChange: (SuppressMenu) => onSettingsChange({ SuppressMenu }), children: "Suppress Menu" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": "suppres-movable", checked: SuppressMovable, onChange: (SuppressMovable) => onSettingsChange({ SuppressMovable }), children: "Suppress Movable" }), (0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { disabled: true, checked: props.isEditable, children: "Editable" })] })] }) })] }), Boolean(possibleColumnTypes?.length) && ((0, jsx_runtime_1.jsxs)(Card_1.Card, { shadow: false, children: [(0, jsx_runtime_1.jsxs)(Card_1.Card.Title, { children: [(0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:font-medium", children: "Column Types" }), (0, jsx_runtime_1.jsx)(Flex_1.Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Assign custom column types to this column" })] }), (0, jsx_runtime_1.jsx)(Card_1.Card.Body, { children: (0, jsx_runtime_1.jsx)(FormLayout_1.default, { columns: [{ name: 'first', size: '30%' }, { name: 'second' }], children: (0, chunk_1.default)(possibleColumnTypes ?? [], 2)?.map(([first, second]) => ((0, jsx_runtime_1.jsxs)(FormLayout_1.FormRow, { children: [first && ((0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": first, onChange: (checked) => handleColumnTypeChange(first, checked), checked: props.settings?.ColumnTypes?.includes?.(first), children: first })), second && ((0, jsx_runtime_1.jsx)(CheckBox_1.CheckBox, { "data-name": second, onChange: (checked) => handleColumnTypeChange(second, checked), checked: props.settings?.ColumnTypes?.includes?.(second), children: second }))] }, first))) }) })] }))] }));
42
43
  };
43
44
  exports.SpecialColumnSettingsWizardStep = SpecialColumnSettingsWizardStep;
@@ -22,5 +22,10 @@ export interface BadgePillStyleEditorProps {
22
22
  * - **No** `FontSize` — pills inherit cell font sizing.
23
23
  */
24
24
  export declare const BadgePillStyleEditor: React.FunctionComponent<BadgePillStyleEditorProps>;
25
+ /** Descriptive pill properties for summary panels (`Label: value` strings). */
26
+ export declare const getBadgePillStyleSummaryItems: (pill: BadgePillStyle | undefined) => {
27
+ label: string;
28
+ value: string;
29
+ }[];
25
30
  /** Compact summary tags for a {@link BadgePillStyle}; used by wizard summaries. */
26
31
  export declare const renderBadgePillStyleSummaryTags: (pill: BadgePillStyle | undefined) => React.JSX.Element | null;