@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
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import FormLayout, { FormRow } from '../../../components/FormLayout';
3
2
  import Input from '../../../components/Input';
4
- import { Tabs } from '../../../components/Tabs';
5
- import { Box } from '../../../components/Flex';
3
+ import { Box, Flex } from '../../../components/Flex';
6
4
  import { SingleSelect } from '../../../components/NewSelect';
5
+ import { Card } from '../../../components/Card';
6
+ import { Tag } from '../../../components/Tag';
7
7
  export const ScheduledReportSettings = (props) => {
8
8
  const handleNameChange = (event) => {
9
9
  props.onChange({
@@ -23,14 +23,14 @@ export const ScheduledReportSettings = (props) => {
23
23
  label: reportName,
24
24
  value: reportName,
25
25
  }));
26
- return (_jsx(Box, { "data-name": "scheduled-report-settings", children: _jsxs(Tabs, { autoFocus: false, className: "twa:mb-3", children: [_jsx(Tabs.Tab, { children: "Settings" }), _jsx(Tabs.Content, { children: _jsxs(FormLayout, { children: [props.allReportNames && (_jsx(FormRow, { label: "Report", children: _jsx(Box, { className: "twa:max-w-[300px]", children: _jsx(SingleSelect, { className: "twa:w-full", "data-name": "select-report", items: reportOptions, value: props.reportSchedule?.ReportName || undefined, placeholder: "Select Report", onValueChange: (value) => props.onChange({
27
- ...props.reportSchedule,
28
- ReportName: value,
29
- }) }) }) })), _jsx(FormRow, { label: "Name", children: _jsx(Input, { "data-name": "schedule-name", className: "twa:w-[300px]", onChange: handleNameChange, placeholder: "Enter Schedule Name", type: "string", value: props.reportSchedule?.Name ?? '' }) }), _jsx(FormRow, { label: "Format", children: _jsx(Box, { className: "twa:max-w-[300px]", children: _jsx(SingleSelect, { className: "twa:w-full", "data-name": "select-format", items: formatOptions, value: props.reportSchedule?.ReportFormat, placeholder: "Select Format", onValueChange: (value) => props.onChange({
30
- ...props.reportSchedule,
31
- ReportFormat: value,
32
- }) }) }) }), _jsx(FormRow, { label: "Destination", children: _jsx(Box, { className: "twa:max-w-[300px]", children: _jsx(SingleSelect, { className: "twa:w-full", "data-name": "select-destination", items: destinationOptions, value: props.reportSchedule?.ExportDestination, placeholder: "Select Destination", onValueChange: (value) => props.onChange({
33
- ...props.reportSchedule,
34
- ExportDestination: value,
35
- }) }) }) })] }) })] }) }));
26
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", "data-name": "scheduled-report-settings", children: [props.fixedReportName ? (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Report" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "The report that will be exported on this schedule" })] }), _jsx(Card.Body, { children: _jsx(Tag, { children: props.fixedReportName }) })] })) : null, props.allReportNames ? (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Report" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose which report to export on this schedule" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(SingleSelect, { className: "twa:max-w-[300px]", "data-name": "select-report", items: reportOptions, value: props.reportSchedule?.ReportName || undefined, placeholder: "Select Report", onValueChange: (value) => props.onChange({
27
+ ...props.reportSchedule,
28
+ ReportName: value,
29
+ }) }) })] })) : null, _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Name" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Provide a unique name for this scheduled export" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "schedule-name", className: "twa:max-w-[300px] twa:w-full", onChange: handleNameChange, placeholder: "Enter Schedule Name", type: "string", value: props.reportSchedule?.Name ?? '' }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Format" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose the export file format" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(SingleSelect, { className: "twa:max-w-[300px]", "data-name": "select-format", items: formatOptions, value: props.reportSchedule?.ReportFormat, placeholder: "Select Format", onValueChange: (value) => props.onChange({
30
+ ...props.reportSchedule,
31
+ ReportFormat: value,
32
+ }) }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Destination" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose where the exported report is sent" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(SingleSelect, { className: "twa:max-w-[300px]", "data-name": "select-destination", items: destinationOptions, value: props.reportSchedule?.ExportDestination, placeholder: "Select Destination", onValueChange: (value) => props.onChange({
33
+ ...props.reportSchedule,
34
+ ExportDestination: value,
35
+ }) }) })] })] }));
36
36
  };
@@ -1,10 +1,9 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { useDispatch } from 'react-redux';
4
4
  import * as ExportRedux from '../../../Redux/ActionsReducers/ExportRedux';
5
5
  import ObjectFactory from '../../../Utilities/ObjectFactory';
6
- import { OnePageAdaptableWizard, OnePageWizardSummary, SummaryText, useOnePageAdaptableWizardContext, } from '../../Wizard/OnePageAdaptableWizard';
7
- import { Tag } from '../../../components/Tag';
6
+ import { OnePageAdaptableWizard, OnePageWizardSummary, useOnePageAdaptableWizardContext, } from '../../Wizard/OnePageAdaptableWizard';
8
7
  import { isScheduleValid, ScheduleBuilderWizard, } from '../../Schedule/Wizard/ScheduleScheduleWizard';
9
8
  import { ScheduleScheduleSummary } from '../../Schedule/Wizard/ScheduleScheduleSummary';
10
9
  import { ObjectTagsWizardSection, renderObjectTagsSummary, } from '../../Wizard/ObjectTagsWizardSection';
