@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
@@ -46,40 +46,66 @@ export function ValueSelector(props) {
46
46
  toIdentifier,
47
47
  value,
48
48
  });
49
- const notifyChange = useCallback(() => {
50
- const newSelection = [...selectedMap.keys()];
49
+ const reorderEnabled = allowReorder !== false;
50
+ const commitSelection = useCallback((nextMap) => {
51
+ const newSelection = [...nextMap.keys()];
51
52
  if (!newSelection.length && selectedOnly) {
52
53
  setSelectedOnly(false);
53
54
  }
54
- onChange(newSelection, new Map(selectedMap));
55
- }, [onChange, selectedOnly, selectedMap]);
55
+ onChange(newSelection, nextMap);
56
+ }, [onChange, selectedOnly, setSelectedOnly]);
57
+ const updateSelection = useCallback((updater) => {
58
+ const nextMap = new Map(selectedMap);
59
+ updater(nextMap);
60
+ commitSelection(nextMap);
61
+ }, [commitSelection, selectedMap]);
62
+ const filteredOptions = useMemo(() => {
63
+ return options.filter((option) => {
64
+ let result = true;
65
+ if (filter) {
66
+ result = filter(option, searchInputValue);
67
+ }
68
+ result = result && (selectedOnly ? selectedMap.has(toIdentifier(option)) : true);
69
+ return result;
70
+ });
71
+ }, [filter, options, searchInputValue, selectedMap, selectedOnly, toIdentifier]);
72
+ const renderOptionRow = (option, index, reorderable, itemDomProps) => {
73
+ const identifier = toIdentifier(option);
74
+ const label = !reorderEnabled ? preparedToLabel(option) : null;
75
+ const { onPointerDown, className: itemClassName, ...restDomProps } = itemDomProps ?? {};
76
+ return (_jsx(Flex, { alignItems: "center", "data-index": index, "data-id": identifier, "data-name": "option", ...restDomProps, className: clsx('twa:bg-primary twa:text-primary-foreground twa:rounded-standard twa:p-2', {
77
+ 'twa:mt-1': index,
78
+ 'twa:mt-0': !index,
79
+ }, itemClassName, `${baseClassName}__option`), children: _jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:flex-1", children: [reorderable ? (_jsx(Box, { onPointerDown: onPointerDown, className: "twa:mr-3", children: _jsx(Icon, { name: "drag", style: { cursor: 'grab' } }) })) : null, singleSelect ? (_jsx(Radio, { checked: selectedMap.has(identifier), "data-name": identifier, onChange: (checked) => {
80
+ updateSelection((next) => {
81
+ next.clear();
82
+ if (checked) {
83
+ next.set(identifier, option);
84
+ }
85
+ });
86
+ }, children: label })) : (_jsx(CheckBox, { "data-name": identifier, disabled: disabled || (isOptionDisabled ? isOptionDisabled(option) : false), onChange: (checked) => {
87
+ updateSelection((next) => {
88
+ if (checked) {
89
+ next.set(identifier, option);
90
+ }
91
+ else {
92
+ next.delete(identifier);
93
+ }
94
+ });
95
+ }, checked: selectedMap.has(identifier), children: label })), _jsx(Box, { className: "twa:ml-2 twa:flex-1", children: reorderEnabled ? preparedToLabel(option) : null })] }) }));
96
+ };
56
97
  const renderOption = (option, index) => {
57
98
  const identifier = toIdentifier(option);
58
- const label = !allowReorder ? preparedToLabel(option) : null;
59
99
  const reorderable = typeof allowReorder === 'function' ? allowReorder(option) : allowReorder;
100
+ if (!reorderEnabled) {
101
+ return (_jsx(React.Fragment, { children: renderOptionRow(option, index, false) }, identifier));
102
+ }
60
103
  return (_jsx(DragList.DraggableItem, { id: `${identifier}`, children: (itemDomProps) => {
61
104
  const { onPointerDown, ...restDomProps } = itemDomProps;
62
- return (_jsx(Flex, { alignItems: "center", "data-index": index, "data-id": identifier, "data-name": "option", ...restDomProps, className: clsx('twa:bg-primary twa:text-text-on-primary twa:rounded-standard twa:p-2', {
63
- 'twa:mt-1': index,
64
- 'twa:mt-0': !index,
65
- }, restDomProps.className, `${baseClassName}__option`), children: _jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:flex-1", children: [reorderable ? (_jsx(Box, { onPointerDown: onPointerDown, className: "twa:mr-3", children: _jsx(Icon, { name: "drag", style: { cursor: 'grab' } }) })) : null, singleSelect ? (_jsx(Radio, { checked: selectedMap.has(identifier), "data-name": identifier, onChange: (checked) => {
66
- if (checked) {
67
- selectedMap.clear();
68
- selectedMap.set(identifier, option);
69
- }
70
- else {
71
- selectedMap.delete(identifier);
72
- }
73
- notifyChange();
74
- }, children: label })) : (_jsx(CheckBox, { "data-name": identifier, disabled: disabled || (isOptionDisabled ? isOptionDisabled(option) : false), onChange: (checked) => {
75
- if (checked) {
76
- selectedMap.set(identifier, option);
77
- }
78
- else {
79
- selectedMap.delete(identifier);
80
- }
81
- notifyChange();
82
- }, checked: selectedMap.has(identifier), children: label })), _jsx(Box, { className: "twa:ml-2 twa:flex-1", children: allowReorder ? preparedToLabel(option) : null })] }) }));
105
+ return renderOptionRow(option, index, reorderable, {
106
+ onPointerDown: reorderable ? onPointerDown : undefined,
107
+ ...restDomProps,
108
+ });
83
109
  } }, identifier));
