@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.
- package/index.css +116 -61
- package/package.json +9 -4
- package/src/AdaptableOptions/EditOptions.d.ts +2 -2
- package/src/AdaptableState/Common/AggregationColumns.d.ts +14 -6
- package/src/AdaptableState/Common/AggregationColumns.js +27 -2
- package/src/AdaptableState/Common/ColumnScope.d.ts +4 -0
- package/src/AdaptableState/Common/Enums.d.ts +5 -5
- package/src/AdaptableState/Common/Enums.js +4 -4
- package/src/AdaptableState/PlusMinusState.d.ts +3 -3
- package/src/AdaptableState/ShortcutState.d.ts +2 -6
- package/src/AdaptableState/StyledColumnState.d.ts +3 -5
- package/src/AdaptableState/ThemeState.d.ts +33 -28
- package/src/Api/EventApi.d.ts +14 -1
- package/src/Api/Events/ThemeChanged.d.ts +6 -0
- package/src/Api/Events/ThemeSelected.d.ts +11 -0
- package/src/Api/Events/ThemeSelected.js +1 -0
- package/src/Api/Implementation/EventApiImpl.js +4 -0
- package/src/Api/Implementation/LayoutApiImpl.d.ts +0 -2
- package/src/Api/Implementation/LayoutApiImpl.js +0 -14
- package/src/Api/Implementation/LayoutHelpers.d.ts +2 -0
- package/src/Api/Implementation/LayoutHelpers.js +17 -7
- package/src/Api/Implementation/ThemeApiImpl.d.ts +3 -2
- package/src/Api/Implementation/ThemeApiImpl.js +19 -15
- package/src/Api/Internal/EventInternalApi.d.ts +2 -0
- package/src/Api/Internal/EventInternalApi.js +8 -1
- package/src/Api/Internal/StyledColumnInternalApi.d.ts +4 -4
- package/src/Api/Internal/StyledColumnInternalApi.js +4 -4
- package/src/Api/Internal/ThemeInternalApi.d.ts +0 -1
- package/src/Api/Internal/ThemeInternalApi.js +0 -10
- package/src/Api/LayoutApi.d.ts +1 -8
- package/src/Api/ThemeApi.d.ts +6 -2
- package/src/Redux/ActionsReducers/ThemeRedux.d.ts +3 -3
- package/src/Strategy/FormatColumnModule.js +14 -7
- package/src/Strategy/LayoutModule.js +13 -8
- package/src/Strategy/StyledColumnModule.js +64 -36
- package/src/Utilities/Constants/ReduxConstants.d.ts +2 -2
- package/src/Utilities/Constants/ReduxConstants.js +1 -14
- package/src/Utilities/Helpers/FormatHelper.js +20 -1
- package/src/Utilities/Helpers/SparklineOptionsHelper.d.ts +7 -0
- package/src/Utilities/Helpers/SparklineOptionsHelper.js +65 -0
- package/src/Utilities/Helpers/StyledColumnGradientHelper.d.ts +23 -1
- package/src/Utilities/Helpers/StyledColumnGradientHelper.js +204 -0
- package/src/Utilities/Helpers/ThemeHelpers.d.ts +5 -0
- package/src/Utilities/Helpers/ThemeHelpers.js +38 -0
- package/src/Utilities/Helpers/percentBarPreviewHelper.d.ts +19 -0
- package/src/Utilities/Helpers/percentBarPreviewHelper.js +143 -0
- package/src/Utilities/ObjectFactory.d.ts +1 -3
- package/src/Utilities/ObjectFactory.js +0 -8
- package/src/Utilities/Services/ThemeService.js +1 -1
- package/src/View/Alert/Wizard/AlertBehaviourWizardSection.js +17 -16
- package/src/View/Alert/Wizard/AlertButtonsEditor.js +114 -103
- package/src/View/Alert/Wizard/AlertMessageWizardSection.js +13 -14
- package/src/View/Alert/Wizard/AlertNotificationWizardSection.js +55 -55
- package/src/View/Alert/Wizard/AlertRulesWizardSection.js +3 -2
- package/src/View/Alert/Wizard/AlertScheduledWizardSection.js +2 -2
- package/src/View/Alert/Wizard/AlertScopeWizardSection.js +31 -39
- package/src/View/Alert/Wizard/AlertTypeWizardSection.js +3 -4
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnDefinitionWizardSection.js +9 -13
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnExpressionWizardSection.js +30 -17
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnSettingsWizardSection.js +7 -9
- package/src/View/CalculatedColumn/Wizard/CalculatedColumnTypeSection.js +3 -3
- package/src/View/CellSummary/CellSummaryViewPanel.js +1 -1
- package/src/View/Charting/ChartingWizard/AgChargingWizard/AgChargingWizard.js +3 -10
- package/src/View/Charting/ChartingWizard/AgChargingWizard/PreviewChartSection.js +1 -1
- package/src/View/Charting/ChartingWizard/AgChargingWizard/SettingsSection.js +32 -41
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/ExternalChartingWizard.js +4 -31
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.d.ts +5 -0
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/PreviewChartSection.js +21 -0
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.d.ts +1 -0
- package/src/View/Charting/ChartingWizard/ExternalChartingWizard/SettingsSection.js +10 -7
- package/src/View/Comments/CommentsEditor.js +1 -1
- package/src/View/Components/ModuleProfile.js +1 -1
- package/src/View/Components/Popups/WindowPopups/windowFactory.d.ts +0 -1
- package/src/View/Components/Popups/WindowPopups/windowFactory.js +0 -1
- package/src/View/Components/RangesComponent.d.ts +7 -2
- package/src/View/Components/RangesComponent.js +94 -22
- package/src/View/Components/StyleComponent.d.ts +1 -0
- package/src/View/Components/StyleComponent.js +1 -1
- package/src/View/Components/ValueSelector/index.js +70 -57
- package/src/View/CustomSort/Wizard/CustomSortColumnWizardSection.js +8 -13
- package/src/View/CustomSort/Wizard/CustomSortValuesWizardSection.js +8 -8
- package/src/View/DataChangeHistory/DataChangeHistoryGrid.js +1 -1
- package/src/View/DataImport/DataImportWizard/sections/ColumnsSection.js +11 -12
- package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadSection.js +6 -4
- package/src/View/DataImport/DataImportWizard/sections/UploadSection/UploadTextSection.js +3 -2
- package/src/View/DataImport/DataImportWizard/sections/ValidationSection.js +5 -15
- package/src/View/Export/Wizard/ReportColumnsWizardSection.js +24 -26
- package/src/View/Export/Wizard/ReportNameWizardSection.js +10 -13
- package/src/View/Export/Wizard/ReportRowsWizardSection.js +20 -22
- package/src/View/Export/Wizard/ScheduledReportSettings.d.ts +2 -0
- package/src/View/Export/Wizard/ScheduledReportSettings.js +13 -13
- package/src/View/Export/Wizard/ScheduledReportWizard.js +4 -5
- package/src/View/FlashingCell/Wizard/FlashingCellRulesWizardSection.js +8 -6
- package/src/View/FlashingCell/Wizard/FlashingCellScopeWizardSection.js +21 -22
- package/src/View/FlashingCell/Wizard/FlashingCellSettingsWizardSection.js +20 -11
- package/src/View/FlashingCell/Wizard/FlashingCellStyleWizardSection.js +21 -5
- package/src/View/FlashingCell/Wizard/FlashingCellWizard.js +4 -4
- package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.d.ts +7 -0
- package/src/View/FormatColumn/Wizard/FormatColumnFormatWizardSection.js +117 -12
- package/src/View/FormatColumn/Wizard/FormatColumnPreview.d.ts +15 -0
- package/src/View/FormatColumn/Wizard/FormatColumnPreview.js +66 -0
- package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.d.ts +4 -0
- package/src/View/FormatColumn/Wizard/FormatColumnRuleWizardSection.js +30 -0
- package/src/View/FormatColumn/Wizard/FormatColumnScopeWizardSection.js +13 -8
- package/src/View/FormatColumn/Wizard/FormatColumnSettingsWizardSection.js +1 -1
- package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.d.ts +3 -1
- package/src/View/FormatColumn/Wizard/FormatColumnStyleWizardSection.js +62 -13
- package/src/View/FormatColumn/Wizard/FormatColumnWizard.js +5 -3
- package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.d.ts +2 -0
- package/src/View/FreeTextColumn/Utilities/getFreeTextColumnSettingsTags.js +15 -0
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.d.ts +10 -0
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnDefinitionWizardSection.js +53 -0
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.d.ts +2 -3
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnSettingsWizardSection.js +33 -68
- package/src/View/FreeTextColumn/Wizard/FreeTextColumnWizard.js +15 -11
- package/src/View/Layout/TransposedPopup.js +2 -2
- package/src/View/Layout/Wizard/LayoutWizard.js +3 -3
- package/src/View/Layout/Wizard/sections/AggregationsSection.d.ts +2 -3
- package/src/View/Layout/Wizard/sections/AggregationsSection.js +115 -26
- package/src/View/Layout/Wizard/sections/ColumnsSection.js +79 -79
- package/src/View/Layout/Wizard/sections/FilterSection.js +31 -32
- package/src/View/Layout/Wizard/sections/GridFilterSection.js +11 -11
- package/src/View/Layout/Wizard/sections/PivotAggregationsSection.d.ts +1 -2
- package/src/View/Layout/Wizard/sections/PivotAggregationsSection.js +101 -52
- package/src/View/Layout/Wizard/sections/PivotColumnsSection.js +9 -8
- package/src/View/Layout/Wizard/sections/PivotRowGroupingSection.js +4 -4
- package/src/View/Layout/Wizard/sections/RowGroupingSection.js +36 -33
- package/src/View/Layout/Wizard/sections/RowSelectionSection.js +2 -2
- package/src/View/Layout/Wizard/sections/RowSummarySection.js +95 -73
- package/src/View/Layout/Wizard/sections/SettingsSection.js +4 -5
- package/src/View/Layout/Wizard/sections/SortSection.js +2 -2
- package/src/View/NamedQuery/Wizard/NamedQueryExpressionWizardSection.js +1 -1
- package/src/View/NamedQuery/Wizard/NamedQuerySettingsWizardSection.js +9 -14
- package/src/View/NamedQuery/Wizard/NamedQueryWizard.js +1 -3
- package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.d.ts +4 -0
- package/src/View/PlusMinus/Wizard/PlusMinusRuleWizardSection.js +43 -13
- package/src/View/PlusMinus/Wizard/PlusMinusScopeWizardSection.js +11 -18
- package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.d.ts +2 -6
- package/src/View/PlusMinus/Wizard/PlusMinusSettingsWizardSection.js +6 -22
- package/src/View/PlusMinus/Wizard/PlusMinusWizard.js +15 -21
- package/src/View/Schedule/Wizard/ScheduleScheduleWizard.js +2 -2
- package/src/View/Shortcut/Wizard/ShortcutScopeWizardSection.js +11 -18
- package/src/View/Shortcut/Wizard/ShortcutSettingsWizard.js +17 -6
- package/src/View/Shortcut/Wizard/ShortcutWizard.js +3 -3
- package/src/View/Shortcut/shortcutOperations.d.ts +3 -0
- package/src/View/Shortcut/shortcutOperations.js +28 -0
- package/src/View/SpecialColumnSettingsWizardStep.js +9 -8
- package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.d.ts +5 -0
- package/src/View/StyledColumn/Wizard/BadgePillStyleEditor.js +24 -15
- package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.d.ts +10 -2
- package/src/View/StyledColumn/Wizard/StyledColumnBadgeSection.js +96 -16
- package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.d.ts +14 -0
- package/src/View/StyledColumn/Wizard/StyledColumnSliceStyleEditors.js +45 -24
- package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.d.ts +2 -3
- package/src/View/StyledColumn/Wizard/StyledColumnSparklineSettingsSection.js +108 -33
- package/src/View/StyledColumn/Wizard/StyledColumnWizard.js +21 -13
- package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.d.ts +5 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardBulletSection.js +121 -23
- package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.d.ts +1 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardGradientSection.js +34 -11
- package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.d.ts +5 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardIconSection.js +86 -12
- package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.d.ts +5 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardRangeBarSection.js +121 -34
- package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.d.ts +1 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardRatingSection.js +55 -75
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.d.ts +5 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/BulletRangesSummaryPreview.js +16 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/GradientSummaryPreview.js +7 -13
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarColumnComparisonPreview.js +5 -5
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarRangesPreview.js +4 -3
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.d.ts +5 -4
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/PercentBarStylePreview.js +12 -14
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.d.ts +5 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/RangeBarRangesSummaryPreview.js +16 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.d.ts +3 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgePreview.js +31 -3
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.d.ts +9 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBulletPreview.js +58 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.d.ts +10 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnGradientPreview.js +30 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.d.ts +10 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnIconPreview.js +91 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.d.ts +8 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnPercentBarPreview.js +52 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.d.ts +8 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRangeBarPreview.js +53 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.d.ts +18 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnRatingPreview.js +58 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.d.ts +10 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnSparklinePreview.js +126 -0
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardRangesSection.js +12 -5
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.d.ts +1 -5
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/StyledColumnWizardStyleSection.js +52 -29
- package/src/View/SystemStatus/Utilities/getStatusItemStyle.js +1 -1
- package/src/View/Theme/ThemePopup.d.ts +2 -14
- package/src/View/Theme/ThemePopup.js +1 -36
- package/src/View/UIHelper.js +1 -1
- package/src/View/Wizard/OnePageAdaptableWizard.js +7 -21
- package/src/agGrid/AdaptableAgGrid.d.ts +1 -0
- package/src/agGrid/AdaptableAgGrid.js +35 -25
- package/src/agGrid/AgGridAdapter.d.ts +1 -1
- package/src/agGrid/AgGridAdapter.js +27 -17
- package/src/agGrid/AgGridColumnAdapter.js +9 -15
- package/src/agGrid/AgGridMenuAdapter.d.ts +0 -1
- package/src/agGrid/AgGridMenuAdapter.js +20 -37
- package/src/agGrid/buildValueAggregationMenuItem.d.ts +19 -0
- package/src/agGrid/buildValueAggregationMenuItem.js +111 -0
- package/src/agGrid/cellRenderers/IconRenderer.d.ts +6 -0
- package/src/agGrid/cellRenderers/IconRenderer.js +43 -15
- package/src/agGrid/createAgGridIcon.d.ts +10 -0
- package/src/agGrid/createAgGridIcon.js +16 -0
- package/src/components/DragAndDropContext/UnusedPanel.js +1 -1
- package/src/components/ExpressionEditor/BaseEditorInput.js +1 -1
- package/src/components/ExpressionEditor/ExpressionFunctionDocumentation.js +1 -1
- package/src/components/Input/NumberInput.js +1 -1
- package/src/components/Panel/index.js +1 -1
- package/src/components/SimpleButton/index.js +4 -4
- package/src/components/Toggle/Toggle.js +1 -1
- package/src/components/Toggle/ToggleGroup.js +1 -1
- package/src/env.js +2 -2
- package/src/layout-manager/src/index.js +2 -9
- package/src/metamodel/adaptable.metamodel.d.ts +39 -29
- package/src/metamodel/adaptable.metamodel.js +1 -1
- package/src/types.d.ts +5 -4
- package/themes/dark.css +1 -68
- package/themes/light.css +1 -5
- package/tsconfig.esm.tsbuildinfo +1 -1
- package/src/Aggregation/ParameterizedAggregationRegistry.d.ts +0 -35
- package/src/Aggregation/ParameterizedAggregationRegistry.js +0 -63
- package/src/Aggregation/definitions/weightedAverageAggregationDefinition.d.ts +0 -3
- package/src/Aggregation/definitions/weightedAverageAggregationDefinition.js +0 -55
- package/src/Aggregation/parameterizedAggregationColumnMenu.d.ts +0 -8
- package/src/Aggregation/parameterizedAggregationColumnMenu.js +0 -137
- package/src/Aggregation/parameterizedAggregationHeader.d.ts +0 -13
- package/src/Aggregation/parameterizedAggregationHeader.js +0 -60
- package/src/Aggregation/parameterizedAggregationHelpers.d.ts +0 -23
- package/src/Aggregation/parameterizedAggregationHelpers.js +0 -111
- package/src/Aggregation/parameterizedAggregationWizardHelpers.d.ts +0 -9
- package/src/Aggregation/parameterizedAggregationWizardHelpers.js +0 -66
- package/src/Aggregation/validateParameterizedAggregations.d.ts +0 -4
- package/src/Aggregation/validateParameterizedAggregations.js +0 -20
- package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.d.ts +0 -12
- package/src/View/Layout/Wizard/sections/ParameterizedAggFuncPicker.js +0 -43
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.d.ts +0 -5
- package/src/View/StyledColumn/Wizard/StyledColumnWizardStyleSection/Components/StyledColumnBadgeSettings.js +0 -28
- package/src/View/Theme/VariantSelector.d.ts +0 -8
- 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
|
|
50
|
-
|
|
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,
|
|
55
|
-
}, [onChange, selectedOnly,
|
|
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 (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
91
|
-
|
|
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
|
-
|
|
97
|
-
|
|
123
|
+
updateSelection((next) => {
|
|
124
|
+
next.delete(id);
|
|
125
|
+
});
|
|
98
126
|
},
|
|
99
127
|
onClear: () => {
|
|
100
|
-
|
|
101
|
-
|
|
128
|
+
updateSelection((next) => {
|
|
129
|
+
next.clear();
|
|
130
|
+
});
|
|
102
131
|
},
|
|
103
132
|
};
|
|
104
|
-
|
|
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,
|
|
110
|
-
if (
|
|
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
|
-
|
|
151
|
+
const nextMap = new Map();
|
|
129
152
|
newSelection.forEach((key) => {
|
|
130
|
-
|
|
153
|
+
nextMap.set(key, selectedMap.get(key));
|
|
131
154
|
});
|
|
132
|
-
|
|
133
|
-
}, children: (listDomProps) =>
|
|
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",
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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 (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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-
|
|
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-
|
|
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 (
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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:
|
|
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,
|
|
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(
|
|
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
|
-
|
|
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:
|
|
18
|
-
|
|
19
|
-
|
|
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 {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
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 {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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 {};
|