@@ -46,7 +45,7 @@ export const ScheduledReportWizard = (props) => {
46
45
  title: 'Settings',
47
46
  isValid: (data, api) => isReportScheduleSettingsValid(data, api),
48
47
  renderSummary: () => _jsx(ScheduledReportSettingsSummary, {}),
49
- render: () => (_jsx(Box, { className: "twa:p-3", children: _jsx(ScheduledReportSettingsSection, { onChange: setReportSchedule, reportName: reportName }) })),
48
+ render: () => (_jsx(ScheduledReportSettingsSection, { onChange: setReportSchedule, reportName: reportName })),
50
49
  },
51
50
  {
52
51
  title: 'Schedule',
@@ -76,5 +75,5 @@ const ScheduledReportSettingsSection = (props) => {
76
75
  const allReportNames = fixedReportName
77
76
  ? undefined
78
77
  : api.exportApi.internalApi.getAllAvailableReportNames();
79
- return (_jsxs(_Fragment, { children: [fixedReportName && (_jsxs(SummaryText, { children: ["Report: ", _jsx(Tag, { children: fixedReportName })] })), _jsx(ScheduledReportSettings, { reportSchedule: data, onChange: props.onChange, allFormats: allFormats ?? [], allDestinations: allDestinations ?? [], allReportNames: allReportNames })] }));
78
+ return (_jsx(ScheduledReportSettings, { reportSchedule: data, onChange: props.onChange, allFormats: allFormats ?? [], allDestinations: allDestinations ?? [], allReportNames: allReportNames, fixedReportName: fixedReportName }));
80
79
  };
@@ -2,6 +2,8 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
3
3
  import { CodeBlock } from '../../../components/CodeBlock';
4
4
  import { EntityRulesEditor, EntityRulesSummary } from '../../Components/EntityRulesEditor';
5
+ import { Box, Flex } from '../../../components/Flex';
6
+ import { Card } from '../../../components/Card';
5
7
  export const renderFlashingAlertRulesSummary = (flashingAlert) => {
6
8
  const { api: { flashingCellApi }, } = useOnePageAdaptableWizardContext();
7
9
  const FlashTarget = flashingAlert.FlashTarget ?? flashingCellApi.getFlashingCellFlashTarget(flashingAlert);
@@ -14,10 +16,10 @@ export const renderFlashingAlertRulesSummary = (flashingAlert) => {
14
16
  export const FlashingAlertRulesWizardSection = (props) => {
15
17
  const { data, api, moduleInfo } = useOnePageAdaptableWizardContext();
16
18
  const predicateDefs = api.flashingCellApi.getFlashingCellPredicateDefsForScope(data.Scope);
17
- return (_jsx(EntityRulesEditor, { module: moduleInfo.ModuleName, defaultPredicateId: "AnyChange", data: data, predicateDefs: predicateDefs, getPredicateDefsForColId: (colId) => api.flashingCellApi.getFlashingCellPredicateDefsForScope({ ColumnIds: [colId] }), onChange: props.onChange, showAggregation: false, showObservable: false, showBoolean: true, showPredicate: true, descriptions: {
18
- selectPredicate: 'Select an Flashing Cell Rule - to be applied when data changes',
19
- useBooleanQuery: (_jsxs(_Fragment, { children: ["Use an BooleanQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex BooleanExpression"] })),
20
- useObservableQuery: (_jsxs(_Fragment, { children: ["Use an ObservableQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex ObservableExpression"] })),
21
- useAggregationQuery: (_jsxs(_Fragment, { children: ["Use an AggregatedBooleanQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex AggregatedBooleanExpression"] })),
22
- } }));
19
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: _jsxs(Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Rule" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Build the rule that determines when cells should flash on a data change" })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: _jsx(EntityRulesEditor, { module: moduleInfo.ModuleName, defaultPredicateId: "AnyChange", data: data, predicateDefs: predicateDefs, getPredicateDefsForColId: (colId) => api.flashingCellApi.getFlashingCellPredicateDefsForScope({ ColumnIds: [colId] }), onChange: props.onChange, showAggregation: false, showObservable: false, showBoolean: true, showPredicate: true, descriptions: {
20
+ selectPredicate: 'Select a Flashing Cell Rule - to be applied when data changes',
21
+ useBooleanQuery: (_jsxs(_Fragment, { children: ["Use an BooleanQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex BooleanExpression"] })),
22
+ useObservableQuery: (_jsxs(_Fragment, { children: ["Use an ObservableQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex ObservableExpression"] })),
23
+ useAggregationQuery: (_jsxs(_Fragment, { children: ["Use an AggregatedBooleanQuery if ", _jsx("i", { children: "Scope" }), " is 'All Columns' - so any data change may be evaluated in a complex AggregatedBooleanExpression"] })),
24
+ } }) })] }) }));
23
25
  };
@@ -1,32 +1,31 @@
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 { NewScopeComponent } from '../../Components/NewScopeComponent';
4
4
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
5
- import { Flex } from '../../../components/Flex';
5
+ import { Box, Flex } from '../../../components/Flex';
6
6
  import { isScopeColumnIds } from '../../../AdaptableState/Common/ColumnScope';