84
110
  };
85
111
  const showOnlySelectedCheckbox = (_jsx(CheckBox, { disabled: !value.length, checked: selectedOnly, onChange: setSelectedOnly, children: showSelectedOnlyLabel ?? 'Show Selected Only' }));
@@ -87,60 +113,47 @@ export function ValueSelector(props) {
87
113
  ...props,
88
114
  showOnlySelectedCheckbox,
89
115
  onSelectAll: () => {
90
- options.forEach((option) => {
91
- selectedMap.set(toIdentifier(option), option);
116
+ updateSelection((next) => {
117
+ options.forEach((option) => {
118
+ next.set(toIdentifier(option), option);
119
+ });
92
120
  });
93
- notifyChange();
94
121
  },
95
122
  onClearOption: (id) => {
96
- selectedMap.delete(id);
97
- notifyChange();
123
+ updateSelection((next) => {
124
+ next.delete(id);
125
+ });
98
126
  },
99
127
  onClear: () => {
100
- selectedMap.clear();
101
- notifyChange();
128
+ updateSelection((next) => {
129
+ next.clear();
130
+ });
102
131
  },
103
132
  };
104
- return (_jsxs(Flex, { style: props.style, className: clsx('twa:flex-1', baseClassName), flexDirection: "column", children: [_jsx(Flex, { className: "twa:mb-1", children: showFilterInput && filter ? (_jsx(AdaptableFormControlTextClear, { value: searchInputValue, OnTextChange: setSearchInputValue, placeholder: "Type to search", inputClassName: "twa:p-3", className: "twa:flex-1 twa:m-[3px]" })) : (_jsx(Box, { className: "twa:flex-1" })) }), renderSelectionSection(selectionSectionProps), _jsx(DragDropProvider, { children: _jsx(Flex, { className: `${baseClassName}__body twa:flex-1 twa:overflow-auto`, flexDirection: "column", children: _jsx(DragList, { dragListId: "value-selector", orientation: "vertical", onDragProxyMove: defaultDragProxyMove, onDragProxySetup: ({ proxyElement }) => {
133
+ const optionList = (_jsx(Flex, { className: `${baseClassName}__body twa:flex-1 twa:overflow-auto`, flexDirection: "column", children: _jsx("div", { children: filteredOptions.map(renderOption) }) }));
134
+ return (_jsxs(Flex, { style: props.style, className: clsx('twa:flex-1', baseClassName), flexDirection: "column", children: [_jsx(Flex, { className: "twa:mb-1", children: showFilterInput && filter ? (_jsx(AdaptableFormControlTextClear, { value: searchInputValue, OnTextChange: setSearchInputValue, placeholder: "Type to search", inputClassName: "twa:p-3", className: "twa:flex-1 twa:m-[3px]" })) : (_jsx(Box, { className: "twa:flex-1" })) }), renderSelectionSection(selectionSectionProps), reorderEnabled ? (_jsx(DragDropProvider, { children: _jsx(Flex, { className: `${baseClassName}__body twa:flex-1 twa:overflow-auto`, flexDirection: "column", children: _jsx(DragList, { dragListId: "value-selector", orientation: "vertical", onDragProxyMove: defaultDragProxyMove, onDragProxySetup: ({ proxyElement }) => {
105
135
  proxyElement.classList.add('twa:shadow-md');
106
136
  }, onDrop: (_sortedIndexes) => {
107
137
  const selection = [];
108
138
  const extraKeys = [];
109
- for (const [key, value] of selectedMap) {
110
- if (value != null) {
139
+ for (const [key, mapValue] of selectedMap) {
140
+ if (mapValue != null) {
111
141
  selection.push(key);
112
142
  }
113
143
  else {
114
- // null/non-existent keys have to be stored separately
115
144
  extraKeys.push(key);
116
145
  }
117
146
  }
118
- const clone = new Map(selectedMap);
119
- // const newSelection: ID_TYPE[] = ArrayExtensions.reorderArray(
120
- // selection,
121
- // dragIndex,
122
- // dropIndex
123
- // );
124
147
  const newSelection = _sortedIndexes
125
148
  .map((index) => selection[index])
126
149
  .filter((x) => x != null);
127
150
  newSelection.push(...extraKeys);
128
- selectedMap.clear();
151
+ const nextMap = new Map();
129
152
  newSelection.forEach((key) => {
130
- selectedMap.set(key, clone.get(key));
153
+ nextMap.set(key, selectedMap.get(key));
131
154
  });
132
- notifyChange();
133
- }, children: (listDomProps) => (_jsx("div", { ...listDomProps, children: options
134
- .filter((option) => {
135
- let result = true;
136
- if (filter) {
137
- result = filter(option, searchInputValue);
138
- }
139
- result =
140
- result && (selectedOnly ? selectedMap.has(toIdentifier(option)) : true);
141
- return result;
142
- })
143
- .map(renderOption) })) }) }) })] }));
155
+ commitSelection(nextMap);
156
+ }, children: (listDomProps) => _jsx("div", { ...listDomProps, children: filteredOptions.map(renderOption) }) }) }) })) : (optionList)] }));
144
157
  }
145
158
  export const renderSelectionSection = (props) => {
146
159
  const { value, options, disabled, singleSelect, toLabel, toIdentifier, } = props;
@@ -1,13 +1,12 @@
1
1
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
- import { Tabs } from '../../../components/Tabs';
4
3
  import { Tag } from '../../../components/Tag';
5
4
  import { NewColumnSelector } from '../../Components/ColumnSelector';
6
5
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
7
6
  import { Box, Flex } from '../../../components/Flex';
8
- import FormLayout, { FormRow } from '../../../components/FormLayout';
9
7
  import Input from '../../../components/Input';
10
8
  import { AdaptableFormControlTextClear } from '../../Components/Forms/AdaptableFormControlTextClear';
9
+ import { Card } from '../../../components/Card';
11
10
  export const renderCustomSortColumn = (data) => {
12
11
  const { api } = useOnePageAdaptableWizardContext();
13
12
  return (_jsxs(Box, { className: "twa:text-2 twa:py-2 twa:pr-2", children: [_jsxs(Tag, { className: "twa:mr-2", children: ["Name: ", data.Name] }), _jsxs(Tag, { children: ["Column: ", api.columnApi.getFriendlyNameForColumnId(data.ColumnId)] })] }));
@@ -28,16 +27,12 @@ export const CustomSortColumnWizardSection = (props) => {
28
27
  const { data, api } = useOnePageAdaptableWizardContext();
29
28
  const sortableCols = React.useMemo(() => {
30
29
  const sortableColumns = api.columnApi.getSortableColumns();
31
- const nonComparerSortableColumns = sortableColumns.filter((c) => {
32
- return api.customSortApi.internalApi.columnHasCustomSortComparer(c.columnId);
33
- });
34
30
  const customSorts = api.customSortApi.getCustomSorts();
35
31
  const columnSortComparers = api.optionsApi.getCustomSortOptions().customSortComparers || [];
36
32
  const usedColumnIds = [
37
33
  ...customSorts.map((customSort) => customSort.ColumnId),
38
34
  ...columnSortComparers.map((comparer) => api.columnScopeApi.getColumnIdsInScope(comparer.scope)),
39
35
  ];
40
- // filter out used colum ids, but include the current one
41
36
  return sortableColumns.filter((column) => {
42
37
  if (api.customSortApi.internalApi.columnHasCustomSortComparer(column.columnId)) {
43
38
  return false;
@@ -57,11 +52,11 @@ export const CustomSortColumnWizardSection = (props) => {
57
52
  Name: event.target.value,
58
53
  });
59
54
  };
60
- return (_jsxs(Flex, { flexDirection: "column", style: { height: '100%' }, children: [_jsxs(Tabs, { className: "twa:mb-3", children: [_jsx(Tabs.Tab, { children: "Settings" }), _jsx(Tabs.Content, { children: _jsx(Flex, { flexDirection: "row", children: _jsx(FormLayout, { className: "twa:max-w-[300px] twa:w-full", children: _jsx(FormRow, { label: "Name", children: _jsx(Input, { className: "twa:w-full", "data-name": "custom-sort-name", onChange: onNameChange, value: data?.Name ?? '' }) }) }) }) })] }), _jsxs(Tabs, { style: { flex: 1, minHeight: 0 }, children: [_jsx(Tabs.Tab, { children: "Column" }), _jsxs(Tabs.Content, { children: [_jsxs(Flex, { flexDirection: "row", alignItems: "center", className: "twa:p-2", children: [_jsx(Box, { className: "twa:text-2", children: "Columns" }), _jsx(Box, { className: "twa:flex-3" }), _jsx(AdaptableFormControlTextClear, { value: columnsSearchText, OnTextChange: setColumnsSearchText, placeholder: "Type to search columns", style: { flex: 1 } })] }), _jsx(NewColumnSelector, { columnFilterText: columnsSearchText, availableColumns: sortableCols, selected: data.ColumnId ? [data.ColumnId] : [], singleSelect: true, onChange: (ids) => {
61
- props.onChange({
62
- ...data,
63
- SortedValues: [],
64
- ColumnId: ids[0],
65
- });
66
- }, allowReorder: false })] })] })] }));
55
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full", children: [_jsx(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3 twa:shrink-0", 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 Custom Sort" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { className: "twa:max-w-[300px] twa:w-full", "data-name": "custom-sort-name", onChange: onNameChange, value: data?.Name ?? '' }) })] }) }), _jsxs(Flex, { flexDirection: "column", className: "twa:flex-1 twa:min-h-0", 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: "Column" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Select the column to apply the Custom Sort to" })] }), _jsx(Flex, { flexDirection: "row", alignItems: "center", className: "twa:px-2 twa:pb-2 twa:gap-2", children: _jsx(AdaptableFormControlTextClear, { value: columnsSearchText, OnTextChange: setColumnsSearchText, placeholder: "Type to search columns", className: "twa:flex-1" }) }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:px-2 twa:pb-2", children: _jsx(NewColumnSelector, { columnFilterText: columnsSearchText, availableColumns: sortableCols, selected: data.ColumnId ? [data.ColumnId] : [], singleSelect: true, onChange: (ids) => {
56
+ props.onChange({
57
+ ...data,
58
+ SortedValues: [],
59
+ ColumnId: ids[0],
60
+ });
61
+ }, allowReorder: false }) })] })] }));
67
62
  };
