@sapui5/sap.fe.macros 1.139.0 → 1.141.0
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/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +78 -64
- package/src/sap/fe/macros/Field.ts +97 -68
- package/src/sap/fe/macros/FooterContent.js +5 -2
- package/src/sap/fe/macros/FooterContent.tsx +4 -1
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +10 -7
- package/src/sap/fe/macros/MultiValueField.tsx +7 -3
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Share.js +14 -2
- package/src/sap/fe/macros/Share.tsx +13 -0
- package/src/sap/fe/macros/Status.js +251 -0
- package/src/sap/fe/macros/Status.tsx +212 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -5
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +28 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +555 -5
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +24 -8
- package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
- package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +24 -4
- package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
- package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
- package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
- package/src/sap/fe/macros/messagebundle_da.properties +8 -2
- package/src/sap/fe/macros/messagebundle_de.properties +13 -7
- package/src/sap/fe/macros/messagebundle_el.properties +7 -1
- package/src/sap/fe/macros/messagebundle_en.properties +11 -5
- package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
- package/src/sap/fe/macros/messagebundle_es.properties +10 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
- package/src/sap/fe/macros/messagebundle_et.properties +9 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
- package/src/sap/fe/macros/messagebundle_id.properties +15 -9
- package/src/sap/fe/macros/messagebundle_it.properties +7 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
- package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
- package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
- package/src/sap/fe/macros/messagebundle_no.properties +7 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
- package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
- package/src/sap/fe/macros/messagebundle_th.properties +8 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
- package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
- package/src/sap/fe/macros/messages/MessageButton.js +39 -18
- package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
- package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +2 -3
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -3
- package/src/sap/fe/macros/table/TableHelper.ts +1 -2
- package/src/sap/fe/macros/table/TableRuntime.js +24 -5
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +8 -3
- package/src/sap/fe/macros/table/Utils.ts +12 -3
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -34
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
|
@@ -53,6 +53,48 @@ function _getDefaultOperators(sPropertyType?: string): string[] {
|
|
|
53
53
|
return FilterOperatorUtil.getOperatorsForType(oBaseType);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Helper function to check if an operator is excluded by manifest configuration.
|
|
58
|
+
* @param operatorName The operator name to check
|
|
59
|
+
* @param oSettings The settings object containing operator configuration
|
|
60
|
+
* @returns True if the operator is excluded, false otherwise
|
|
61
|
+
*/
|
|
62
|
+
function _isOperatorExcludedByManifest(operatorName: string, oSettings: FilterSettings | undefined): boolean {
|
|
63
|
+
if (!oSettings?.operatorConfiguration) return false;
|
|
64
|
+
|
|
65
|
+
return oSettings.operatorConfiguration.some(
|
|
66
|
+
(config) => config.path === "key" && config.equals === operatorName && config.exclude === true
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Helper function to get Empty/NotEmpty operators with manifest configuration support.
|
|
72
|
+
* @param sType The field type
|
|
73
|
+
* @param oSettings The settings object containing operator configuration
|
|
74
|
+
* @returns Array of Empty/NotEmpty operators if not excluded by manifest
|
|
75
|
+
*/
|
|
76
|
+
function _getEmptyOps(sType: string, oSettings: FilterSettings | undefined): string[] {
|
|
77
|
+
// Only return Empty/NotEmpty for date types
|
|
78
|
+
if (sType !== "Edm.Date" && sType !== "Edm.DateTimeOffset") {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const result: string[] = [];
|
|
83
|
+
|
|
84
|
+
// Check manifest configuration and add operators in correct order (NotEmpty first to match test expectations)
|
|
85
|
+
const notEmptyExcluded = _isOperatorExcludedByManifest("NotEmpty", oSettings);
|
|
86
|
+
const emptyExcluded = _isOperatorExcludedByManifest("Empty", oSettings);
|
|
87
|
+
|
|
88
|
+
if (!notEmptyExcluded) {
|
|
89
|
+
result.push("NotEmpty");
|
|
90
|
+
}
|
|
91
|
+
if (!emptyExcluded) {
|
|
92
|
+
result.push("Empty");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
56
98
|
const ValueColor = mLibrary.ValueColor;
|
|
57
99
|
const CommonHelper = {
|
|
58
100
|
getPathToKey: function (oCtx: Context): object {
|
|
@@ -756,6 +798,7 @@ const CommonHelper = {
|
|
|
756
798
|
* To fetch measure attribute index.
|
|
757
799
|
* @param iMeasure Chart Annotations
|
|
758
800
|
* @param oChartAnnotations Chart Annotations
|
|
801
|
+
* @param isMicroChart Whether this is a micro chart
|
|
759
802
|
* @returns MeasureAttribute index.
|
|
760
803
|
* @private
|
|
761
804
|
*/
|
|
@@ -1029,6 +1072,9 @@ const CommonHelper = {
|
|
|
1029
1072
|
let aSemanticDateOps: string[] = [];
|
|
1030
1073
|
const oSettings = settings && typeof settings === "string" ? JSON.parse(settings).customData : settings;
|
|
1031
1074
|
|
|
1075
|
+
// Initialize Empty/NotEmpty operators based on field type and manifest settings
|
|
1076
|
+
const emptyOps = _getEmptyOps(sType || "", oSettings);
|
|
1077
|
+
|
|
1032
1078
|
if ((oContext.getObject(`${sEntitySetPath}/@com.sap.vocabularies.Common.v1.ResultContext`) as unknown) === true) {
|
|
1033
1079
|
return aEqualsOps;
|
|
1034
1080
|
}
|
|
@@ -1063,7 +1109,14 @@ const CommonHelper = {
|
|
|
1063
1109
|
switch (sAllowedExpression) {
|
|
1064
1110
|
case "SingleValue":
|
|
1065
1111
|
const singleValueDateOps = DefaultSemanticDateOperators.getSingleValueDateOperations();
|
|
1066
|
-
|
|
1112
|
+
let aSingleValueOps: string[];
|
|
1113
|
+
if (sType === "Edm.Date" && bSemanticDateRange) {
|
|
1114
|
+
aSingleValueOps = [...singleValueDateOps, ...emptyOps];
|
|
1115
|
+
} else if (sType === "Edm.Date" || sType === "Edm.DateTimeOffset") {
|
|
1116
|
+
aSingleValueOps = [...aEqualsOps, ...emptyOps]; // ["EQ", "Empty", "NotEmpty"]
|
|
1117
|
+
} else {
|
|
1118
|
+
aSingleValueOps = aEqualsOps; // ["EQ"]
|
|
1119
|
+
}
|
|
1067
1120
|
restrictions = _getRestrictions(supportedOperators, aSingleValueOps);
|
|
1068
1121
|
break;
|
|
1069
1122
|
case "MultiValue":
|
|
@@ -1072,24 +1125,22 @@ const CommonHelper = {
|
|
|
1072
1125
|
break;
|
|
1073
1126
|
case "SingleRange":
|
|
1074
1127
|
let aExpressionOps: string[];
|
|
1075
|
-
if (bSemanticDateRange) {
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
} else if (sType === "Edm.DateTimeOffset") {
|
|
1079
|
-
aExpressionOps = aSemanticDateOps;
|
|
1080
|
-
} else {
|
|
1081
|
-
aExpressionOps = aSingleRangeOps;
|
|
1082
|
-
}
|
|
1128
|
+
if (bSemanticDateRange && (sType === "Edm.Date" || sType === "Edm.DateTimeOffset")) {
|
|
1129
|
+
// Only Edm.Date and Edm.DateTimeOffset get semantic operators
|
|
1130
|
+
aExpressionOps = [...aSemanticDateOps, ...emptyOps];
|
|
1083
1131
|
} else if (sType === "Edm.DateTimeOffset") {
|
|
1084
|
-
aExpressionOps = aSingleRangeDTBasicOps;
|
|
1132
|
+
aExpressionOps = [...aSingleRangeDTBasicOps, ...emptyOps];
|
|
1133
|
+
} else if (sType === "Edm.Date") {
|
|
1134
|
+
aExpressionOps = [...aSingleRangeOps, ...emptyOps];
|
|
1085
1135
|
} else {
|
|
1086
1136
|
aExpressionOps = aSingleRangeOps;
|
|
1087
1137
|
}
|
|
1088
|
-
|
|
1089
|
-
restrictions = sOperators;
|
|
1138
|
+
restrictions = _getRestrictions(supportedOperators, aExpressionOps);
|
|
1090
1139
|
break;
|
|
1091
1140
|
case "MultiRange":
|
|
1092
|
-
|
|
1141
|
+
const multiRangeOps =
|
|
1142
|
+
sType === "Edm.Date" || sType === "Edm.DateTimeOffset" ? [...aMultiRangeOps, ...emptyOps] : aMultiRangeOps;
|
|
1143
|
+
restrictions = _getRestrictions(supportedOperators, multiRangeOps);
|
|
1093
1144
|
break;
|
|
1094
1145
|
case "SearchExpression":
|
|
1095
1146
|
restrictions = _getRestrictions(supportedOperators, aSearchExpressionOps);
|
|
@@ -1109,7 +1160,7 @@ const CommonHelper = {
|
|
|
1109
1160
|
// In case AllowedExpressions is not provided for type Edm.Date then all the default
|
|
1110
1161
|
// operators for the type should be returned excluding semantic operators from the list.
|
|
1111
1162
|
const aDefaultOperators = _getDefaultOperators(propertyType);
|
|
1112
|
-
const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT"];
|
|
1163
|
+
const aMultiRangeOps = ["EQ", "GE", "LE", "LT", "GT", "BT", "NE", "NOTBT", "NOTLE", "NOTLT", "NOTGE", "NOTGT", "Empty", "NotEmpty"];
|
|
1113
1164
|
return _getRestrictions(aDefaultOperators, aMultiRangeOps);
|
|
1114
1165
|
},
|
|
1115
1166
|
getAIIcon: function (): string {
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["sap/fe/base/BuildingBlockBase", "sap/fe/base/ClassSupport"], function (BuildingBlockBase, ClassSupport) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4;
|
|
9
|
+
var _exports = {};
|
|
10
|
+
var property = ClassSupport.property;
|
|
11
|
+
var implementInterface = ClassSupport.implementInterface;
|
|
12
|
+
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
13
|
+
var aggregation = ClassSupport.aggregation;
|
|
14
|
+
function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
|
|
15
|
+
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
16
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
17
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
18
|
+
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
19
|
+
/**
|
|
20
|
+
* Defines a conditional template that renders content based on the evaluation of a set of switchProperties.
|
|
21
|
+
* The switchProperties are defined using the {@link sap.fe.macros.ConditionalSwitchProperty} building block.
|
|
22
|
+
* @public
|
|
23
|
+
* @since 1.141.0
|
|
24
|
+
* @ui5-experimental-since 1.141.0
|
|
25
|
+
*/
|
|
26
|
+
let ConditionalSwitch = (_dec = defineUI5Class("sap.fe.macros.ConditionalSwitch"), _dec2 = implementInterface("sap.ui.core.IFormContent"), _dec3 = aggregation({
|
|
27
|
+
type: "sap.ui.core.IFormContent",
|
|
28
|
+
isDefault: false
|
|
29
|
+
}), _dec4 = aggregation({
|
|
30
|
+
type: "sap.fe.macros.ConditionalSwitchProperty",
|
|
31
|
+
isDefault: true,
|
|
32
|
+
multiple: true,
|
|
33
|
+
singularName: "switchProperty"
|
|
34
|
+
}), _dec5 = property({
|
|
35
|
+
type: "function"
|
|
36
|
+
}), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlockBase) {
|
|
37
|
+
function ConditionalSwitch(idOrSettings, settings, scope) {
|
|
38
|
+
var _this;
|
|
39
|
+
_this = _BuildingBlockBase.call(this, idOrSettings, settings, scope) || this;
|
|
40
|
+
_initializerDefineProperty(_this, "__implements__sap_ui_core_IFormContent", _descriptor, _this);
|
|
41
|
+
_initializerDefineProperty(_this, "content", _descriptor2, _this);
|
|
42
|
+
_initializerDefineProperty(_this, "switchProperties", _descriptor3, _this);
|
|
43
|
+
/**
|
|
44
|
+
* A function that returns the content to be rendered based on the evaluation of the switchProperties.
|
|
45
|
+
* The function receives an object with the switchProperties as key-value pairs, the binding context, and the displayed control.
|
|
46
|
+
* The function should return a single UI5 control.
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
_initializerDefineProperty(_this, "factory", _descriptor4, _this);
|
|
50
|
+
/**
|
|
51
|
+
* Time in milliseconds to debounce content creation calls.
|
|
52
|
+
* We use a debounce function to avoid multiple calls in quick succession when multiple switchProperties are changed at once.
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
_this.DEBOUNCE_TIME = 200;
|
|
56
|
+
return _this;
|
|
57
|
+
}
|
|
58
|
+
_exports = ConditionalSwitch;
|
|
59
|
+
_inheritsLoose(ConditionalSwitch, _BuildingBlockBase);
|
|
60
|
+
var _proto = ConditionalSwitch.prototype;
|
|
61
|
+
/**
|
|
62
|
+
* Debounced content creation to avoid multiple calls in quick succession.
|
|
63
|
+
* This is useful when multiple switchProperties are changed at once.
|
|
64
|
+
*/
|
|
65
|
+
_proto._createContentDebounced = function _createContentDebounced() {
|
|
66
|
+
if (this._createDebounceTimer !== undefined) {
|
|
67
|
+
clearTimeout(this._createDebounceTimer);
|
|
68
|
+
}
|
|
69
|
+
this._createDebounceTimer = window.setTimeout(() => {
|
|
70
|
+
this._createContent();
|
|
71
|
+
}, this.DEBOUNCE_TIME);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Creates the content based on the current switchProperties and the factory function.
|
|
76
|
+
* If no factory function is provided, the content will be empty.
|
|
77
|
+
*/;
|
|
78
|
+
_proto._createContent = function _createContent() {
|
|
79
|
+
if (this.factory) {
|
|
80
|
+
const switchProperties = this.switchProperties.reduce((reducer, prop) => {
|
|
81
|
+
reducer[prop.key] = prop.value;
|
|
82
|
+
return reducer;
|
|
83
|
+
}, {});
|
|
84
|
+
const oldContent = this.content;
|
|
85
|
+
const newContent = this.factory.call(this, switchProperties, this.getBindingContext(), this.content);
|
|
86
|
+
if (newContent !== oldContent) {
|
|
87
|
+
oldContent?.destroy();
|
|
88
|
+
this.content = newContent;
|
|
89
|
+
}
|
|
90
|
+
if (this.ariaLabelledBy !== undefined) {
|
|
91
|
+
this.content?.addAssociation("ariaLabelledBy", this.ariaLabelledBy.join(","));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Overrides the addAssociation method to propagate ariaLabelledBy associations to the content.
|
|
98
|
+
* @param sAssociationName The name of the association
|
|
99
|
+
* @param sId The ID of the associated control or the control instance
|
|
100
|
+
* @param bSuppressInvalidate Whether to suppress invalidation
|
|
101
|
+
* @returns The current instance for method chaining
|
|
102
|
+
*/;
|
|
103
|
+
_proto.addAssociation = function addAssociation(sAssociationName, sId, bSuppressInvalidate) {
|
|
104
|
+
_BuildingBlockBase.prototype.addAssociation.call(this, sAssociationName, sId, bSuppressInvalidate);
|
|
105
|
+
if (sAssociationName === "ariaLabelledBy" && this.content) {
|
|
106
|
+
this.content.addAssociation("ariaLabelledBy", sId);
|
|
107
|
+
}
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Adds a ConditionalSwitchProperty to the 'switchProperties' aggregation and attaches a change listener to it.
|
|
113
|
+
* The change listener will trigger a content re-creation when the property value changes.
|
|
114
|
+
* @param conditionalSwitchProperty
|
|
115
|
+
* @returns The current instance for method chaining.
|
|
116
|
+
*/;
|
|
117
|
+
_proto.addSwitchProperty = function addSwitchProperty(conditionalSwitchProperty) {
|
|
118
|
+
_BuildingBlockBase.prototype.addAggregation.call(this, "switchProperties", conditionalSwitchProperty);
|
|
119
|
+
if (!this.fnBoundDebounced) {
|
|
120
|
+
// Bind the debounced content creation method to the instance
|
|
121
|
+
this.fnBoundDebounced = this._createContentDebounced.bind(this);
|
|
122
|
+
}
|
|
123
|
+
conditionalSwitchProperty.attachEvent("valueChanged", this.fnBoundDebounced);
|
|
124
|
+
this._createContentDebounced();
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Removes a ConditionalSwitchProperty from the 'switchProperties' aggregation and detaches its change listener.
|
|
130
|
+
* @param vIndex The index, ID, or instance of the ConditionalSwitchProperty to remove.
|
|
131
|
+
* @returns The removed ConditionalSwitchProperty instance or null if not found.
|
|
132
|
+
*/;
|
|
133
|
+
_proto.removeSwitchProperty = function removeSwitchProperty(vIndex) {
|
|
134
|
+
const conditionalSwitchProperty = _BuildingBlockBase.prototype.removeAggregation.call(this, "switchProperties", vIndex);
|
|
135
|
+
if (conditionalSwitchProperty !== null && this.fnBoundDebounced) {
|
|
136
|
+
conditionalSwitchProperty.detachEvent("valueChanged", this.fnBoundDebounced);
|
|
137
|
+
}
|
|
138
|
+
this._createContentDebounced();
|
|
139
|
+
return conditionalSwitchProperty;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// #region IFormContent
|
|
143
|
+
;
|
|
144
|
+
_proto.getFormDoNotAdjustWidth = function getFormDoNotAdjustWidth() {
|
|
145
|
+
return this.content?.getFormDoNotAdjustWidth?.() ?? false;
|
|
146
|
+
};
|
|
147
|
+
return ConditionalSwitch;
|
|
148
|
+
}(BuildingBlockBase), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IFormContent", [_dec2], {
|
|
149
|
+
configurable: true,
|
|
150
|
+
enumerable: true,
|
|
151
|
+
writable: true,
|
|
152
|
+
initializer: function () {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "content", [_dec3], {
|
|
156
|
+
configurable: true,
|
|
157
|
+
enumerable: true,
|
|
158
|
+
writable: true,
|
|
159
|
+
initializer: null
|
|
160
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "switchProperties", [_dec4], {
|
|
161
|
+
configurable: true,
|
|
162
|
+
enumerable: true,
|
|
163
|
+
writable: true,
|
|
164
|
+
initializer: null
|
|
165
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "factory", [_dec5], {
|
|
166
|
+
configurable: true,
|
|
167
|
+
enumerable: true,
|
|
168
|
+
writable: true,
|
|
169
|
+
initializer: null
|
|
170
|
+
}), _class2)) || _class);
|
|
171
|
+
_exports = ConditionalSwitch;
|
|
172
|
+
return _exports;
|
|
173
|
+
}, false);
|
|
174
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25kaXRpb25hbFN3aXRjaCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzMiLCJhZ2dyZWdhdGlvbiIsInR5cGUiLCJpc0RlZmF1bHQiLCJfZGVjNCIsIm11bHRpcGxlIiwic2luZ3VsYXJOYW1lIiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja0Jhc2UiLCJpZE9yU2V0dGluZ3MiLCJzZXR0aW5ncyIsInNjb3BlIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIkRFQk9VTkNFX1RJTUUiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2NyZWF0ZUNvbnRlbnREZWJvdW5jZWQiLCJfY3JlYXRlRGVib3VuY2VUaW1lciIsInVuZGVmaW5lZCIsImNsZWFyVGltZW91dCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfY3JlYXRlQ29udGVudCIsImZhY3RvcnkiLCJzd2l0Y2hQcm9wZXJ0aWVzIiwicmVkdWNlIiwicmVkdWNlciIsInByb3AiLCJrZXkiLCJ2YWx1ZSIsIm9sZENvbnRlbnQiLCJjb250ZW50IiwibmV3Q29udGVudCIsImdldEJpbmRpbmdDb250ZXh0IiwiZGVzdHJveSIsImFyaWFMYWJlbGxlZEJ5IiwiYWRkQXNzb2NpYXRpb24iLCJqb2luIiwic0Fzc29jaWF0aW9uTmFtZSIsInNJZCIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJhZGRTd2l0Y2hQcm9wZXJ0eSIsImNvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHkiLCJhZGRBZ2dyZWdhdGlvbiIsImZuQm91bmREZWJvdW5jZWQiLCJiaW5kIiwiYXR0YWNoRXZlbnQiLCJyZW1vdmVTd2l0Y2hQcm9wZXJ0eSIsInZJbmRleCIsInJlbW92ZUFnZ3JlZ2F0aW9uIiwiZGV0YWNoRXZlbnQiLCJnZXRGb3JtRG9Ob3RBZGp1c3RXaWR0aCIsIkJ1aWxkaW5nQmxvY2tCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb25kaXRpb25hbFN3aXRjaC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWxkaW5nQmxvY2tCYXNlIGZyb20gXCJzYXAvZmUvYmFzZS9CdWlsZGluZ0Jsb2NrQmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lVUk1Q2xhc3MsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBDb25kaXRpb25hbFN3aXRjaFByb3BlcnR5IGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHlcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm1Db250ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcblxuLyoqXG4gKiBEZWZpbmVzIGEgY29uZGl0aW9uYWwgdGVtcGxhdGUgdGhhdCByZW5kZXJzIGNvbnRlbnQgYmFzZWQgb24gdGhlIGV2YWx1YXRpb24gb2YgYSBzZXQgb2Ygc3dpdGNoUHJvcGVydGllcy5cbiAqIFRoZSBzd2l0Y2hQcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIHVzaW5nIHRoZSB7QGxpbmsgc2FwLmZlLm1hY3Jvcy5Db25kaXRpb25hbFN3aXRjaFByb3BlcnR5fSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjE0MS4wXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0MS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuQ29uZGl0aW9uYWxTd2l0Y2hcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmRpdGlvbmFsU3dpdGNoIGV4dGVuZHMgQnVpbGRpbmdCbG9ja0Jhc2UgaW1wbGVtZW50cyBJRm9ybUNvbnRlbnQge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpXG5cdF9faW1wbGVtZW50c19fc2FwX3VpX2NvcmVfSUZvcm1Db250ZW50ID0gdHJ1ZTtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLklGb3JtQ29udGVudFwiLCBpc0RlZmF1bHQ6IGZhbHNlIH0pXG5cdGNvbnRlbnQ/OiBDb250cm9sO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5Db25kaXRpb25hbFN3aXRjaFByb3BlcnR5XCIsIGlzRGVmYXVsdDogdHJ1ZSwgbXVsdGlwbGU6IHRydWUsIHNpbmd1bGFyTmFtZTogXCJzd2l0Y2hQcm9wZXJ0eVwiIH0pXG5cdHN3aXRjaFByb3BlcnRpZXMhOiBDb25kaXRpb25hbFN3aXRjaFByb3BlcnR5W107XG5cblx0LyoqXG5cdCAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjb250ZW50IHRvIGJlIHJlbmRlcmVkIGJhc2VkIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBzd2l0Y2hQcm9wZXJ0aWVzLlxuXHQgKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHN3aXRjaFByb3BlcnRpZXMgYXMga2V5LXZhbHVlIHBhaXJzLCB0aGUgYmluZGluZyBjb250ZXh0LCBhbmQgdGhlIGRpc3BsYXllZCBjb250cm9sLlxuXHQgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIHNpbmdsZSBVSTUgY29udHJvbC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJmdW5jdGlvblwiIH0pXG5cdGZhY3Rvcnk/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIF9jcmVhdGVEZWJvdW5jZVRpbWVyPzogbnVtYmVyO1xuXG5cdHByaXZhdGUgZm5Cb3VuZERlYm91bmNlZD86IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKGlkT3JTZXR0aW5ncz86IHN0cmluZyB8IFByb3BlcnRpZXNPZjxDb25kaXRpb25hbFN3aXRjaD4sIHNldHRpbmdzPzogUHJvcGVydGllc09mPENvbmRpdGlvbmFsU3dpdGNoPiwgc2NvcGU/OiBvYmplY3QpIHtcblx0XHRzdXBlcihpZE9yU2V0dGluZ3MsIHNldHRpbmdzLCBzY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGltZSBpbiBtaWxsaXNlY29uZHMgdG8gZGVib3VuY2UgY29udGVudCBjcmVhdGlvbiBjYWxscy5cblx0ICogV2UgdXNlIGEgZGVib3VuY2UgZnVuY3Rpb24gdG8gYXZvaWQgbXVsdGlwbGUgY2FsbHMgaW4gcXVpY2sgc3VjY2Vzc2lvbiB3aGVuIG11bHRpcGxlIHN3aXRjaFByb3BlcnRpZXMgYXJlIGNoYW5nZWQgYXQgb25jZS5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDIwMDtcblxuXHQvKipcblx0ICogRGVib3VuY2VkIGNvbnRlbnQgY3JlYXRpb24gdG8gYXZvaWQgbXVsdGlwbGUgY2FsbHMgaW4gcXVpY2sgc3VjY2Vzc2lvbi5cblx0ICogVGhpcyBpcyB1c2VmdWwgd2hlbiBtdWx0aXBsZSBzd2l0Y2hQcm9wZXJ0aWVzIGFyZSBjaGFuZ2VkIGF0IG9uY2UuXG5cdCAqL1xuXHRfY3JlYXRlQ29udGVudERlYm91bmNlZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fY3JlYXRlRGVib3VuY2VUaW1lciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5fY3JlYXRlRGVib3VuY2VUaW1lcik7XG5cdFx0fVxuXHRcdHRoaXMuX2NyZWF0ZURlYm91bmNlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9jcmVhdGVDb250ZW50KCk7XG5cdFx0fSwgdGhpcy5ERUJPVU5DRV9USU1FKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjb250ZW50IGJhc2VkIG9uIHRoZSBjdXJyZW50IHN3aXRjaFByb3BlcnRpZXMgYW5kIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLlxuXHQgKiBJZiBubyBmYWN0b3J5IGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGUgY29udGVudCB3aWxsIGJlIGVtcHR5LlxuXHQgKi9cblx0cHJpdmF0ZSBfY3JlYXRlQ29udGVudCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5mYWN0b3J5KSB7XG5cdFx0XHRjb25zdCBzd2l0Y2hQcm9wZXJ0aWVzOiBvYmplY3QgPSB0aGlzLnN3aXRjaFByb3BlcnRpZXMucmVkdWNlKFxuXHRcdFx0XHQocmVkdWNlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByb3A6IENvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHkpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG5cdFx0XHRcdFx0cmVkdWNlcltwcm9wLmtleV0gPSBwcm9wLnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybiByZWR1Y2VyO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3Qgb2xkQ29udGVudCA9IHRoaXMuY29udGVudDtcblx0XHRcdGNvbnN0IG5ld0NvbnRlbnQgPSB0aGlzLmZhY3RvcnkuY2FsbCh0aGlzLCBzd2l0Y2hQcm9wZXJ0aWVzLCB0aGlzLmdldEJpbmRpbmdDb250ZXh0KCksIHRoaXMuY29udGVudCk7XG5cdFx0XHRpZiAobmV3Q29udGVudCAhPT0gb2xkQ29udGVudCkge1xuXHRcdFx0XHRvbGRDb250ZW50Py5kZXN0cm95KCk7XG5cdFx0XHRcdHRoaXMuY29udGVudCA9IG5ld0NvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5hcmlhTGFiZWxsZWRCeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuY29udGVudD8uYWRkQXNzb2NpYXRpb24oXCJhcmlhTGFiZWxsZWRCeVwiLCB0aGlzLmFyaWFMYWJlbGxlZEJ5LmpvaW4oXCIsXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3ZlcnJpZGVzIHRoZSBhZGRBc3NvY2lhdGlvbiBtZXRob2QgdG8gcHJvcGFnYXRlIGFyaWFMYWJlbGxlZEJ5IGFzc29jaWF0aW9ucyB0byB0aGUgY29udGVudC5cblx0ICogQHBhcmFtIHNBc3NvY2lhdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0aW9uXG5cdCAqIEBwYXJhbSBzSWQgVGhlIElEIG9mIHRoZSBhc3NvY2lhdGVkIGNvbnRyb2wgb3IgdGhlIGNvbnRyb2wgaW5zdGFuY2Vcblx0ICogQHBhcmFtIGJTdXBwcmVzc0ludmFsaWRhdGUgV2hldGhlciB0byBzdXBwcmVzcyBpbnZhbGlkYXRpb25cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZ1xuXHQgKi9cblx0b3ZlcnJpZGUgYWRkQXNzb2NpYXRpb24oc0Fzc29jaWF0aW9uTmFtZTogc3RyaW5nLCBzSWQ6IHN0cmluZyB8IE1hbmFnZWRPYmplY3QsIGJTdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdGhpcyB7XG5cdFx0c3VwZXIuYWRkQXNzb2NpYXRpb24oc0Fzc29jaWF0aW9uTmFtZSwgc0lkLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRpZiAoc0Fzc29jaWF0aW9uTmFtZSA9PT0gXCJhcmlhTGFiZWxsZWRCeVwiICYmIHRoaXMuY29udGVudCkge1xuXHRcdFx0dGhpcy5jb250ZW50LmFkZEFzc29jaWF0aW9uKFwiYXJpYUxhYmVsbGVkQnlcIiwgc0lkKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIENvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHkgdG8gdGhlICdzd2l0Y2hQcm9wZXJ0aWVzJyBhZ2dyZWdhdGlvbiBhbmQgYXR0YWNoZXMgYSBjaGFuZ2UgbGlzdGVuZXIgdG8gaXQuXG5cdCAqIFRoZSBjaGFuZ2UgbGlzdGVuZXIgd2lsbCB0cmlnZ2VyIGEgY29udGVudCByZS1jcmVhdGlvbiB3aGVuIHRoZSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuXHQgKi9cblx0YWRkU3dpdGNoUHJvcGVydHkoY29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eTogQ29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eSk6IHRoaXMge1xuXHRcdHN1cGVyLmFkZEFnZ3JlZ2F0aW9uKFwic3dpdGNoUHJvcGVydGllc1wiLCBjb25kaXRpb25hbFN3aXRjaFByb3BlcnR5KTtcblx0XHRpZiAoIXRoaXMuZm5Cb3VuZERlYm91bmNlZCkge1xuXHRcdFx0Ly8gQmluZCB0aGUgZGVib3VuY2VkIGNvbnRlbnQgY3JlYXRpb24gbWV0aG9kIHRvIHRoZSBpbnN0YW5jZVxuXHRcdFx0dGhpcy5mbkJvdW5kRGVib3VuY2VkID0gdGhpcy5fY3JlYXRlQ29udGVudERlYm91bmNlZC5iaW5kKHRoaXMpO1xuXHRcdH1cblx0XHRjb25kaXRpb25hbFN3aXRjaFByb3BlcnR5LmF0dGFjaEV2ZW50KFwidmFsdWVDaGFuZ2VkXCIsIHRoaXMuZm5Cb3VuZERlYm91bmNlZCk7XG5cdFx0dGhpcy5fY3JlYXRlQ29udGVudERlYm91bmNlZCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBDb25kaXRpb25hbFN3aXRjaFByb3BlcnR5IGZyb20gdGhlICdzd2l0Y2hQcm9wZXJ0aWVzJyBhZ2dyZWdhdGlvbiBhbmQgZGV0YWNoZXMgaXRzIGNoYW5nZSBsaXN0ZW5lci5cblx0ICogQHBhcmFtIHZJbmRleCBUaGUgaW5kZXgsIElELCBvciBpbnN0YW5jZSBvZiB0aGUgQ29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eSB0byByZW1vdmUuXG5cdCAqIEByZXR1cm5zIFRoZSByZW1vdmVkIENvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHkgaW5zdGFuY2Ugb3IgbnVsbCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRyZW1vdmVTd2l0Y2hQcm9wZXJ0eSh2SW5kZXg6IG51bWJlciB8IHN0cmluZyB8IENvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHkpOiBDb25kaXRpb25hbFN3aXRjaFByb3BlcnR5IHwgbnVsbCB7XG5cdFx0Y29uc3QgY29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eSA9IHN1cGVyLnJlbW92ZUFnZ3JlZ2F0aW9uKFwic3dpdGNoUHJvcGVydGllc1wiLCB2SW5kZXgpIGFzIENvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHkgfCBudWxsO1xuXHRcdGlmIChjb25kaXRpb25hbFN3aXRjaFByb3BlcnR5ICE9PSBudWxsICYmIHRoaXMuZm5Cb3VuZERlYm91bmNlZCkge1xuXHRcdFx0Y29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eS5kZXRhY2hFdmVudChcInZhbHVlQ2hhbmdlZFwiLCB0aGlzLmZuQm91bmREZWJvdW5jZWQpO1xuXHRcdH1cblx0XHR0aGlzLl9jcmVhdGVDb250ZW50RGVib3VuY2VkKCk7XG5cdFx0cmV0dXJuIGNvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHk7XG5cdH1cblxuXHQvLyAjcmVnaW9uIElGb3JtQ29udGVudFxuXG5cdGdldEZvcm1Eb05vdEFkanVzdFdpZHRoKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5jb250ZW50IGFzIHVua25vd24gYXMgSUZvcm1Db250ZW50KT8uZ2V0Rm9ybURvTm90QWRqdXN0V2lkdGg/LigpID8/IGZhbHNlO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRcUJBLGlCQUFpQixJQUFBQyxJQUFBLEdBRHJDQyxjQUFjLENBQUMsaUNBQWlDLENBQUMsRUFBQUMsS0FBQSxHQUVoREMsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsRUFBQUMsS0FBQSxHQUc5Q0MsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSwwQkFBMEI7SUFBRUMsU0FBUyxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHbkVILFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUseUNBQXlDO0lBQUVDLFNBQVMsRUFBRSxJQUFJO0lBQUVFLFFBQVEsRUFBRSxJQUFJO0lBQUVDLFlBQVksRUFBRTtFQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVNqSUMsUUFBUSxDQUFDO0lBQUVOLElBQUksRUFBRTtFQUFXLENBQUMsQ0FBQyxFQUFBTixJQUFBLENBQUFhLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsa0JBQUE7SUFPL0IsU0FBQWhCLGtCQUFZaUIsWUFBdUQsRUFBRUMsUUFBMEMsRUFBRUMsS0FBYyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNoSUEsS0FBQSxHQUFBSixrQkFBQSxDQUFBSyxJQUFBLE9BQU1KLFlBQVksRUFBRUMsUUFBUSxFQUFFQyxLQUFLLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSw0Q0FBQUcsV0FBQSxFQUFBSCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsYUFBQUksWUFBQSxFQUFBSixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsc0JBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQWR0QztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFMQ0UsMEJB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
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import BuildingBlockBase from "sap/fe/base/BuildingBlockBase";
|
|
2
|
+
import type { PropertiesOf } from "sap/fe/base/ClassSupport";
|
|
3
|
+
import { aggregation, defineUI5Class, implementInterface, property } from "sap/fe/base/ClassSupport";
|
|
4
|
+
import type ConditionalSwitchProperty from "sap/fe/macros/ConditionalSwitchProperty";
|
|
5
|
+
import type ManagedObject from "sap/ui/base/ManagedObject";
|
|
6
|
+
import type Control from "sap/ui/core/Control";
|
|
7
|
+
import type { IFormContent } from "sap/ui/core/library";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Defines a conditional template that renders content based on the evaluation of a set of switchProperties.
|
|
11
|
+
* The switchProperties are defined using the {@link sap.fe.macros.ConditionalSwitchProperty} building block.
|
|
12
|
+
* @public
|
|
13
|
+
* @since 1.141.0
|
|
14
|
+
* @ui5-experimental-since 1.141.0
|
|
15
|
+
*/
|
|
16
|
+
@defineUI5Class("sap.fe.macros.ConditionalSwitch")
|
|
17
|
+
export default class ConditionalSwitch extends BuildingBlockBase implements IFormContent {
|
|
18
|
+
@implementInterface("sap.ui.core.IFormContent")
|
|
19
|
+
__implements__sap_ui_core_IFormContent = true;
|
|
20
|
+
|
|
21
|
+
@aggregation({ type: "sap.ui.core.IFormContent", isDefault: false })
|
|
22
|
+
content?: Control;
|
|
23
|
+
|
|
24
|
+
@aggregation({ type: "sap.fe.macros.ConditionalSwitchProperty", isDefault: true, multiple: true, singularName: "switchProperty" })
|
|
25
|
+
switchProperties!: ConditionalSwitchProperty[];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A function that returns the content to be rendered based on the evaluation of the switchProperties.
|
|
29
|
+
* The function receives an object with the switchProperties as key-value pairs, the binding context, and the displayed control.
|
|
30
|
+
* The function should return a single UI5 control.
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
@property({ type: "function" })
|
|
34
|
+
factory?: Function;
|
|
35
|
+
|
|
36
|
+
private _createDebounceTimer?: number;
|
|
37
|
+
|
|
38
|
+
private fnBoundDebounced?: Function;
|
|
39
|
+
|
|
40
|
+
constructor(idOrSettings?: string | PropertiesOf<ConditionalSwitch>, settings?: PropertiesOf<ConditionalSwitch>, scope?: object) {
|
|
41
|
+
super(idOrSettings, settings, scope);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Time in milliseconds to debounce content creation calls.
|
|
46
|
+
* We use a debounce function to avoid multiple calls in quick succession when multiple switchProperties are changed at once.
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
private readonly DEBOUNCE_TIME = 200;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Debounced content creation to avoid multiple calls in quick succession.
|
|
53
|
+
* This is useful when multiple switchProperties are changed at once.
|
|
54
|
+
*/
|
|
55
|
+
_createContentDebounced(): void {
|
|
56
|
+
if (this._createDebounceTimer !== undefined) {
|
|
57
|
+
clearTimeout(this._createDebounceTimer);
|
|
58
|
+
}
|
|
59
|
+
this._createDebounceTimer = window.setTimeout(() => {
|
|
60
|
+
this._createContent();
|
|
61
|
+
}, this.DEBOUNCE_TIME);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Creates the content based on the current switchProperties and the factory function.
|
|
66
|
+
* If no factory function is provided, the content will be empty.
|
|
67
|
+
*/
|
|
68
|
+
private _createContent(): void {
|
|
69
|
+
if (this.factory) {
|
|
70
|
+
const switchProperties: object = this.switchProperties.reduce(
|
|
71
|
+
(reducer: Record<string, unknown>, prop: ConditionalSwitchProperty): Record<string, unknown> => {
|
|
72
|
+
reducer[prop.key] = prop.value;
|
|
73
|
+
return reducer;
|
|
74
|
+
},
|
|
75
|
+
{} as Record<string, unknown>
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
const oldContent = this.content;
|
|
79
|
+
const newContent = this.factory.call(this, switchProperties, this.getBindingContext(), this.content);
|
|
80
|
+
if (newContent !== oldContent) {
|
|
81
|
+
oldContent?.destroy();
|
|
82
|
+
this.content = newContent;
|
|
83
|
+
}
|
|
84
|
+
if (this.ariaLabelledBy !== undefined) {
|
|
85
|
+
this.content?.addAssociation("ariaLabelledBy", this.ariaLabelledBy.join(","));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Overrides the addAssociation method to propagate ariaLabelledBy associations to the content.
|
|
92
|
+
* @param sAssociationName The name of the association
|
|
93
|
+
* @param sId The ID of the associated control or the control instance
|
|
94
|
+
* @param bSuppressInvalidate Whether to suppress invalidation
|
|
95
|
+
* @returns The current instance for method chaining
|
|
96
|
+
*/
|
|
97
|
+
override addAssociation(sAssociationName: string, sId: string | ManagedObject, bSuppressInvalidate?: boolean): this {
|
|
98
|
+
super.addAssociation(sAssociationName, sId, bSuppressInvalidate);
|
|
99
|
+
if (sAssociationName === "ariaLabelledBy" && this.content) {
|
|
100
|
+
this.content.addAssociation("ariaLabelledBy", sId);
|
|
101
|
+
}
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Adds a ConditionalSwitchProperty to the 'switchProperties' aggregation and attaches a change listener to it.
|
|
107
|
+
* The change listener will trigger a content re-creation when the property value changes.
|
|
108
|
+
* @param conditionalSwitchProperty
|
|
109
|
+
* @returns The current instance for method chaining.
|
|
110
|
+
*/
|
|
111
|
+
addSwitchProperty(conditionalSwitchProperty: ConditionalSwitchProperty): this {
|
|
112
|
+
super.addAggregation("switchProperties", conditionalSwitchProperty);
|
|
113
|
+
if (!this.fnBoundDebounced) {
|
|
114
|
+
// Bind the debounced content creation method to the instance
|
|
115
|
+
this.fnBoundDebounced = this._createContentDebounced.bind(this);
|
|
116
|
+
}
|
|
117
|
+
conditionalSwitchProperty.attachEvent("valueChanged", this.fnBoundDebounced);
|
|
118
|
+
this._createContentDebounced();
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Removes a ConditionalSwitchProperty from the 'switchProperties' aggregation and detaches its change listener.
|
|
124
|
+
* @param vIndex The index, ID, or instance of the ConditionalSwitchProperty to remove.
|
|
125
|
+
* @returns The removed ConditionalSwitchProperty instance or null if not found.
|
|
126
|
+
*/
|
|
127
|
+
removeSwitchProperty(vIndex: number | string | ConditionalSwitchProperty): ConditionalSwitchProperty | null {
|
|
128
|
+
const conditionalSwitchProperty = super.removeAggregation("switchProperties", vIndex) as ConditionalSwitchProperty | null;
|
|
129
|
+
if (conditionalSwitchProperty !== null && this.fnBoundDebounced) {
|
|
130
|
+
conditionalSwitchProperty.detachEvent("valueChanged", this.fnBoundDebounced);
|
|
131
|
+
}
|
|
132
|
+
this._createContentDebounced();
|
|
133
|
+
return conditionalSwitchProperty;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// #region IFormContent
|
|
137
|
+
|
|
138
|
+
getFormDoNotAdjustWidth(): boolean {
|
|
139
|
+
return (this.content as unknown as IFormContent)?.getFormDoNotAdjustWidth?.() ?? false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["sap/fe/base/ClassSupport", "sap/ui/core/Element"], function (ClassSupport, UI5Element) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor, _descriptor2, _descriptor3;
|
|
9
|
+
var property = ClassSupport.property;
|
|
10
|
+
var event = ClassSupport.event;
|
|
11
|
+
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
12
|
+
function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
|
|
13
|
+
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
14
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
15
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
16
|
+
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
17
|
+
/**
|
|
18
|
+
* Defines a property with a key and a value that can be used in conditional templates.
|
|
19
|
+
* When the value is changed, a `valueChanged` event is fired.
|
|
20
|
+
* @experimental
|
|
21
|
+
* @since 1.141.0
|
|
22
|
+
* @ui5-experimental-since 1.141.0
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
let ConditionalSwitchProperty = (_dec = defineUI5Class("sap.fe.macros.ConditionalSwitchProperty"), _dec2 = property({
|
|
26
|
+
type: "string"
|
|
27
|
+
}), _dec3 = property({
|
|
28
|
+
type: "any"
|
|
29
|
+
}), _dec4 = event(), _dec(_class = (_class2 = /*#__PURE__*/function (_UI5Element) {
|
|
30
|
+
function ConditionalSwitchProperty(idOrSettings, settings, scope) {
|
|
31
|
+
var _this;
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
_this = _UI5Element.call(this, idOrSettings, settings, scope) || this;
|
|
35
|
+
/**
|
|
36
|
+
* The key of the property.
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
_initializerDefineProperty(_this, "key", _descriptor, _this);
|
|
40
|
+
/**
|
|
41
|
+
* The value of the property.
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
_initializerDefineProperty(_this, "value", _descriptor2, _this);
|
|
45
|
+
/**
|
|
46
|
+
* Event fired when the value of the property is changed.
|
|
47
|
+
* This is used internally by the `ConditionalTemplate` control to react to changes in the property value.
|
|
48
|
+
* @public
|
|
49
|
+
*/
|
|
50
|
+
_initializerDefineProperty(_this, "valueChanged", _descriptor3, _this);
|
|
51
|
+
return _this;
|
|
52
|
+
}
|
|
53
|
+
_inheritsLoose(ConditionalSwitchProperty, _UI5Element);
|
|
54
|
+
var _proto = ConditionalSwitchProperty.prototype;
|
|
55
|
+
_proto.setValue = function setValue(value) {
|
|
56
|
+
this.setProperty("value", value);
|
|
57
|
+
this.fireEvent("valueChanged");
|
|
58
|
+
};
|
|
59
|
+
return ConditionalSwitchProperty;
|
|
60
|
+
}(UI5Element), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "key", [_dec2], {
|
|
61
|
+
configurable: true,
|
|
62
|
+
enumerable: true,
|
|
63
|
+
writable: true,
|
|
64
|
+
initializer: null
|
|
65
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "value", [_dec3], {
|
|
66
|
+
configurable: true,
|
|
67
|
+
enumerable: true,
|
|
68
|
+
writable: true,
|
|
69
|
+
initializer: null
|
|
70
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "valueChanged", [_dec4], {
|
|
71
|
+
configurable: true,
|
|
72
|
+
enumerable: true,
|
|
73
|
+
writable: true,
|
|
74
|
+
initializer: null
|
|
75
|
+
}), _class2)) || _class);
|
|
76
|
+
return ConditionalSwitchProperty;
|
|
77
|
+
}, false);
|
|
78
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25kaXRpb25hbFN3aXRjaFByb3BlcnR5IiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiZXZlbnQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1VJNUVsZW1lbnQiLCJpZE9yU2V0dGluZ3MiLCJzZXR0aW5ncyIsInNjb3BlIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0VmFsdWUiLCJ2YWx1ZSIsInNldFByb3BlcnR5IiwiZmlyZUV2ZW50IiwiVUk1RWxlbWVudCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbi8qKlxuICogRGVmaW5lcyBhIHByb3BlcnR5IHdpdGggYSBrZXkgYW5kIGEgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBpbiBjb25kaXRpb25hbCB0ZW1wbGF0ZXMuXG4gKiBXaGVuIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLCBhIGB2YWx1ZUNoYW5nZWRgIGV2ZW50IGlzIGZpcmVkLlxuICogQGV4cGVyaW1lbnRhbFxuICogQHNpbmNlIDEuMTQxLjBcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5Db25kaXRpb25hbFN3aXRjaFByb3BlcnR5XCIpXG5jbGFzcyBDb25kaXRpb25hbFN3aXRjaFByb3BlcnR5IGV4dGVuZHMgVUk1RWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRrZXkhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYW55XCIgfSlcblx0dmFsdWUhOiB1bmtub3duO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBmaXJlZCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaXMgY2hhbmdlZC5cblx0ICogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGBDb25kaXRpb25hbFRlbXBsYXRlYCBjb250cm9sIHRvIHJlYWN0IHRvIGNoYW5nZXMgaW4gdGhlIHByb3BlcnR5IHZhbHVlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHR2YWx1ZUNoYW5nZWQhOiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8e30sIENvbmRpdGlvbmFsU3dpdGNoUHJvcGVydHk+PjtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRpZE9yU2V0dGluZ3M/OiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8Q29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eT4sXG5cdFx0c2V0dGluZ3M/OiBQcm9wZXJ0aWVzT2Y8Q29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eT4sXG5cdFx0c2NvcGU/OiBvYmplY3Rcblx0KSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdXBlcihpZE9yU2V0dGluZ3MsIHNldHRpbmdzLCBzY29wZSk7XG5cdH1cblxuXHRzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcInZhbHVlXCIsIHZhbHVlKTtcblx0XHR0aGlzLmZpcmVFdmVudChcInZhbHVlQ2hhbmdlZFwiKTtcblx0fVxufVxuXG5pbnRlcmZhY2UgQ29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eSB7XG5cdGdldEtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNldEtleShrZXk6IHN0cmluZyk6IHRoaXM7XG5cdGdldFZhbHVlKCk6IHVua25vd24gfCB1bmRlZmluZWQ7XG5cdHNldFZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZGl0aW9uYWxTd2l0Y2hQcm9wZXJ0eTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQSxJQVNNQSx5QkFBeUIsSUFBQUMsSUFBQSxHQUQ5QkMsY0FBYyxDQUFDLHlDQUF5QyxDQUFDLEVBQUFDLEtBQUEsR0FNeERDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQU81QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBUXpCQyxLQUFLLENBQUMsQ0FBQyxFQUFBUCxJQUFBLENBQUFRLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsV0FBQTtJQUdSLFNBQUFYLDBCQUNDWSxZQUErRCxFQUMvREMsUUFBa0QsRUFDbERDLEtBQWMsRUFDYjtNQUFBLElBQUFDLEtBQUE7TUFDRDtNQUNBO01BQ0FBLEtBQUEsR0FBQUosV0FBQSxDQUFBSyxJQUFBLE9BQU1KLFlBQVksRUFBRUMsUUFBUSxFQUFFQyxLQUFLLENBQUM7TUE3QnJDO0FBQ0Q7QUFDQTtBQUNBO01BSENHLDBCQUFBLENBQUFGLEtBQUEsU0FBQUcsV0FBQSxFQUFBSCxLQUFBO01BT0E7QUFDRDtBQUNBO0FBQ0E7TUFIQ0UsMEJBQUEsQ0FBQUYsS0FBQSxXQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFPQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO01BSkNFLDBCQUFBLENBQUFGLEtBQUEsa0JBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQUFBLE9BQUFBLEtBQUE7SUFnQkE7SUFBQ00sY0FBQSxDQUFBckIseUJBQUEsRUFBQVcsV0FBQTtJQUFBLElBQUFXLE1BQUEsR0FBQXRCLHlCQUFBLENBQUF1QixTQUFBO0lBQUFELE1BQUEsQ0FFREUsUUFBUSxHQUFSLFNBQUFBLFFBQVFBLENBQUNDLEtBQWEsRUFBUTtNQUM3QixJQUFJLENBQUNDLFdBQVcsQ0FBQyxPQUFPLEVBQUVELEtBQUssQ0FBQztNQUNoQyxJQUFJLENBQUNFLFNBQVMsQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUFBLE9BQUEzQix5QkFBQTtFQUFBLEVBcENzQzRCLFVBQVUsR0FBQVYsV0FBQSxHQUFBVyx5QkFBQSxDQUFBbkIsT0FBQSxDQUFBYSxTQUFBLFVBQUFwQixLQUFBO0lBQUEyQixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWQsWUFBQSxHQUFBVSx5QkFBQSxDQUFBbkIsT0FBQSxDQUFBYSxTQUFBLFlBQUFqQixLQUFBO0lBQUF3QixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWIsWUFBQSxHQUFBUyx5QkFBQSxDQUFBbkIsT0FBQSxDQUFBYSxTQUFBLG1CQUFBaEIsS0FBQTtJQUFBdUIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF2QixPQUFBLE1BQUFELE1BQUE7RUFBQSxPQThDbkNULHlCQUF5QjtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { PropertiesOf } from "sap/fe/base/ClassSupport";
|
|
2
|
+
import { defineUI5Class, event, property } from "sap/fe/base/ClassSupport";
|
|
3
|
+
import type UI5Event from "sap/ui/base/Event";
|
|
4
|
+
import UI5Element from "sap/ui/core/Element";
|
|
5
|
+
import type { EventHandler } from "types/extension_types";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Defines a property with a key and a value that can be used in conditional templates.
|
|
9
|
+
* When the value is changed, a `valueChanged` event is fired.
|
|
10
|
+
* @experimental
|
|
11
|
+
* @since 1.141.0
|
|
12
|
+
* @ui5-experimental-since 1.141.0
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
@defineUI5Class("sap.fe.macros.ConditionalSwitchProperty")
|
|
16
|
+
class ConditionalSwitchProperty extends UI5Element {
|
|
17
|
+
/**
|
|
18
|
+
* The key of the property.
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
@property({ type: "string" })
|
|
22
|
+
key!: string;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The value of the property.
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
@property({ type: "any" })
|
|
29
|
+
value!: unknown;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Event fired when the value of the property is changed.
|
|
33
|
+
* This is used internally by the `ConditionalTemplate` control to react to changes in the property value.
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
@event()
|
|
37
|
+
valueChanged!: EventHandler<UI5Event<{}, ConditionalSwitchProperty>>;
|
|
38
|
+
|
|
39
|
+
constructor(
|
|
40
|
+
idOrSettings?: string | PropertiesOf<ConditionalSwitchProperty>,
|
|
41
|
+
settings?: PropertiesOf<ConditionalSwitchProperty>,
|
|
42
|
+
scope?: object
|
|
43
|
+
) {
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
super(idOrSettings, settings, scope);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
setValue(value: string): void {
|
|
50
|
+
this.setProperty("value", value);
|
|
51
|
+
this.fireEvent("valueChanged");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface ConditionalSwitchProperty {
|
|
56
|
+
getKey(): string | undefined;
|
|
57
|
+
setKey(key: string): this;
|
|
58
|
+
getValue(): unknown | undefined;
|
|
59
|
+
setValue(value: unknown): void;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default ConditionalSwitchProperty;
|