7
7
  export const FlashingAlertScopeWizardSection = (props) => {
8
8
  const { data, api } = useOnePageAdaptableWizardContext();
9
9
  const availableColumns = React.useMemo(() => api.columnApi
10
10
  .getUIAvailableColumns()
11
11
  .filter((column) => !column.isActionColumn && !api.columnApi.isFdc3Column(column.columnId)), [api]);
12
- return (_jsx(Flex, { flexDirection: "column", className: "twa:p-2 twa:h-full", children: _jsx(NewScopeComponent, { descriptions: {
13
- rowScope: 'Changes anywhere in the row will trigger an Flashing Cell',
14
- columnScope: 'Changes in selected columns will trigger an Flashing Cell',
15
- }, scopeColumns: availableColumns, scope: data.Scope, updateScope: (Scope) => {
16
- const newData = { ...data, Scope };
17
- if (newData.Rule.Predicates) {
18
- const validPredicateIds = new Set(api.flashingCellApi.getFlashingCellPredicateDefsForScope(Scope).map((def) => def.id));
19
- newData.Rule = {
20
- Predicates: newData.Rule.Predicates.filter((p) => validPredicateIds.has(p.PredicateId)).filter((predicate) => {
21
- // if there are more than 1 column, then we must eliminate the IN/NotIn predicates
22
- // TODO: this should NOT be required, but the ColumnValueSelector does NOT support creatable values right now
23
- if (isScopeColumnIds(Scope) && Scope.ColumnIds.length > 1) {
24
- return predicate.PredicateId !== 'In' && predicate.PredicateId !== 'NotIn';
25
- }
26
- return true;
27
- }),
28
- };
29
- }
30
- props.onChange(newData);
31
- } }) }));
12
+ 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-5 twa:font-medium", children: "Columns" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Specify which data changes should trigger cell flashing" })] }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-2", children: _jsx(NewScopeComponent, { descriptions: {
13
+ rowScope: 'Changes anywhere in the row will trigger a Flashing Cell',
14
+ columnScope: 'Changes in selected columns will trigger a Flashing Cell',
15
+ dataTypeScope: 'Changes in columns with these Data Types will trigger a Flashing Cell',
16
+ }, scopeColumns: availableColumns, scope: data.Scope, updateScope: (Scope) => {
17
+ const newData = { ...data, Scope };
18
+ if (newData.Rule.Predicates) {
19
+ const validPredicateIds = new Set(api.flashingCellApi.getFlashingCellPredicateDefsForScope(Scope).map((def) => def.id));
20
+ newData.Rule = {
21
+ Predicates: newData.Rule.Predicates.filter((p) => validPredicateIds.has(p.PredicateId)).filter((predicate) => {
22
+ if (isScopeColumnIds(Scope) && Scope.ColumnIds.length > 1) {
23
+ return predicate.PredicateId !== 'In' && predicate.PredicateId !== 'NotIn';
24
+ }
25
+ return true;
26
+ }),
27
+ };
28
+ }
29
+ props.onChange(newData);
30
+ } }) })] }));
32
31
  };
@@ -3,14 +3,14 @@ import * as React from 'react';
3
3
  import { useRef } from 'react';
4
4
  import Input from '../../../components/Input';
5
5
  import usePrevious from '../../../components/utils/usePrevious';
6
- import { Tabs } from '../../../components/Tabs';
7
6
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
8
7
  import { CodeBlock } from '../../../components/CodeBlock';
9
- import FormLayout, { FormRow } from '../../../components/FormLayout';
10
8
  import { CheckBox } from '../../../components/CheckBox';
11
9
  import { Box, Flex } from '../../../components/Flex';
12
10
  import { Tag } from '../../../components/Tag';
13
11
  import { SummaryText } from '../../Wizard/OnePageAdaptableWizard';
12
+ import { Card } from '../../../components/Card';
13
+ import { TypeRadio } from '../../Wizard/TypeRadio';
14
14
  export const isSettingsValid = (data, api) => {
15
15
  if (!data.Name?.trim()) {
16
16
  return 'Name is required';
@@ -22,8 +22,17 @@ export const isSettingsValid = (data, api) => {
22
22
  }
23
23
  return true;
24
24
  };
25
+ const formatFlashTarget = (flashTarget) => {
26
+ if (!flashTarget) {
27
+ return 'Not specified';
28
+ }
29
+ if (typeof flashTarget === 'string') {
30
+ return flashTarget;
31
+ }
32
+ return flashTarget.join(', ');
33
+ };
25
34
  export const renderFlashingAlertSettingsSummary = (flashingAlert) => {
26
- return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Name ", _jsx(Tag, { children: flashingAlert.Name || 'Not specified' })] }), _jsx(Box, { className: "twa:text-2", children: flashingAlert.FlashDuration === 'always' ? (_jsx(_Fragment, { children: "Flashing is never removed" })) : (_jsxs(_Fragment, { children: ["Flashing is removed after ", _jsx(CodeBlock, { children: flashingAlert.FlashDuration }), ' ', "milliseconds"] })) })] }));
35
+ return (_jsxs(_Fragment, { children: [_jsxs(SummaryText, { children: ["Name ", _jsx(Tag, { children: flashingAlert.Name || 'Not specified' })] }), _jsx(Box, { className: "twa:text-2", children: flashingAlert.FlashDuration === 'always' ? (_jsx(_Fragment, { children: "Flashing is never removed" })) : (_jsxs(_Fragment, { children: ["Flashing is removed after ", _jsx(CodeBlock, { children: flashingAlert.FlashDuration }), ' ', "milliseconds"] })) }), _jsxs(SummaryText, { children: ["Flash Target ", _jsx(Tag, { children: formatFlashTarget(flashingAlert.FlashTarget) })] })] }));
27
36
  };
28
37
  export const FlashingAlertSettingsWizardSection = (props) => {
29
38
  let { data: flashingCell } = useOnePageAdaptableWizardContext();
@@ -46,7 +55,7 @@ export const FlashingAlertSettingsWizardSection = (props) => {
46
55
  inputRef.current?.focus();
47
56
  }
48
57
  }, [duration, oldDuration]);