@@ -2,7 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { useMemo, useEffect, useState } from 'react';
4
4
  import { Loader } from '../../../components/Loader';
5
- import { Tabs } from '../../../components/Tabs';
6
5
  import join from '../../../components/utils/join';
7
6
  import { runIfNotResolvedIn } from '../../../Utilities/runIfNotResolvedIn';
8
7
  import { ValueSelector } from '../../Components/ValueSelector';
@@ -10,6 +9,8 @@ import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableW
10
9
  import ArrayExtensions from '../../.././Utilities/Extensions/ArrayExtensions';
11
10
  import { parseToISO } from '../../../Utilities/Helpers/DateHelper';
12
11
  import { TagList } from '../../../components/Tag';
12
+ import { Box, Flex } from '../../../components/Flex';
13
+ import { Card } from '../../../components/Card';
13
14
  export const isValidCustomSortOrder = (data) => {
14
15
  if (!data.SortedValues || !data.SortedValues.length) {
15
16
  return 'At least one value is required for the Custom Sort order.';
@@ -27,7 +28,6 @@ export const CustomSortValuesWizardSection = (props) => {
27
28
  useEffect(() => {
28
29
  let isMounted = true;
29
30
  (async () => {
30
- // for sync and very fast resolving promises does not make sense to show a loader
31
31
  setDistinctValues([]);
32
32
  const newValues = (await runIfNotResolvedIn(api.gridApi.internalApi.getDistinctValuesForColumn(data.ColumnId), () => isMounted && setIsDistinctValuesLoading(true))) ?? [];
33
33
  if (!isMounted) {
@@ -70,10 +70,10 @@ export const CustomSortValuesWizardSection = (props) => {
70
70
  }, [allowReorder, distinctValues, data.SortedValues]);
71
71
  const baseClassName = 'ab-CustomSortWizard__SortOrder';
72
72
  const className = join(baseClassName, isDistinctValuesLoading && `${baseClassName}--loading`);
73
- return (_jsxs(Tabs, { style: { height: '100%' }, className: className, children: [_jsx(Tabs.Tab, { children: "Sort Order" }), _jsxs(Tabs.Content, { children: [isDistinctValuesLoading && _jsx(Loader, { children: "Loading" }), _jsx(ValueSelector, { toIdentifier: toIdentifier, toLabel: toLabel, options: options, value: data.SortedValues, allowReorder: allowReorder, onChange: (SortedValues) => {
74
- props.onChange({
75
- ...data,
76
- SortedValues,
77
- });
78
- } })] })] }));
73
+ return (_jsx(Flex, { flexDirection: "column", className: "twa:h-full twa:p-3", children: _jsxs(Card, { shadow: false, className: join('twa:flex-1 twa:min-h-0', className), children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Sort Order" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Specify the custom sort order \u2014 drag selected items to modify order" })] }), _jsxs(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: [isDistinctValuesLoading && _jsx(Loader, { children: "Loading" }), _jsx(ValueSelector, { toIdentifier: toIdentifier, toLabel: toLabel, options: options, value: data.SortedValues, allowReorder: allowReorder, onChange: (SortedValues) => {
74
+ props.onChange({
75
+ ...data,
76
+ SortedValues,
77
+ });
78
+ } })] })] }) }));
79
79
  };