49
- const handleTypeChange = (type) => {
58
+ const handleDurationTypeChange = (type) => {
50
59
  setDuration(type === 'number' ? numberDuration.current : 'always');
51
60
  };
52
61
  const handleTargetChange = (type, checked) => {
@@ -67,11 +76,11 @@ export const FlashingAlertSettingsWizardSection = (props) => {
67
76
  FlashTarget,
68
77
  });
69
78
  };
70
- return (_jsxs(Flex, { flexDirection: "column", "data-name": "plus-minus-column-settings", className: "twa:h-full", children: [_jsxs(Tabs, { autoFocus: false, className: "twa:p-2", children: [_jsx(Tabs.Tab, { children: "Flashing Cell Settings" }), _jsx(Tabs.Content, { children: _jsx(FormLayout, { children: _jsx(FormRow, { label: "Name", children: _jsx(Input, { "data-name": "flashing-cell-name", className: "twa:flex-1 twa:mr-3", onChange: handleNameChange, placeholder: "Enter Name", value: flashingCell.Name ?? '' }) }) }) })] }), _jsxs(Tabs, { autoFocus: false, className: "twa:p-2", children: [_jsx(Tabs.Tab, { children: "Flash Duration" }), _jsx(Tabs.Content, { children: _jsx(FormLayout, { children: _jsx(FormRow, { label: "", children: _jsxs(Flex, { alignItems: "center", children: [_jsx(CheckBox, { "data-name": "duration-always", checked: duration === 'always', onChange: (checked) => handleTypeChange(checked ? 'always' : 'number'), className: "twa:mr-4", tabIndex: -1, children: "Always" }), duration !== 'always' && (_jsxs(_Fragment, { children: [_jsx(Input, { "data-name": "duration-input", readOnly: props.readOnly, type: "number", name: "value", ref: inputRef, className: "twa:w-20 twa:mr-2", value: duration, onChange: (event) => {
71
- const value = event.target.value;
72
- setDuration(isNaN(Number(value)) ? 500 : Number(value));
73
- } }), _jsx(Box, { className: "twa:text-2", children: "ms" })] }))] }) }) }) })] }), ' ', _jsxs(Tabs, { autoFocus: false, className: "twa:p-2", children: [_jsx(Tabs.Tab, { children: "Flash Target" }), _jsx(Tabs.Content, { children: _jsx(FormLayout, { children: _jsxs(FormRow, { label: "", children: [_jsx(CheckBox, { "data-name": "flashing-target", onChange: (checked) => handleTargetChange('cell', checked), className: "twa:mr-3", checked: flashingCell?.FlashTarget === 'cell' ||
74
- flashingCell?.FlashTarget?.includes?.('cell'), tabIndex: -1, children: "Cell" }), _jsx(CheckBox, { "data-name": "flashing-target-row", className: "twa:mr-3", onChange: (checked) => handleTargetChange('row', checked), checked: flashingCell?.FlashTarget === 'row' ||
75
- flashingCell?.FlashTarget?.includes?.('row'), tabIndex: -1, children: "Row" }), _jsx(CheckBox, { "data-name": "flashing-target-aggFuncCell", onChange: (checked) => handleTargetChange('aggFuncCell', checked), checked: flashingCell?.FlashTarget === 'aggFuncCell' ||
76
- flashingCell?.FlashTarget?.includes?.('aggFuncCell'), tabIndex: -1, children: "Aggregated Function Cell" })] }) }) })] })] }));
79
+ const isTargetChecked = (type) => flashingCell?.FlashTarget === type || flashingCell?.FlashTarget?.includes?.(type);
80
+ return (_jsx(Box, { "data-name": "flashing-cell-settings", children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Name" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Provide a unique name for the Flashing Cell rule" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "flashing-cell-name", className: "twa:max-w-[300px] twa:w-full", onChange: handleNameChange, placeholder: "Enter Name", value: flashingCell.Name ?? '' }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Flash Duration" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose how long the flash style remains visible after a change" })] }), _jsx(Card.Body, { children: _jsxs(Flex, { flexDirection: "column", className: "twa:gap-3", children: [_jsx(TypeRadio, { "data-name": "duration-always", text: "Always", description: "The flash style is never removed automatically", checked: duration === 'always', onClick: () => handleDurationTypeChange('always') }), _jsx(TypeRadio, { "data-name": "duration-timed", text: "Timed", description: "The flash style is removed after a set number of milliseconds", checked: duration !== 'always', onClick: () => handleDurationTypeChange('number') }), duration !== 'always' ? (_jsxs(Flex, { alignItems: "center", className: "twa:ml-6", children: [_jsx(Input, { "data-name": "duration-input", readOnly: props.readOnly, type: "number", name: "value", ref: inputRef, className: "twa:w-24 twa:mr-2", value: duration, onChange: (event) => {
81
+ const value = event.target.value;
82
+ const parsed = Number(value);
83
+ numberDuration.current = isNaN(parsed) ? 500 : parsed;
84
+ setDuration(numberDuration.current);
85
+ } }), _jsx(Box, { className: "twa:text-2", children: "ms" })] })) : null] }) })] }), _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Flash Target" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose which parts of the grid flash when a change occurs" })] }), _jsx(Card.Body, { children: _jsxs(Flex, { flexDirection: "column", children: [_jsx(CheckBox, { "data-name": "flashing-target", onChange: (checked) => handleTargetChange('cell', checked), checked: isTargetChecked('cell'), children: "Cell" }), _jsx(CheckBox, { "data-name": "flashing-target-row", onChange: (checked) => handleTargetChange('row', checked), checked: isTargetChecked('row'), children: "Row" }), _jsx(CheckBox, { "data-name": "flashing-target-aggFuncCell", onChange: (checked) => handleTargetChange('aggFuncCell', checked), checked: isTargetChecked('aggFuncCell'), children: "Aggregated Function Cell" })] }) })] })] }) }));
77
86
  };