@@ -193,7 +193,7 @@ const buildGridOptions = (mainAdaptableInstance, changeHistoryLog) => {
193
193
  const mainPrimaryKeyColumnHeader = mainAdaptableInstance.api.columnApi.getPrimaryKeyColumn()?.friendlyName ?? 'Row ID';
194
194
  const options = {
195
195
  loading: false,
196
- overlayNoRowsTemplate: '<div style="font-size: var(--ab-font-size-2);color: var(--ab-color-text-on-primary);">No Data Changes</div>',
196
+ overlayNoRowsTemplate: '<div style="font-size: var(--ab-font-size-2);color: var(--ab-color-primary-foreground);">No Data Changes</div>',
197
197
  defaultColDef: {
198
198
  floatingFilter: true,
199
199
  filter: true,
@@ -5,12 +5,12 @@ import DropdownButton from '../../../../components/DropdownButton';
5
5
  import HelpBlock from '../../../../components/HelpBlock';
6
6
  import { Icon } from '../../../../components/icons';
7
7
  import { DataSource, InfiniteTableGrid, } from '../../../../components/InfiniteTable';
8
- import { Tabs } from '../../../../components/Tabs';
9
8
  import { Tag } from '../../../../components/Tag';
10
9
  import { useAdaptable } from '../../../AdaptableContext';
11
10
  import { AdaptablePopover } from '../../../AdaptablePopover';
12
11
  import UIHelper from '../../../UIHelper';
13
12
  import { Box, Flex } from '../../../../components/Flex';
13
+ import { Card } from '../../../../components/Card';
14
14
  const tableDOMProps = {
15
15
  style: {
16
16
  height: '100%',
@@ -62,7 +62,6 @@ export const ColumnsSection = (props) => {
62
62
  abColumn: {
63
63
  header: 'AdapTable Column',
64
64
  render: (params) => {
65
- // filter out used columns
66
65
  const availableColumns = allColumns
67
66
  .filter((c) => !props.columnsMap?.find((cm) => cm.abColumn === c.value))
68
67
  .map((col) => {
@@ -104,16 +103,16 @@ export const ColumnsSection = (props) => {
104
103
  };
105
104
  }, [props.columnsMap]);
106
105
  if (!props.columnsMap) {
107
- return (_jsx(Box, { className: "twa:p-2", children: _jsxs(HelpBlock, { className: "twa:text-error", children: ["No Data has been Imported. Go to ", _jsx(Tag, { children: "Upload" }), " step and provide Data"] }) }));
106
+ return (_jsx(Box, { className: "twa:p-3", children: _jsxs(HelpBlock, { className: "twa:text-error", children: ["No data has been imported. Go to the ", _jsx(Tag, { children: "Upload" }), " step and provide data."] }) }));
108
107
  }
109
- return (_jsx(Flex, { flexDirection: "column", className: "twa:p-2 twa:h-full", children: _jsxs(Tabs, { className: "twa:mb-2 twa:h-full", children: [_jsx(Tabs.Tab, { children: "Columns" }), _jsx(Tabs.Content, { children: _jsx(DataSource, { data: props.columnsMap, primaryKey: 'field', children: _jsx(InfiniteTableGrid, { columnPinning: {
110
- valid: 'end',
111
- type: 'end',
112
- }, columnTypes: {
113
- default: {
114
- minWidth: 100,
115
- defaultFlex: 1,
116
- },
117
- }, domProps: tableDOMProps, columns: columns }) }) })] }) }));
108
+ 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: "Map imported fields to AdapTable columns and choose which to include" })] }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-3", children: _jsxs(Card, { shadow: false, className: "twa:h-full twa:min-h-[300px]", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Column Mapping" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Match each data field to an AdapTable column. The primary key column cannot be excluded." })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: _jsx(DataSource, { data: props.columnsMap, primaryKey: 'field', children: _jsx(InfiniteTableGrid, { columnPinning: {
109
+ valid: 'end',
110
+ type: 'end',
111
+ }, columnTypes: {
112
+ default: {
113
+ minWidth: 100,
114
+ defaultFlex: 1,
115
+ },
116
+ }, domProps: tableDOMProps, columns: columns }) }) })] }) })] }));
118
117
  };
119
118
  ColumnsSection.displayName = 'ColumnsSection';
@@ -1,9 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Radio from '../../../../../components/Radio/index';
3
- import { Tabs } from '../../../../../components/Tabs/index';
4
2
  import { ImportFileSection } from './UploadFileSection';
5
3
  import { ImportTextSection } from './UploadTextSection';
6
- import { Flex } from '../../../../../components/Flex';
4
+ import { Box, Flex } from '../../../../../components/Flex';
5
+ import { Card } from '../../../../../components/Card';
6
+ import { TypeRadio } from '../../../../Wizard/TypeRadio';
7
7
  export const UploadSection = (props) => {
8
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:p-2 twa:h-full", children: [_jsxs(Tabs, { className: "twa:mb-2", children: [_jsx(Tabs.Tab, { children: "Import Type" }), _jsx(Tabs.Content, { children: _jsxs(Flex, { flexDirection: "column", children: [_jsx(Radio, { onClick: () => props.onImportTypeChange('file'), checked: props.importType === 'file', children: "File" }), _jsx(Radio, { onClick: () => props.onImportTypeChange('text'), checked: props.importType === 'text', children: "Text" })] }) })] }), _jsxs(Tabs, { className: "twa:flex-1", children: [_jsx(Tabs.Tab, { children: props.importType === 'file' ? 'File Upload' : 'Text' }), _jsx(Tabs.Content, { children: props.importType === 'file' ? (_jsx(ImportFileSection, { readFile: props.readFile, supportedFileFormats: props.supportedFileFormats, message: props.fileMessage })) : (_jsx(ImportTextSection, { message: props.textMessage, text: props.text, onTextChange: props.onTextChange })) })] })] }));
8
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Import Type" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose whether to import from a file or pasted text" })] }), _jsx(Card.Body, { children: _jsxs(Flex, { flexDirection: "column", children: [_jsx(TypeRadio, { text: "File", description: "Upload a file in a supported format", checked: props.importType === 'file', onClick: () => props.onImportTypeChange('file') }), _jsx(TypeRadio, { text: "Text", description: "Paste CSV, JSON, or other supported text directly", checked: props.importType === 'text', onClick: () => props.onImportTypeChange('text') })] }) })] }), _jsxs(Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: props.importType === 'file' ? 'File Upload' : 'Paste Text' }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: props.importType === 'file'
9
+ ? 'Select or drag a file to load the data for import'
10
+ : 'Paste your data below — CSV or JSON is detected automatically' })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: props.importType === 'file' ? (_jsx(ImportFileSection, { readFile: props.readFile, supportedFileFormats: props.supportedFileFormats, message: props.fileMessage })) : (_jsx(ImportTextSection, { message: props.textMessage, text: props.text, onTextChange: props.onTextChange })) })] })] }));
9
11
  };
@@ -1,6 +1,7 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import HelpBlock from '../../../../../components/HelpBlock/index';
3
3
  import Textarea from '../../../../../components/Textarea/index';
4
+ import { Flex } from '../../../../../components/Flex';
4
5
  export const ImportTextSection = (props) => {
5
- return (_jsxs(_Fragment, { children: [_jsx(Textarea, { value: props.text, onChange: (event) => props.onTextChange(event.target.value), className: "twa:h-full" }), props.message && _jsx(HelpBlock, { children: props.message })] }));
6
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full twa:min-h-[200px]", children: [_jsx(Textarea, { value: props.text, onChange: (event) => props.onTextChange(event.target.value), className: "twa:flex-1 twa:min-h-[200px]" }), props.message ? _jsx(HelpBlock, { className: "twa:mt-2", children: props.message }) : null] }));
6
7
  };
@@ -1,20 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { CheckBox } from '../../../../components/CheckBox';
3
- import FormLayout, { FormRow } from '../../../../components/FormLayout';
4
- import { Tabs } from '../../../../components/Tabs';
5
3
  import { DataPreview } from './DataPreview';