@@ -1,14 +1,30 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
3
- import { Tabs } from '../../../components/Tabs';
4
3
  import { StyleComponent } from '../../Components/StyleComponent';
5
4
  import { StylePreview } from '../../../components/StylePreview';
6
- import { Box } from '../../../components/Flex';
7
- const changeStyle = _jsx(Box, { className: "twa:text-2 twa:inline-block", children: "Change style" });
5
+ import { Box, Flex } from '../../../components/Flex';
6
+ import { Card } from '../../../components/Card';
7
+ const FLASH_STYLE_CARDS = [
8
+ {
9
+ key: 'UpChangeStyle',
10
+ title: 'Up Change Style',
11
+ description: 'Style applied when a cell value increases',
12
+ },
13
+ {
14
+ key: 'DownChangeStyle',
15
+ title: 'Down Change Style',
16
+ description: 'Style applied when a cell value decreases',
17
+ },
18
+ {
19
+ key: 'NeutralChangeStyle',
20
+ title: 'Neutral Change Style',
21
+ description: 'Style applied when a cell value changes but not up or down (e.g. text edits)',
22
+ },
23
+ ];
8
24
  export const FlashingAlertStyleWizardSection = (props) => {
9
25
  let { data: flashingAlert, api } = useOnePageAdaptableWizardContext();
10
26
  flashingAlert = flashingAlert ?? props.flashingAlert;
11
- return (_jsx(_Fragment, { children: _jsxs(Tabs, { defaultValue: "up", children: [_jsxs(Tabs.Tab, { value: "up", children: ["Up ", changeStyle] }), _jsx(Tabs.Content, { value: "up", children: _jsx(StyleComponent, { headless: true, api: api, Style: flashingAlert.UpChangeStyle ?? {}, UpdateStyle: (style) => props.onStyleChange('UpChangeStyle', style) }) }), _jsxs(Tabs.Tab, { value: "down", children: ["Down ", changeStyle] }), _jsx(Tabs.Content, { value: "down", children: _jsx(StyleComponent, { headless: true, api: api, Style: flashingAlert.DownChangeStyle ?? {}, UpdateStyle: (style) => props.onStyleChange('DownChangeStyle', style) }) }), _jsxs(Tabs.Tab, { value: "neutral", children: ["Neutral ", changeStyle] }), _jsx(Tabs.Content, { value: "neutral", children: _jsx(StyleComponent, { headless: true, api: api, Style: flashingAlert.NeutralChangeStyle ?? {}, UpdateStyle: (style) => props.onStyleChange('NeutralChangeStyle', style) }) })] }) }));
27
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3", children: FLASH_STYLE_CARDS.map(({ key, title, description }) => (_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: title }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: description })] }), _jsx(Card.Body, { children: _jsx(StyleComponent, { headless: true, api: api, Style: flashingAlert[key] ?? {}, UpdateStyle: (style) => props.onStyleChange(key, style) }) })] }, key))) }));
12
28
  };