6
- import { Flex } from '../../../../components/Flex';
7
- const getRowErrors = (errors, primaryKeyValue) => {
8
- if (!errors) {
9
- return null;
10
- }
11
- if (!errors[primaryKeyValue]) {
12
- return null;
13
- }
14
- return errors[primaryKeyValue];
15
- };
4
+ import { Box, Flex } from '../../../../components/Flex';
5
+ import { Card } from '../../../../components/Card';
16
6
  export const ValidationSection = (props) => {
17
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:p-2 twa:h-full", children: [_jsxs(Tabs, { className: "twa:mb-2", children: [_jsx(Tabs.Tab, { children: "Import Options" }), _jsx(Tabs.Content, { children: _jsx(FormLayout, { children: _jsx(FormRow, { label: "Exclude Invalid Rows", children: _jsx(CheckBox, { onChange: () => {
18
- props.onSkipInvalidRowsChange(!props.skipInvalidRows);
19
- }, checked: props.skipInvalidRows }) }) }) })] }), _jsxs(Tabs, { className: "twa:flex-1", children: [_jsx(Tabs.Tab, { children: "Preview" }), _jsx(Tabs.Content, { children: _jsx(DataPreview, { columnsMap: props.columnsMap, data: props.data, errors: props.errors, editable: true, onDataChange: props.onDataChange }) })] })] }));
7
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Import Options" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose how rows that fail validation should be handled" })] }), _jsx(Card.Body, { children: _jsx(CheckBox, { onChange: () => {
8
+ props.onSkipInvalidRowsChange(!props.skipInvalidRows);
9
+ }, checked: props.skipInvalidRows, children: "Exclude invalid rows from import" }) })] }), _jsxs(Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Preview" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Review imported data and fix any validation errors before importing" })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: _jsx(DataPreview, { columnsMap: props.columnsMap, data: props.data, errors: props.errors, editable: true, onDataChange: props.onDataChange }) })] })] }));
20
10
  };
@@ -1,9 +1,9 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import Radio from '../../../components/Radio';
3
- import { Tabs } from '../../../components/Tabs';
4
2
  import { NewScopeComponent, renderScopeSummary } from '../../Components/NewScopeComponent';
5
3
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
6
4
  import { Box, Flex } from '../../../components/Flex';
5
+ import { Card } from '../../../components/Card';
6
+ import { TypeRadio } from '../../Wizard/TypeRadio';
7
7
  export const isValidReportColumnsScope = (report) => {
8
8
  if (report.ReportColumnScope === 'ScopeColumns') {
9
9
  return report.Scope != null ? true : 'Column scope is not defined';
@@ -18,28 +18,26 @@ export const renderReportColumnsSummary = (report) => {
18
18
  }) })) : null] }));
19
19
  };
20
20
  export const ReportColumnsWizardSection = (props) => {
21
- const { api, data } = useOnePageAdaptableWizardContext();
22
- return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full", children: [_jsxs(Tabs, { className: "twa:m-2", value: data.ReportColumnScope, onValueChange: (ReportColumnScope) => {
23
- const report = {
24
- ...data,
25
- ReportColumnScope,
26
- };
27
- if (report.ReportColumnScope !== 'ScopeColumns') {
28
- delete report.Scope;
29
- }
30
- else {
31
- if (!report.Scope) {
32
- report.Scope = {
33
- ColumnIds: [],
34
- };
35
- }
36
- }
37
- props.onChange(report);
38
- }, children: [_jsx(Tabs.Tab, { value: "AllColumns", children: _jsx(Radio, { className: "twa:m-0", checked: data.ReportColumnScope == 'AllColumns', tabIndex: -1, children: "All Columns" }) }), _jsx(Tabs.Tab, { value: "VisibleColumns", children: _jsx(Radio, { className: "twa:m-0", checked: data.ReportColumnScope == 'VisibleColumns', tabIndex: -1, children: "Visible Columns" }) }), _jsx(Tabs.Tab, { value: "ScopeColumns", children: _jsx(Radio, { className: "twa:m-0", checked: data.ReportColumnScope == 'ScopeColumns', tabIndex: -1, children: "Bespoke Columns" }) }), _jsx(Tabs.Content, { value: "AllColumns", children: _jsx(Box, { className: "twa:p-2 twa:text-2", children: "All Columns in the datasource will be included in the Report, whether visible or not at time of export" }) }), _jsx(Tabs.Content, { value: "VisibleColumns", children: _jsx(Box, { className: "twa:p-2 twa:text-2", children: "Only Columns that are visible at the time the Report is exported will be included" }) }), _jsx(Tabs.Content, { value: "BespokeColumns", children: _jsx(Box, { className: "twa:p-2 twa:text-2", children: "Only selected Columns (which you will choose in the next step) will be exported - whether visible or not" }) })] }), data.ReportColumnScope === 'ScopeColumns' ? (_jsx(Box, { className: "twa:p-2 twa:flex-1 twa:overflow-auto", children: _jsx(NewScopeComponent, { hideWholeRow: true, isColumnAvailable: (column) => Boolean(column.exportable), descriptions: {
39
- rowScope: 'Apply Scope for: Row, or one or more Columns, or one or more Data Types',
40
- columnScope: 'Selected columns will be included in the report',
41
- }, scope: data.Scope, updateScope: (Scope) => {
42
- const report = { ...data, Scope };
43
- props.onChange(report);
44
- } }) })) : null] }));
21
+ const { data } = useOnePageAdaptableWizardContext();
22
+ const handleColumnScopeChange = (ReportColumnScope) => {
23
+ const report = {
24
+ ...data,
25
+ ReportColumnScope,
26
+ };
27
+ if (report.ReportColumnScope !== 'ScopeColumns') {
28
+ delete report.Scope;
29
+ }
30
+ else if (!report.Scope) {
31
+ report.Scope = {
32
+ ColumnIds: [],
33
+ };
34
+ }
35
+ props.onChange(report);
36
+ };
37
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full", children: [_jsx(Flex, { flexDirection: "column", className: "twa:gap-3 twa:p-3 twa:shrink-0", children: _jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Columns" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose which columns to include in the Report" })] }), _jsx(Card.Body, { children: _jsxs(Flex, { flexDirection: "column", children: [_jsx(TypeRadio, { text: "All Columns", description: "All columns in the datasource will be included, whether visible or not at time of export", checked: data.ReportColumnScope === 'AllColumns', onClick: () => handleColumnScopeChange('AllColumns') }), _jsx(TypeRadio, { text: "Visible Columns", description: "Only columns that are visible at the time the Report is exported will be included", checked: data.ReportColumnScope === 'VisibleColumns', onClick: () => handleColumnScopeChange('VisibleColumns') }), _jsx(TypeRadio, { text: "Bespoke Columns", description: "Only selected columns will be exported \u2014 whether visible or not", checked: data.ReportColumnScope === 'ScopeColumns', onClick: () => handleColumnScopeChange('ScopeColumns') })] }) })] }) }), data.ReportColumnScope === 'ScopeColumns' ? (_jsxs(Flex, { flexDirection: "column", className: "twa:flex-1 twa:min-h-0", 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: "Column Selection" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:max-w-[520px]", children: "Select the columns to include in the Report" })] }), _jsx(Box, { className: "twa:flex-1 twa:min-h-0 twa:overflow-auto twa:p-2", children: _jsx(NewScopeComponent, { hideWholeRow: true, isColumnAvailable: (column) => Boolean(column.exportable), descriptions: {
38
+ rowScope: 'Apply Scope for: Row, or one or more Columns, or one or more Data Types',
39
+ columnScope: 'Selected columns will be included in the report',
40
+ }, scope: data.Scope, updateScope: (Scope) => {
41
+ props.onChange({ ...data, Scope });
42
+ } }) })] })) : null] }));
45
43
  };
@@ -1,10 +1,9 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import ErrorBox from '../../../components/ErrorBox';
3
- import FormLayout, { FormRow } from '../../../components/FormLayout';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
2
  import Input from '../../../components/Input';
5
3
  import { Tag } from '../../../components/Tag';
6
4
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
7
- import { Box } from '../../../components/Flex';
5
+ import { Box, Flex } from '../../../components/Flex';
6
+ import { Card } from '../../../components/Card';
8
7
  export const renderReportNameSummary = (report) => {
9
8
  return (_jsxs(Box, { className: "twa:text-2", children: [' ', "Report Name: ", _jsx(Tag, { children: report.Name })] }));
10
9
  };
@@ -21,13 +20,11 @@ export const isValidReportName = (report, api) => {
21
20
  return hasAlreadyExistingName ? 'A Report already exists with that name' : true;
22
21
  };
23
22
  export const ReportNameWizardSection = (props) => {
24
- const { api, data } = useOnePageAdaptableWizardContext();
25
- const validCheck = isValidReportName(data, api);
26
- const ErrorMessage = validCheck === true ? null : validCheck;
27
- return (_jsx(Box, { children: _jsxs(FormLayout, { columns: [1, 2], children: [_jsxs(FormRow, { children: [_jsx(Box, { className: "twa:mr-2", children: "Name:" }), _jsx(Input, { "data-name": "export-name", className: "twa:w-full", type: "text", autoFocus: true, placeholder: "Name", value: data.Name, onChange: (e) => {
28
- props.onChange({
29
- ...data,
30
- Name: e.target.value,
31
- });
32
- } })] }), _jsxs(FormRow, { children: [_jsx(_Fragment, {}), ErrorMessage ? _jsx(ErrorBox, { children: ErrorMessage }) : null] })] }) }));
23
+ const { data } = useOnePageAdaptableWizardContext();
24
+ return (_jsx(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 Report" })] }), _jsx(Card.Body, { className: "twa:p-1", children: _jsx(Input, { "data-name": "export-name", className: "twa:max-w-[300px] twa:w-full", type: "text", autoFocus: true, placeholder: "Enter Name", value: data.Name, onChange: (e) => {
25
+ props.onChange({
26
+ ...data,
27
+ Name: e.target.value,
28
+ });
29
+ } }) })] }) }));
33
30
  };
@@ -2,11 +2,11 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useMemo } from 'react';
3
3
  import { ExpressionEditor } from '../../../components/ExpressionEditor';
4
4
  import { ExpressionPreview } from '../../../components/ExpressionEditor/ExpressionPreview';
5
- import Radio from '../../../components/Radio';
6
- import { Tabs } from '../../../components/Tabs';
7
5
  import { Tag } from '../../../components/Tag';
8
6
  import { useOnePageAdaptableWizardContext } from '../../Wizard/OnePageAdaptableWizard';