13
29
  export const FlashingCellStyle = (props) => {
14
30
  const { data, ...boxProps } = props;
@@ -63,7 +63,7 @@ export const FlashingCellWizard = (props) => {
63
63
  {
64
64
  details: 'Set Name, Duration and Target Properties',
65
65
  isValid: isSettingsValid,
66
- render: () => (_jsx(Box, { className: "twa:p-2", children: _jsx(FlashingAlertSettingsWizardSection, { onChange: setFlashingCell }) })),
66
+ render: () => _jsx(FlashingAlertSettingsWizardSection, { onChange: setFlashingCell }),
67
67
  renderSummary: renderFlashingAlertSettingsSummary,
68
68
  title: 'Settings',
69
69
  },
@@ -83,9 +83,9 @@ export const FlashingCellWizard = (props) => {
83
83
  },
84
84
  {
85
85
  details: 'Choose Flash Styles for Up, Down and Neutral Changes',
86
- render: () => (_jsx(Box, { className: "twa:p-2", children: _jsx(FlashingAlertStyleWizardSection, { onStyleChange: (styleName, style) => {
87
- updateStyles[styleName](style);
88
- } }) })),
86
+ render: () => (_jsx(FlashingAlertStyleWizardSection, { onStyleChange: (styleName, style) => {
87
+ updateStyles[styleName](style);
88
+ } })),
89
89
  renderSummary: renderFlashingAlertStyleSummary,
90
90
  title: 'Flash Styles',
91
91
  },
@@ -10,7 +10,14 @@ export interface FormatColumnFormatWizardState {
10
10
  DisplayFormat: AdaptableFormat;
11
11
  NumericFormat?: 'Percent' | 'Thousand' | 'Million' | 'Dollar' | 'Sterling' | undefined;
12
12
  }
13
+ type DisplayFormatSummaryItem = {
14
+ label: string;
15
+ value: string;
16
+ };
17
+ export declare const getFormatColumnDisplayFormatSummaryItems: (data: FormatColumn) => DisplayFormatSummaryItem[];
18
+ export declare const hasFormatColumnDisplayFormat: (data: FormatColumn) => boolean;
13
19
  export declare const getFormatColumnFormatSummaryValue: (data: FormatColumn) => string;
14
20
  export declare const renderFormatColumnFormatSummary: (data: FormatColumn) => React.JSX.Element;
15
21
  export declare const getFormatDisplayTypeForScope: (scope: ColumnScope, api: AdaptableApi) => "number" | "date" | "text" | undefined;
16
22
  export declare const FormatColumnFormatWizardSection: (props: FormatColumnFormatWizardSectionProps) => React.JSX.Element;
23
+ export {};
@@ -31,24 +31,122 @@ const DateFormatPresets = [
31
31
  'yyyyMMdd',
32
32
  'HH:mm:ss',
33
33
  ];
34
- export const getFormatColumnFormatSummaryValue = (data) => {
35
- let content = 'N/A';
34
+ const NUMERIC_PRESET_LABELS = {
35
+ Percentage: 'Percentage',
36
+ Thousand: 'K (Thousand)',
37
+ Million: 'M (Million)',
38
+ Billion: 'B (Billion)',
39
+ BasisPoints: 'bps (Basis Pts)',
40
+ Dollar: 'Dollar',
41
+ Sterling: 'Sterling',
42
+ Euro: 'Euro',
43
+ Yen: 'Yen',
44
+ Bitcoin: 'Bitcoin',
45
+ Integer: 'Integer',
46
+ Decimal: 'Decimal',
47
+ Accounting: 'Accounting',
48
+ FXRate: 'FX Rate',
49
+ Scientific: 'Scientific',
50
+ };
51
+ const appendDisplayFormatItem = (items, label, value) => {
52
+ if (value == null || value === '' || value === false) {
53
+ return;
54
+ }
55
+ items.push({ label, value: String(value) });
56
+ };
57
+ const appendNumberFormatOptions = (items, options) => {
58
+ appendDisplayFormatItem(items, 'Fraction Digits', options.FractionDigits);
59
+ appendDisplayFormatItem(items, 'Fraction Separator', options.FractionSeparator);
60
+ appendDisplayFormatItem(items, 'Integer Digits', options.IntegerDigits);
61
+ appendDisplayFormatItem(items, 'Integer Separator', options.IntegerSeparator);
62
+ appendDisplayFormatItem(items, 'Prefix', options.Prefix);
63
+ appendDisplayFormatItem(items, 'Suffix', options.Suffix);
64
+ appendDisplayFormatItem(items, 'Content', options.Content);
65
+ if (options.Multiplier != null && options.Multiplier !== 1) {
66
+ items.push({ label: 'Multiplier', value: String(options.Multiplier) });
67
+ }
68
+ appendDisplayFormatItem(items, 'Parentheses', options.Parentheses);
69
+ appendDisplayFormatItem(items, 'Truncate', options.Truncate);
70
+ appendDisplayFormatItem(items, 'Absolute Value', options.Abs);
71
+ appendDisplayFormatItem(items, 'Ceiling', options.Ceiling);
72
+ appendDisplayFormatItem(items, 'Floor', options.Floor);
73
+ appendDisplayFormatItem(items, 'Round', options.Round);
74
+ appendDisplayFormatItem(items, 'Empty', options.Empty);
75
+ if (options.Notation === 'scientific') {
76
+ items.push({ label: 'Notation', value: 'Scientific' });
77
+ }
78
+ if (options.CustomDisplayFormats?.length) {
79
+ items.push({
80
+ label: 'Custom Formats',
81
+ value: options.CustomDisplayFormats.join(', '),
82
+ });
83
+ }
84
+ };
85
+ const appendStringFormatOptions = (items, options) => {
86
+ appendDisplayFormatItem(items, 'Case', options.Case);
87
+ appendDisplayFormatItem(items, 'Trim', options.Trim);
88
+ appendDisplayFormatItem(items, 'Prefix', options.Prefix);
89
+ appendDisplayFormatItem(items, 'Suffix', options.Suffix);
90
+ appendDisplayFormatItem(items, 'Content', options.Content);
91
+ appendDisplayFormatItem(items, 'Empty', options.Empty);
92
+ if (options.CustomDisplayFormats?.length) {
93
+ items.push({
94
+ label: 'Custom Formats',
95
+ value: options.CustomDisplayFormats.join(', '),
96
+ });
97
+ }
98
+ };
99
+ export const getFormatColumnDisplayFormatSummaryItems = (data) => {
100
+ if (data.DisplayFormat == null) {
101
+ return [];
102
+ }
103
+ if (isAdaptableNumericFormatPreset(data.DisplayFormat)) {
104
+ return [{ label: '', value: `${NUMERIC_PRESET_LABELS[data.DisplayFormat]} Preset` }];
105
+ }
36
106
  const resolved = resolveDisplayFormat(data.DisplayFormat);
37
107
  if (!resolved) {
38
- content = 'N/A';
108
+ return [];
39
109
  }
40
- else {
41
- if (resolved.Formatter === 'NumberFormatter') {
42
- content = FormatHelper.NumberFormatter(DEFAULT_DOUBLE_DISPLAY_VALUE, resolved.Options);
110
+ const items = [];
111
+ if (resolved.Formatter === 'NumberFormatter') {
112
+ appendNumberFormatOptions(items, resolved.Options);
113
+ if (!items.length) {
114
+ items.push({ label: '', value: 'Number Format' });
43
115
  }
44
- if (resolved.Formatter === 'DateFormatter') {
45
- content = FormatHelper.DateFormatter(new Date(), resolved.Options);
116
+ return items;
117
+ }
118
+ if (resolved.Formatter === 'DateFormatter') {
119
+ const options = resolved.Options;
120
+ appendDisplayFormatItem(items, 'Pattern', options.Pattern);
121
+ if (options.CustomDisplayFormats?.length) {
122
+ items.push({
123
+ label: 'Custom Formats',
124
+ value: options.CustomDisplayFormats.join(', '),
125
+ });
126
+ }
127
+ if (!items.length) {
128
+ items.push({ label: '', value: 'Date Format' });
46
129
  }
47
- if (resolved.Formatter === 'StringFormatter') {
48
- content = FormatHelper.StringFormatter(DEFAULT_STRING_DISPLAY_VALUE, resolved.Options);
130
+ return items;
131
+ }
132
+ if (resolved.Formatter === 'StringFormatter') {
133
+ appendStringFormatOptions(items, resolved.Options);
134
+ if (!items.length) {
135
+ items.push({ label: '', value: 'String Format' });
49
136
  }
137
+ return items;
50
138
  }
51
- return content;
139
+ return items;
140
+ };
141
+ export const hasFormatColumnDisplayFormat = (data) => getFormatColumnDisplayFormatSummaryItems(data).length > 0;
142
+ export const getFormatColumnFormatSummaryValue = (data) => {
143
+ const items = getFormatColumnDisplayFormatSummaryItems(data);
144
+ if (!items.length) {
145
+ return 'No Display Format';
146
+ }
147
+ return items
148
+ .map(({ label, value }) => (label ? `${label}: ${value}` : value))
149
+ .join(', ');
52
150
  };
53
151
  const renderCustomFormatter = (data, customFormatter, setFormatOption) => {
54
152
  const resolved = resolveDisplayFormat(data.DisplayFormat);
@@ -64,7 +162,14 @@ const renderCustomFormatter = (data, customFormatter, setFormatOption) => {
64
162
  } }) }, customFormatter.id));
65
163
  };
66
164
  export const renderFormatColumnFormatSummary = (data) => {
67
- return _jsx(Tag, { children: getFormatColumnFormatSummaryValue(data) });
165
+ const items = getFormatColumnDisplayFormatSummaryItems(data);
166
+ if (!items.length) {
167
+ return _jsx(Tag, { children: "No Display Format" });
168
+ }
169
+ if (items.length === 1 && !items[0].label) {
170
+ return _jsx(Tag, { children: items[0].value });
171
+ }
172
+ return (_jsx(Box, { className: "twa:flex twa:flex-col twa:gap-2", children: items.map(({ label, value }) => (_jsxs(Box, { children: [label, " ", _jsx(Tag, { children: value })] }, label))) }));
68
173
  };
69
174
  export const getFormatDisplayTypeForScope = (scope, api) => {
70
175
  if (scope == undefined) {
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+ import { FormatColumn } from '../../../AdaptableState/FormatColumnState';
3
+ import { AdaptableApi } from '../../../Api/AdaptableApi';
4
+ /** Today's date as sample text — no Display Format options applied. */
5
+ export declare const getFormatColumnPreviewDateSampleText: () => string;
6
+ export declare const getFormatColumnStylePreviewText: (formatColumn: FormatColumn, api: AdaptableApi) => string;
7
+ export declare const getFormatColumnPreviewSampleValue: (formatColumn: FormatColumn, api: AdaptableApi) => string | number;
8
+ export declare const getFormatColumnPreviewText: (formatColumn: FormatColumn, api: AdaptableApi) => string;
9
+ export declare const FormatColumnPreviewContent: React.FunctionComponent<{
10
+ formatColumn: FormatColumn;
11
+ api: AdaptableApi;
12
+ }>;
13
+ export declare const renderFormatColumnPreviewSummary: (formatColumn: FormatColumn, api: AdaptableApi) => React.JSX.Element;
14
+ export declare const FormatColumnPreview: React.FunctionComponent;
15
+ export declare const FormatColumnPreviewSummaryCard: React.FunctionComponent;
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { resolveDisplayFormat } from '../../../AdaptableState/Common/AdaptableFormatPresets';
3
+ import { DEFAULT_DOUBLE_DISPLAY_VALUE, DEFAULT_STRING_DISPLAY_VALUE, } from '../../../Utilities/Constants/GeneralConstants';
4
+ import FormatHelper from '../../../Utilities/Helpers/FormatHelper';
5
+ import { convertAdaptableStyleToCSS } from '../../../Utilities/Helpers/StyleHelper';
6
+ import { Card } from '../../../components/Card';
7
+ import { Box } from '../../../components/Flex';
8
+ import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
9
+ import { getFormatDisplayTypeForScope } from './FormatColumnFormatWizardSection';
10
+ const toFormatColumnPreviewStyle = (formatColumn) => {
11
+ const style = formatColumn.Style ?? {};
12
+ return {
13
+ ...convertAdaptableStyleToCSS(style),
14
+ borderWidth: style.BorderColor ? 2 : 0,
15
+ borderStyle: 'solid',
16
+ textAlign: style.Alignment ? style.Alignment.toLowerCase() : undefined,
17
+ };
18
+ };
19
+ /** Today's date as sample text — no Display Format options applied. */
20
+ export const getFormatColumnPreviewDateSampleText = () => new Date().toLocaleDateString();
21
+ export const getFormatColumnStylePreviewText = (formatColumn, api) => {
22
+ const formatType = getFormatDisplayTypeForScope(formatColumn.Scope, api);
23
+ if (formatType === 'number') {
24
+ return String(DEFAULT_DOUBLE_DISPLAY_VALUE);
25
+ }
26
+ if (formatType === 'date') {
27
+ return getFormatColumnPreviewDateSampleText();
28
+ }
29
+ return DEFAULT_STRING_DISPLAY_VALUE;
30
+ };
31
+ export const getFormatColumnPreviewSampleValue = (formatColumn, api) => {
32
+ const formatType = getFormatDisplayTypeForScope(formatColumn.Scope, api);
33
+ if (formatType === 'number') {
34
+ return DEFAULT_DOUBLE_DISPLAY_VALUE;
35
+ }
36
+ if (formatType === 'date') {
37
+ return getFormatColumnPreviewDateSampleText();
38
+ }
39
+ return DEFAULT_STRING_DISPLAY_VALUE;
40
+ };
41
+ export const getFormatColumnPreviewText = (formatColumn, api) => {
42
+ const sample = getFormatColumnPreviewSampleValue(formatColumn, api);
43
+ const resolved = resolveDisplayFormat(formatColumn.DisplayFormat);
44
+ if (!resolved) {
45
+ return String(sample);
46
+ }
47
+ if (resolved.Formatter === 'NumberFormatter' && typeof sample === 'number') {
48
+ return FormatHelper.NumberFormatter(sample, resolved.Options) ?? String(sample);
49
+ }
50
+ if (resolved.Formatter === 'DateFormatter') {
51
+ return FormatHelper.DateFormatter(new Date(), resolved.Options) ?? String(sample);
52
+ }
53
+ if (resolved.Formatter === 'StringFormatter' && typeof sample === 'string') {
54
+ return FormatHelper.StringFormatter(sample, resolved.Options) ?? sample;
55
+ }
56
+ return String(sample);
57
+ };
58
+ export const FormatColumnPreviewContent = ({ formatColumn, api }) => (_jsx(Box, { className: "ab-FormatPreview twa:p-2 twa:inline-block", style: toFormatColumnPreviewStyle(formatColumn), children: getFormatColumnPreviewText(formatColumn, api) }));
59
+ export const renderFormatColumnPreviewSummary = (formatColumn, api) => _jsx(FormatColumnPreviewContent, { formatColumn: formatColumn, api: api });
60
+ export const FormatColumnPreview = () => {
61
+ const { data, api } = useOnePageAdaptableWizardContext();
62
+ return _jsx(FormatColumnPreviewContent, { formatColumn: data, api: api });
63
+ };
64
+ export const FormatColumnPreviewSummaryCard = () => {
65
+ return (_jsxs(Card, { shadow: false, children: [_jsx(Card.Title, { children: _jsx(Box, { className: "twa:font-medium", children: "Preview" }) }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(FormatColumnPreview, {}) })] }));
66
+ };
@@ -1,8 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import { FormatColumn } from '../../../../types';
3
+ import { AdaptableApi } from '../../../Api/AdaptableApi';
3
4
  type FormatColumnRuleWizardSectionProps = {
4
5
  onChange: (data: FormatColumn) => void;
5
6
  defaultPredicateId: string;
6
7
  };
8
+ export declare const hasFormatColumnCondition: (formatColumn: FormatColumn) => boolean;
9
+ export declare const renderFormatColumnConditionSummary: (formatColumn: FormatColumn, api: AdaptableApi) => React.JSX.Element;
10
+ export declare const renderFormatColumnConditionWizardSummary: (formatColumn: FormatColumn) => React.JSX.Element;
7
11
  export declare function FormatColumnRuleWizardSection(props: FormatColumnRuleWizardSectionProps): React.JSX.Element;
8
12
  export {};
@@ -2,6 +2,36 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
3
3
  import { EntityRulesEditor } from '../../Components/EntityRulesEditor';
4
4
  import HelpBlock from '../../../components/HelpBlock';
5
+ import { Box } from '../../../components/Flex';
6
+ import { Tag } from '../../../components/Tag';
7
+ export const hasFormatColumnCondition = (formatColumn) => {
8
+ const rule = formatColumn.Rule;
9
+ if (!rule) {
10
+ return false;
11
+ }
12
+ return Boolean(rule.Predicates?.length ||
13
+ rule.BooleanExpression ||
14
+ ('ObservableExpression' in rule && rule.ObservableExpression) ||
15
+ ('AggregatedBooleanExpression' in rule && rule.AggregatedBooleanExpression));
16
+ };
17
+ export const renderFormatColumnConditionSummary = (formatColumn, api) => {
18
+ if (formatColumn.Target === 'columnHeader') {
19
+ return _jsx(Tag, { children: "No Condition" });
20
+ }
21
+ if (!hasFormatColumnCondition(formatColumn)) {
22
+ return _jsx(Tag, { children: "No Condition" });
23
+ }
24
+ const rule = formatColumn.Rule;
25
+ if (rule?.Predicates?.length) {
26
+ return (_jsx(Box, { className: "twa:flex twa:flex-col twa:gap-2", children: rule.Predicates.map((predicate, index) => (_jsx(Tag, { children: api.predicateApi.predicateToString(predicate) }, index))) }));
27
+ }
28
+ const expressionText = api.internalApi.getAdaptableQueryExpressionText(rule);
29
+ return _jsx(Tag, { children: expressionText || 'No Condition' });
30
+ };
31
+ export const renderFormatColumnConditionWizardSummary = (formatColumn) => {
32
+ const { api } = useOnePageAdaptableWizardContext();
33
+ return renderFormatColumnConditionSummary(formatColumn, api);
34
+ };
5
35
  export function FormatColumnRuleWizardSection(props) {
6
36
  const { data, api, moduleInfo } = useOnePageAdaptableWizardContext();
7
37
  if (data.Target && data.Target === 'columnHeader') {