9
- import { Box } from '../../../components/Flex';
7
+ import { Box, Flex } from '../../../components/Flex';
8
+ import { Card } from '../../../components/Card';
9
+ import { TypeRadio } from '../../Wizard/TypeRadio';
10
10
  export const isValidReportRowsQuery = (report) => {
11
11
  if (report.ReportRowScope === 'ExpressionRows' && !report.Query?.BooleanExpression) {
12
12
  return 'Rows query cannot be empty';
@@ -14,34 +14,32 @@ export const isValidReportRowsQuery = (report) => {
14
14
  return true;
15
15
  };
16
16
  export const renderReportRowsSummary = (report) => {
17
- const { api } = useOnePageAdaptableWizardContext();
18
17
  return (_jsxs(Box, { className: "twa:text-2", children: [report.ReportRowScope === 'AllRows' ? (_jsxs(_Fragment, { children: ["Include ", _jsx("b", { children: "all Rows" }), " in the Report"] })) : null, report.ReportRowScope === 'VisibleRows' ? (_jsxs(_Fragment, { children: ["Include ", _jsx("b", { children: "only visible Rows" }), " in the Report"] })) : null, report.ReportRowScope === 'ExpressionRows' ? (_jsxs(_Fragment, { children: ["Include Rows matching the query:", ' ', _jsx(Tag, { children: _jsx(ExpressionPreview, { query: report.Query }) })] })) : null] }));
19
18
  };
20
19
  export const ReportRowsWizardSection = (props) => {
21
20
  const { api, data, moduleInfo } = useOnePageAdaptableWizardContext();
22
21
  const initialData = useMemo(() => api.internalApi.getQueryPreviewData(), []);
23
- return (_jsx(_Fragment, { children: _jsxs(Tabs, { className: "twa:m-2", value: data.ReportRowScope, onValueChange: (ReportRowScope) => {
24
- const report = {
25
- ...data,
26
- ReportRowScope,
27
- };
28
- if (report.ReportRowScope !== 'ExpressionRows') {
29
- delete report.Query;
30
- }
31
- else {
32
- if (!report.Query) {
33
- report.Query = {
34
- BooleanExpression: '',
35
- };
36
- }
37
- }
38
- props.onChange(report);
39
- }, children: [_jsx(Tabs.Tab, { value: "AllRows", children: _jsx(Radio, { className: "twa:m-0", checked: data.ReportRowScope == 'AllRows', tabIndex: -1, children: "All Rows" }) }), _jsx(Tabs.Tab, { value: "VisibleRows", children: _jsx(Radio, { className: "twa:m-0", checked: data.ReportRowScope == 'VisibleRows', tabIndex: -1, children: "Visible Rows" }) }), _jsx(Tabs.Tab, { value: "ExpressionRows", children: _jsx(Radio, { className: "twa:m-0", checked: data.ReportRowScope == 'ExpressionRows', tabIndex: -1, children: "By Query" }) }), _jsx(Tabs.Content, { value: "AllRows", children: _jsx(Box, { className: "twa:p-2 twa:text-2", children: "All Rows in the datasource will be included in the report, whether visible or not at time of export." }) }), _jsx(Tabs.Content, { value: "VisibleRows", children: _jsx(Box, { className: "twa:p-2 twa:text-2", children: "Only Rows that are visible at the time the Report is exported will be included in the Export" }) }), _jsxs(Tabs.Content, { value: "ExpressionRows", children: [_jsx(Box, { className: "twa:p-2 twa:pl-0 twa:text-2", children: "Only the Rows which match the Query will be exported - whether visible or not." }), _jsx(ExpressionEditor, { allowSaveNamedQuery: true, type: 'boolean', module: moduleInfo.ModuleName, style: { paddingLeft: 0 }, value: data.Query?.BooleanExpression ?? '', onChange: (BooleanExpression) => {
22
+ const handleRowScopeChange = (ReportRowScope) => {
23
+ const report = {
24
+ ...data,
25
+ ReportRowScope,
26
+ };
27
+ if (report.ReportRowScope !== 'ExpressionRows') {
28
+ delete report.Query;
29
+ }
30
+ else if (!report.Query) {
31
+ report.Query = {
32
+ BooleanExpression: '',
33
+ };
34
+ }
35
+ props.onChange(report);
36
+ };
37
+ return (_jsxs(Flex, { flexDirection: "column", className: "twa:h-full twa:gap-3 twa:p-3", children: [_jsxs(Card, { shadow: false, children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Rows" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Choose which rows to include in the Report" })] }), _jsx(Card.Body, { children: _jsxs(Flex, { flexDirection: "column", children: [_jsx(TypeRadio, { text: "All Rows", description: "All rows in the datasource will be included, whether visible or not at time of export", checked: data.ReportRowScope === 'AllRows', onClick: () => handleRowScopeChange('AllRows') }), _jsx(TypeRadio, { text: "Visible Rows", description: "Only rows that are visible at the time the Report is exported will be included", checked: data.ReportRowScope === 'VisibleRows', onClick: () => handleRowScopeChange('VisibleRows') }), _jsx(TypeRadio, { text: "By Query", description: "Only rows matching the query will be exported \u2014 whether visible or not", checked: data.ReportRowScope === 'ExpressionRows', onClick: () => handleRowScopeChange('ExpressionRows') })] }) })] }), data.ReportRowScope === 'ExpressionRows' ? (_jsxs(Card, { shadow: false, className: "twa:flex-1 twa:min-h-0", children: [_jsxs(Card.Title, { children: [_jsx(Box, { className: "twa:font-medium", children: "Query" }), _jsx(Box, { className: "twa:text-xs twa:opacity-70 twa:font-normal twa:max-w-[520px]", children: "Build a boolean expression to filter which rows are included" })] }), _jsx(Card.Body, { className: "twa:flex-1 twa:min-h-0", children: _jsx(ExpressionEditor, { allowSaveNamedQuery: true, type: 'boolean', module: moduleInfo.ModuleName, className: "twa:pl-0", value: data.Query?.BooleanExpression ?? '', onChange: (BooleanExpression) => {
40
38
  props.onChange({
41
39
  ...data,
42
40
  Query: {
43
41
  BooleanExpression,
44
42
  },
45
43
  });
46
- }, initialData: initialData, columns: api.columnApi.internalApi.getQueryableColumnsForUIEditor(), fields: api.expressionApi.internalApi.getAvailableFields(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api })] })] }) }));
44
+ }, initialData: initialData, columns: api.columnApi.internalApi.getQueryableColumnsForUIEditor(), fields: api.expressionApi.internalApi.getAvailableFields(), namedQueries: api.namedQueryApi.getNamedQueries(), api: api }) })] })) : null] }));
47
45
  };
@@ -8,6 +8,8 @@ interface ScheduledReportSettingsProps {
8
8
  allDestinations: ExportDestinationType[];
9
9
  /** When set, the user picks which report this schedule exports (Export popup → New Schedule). */
10
10
  allReportNames?: ReportNameType[];
11
+ /** When set, the report is fixed (schedule created from a specific report). */
12
+ fixedReportName?: ReportNameType;
11
13
  }
12
14
  export declare const ScheduledReportSettings: React.FunctionComponent<ScheduledReportSettingsProps>;
13
15
  export {};