@sapui5/sap.fe.core 1.102.2 → 1.104.1
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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -1,78 +1,63 @@
|
|
|
1
|
-
import { EntityType, Property, TypeDefinition } from "@sap-ux/
|
|
2
|
-
import {
|
|
1
|
+
import type { EntityType, EnumValue, PathAnnotationExpression, Property, PropertyPath, TypeDefinition } from "@sap-ux/vocabularies-types";
|
|
2
|
+
import type { FilterFunctions } from "@sap-ux/vocabularies-types/vocabularies/Capabilities";
|
|
3
|
+
import type { SemanticKey } from "@sap-ux/vocabularies-types/vocabularies/Common";
|
|
4
|
+
import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Common";
|
|
5
|
+
import type {
|
|
3
6
|
CriticalityType,
|
|
4
7
|
DataField,
|
|
5
8
|
DataFieldAbstractTypes,
|
|
6
9
|
DataFieldForAction,
|
|
7
|
-
DataFieldForAnnotation,
|
|
8
10
|
DataFieldForIntentBasedNavigation,
|
|
9
11
|
DataFieldTypes,
|
|
10
12
|
DataPoint,
|
|
11
13
|
DataPointTypeTypes,
|
|
12
|
-
EnumValue,
|
|
13
14
|
FieldGroupType,
|
|
14
15
|
LineItem,
|
|
15
|
-
|
|
16
|
-
PresentationVariantTypeTypes,
|
|
17
|
-
PropertyPath,
|
|
16
|
+
PresentationVariantType,
|
|
18
17
|
SelectionVariantType,
|
|
19
|
-
SelectOptionType
|
|
20
|
-
|
|
21
|
-
} from "@sap-ux/vocabularies-types";
|
|
22
|
-
import {
|
|
23
|
-
import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Common";
|
|
24
|
-
import { SemanticKey } from "@sap-ux/vocabularies-types/types/generated/Common";
|
|
18
|
+
SelectOptionType
|
|
19
|
+
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
20
|
+
import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
21
|
+
import type { ComplexPropertyInfo } from "sap/fe/core/converters/annotations/DataField";
|
|
25
22
|
import {
|
|
26
23
|
collectRelatedProperties,
|
|
27
24
|
collectRelatedPropertiesRecursively,
|
|
28
|
-
ComplexPropertyInfo,
|
|
29
25
|
getDataFieldDataType,
|
|
30
26
|
getSemanticObjectPath,
|
|
31
27
|
isDataFieldAlwaysHidden,
|
|
32
28
|
isDataFieldForActionAbstract,
|
|
33
29
|
isDataFieldTypes
|
|
34
30
|
} from "sap/fe/core/converters/annotations/DataField";
|
|
35
|
-
import {
|
|
36
|
-
|
|
37
|
-
BaseAction,
|
|
38
|
-
CustomAction,
|
|
39
|
-
getActionsFromManifest,
|
|
40
|
-
isActionNavigable,
|
|
41
|
-
removeDuplicateActions
|
|
42
|
-
} from "sap/fe/core/converters/controls/Common/Action";
|
|
31
|
+
import type { AnnotationAction, BaseAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
32
|
+
import { getActionsFromManifest, isActionNavigable, removeDuplicateActions } from "sap/fe/core/converters/controls/Common/Action";
|
|
43
33
|
import { bindingContextPathVisitor, Entity, UI } from "sap/fe/core/converters/helpers/BindingHelper";
|
|
44
|
-
import { ConfigurableObject, CustomElement
|
|
34
|
+
import type { ConfigurableObject, CustomElement } from "sap/fe/core/converters/helpers/ConfigurableObject";
|
|
35
|
+
import { insertCustomElements, Placement } from "sap/fe/core/converters/helpers/ConfigurableObject";
|
|
45
36
|
import { IssueCategory, IssueCategoryType, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
|
|
46
37
|
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
47
38
|
import tableFormatters from "sap/fe/core/formatters/TableFormatter";
|
|
48
39
|
import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
|
|
40
|
+
import type { BindingToolkitExpression, CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
49
41
|
import {
|
|
50
42
|
and,
|
|
51
|
-
|
|
52
|
-
BindingExpression,
|
|
53
|
-
bindingExpression,
|
|
54
|
-
BindingExpressionExpression,
|
|
55
|
-
compileBinding,
|
|
43
|
+
compileExpression,
|
|
56
44
|
constant,
|
|
57
45
|
equal,
|
|
58
|
-
Expression,
|
|
59
|
-
ExpressionOrPrimitive,
|
|
60
46
|
formatResult,
|
|
47
|
+
getExpressionFromAnnotation,
|
|
61
48
|
ifElse,
|
|
62
49
|
isConstant,
|
|
50
|
+
isPathInModelExpression,
|
|
63
51
|
not,
|
|
64
52
|
or,
|
|
53
|
+
pathInModel,
|
|
65
54
|
resolveBindingString
|
|
66
|
-
} from "sap/fe/core/helpers/
|
|
55
|
+
} from "sap/fe/core/helpers/BindingToolkit";
|
|
67
56
|
import { replaceSpecialChars } from "sap/fe/core/helpers/StableIdHelper";
|
|
68
|
-
import {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
isPathSearchable,
|
|
73
|
-
isPathUpdatable
|
|
74
|
-
} from "sap/fe/core/templating/DataModelPathHelper";
|
|
75
|
-
import { DisplayMode, EDM_TYPE_MAPPING, getDisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
|
|
57
|
+
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
58
|
+
import { getTargetObjectPath, isPathDeletable, isPathSearchable, isPathUpdatable } from "sap/fe/core/templating/DataModelPathHelper";
|
|
59
|
+
import type { DisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
|
|
60
|
+
import { EDM_TYPE_MAPPING, getDisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
|
|
76
61
|
import { getNonSortablePropertiesRestrictions } from "sap/fe/core/templating/EntitySetHelper";
|
|
77
62
|
import {
|
|
78
63
|
getAssociatedCurrencyProperty,
|
|
@@ -82,30 +67,33 @@ import {
|
|
|
82
67
|
isPathExpression,
|
|
83
68
|
isProperty
|
|
84
69
|
} from "sap/fe/core/templating/PropertyHelper";
|
|
85
|
-
import ConverterContext from "../../ConverterContext";
|
|
70
|
+
import type ConverterContext from "../../ConverterContext";
|
|
86
71
|
import { AggregationHelper } from "../../helpers/Aggregation";
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
ActionType,
|
|
90
|
-
AvailabilityType,
|
|
91
|
-
CreationMode,
|
|
72
|
+
import { getTableID } from "../../helpers/ID";
|
|
73
|
+
import type {
|
|
92
74
|
FormatOptionsType,
|
|
93
|
-
HorizontalAlign,
|
|
94
|
-
Importance,
|
|
95
75
|
ManifestTableColumn,
|
|
96
76
|
NavigationSettingsConfiguration,
|
|
97
77
|
NavigationTargetConfiguration,
|
|
98
|
-
SelectionMode,
|
|
99
78
|
TableColumnSettings,
|
|
100
79
|
TableManifestConfiguration,
|
|
101
80
|
TableManifestSettingsConfiguration,
|
|
81
|
+
ViewPathConfiguration
|
|
82
|
+
} from "../../ManifestSettings";
|
|
83
|
+
import {
|
|
84
|
+
ActionType,
|
|
85
|
+
AvailabilityType,
|
|
86
|
+
CreationMode,
|
|
87
|
+
HorizontalAlign,
|
|
88
|
+
Importance,
|
|
89
|
+
SelectionMode,
|
|
102
90
|
TemplateType,
|
|
103
91
|
VariantManagementType,
|
|
104
|
-
ViewPathConfiguration,
|
|
105
92
|
VisualizationType
|
|
106
93
|
} from "../../ManifestSettings";
|
|
107
|
-
import ManifestWrapper from "../../ManifestWrapper";
|
|
94
|
+
import type ManifestWrapper from "../../ManifestWrapper";
|
|
108
95
|
import { getMessageTypeFromCriticalityType } from "./Criticality";
|
|
96
|
+
import type { StandardActionConfigType } from "./table/StandardActions";
|
|
109
97
|
import {
|
|
110
98
|
generateStandardActionsContext,
|
|
111
99
|
getCreateVisibility,
|
|
@@ -119,8 +107,7 @@ import {
|
|
|
119
107
|
getStandardActionMassEdit,
|
|
120
108
|
getStandardActionPaste,
|
|
121
109
|
isDraftOrStickySupported,
|
|
122
|
-
isInDisplayMode
|
|
123
|
-
StandardActionConfigType
|
|
110
|
+
isInDisplayMode
|
|
124
111
|
} from "./table/StandardActions";
|
|
125
112
|
|
|
126
113
|
export type TableAnnotationConfiguration = {
|
|
@@ -134,9 +121,9 @@ export type TableAnnotationConfiguration = {
|
|
|
134
121
|
row?: {
|
|
135
122
|
action?: string;
|
|
136
123
|
press?: string;
|
|
137
|
-
rowHighlighting:
|
|
138
|
-
rowNavigated:
|
|
139
|
-
visible?:
|
|
124
|
+
rowHighlighting: CompiledBindingToolkitExpression;
|
|
125
|
+
rowNavigated: CompiledBindingToolkitExpression;
|
|
126
|
+
visible?: CompiledBindingToolkitExpression;
|
|
140
127
|
};
|
|
141
128
|
selectionMode: string | undefined;
|
|
142
129
|
standardActions: {
|
|
@@ -217,6 +204,7 @@ export type TableControlConfiguration = {
|
|
|
217
204
|
enableMassEdit: boolean | undefined;
|
|
218
205
|
enableAutoColumnWidth: boolean;
|
|
219
206
|
dataStateIndicatorFilter: string | undefined;
|
|
207
|
+
isCompactType?: boolean;
|
|
220
208
|
};
|
|
221
209
|
|
|
222
210
|
export type TableType = "GridTable" | "ResponsiveTable" | "AnalyticalTable";
|
|
@@ -257,7 +245,7 @@ export type AnnotationTableColumn = BaseTableColumn & {
|
|
|
257
245
|
tooltip?: string;
|
|
258
246
|
groupLabel?: string;
|
|
259
247
|
group?: string;
|
|
260
|
-
FieldGroupHiddenExpressions?:
|
|
248
|
+
FieldGroupHiddenExpressions?: CompiledBindingToolkitExpression;
|
|
261
249
|
showDataFieldsLabel?: boolean;
|
|
262
250
|
isKey?: boolean;
|
|
263
251
|
unit?: string;
|
|
@@ -338,11 +326,11 @@ type SorterType = {
|
|
|
338
326
|
/**
|
|
339
327
|
* Returns an array of all annotation-based and manifest-based table actions.
|
|
340
328
|
*
|
|
341
|
-
* @param
|
|
342
|
-
* @param
|
|
343
|
-
* @param
|
|
344
|
-
* @param
|
|
345
|
-
* @returns
|
|
329
|
+
* @param lineItemAnnotation
|
|
330
|
+
* @param visualizationPath
|
|
331
|
+
* @param converterContext
|
|
332
|
+
* @param navigationSettings
|
|
333
|
+
* @returns The complete table actions
|
|
346
334
|
*/
|
|
347
335
|
export function getTableActions(
|
|
348
336
|
lineItemAnnotation: LineItem,
|
|
@@ -378,11 +366,11 @@ export function getTableActions(
|
|
|
378
366
|
* Returns an array of all columns, annotation-based as well as manifest based.
|
|
379
367
|
* They are sorted and some properties can be overwritten via the manifest (check out the keys that can be overwritten).
|
|
380
368
|
*
|
|
381
|
-
* @param
|
|
382
|
-
* @param
|
|
383
|
-
* @param
|
|
384
|
-
* @param
|
|
385
|
-
* @returns
|
|
369
|
+
* @param lineItemAnnotation Collection of data fields for representation in a table or list
|
|
370
|
+
* @param visualizationPath
|
|
371
|
+
* @param converterContext
|
|
372
|
+
* @param navigationSettings
|
|
373
|
+
* @returns Returns all table columns that should be available, regardless of templating or personalization or their origin
|
|
386
374
|
*/
|
|
387
375
|
export function getTableColumns(
|
|
388
376
|
lineItemAnnotation: LineItem,
|
|
@@ -482,9 +470,9 @@ export const getAggregateDefinitionsFromEntityType = function (
|
|
|
482
470
|
};
|
|
483
471
|
const aContextDefiningProperties: string[] = [];
|
|
484
472
|
aRawContextDefiningProperties.forEach((contextDefiningPropertyName) => {
|
|
485
|
-
const
|
|
486
|
-
if (
|
|
487
|
-
aContextDefiningProperties.push(
|
|
473
|
+
const foundColumn = findColumnFromPath(contextDefiningPropertyName);
|
|
474
|
+
if (foundColumn) {
|
|
475
|
+
aContextDefiningProperties.push(foundColumn.name);
|
|
488
476
|
}
|
|
489
477
|
});
|
|
490
478
|
|
|
@@ -510,7 +498,7 @@ function updateTableVisualizationForAnalytics(
|
|
|
510
498
|
tableVisualization: TableVisualization,
|
|
511
499
|
entityType: EntityType,
|
|
512
500
|
converterContext: ConverterContext,
|
|
513
|
-
presentationVariantAnnotation?:
|
|
501
|
+
presentationVariantAnnotation?: PresentationVariantType
|
|
514
502
|
) {
|
|
515
503
|
if (tableVisualization.control.type === "AnalyticalTable") {
|
|
516
504
|
const aggregatesDefinitions = getAggregateDefinitionsFromEntityType(entityType, tableVisualization.columns, converterContext),
|
|
@@ -630,7 +618,7 @@ function getSemanticKeysAndTitleInfo(converterContext: ConverterContext) {
|
|
|
630
618
|
?.path;
|
|
631
619
|
const semanticKeyAnnotations: any[] | undefined = converterContext.getAnnotationEntityType()?.annotations?.Common?.SemanticKey;
|
|
632
620
|
|
|
633
|
-
|
|
621
|
+
const semanticKeyColumns: string[] = [];
|
|
634
622
|
if (semanticKeyAnnotations) {
|
|
635
623
|
semanticKeyAnnotations.forEach(function (oColumn: any) {
|
|
636
624
|
semanticKeyColumns.push(oColumn.value);
|
|
@@ -644,7 +632,7 @@ export function createTableVisualization(
|
|
|
644
632
|
lineItemAnnotation: LineItem,
|
|
645
633
|
visualizationPath: string,
|
|
646
634
|
converterContext: ConverterContext,
|
|
647
|
-
presentationVariantAnnotation?:
|
|
635
|
+
presentationVariantAnnotation?: PresentationVariantType,
|
|
648
636
|
isCondensedTableLayoutCompliant?: boolean,
|
|
649
637
|
viewConfiguration?: ViewPathConfiguration
|
|
650
638
|
): TableVisualization {
|
|
@@ -719,7 +707,7 @@ export function createDefaultTableVisualization(converterContext: ConverterConte
|
|
|
719
707
|
*
|
|
720
708
|
* @param lineItemAnnotation The instance of the line item
|
|
721
709
|
* @param converterContext The instance of the converter context
|
|
722
|
-
* @returns
|
|
710
|
+
* @returns The record containing all action names and their corresponding Core.OperationAvailable property paths
|
|
723
711
|
*/
|
|
724
712
|
function getOperationAvailableMap(lineItemAnnotation: LineItem | undefined, converterContext: ConverterContext): Record<string, any> {
|
|
725
713
|
const operationAvailableMap: Record<string, any> = {};
|
|
@@ -740,14 +728,14 @@ function getOperationAvailableMap(lineItemAnnotation: LineItem | undefined, conv
|
|
|
740
728
|
addToMap(actionName, null);
|
|
741
729
|
} else if (actionTarget?.parameters?.length) {
|
|
742
730
|
const bindingParameterFullName = actionTarget.parameters[0].fullyQualifiedName,
|
|
743
|
-
targetExpression =
|
|
731
|
+
targetExpression = getExpressionFromAnnotation(
|
|
744
732
|
actionTarget?.annotations?.Core?.OperationAvailable,
|
|
745
733
|
[],
|
|
746
734
|
undefined,
|
|
747
735
|
(path: string) => bindingContextPathVisitor(path, converterContext, bindingParameterFullName)
|
|
748
|
-
)
|
|
736
|
+
);
|
|
749
737
|
|
|
750
|
-
if (targetExpression
|
|
738
|
+
if (isPathInModelExpression(targetExpression)) {
|
|
751
739
|
addToMap(actionName, targetExpression.path);
|
|
752
740
|
} else if (actionTarget?.annotations?.Core?.OperationAvailable !== undefined) {
|
|
753
741
|
addToMap(actionName, targetExpression);
|
|
@@ -765,7 +753,7 @@ function getOperationAvailableMap(lineItemAnnotation: LineItem | undefined, conv
|
|
|
765
753
|
* Gets updatable propertyPath for the current entityset if valid.
|
|
766
754
|
*
|
|
767
755
|
* @param converterContext The instance of the converter context
|
|
768
|
-
* @returns
|
|
756
|
+
* @returns The updatable property for the rows
|
|
769
757
|
*/
|
|
770
758
|
function getCurrentEntitySetUpdatablePath(converterContext: ConverterContext): string {
|
|
771
759
|
const restrictions = getRestrictions(converterContext);
|
|
@@ -780,9 +768,9 @@ function getCurrentEntitySetUpdatablePath(converterContext: ConverterContext): s
|
|
|
780
768
|
/**
|
|
781
769
|
* Method to retrieve all property paths assigned to the Core.OperationAvailable annotation.
|
|
782
770
|
*
|
|
783
|
-
* @param
|
|
784
|
-
* @param
|
|
785
|
-
* @returns
|
|
771
|
+
* @param operationAvailableMap The record consisting of actions and their Core.OperationAvailable property paths
|
|
772
|
+
* @param converterContext The instance of the converter context
|
|
773
|
+
* @returns The CSV string of all property paths associated with the Core.OperationAvailable annotation
|
|
786
774
|
*/
|
|
787
775
|
function getOperationAvailableProperties(operationAvailableMap: Record<string, any>, converterContext: ConverterContext): string {
|
|
788
776
|
const properties = new Set();
|
|
@@ -826,8 +814,8 @@ function getUIHiddenExpForActionsRequiringContext(
|
|
|
826
814
|
currentEntityType: EntityType,
|
|
827
815
|
contextDataModelObjectPath: DataModelObjectPath,
|
|
828
816
|
isEntitySet: boolean
|
|
829
|
-
):
|
|
830
|
-
const aUiHiddenPathExpressions:
|
|
817
|
+
): BindingToolkitExpression<boolean>[] {
|
|
818
|
+
const aUiHiddenPathExpressions: BindingToolkitExpression<boolean>[] = [];
|
|
831
819
|
lineItemAnnotation.forEach((dataField) => {
|
|
832
820
|
// Check if the lineItem context is the same as that of the action:
|
|
833
821
|
if (
|
|
@@ -839,16 +827,7 @@ function getUIHiddenExpForActionsRequiringContext(
|
|
|
839
827
|
dataField?.Inline?.valueOf() !== true)
|
|
840
828
|
) {
|
|
841
829
|
if (typeof dataField.annotations?.UI?.Hidden?.valueOf() === "object") {
|
|
842
|
-
aUiHiddenPathExpressions.push(
|
|
843
|
-
equal(
|
|
844
|
-
getBindingExpFromContext(
|
|
845
|
-
dataField as DataFieldForAction | DataFieldForIntentBasedNavigation,
|
|
846
|
-
contextDataModelObjectPath,
|
|
847
|
-
isEntitySet
|
|
848
|
-
),
|
|
849
|
-
false
|
|
850
|
-
)
|
|
851
|
-
);
|
|
830
|
+
aUiHiddenPathExpressions.push(equal(getBindingExpFromContext(dataField, contextDataModelObjectPath, isEntitySet), false));
|
|
852
831
|
}
|
|
853
832
|
}
|
|
854
833
|
});
|
|
@@ -870,7 +849,7 @@ function getBindingExpFromContext(
|
|
|
870
849
|
source: DataFieldForAction | DataFieldForIntentBasedNavigation | CustomAction,
|
|
871
850
|
contextDataModelObjectPath: DataModelObjectPath,
|
|
872
851
|
isEntitySet: boolean
|
|
873
|
-
):
|
|
852
|
+
): BindingToolkitExpression<any> {
|
|
874
853
|
let sExpression: any | undefined;
|
|
875
854
|
if (
|
|
876
855
|
(source as DataFieldForAction)?.$Type === UIAnnotationTypes.DataFieldForAction ||
|
|
@@ -898,13 +877,13 @@ function getBindingExpFromContext(
|
|
|
898
877
|
contextDataModelObjectPath?.targetObject?._type === "NavigationProperty" &&
|
|
899
878
|
contextDataModelObjectPath.targetObject.partner === sNavigationPath
|
|
900
879
|
) {
|
|
901
|
-
return
|
|
880
|
+
return pathInModel(aSplitPath.slice(1).join("/"));
|
|
902
881
|
} else {
|
|
903
882
|
return constant(true);
|
|
904
883
|
}
|
|
905
884
|
// In case there is no navigation property, if it's an entitySet, the expression binding has to be returned:
|
|
906
885
|
} else if (isEntitySet) {
|
|
907
|
-
return
|
|
886
|
+
return pathInModel(sPath);
|
|
908
887
|
// otherwise the expression binding cannot be taken into account for the selection mode evaluation:
|
|
909
888
|
} else {
|
|
910
889
|
return constant(true);
|
|
@@ -919,7 +898,7 @@ function getBindingExpFromContext(
|
|
|
919
898
|
*
|
|
920
899
|
* @param lineItemAnnotation Collection of data fields for representation in a table or list
|
|
921
900
|
* @param currentEntityType Current Entity Type
|
|
922
|
-
* @returns
|
|
901
|
+
* @returns `true` if there is at least 1 action that meets the criteria
|
|
923
902
|
*/
|
|
924
903
|
function hasBoundActionsAlwaysVisibleInToolBar(lineItemAnnotation: LineItem, currentEntityType: EntityType): boolean {
|
|
925
904
|
return lineItemAnnotation.some((dataField) => {
|
|
@@ -957,8 +936,8 @@ function hasCustomActionsAlwaysVisibleInToolBar(manifestActions: Record<string,
|
|
|
957
936
|
* @param manifestActions The actions defined in the manifest
|
|
958
937
|
* @returns Array<Expression<boolean>> All the visible path expressions of the actions that meet the criteria
|
|
959
938
|
*/
|
|
960
|
-
function getVisibleExpForCustomActionsRequiringContext(manifestActions: Record<string, CustomAction>):
|
|
961
|
-
const aVisiblePathExpressions:
|
|
939
|
+
function getVisibleExpForCustomActionsRequiringContext(manifestActions: Record<string, CustomAction>): BindingToolkitExpression<boolean>[] {
|
|
940
|
+
const aVisiblePathExpressions: BindingToolkitExpression<boolean>[] = [];
|
|
962
941
|
if (manifestActions) {
|
|
963
942
|
Object.keys(manifestActions).forEach((actionKey) => {
|
|
964
943
|
const action = manifestActions[actionKey];
|
|
@@ -982,7 +961,7 @@ function getVisibleExpForCustomActionsRequiringContext(manifestActions: Record<s
|
|
|
982
961
|
* Evaluate if the path is statically deletable or updatable.
|
|
983
962
|
*
|
|
984
963
|
* @param converterContext
|
|
985
|
-
* @returns
|
|
964
|
+
* @returns The table capabilities
|
|
986
965
|
*/
|
|
987
966
|
export function getCapabilityRestriction(converterContext: ConverterContext): TableCapabilityRestriction {
|
|
988
967
|
const isDeletable = isPathDeletable(converterContext.getDataModelObjectPath());
|
|
@@ -999,16 +978,16 @@ export function getSelectionMode(
|
|
|
999
978
|
converterContext: ConverterContext,
|
|
1000
979
|
isEntitySet: boolean,
|
|
1001
980
|
targetCapabilities: TableCapabilityRestriction,
|
|
1002
|
-
deleteButtonVisibilityExpression?:
|
|
1003
|
-
massEditVisibilityExpression:
|
|
981
|
+
deleteButtonVisibilityExpression?: BindingToolkitExpression<boolean>,
|
|
982
|
+
massEditVisibilityExpression: BindingToolkitExpression<boolean> = constant(false)
|
|
1004
983
|
): string | undefined {
|
|
1005
984
|
if (!lineItemAnnotation) {
|
|
1006
985
|
return SelectionMode.None;
|
|
1007
986
|
}
|
|
1008
987
|
const tableManifestSettings = converterContext.getManifestControlConfiguration(visualizationPath);
|
|
1009
988
|
let selectionMode = tableManifestSettings.tableSettings?.selectionMode;
|
|
1010
|
-
let aHiddenBindingExpressions:
|
|
1011
|
-
aVisibleBindingExpressions:
|
|
989
|
+
let aHiddenBindingExpressions: BindingToolkitExpression<boolean>[] = [],
|
|
990
|
+
aVisibleBindingExpressions: BindingToolkitExpression<boolean>[] = [];
|
|
1012
991
|
const manifestActions = getActionsFromManifest(
|
|
1013
992
|
converterContext.getManifestControlConfiguration(visualizationPath).actions,
|
|
1014
993
|
converterContext,
|
|
@@ -1019,14 +998,14 @@ export function getSelectionMode(
|
|
|
1019
998
|
let isParentDeletable, parentEntitySetDeletable;
|
|
1020
999
|
if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
|
|
1021
1000
|
isParentDeletable = isPathDeletable(converterContext.getDataModelObjectPath());
|
|
1022
|
-
parentEntitySetDeletable = isParentDeletable ?
|
|
1001
|
+
parentEntitySetDeletable = isParentDeletable ? compileExpression(isParentDeletable, true) : isParentDeletable;
|
|
1023
1002
|
}
|
|
1024
1003
|
|
|
1025
1004
|
const bMassEditEnabled: boolean = !isConstant(massEditVisibilityExpression) || massEditVisibilityExpression.value !== false;
|
|
1026
1005
|
if (selectionMode && selectionMode === SelectionMode.None && deleteButtonVisibilityExpression) {
|
|
1027
1006
|
if (converterContext.getTemplateType() === TemplateType.ObjectPage && bMassEditEnabled) {
|
|
1028
1007
|
// Mass Edit in OP is enabled only in edit mode.
|
|
1029
|
-
return
|
|
1008
|
+
return compileExpression(
|
|
1030
1009
|
ifElse(
|
|
1031
1010
|
and(UI.IsEditable, massEditVisibilityExpression),
|
|
1032
1011
|
constant("Multi"),
|
|
@@ -1037,7 +1016,7 @@ export function getSelectionMode(
|
|
|
1037
1016
|
return SelectionMode.Multi;
|
|
1038
1017
|
}
|
|
1039
1018
|
|
|
1040
|
-
return
|
|
1019
|
+
return compileExpression(ifElse(deleteButtonVisibilityExpression, constant("Multi"), constant("None")));
|
|
1041
1020
|
}
|
|
1042
1021
|
if (!selectionMode || selectionMode === SelectionMode.Auto) {
|
|
1043
1022
|
selectionMode = SelectionMode.Multi;
|
|
@@ -1075,7 +1054,7 @@ export function getSelectionMode(
|
|
|
1075
1054
|
deleteButtonVisibilityExpression || true, // default delete visibility as true
|
|
1076
1055
|
massEditVisibilityExpression
|
|
1077
1056
|
);
|
|
1078
|
-
return
|
|
1057
|
+
return compileExpression(
|
|
1079
1058
|
ifElse(and(UI.IsEditable, buttonVisibilityExpression), constant(selectionMode), constant(SelectionMode.None))
|
|
1080
1059
|
);
|
|
1081
1060
|
} else {
|
|
@@ -1086,7 +1065,7 @@ export function getSelectionMode(
|
|
|
1086
1065
|
// example: LR scenario
|
|
1087
1066
|
return selectionMode;
|
|
1088
1067
|
} else if (targetCapabilities.isDeletable && deleteButtonVisibilityExpression) {
|
|
1089
|
-
return
|
|
1068
|
+
return compileExpression(ifElse(deleteButtonVisibilityExpression, constant(selectionMode), constant("None")));
|
|
1090
1069
|
// EntitySet not deletable:
|
|
1091
1070
|
} else {
|
|
1092
1071
|
return SelectionMode.None;
|
|
@@ -1101,7 +1080,7 @@ export function getSelectionMode(
|
|
|
1101
1080
|
massEditVisibilityExpression,
|
|
1102
1081
|
constant(true)
|
|
1103
1082
|
);
|
|
1104
|
-
return
|
|
1083
|
+
return compileExpression(
|
|
1105
1084
|
ifElse(
|
|
1106
1085
|
and(UI.IsEditable, editModebuttonVisibilityExpression),
|
|
1107
1086
|
constant(selectionMode),
|
|
@@ -1113,7 +1092,7 @@ export function getSelectionMode(
|
|
|
1113
1092
|
)
|
|
1114
1093
|
);
|
|
1115
1094
|
} else {
|
|
1116
|
-
return
|
|
1095
|
+
return compileExpression(
|
|
1117
1096
|
ifElse(
|
|
1118
1097
|
or(...aHiddenBindingExpressions.concat(aVisibleBindingExpressions)),
|
|
1119
1098
|
constant(selectionMode),
|
|
@@ -1127,7 +1106,7 @@ export function getSelectionMode(
|
|
|
1127
1106
|
return selectionMode;
|
|
1128
1107
|
//EntitySet not deletable:
|
|
1129
1108
|
} else {
|
|
1130
|
-
return
|
|
1109
|
+
return compileExpression(
|
|
1131
1110
|
ifElse(
|
|
1132
1111
|
or(...aHiddenBindingExpressions.concat(aVisibleBindingExpressions), massEditVisibilityExpression),
|
|
1133
1112
|
constant(selectionMode),
|
|
@@ -1143,7 +1122,7 @@ export function getSelectionMode(
|
|
|
1143
1122
|
* @param lineItemAnnotation
|
|
1144
1123
|
* @param visualizationPath
|
|
1145
1124
|
* @param converterContext
|
|
1146
|
-
* @returns
|
|
1125
|
+
* @returns The table annotation actions
|
|
1147
1126
|
*/
|
|
1148
1127
|
function getTableAnnotationActions(lineItemAnnotation: LineItem, visualizationPath: string, converterContext: ConverterContext) {
|
|
1149
1128
|
const tableActions: BaseAction[] = [];
|
|
@@ -1164,10 +1143,10 @@ function getTableAnnotationActions(lineItemAnnotation: LineItem, visualizationPa
|
|
|
1164
1143
|
type: ActionType.DataFieldForAction,
|
|
1165
1144
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
1166
1145
|
key: key,
|
|
1167
|
-
visible:
|
|
1146
|
+
visible: compileExpression(
|
|
1168
1147
|
not(
|
|
1169
1148
|
equal(
|
|
1170
|
-
|
|
1149
|
+
getExpressionFromAnnotation(
|
|
1171
1150
|
dataField.annotations?.UI?.Hidden,
|
|
1172
1151
|
[],
|
|
1173
1152
|
undefined,
|
|
@@ -1186,10 +1165,10 @@ function getTableAnnotationActions(lineItemAnnotation: LineItem, visualizationPa
|
|
|
1186
1165
|
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
1187
1166
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
|
|
1188
1167
|
key: key,
|
|
1189
|
-
visible:
|
|
1168
|
+
visible: compileExpression(
|
|
1190
1169
|
not(
|
|
1191
1170
|
equal(
|
|
1192
|
-
|
|
1171
|
+
getExpressionFromAnnotation(
|
|
1193
1172
|
dataField.annotations?.UI?.Hidden,
|
|
1194
1173
|
[],
|
|
1195
1174
|
undefined,
|
|
@@ -1225,11 +1204,11 @@ function getHighlightRowBinding(
|
|
|
1225
1204
|
criticalityAnnotation: PathAnnotationExpression<CriticalityType> | EnumValue<CriticalityType> | undefined,
|
|
1226
1205
|
isDraftRoot: boolean,
|
|
1227
1206
|
targetEntityType?: EntityType
|
|
1228
|
-
):
|
|
1229
|
-
let defaultHighlightRowDefinition: MessageType |
|
|
1207
|
+
): BindingToolkitExpression<MessageType> {
|
|
1208
|
+
let defaultHighlightRowDefinition: MessageType | BindingToolkitExpression<MessageType> = MessageType.None;
|
|
1230
1209
|
if (criticalityAnnotation) {
|
|
1231
1210
|
if (typeof criticalityAnnotation === "object") {
|
|
1232
|
-
defaultHighlightRowDefinition =
|
|
1211
|
+
defaultHighlightRowDefinition = getExpressionFromAnnotation(criticalityAnnotation) as BindingToolkitExpression<MessageType>;
|
|
1233
1212
|
} else {
|
|
1234
1213
|
// Enum Value so we get the corresponding static part
|
|
1235
1214
|
defaultHighlightRowDefinition = getMessageTypeFromCriticalityType(criticalityAnnotation);
|
|
@@ -1239,14 +1218,14 @@ function getHighlightRowBinding(
|
|
|
1239
1218
|
const aMissingKeys: any[] = [];
|
|
1240
1219
|
targetEntityType?.keys.forEach((key: any) => {
|
|
1241
1220
|
if (key.name !== "IsActiveEntity") {
|
|
1242
|
-
aMissingKeys.push(
|
|
1221
|
+
aMissingKeys.push(pathInModel(key.name, undefined));
|
|
1243
1222
|
}
|
|
1244
1223
|
});
|
|
1245
1224
|
|
|
1246
1225
|
return formatResult(
|
|
1247
1226
|
[
|
|
1248
1227
|
defaultHighlightRowDefinition,
|
|
1249
|
-
|
|
1228
|
+
pathInModel(`filteredMessages`, "internal"),
|
|
1250
1229
|
isDraftRoot && Entity.HasActive,
|
|
1251
1230
|
isDraftRoot && Entity.IsActive,
|
|
1252
1231
|
`${isDraftRoot}`,
|
|
@@ -1322,7 +1301,7 @@ const _getRowConfigurationProperty = function (
|
|
|
1322
1301
|
targetPath: string
|
|
1323
1302
|
) {
|
|
1324
1303
|
let pressProperty, navigationTarget;
|
|
1325
|
-
let criticalityProperty:
|
|
1304
|
+
let criticalityProperty: BindingToolkitExpression<MessageType> = constant(MessageType.None);
|
|
1326
1305
|
const targetEntityType = converterContext.getEntityType();
|
|
1327
1306
|
if (navigationSettings && lineItemAnnotation) {
|
|
1328
1307
|
navigationTarget = navigationSettings.display?.target || navigationSettings.detail?.outbound;
|
|
@@ -1351,17 +1330,17 @@ const _getRowConfigurationProperty = function (
|
|
|
1351
1330
|
}
|
|
1352
1331
|
}
|
|
1353
1332
|
}
|
|
1354
|
-
const rowNavigatedExpression:
|
|
1355
|
-
[
|
|
1333
|
+
const rowNavigatedExpression: BindingToolkitExpression<boolean> = formatResult(
|
|
1334
|
+
[pathInModel("/deepestPath", "internal")],
|
|
1356
1335
|
tableFormatters.navigatedRow,
|
|
1357
1336
|
targetEntityType
|
|
1358
1337
|
);
|
|
1359
1338
|
return {
|
|
1360
1339
|
press: pressProperty,
|
|
1361
1340
|
action: pressProperty ? "Navigation" : undefined,
|
|
1362
|
-
rowHighlighting:
|
|
1363
|
-
rowNavigated:
|
|
1364
|
-
visible:
|
|
1341
|
+
rowHighlighting: compileExpression(criticalityProperty),
|
|
1342
|
+
rowNavigated: compileExpression(rowNavigatedExpression),
|
|
1343
|
+
visible: compileExpression(not(UI.IsInactive))
|
|
1365
1344
|
};
|
|
1366
1345
|
};
|
|
1367
1346
|
|
|
@@ -1374,7 +1353,7 @@ const _getRowConfigurationProperty = function (
|
|
|
1374
1353
|
* @param nonSortableColumns The array of all non sortable column names.
|
|
1375
1354
|
* @param converterContext The converter context.
|
|
1376
1355
|
* @param tableType The table type.
|
|
1377
|
-
* @returns
|
|
1356
|
+
* @returns The column from the entityType
|
|
1378
1357
|
*/
|
|
1379
1358
|
export const getColumnsFromEntityType = function (
|
|
1380
1359
|
columnsToBeCreated: Record<string, Property>,
|
|
@@ -1468,15 +1447,16 @@ export const getColumnsFromEntityType = function (
|
|
|
1468
1447
|
|
|
1469
1448
|
/**
|
|
1470
1449
|
* Create a column definition from a property.
|
|
1471
|
-
*
|
|
1472
|
-
* @param
|
|
1473
|
-
* @param
|
|
1474
|
-
* @param
|
|
1475
|
-
* @param
|
|
1476
|
-
* @param
|
|
1477
|
-
* @param
|
|
1478
|
-
* @param
|
|
1479
|
-
* @
|
|
1450
|
+
*
|
|
1451
|
+
* @param property Entity type property for which the column is created
|
|
1452
|
+
* @param fullPropertyPath The full path to the target property
|
|
1453
|
+
* @param relativePath The relative path to the target property based on the context
|
|
1454
|
+
* @param useDataFieldPrefix Should be prefixed with "DataField::", else it will be prefixed with "Property::"
|
|
1455
|
+
* @param availableForAdaptation Decides whether the column should be available for adaptation
|
|
1456
|
+
* @param nonSortableColumns The array of all non-sortable column names
|
|
1457
|
+
* @param aggregationHelper The aggregationHelper for the entity
|
|
1458
|
+
* @param converterContext The converter context
|
|
1459
|
+
* @returns The annotation column definition
|
|
1480
1460
|
*/
|
|
1481
1461
|
const getColumnDefinitionFromProperty = function (
|
|
1482
1462
|
property: Property,
|
|
@@ -1488,7 +1468,7 @@ const getColumnDefinitionFromProperty = function (
|
|
|
1488
1468
|
aggregationHelper: AggregationHelper,
|
|
1489
1469
|
converterContext: ConverterContext
|
|
1490
1470
|
): AnnotationTableColumn {
|
|
1491
|
-
const name = useDataFieldPrefix ? relativePath :
|
|
1471
|
+
const name = useDataFieldPrefix ? relativePath : `Property::${relativePath}`;
|
|
1492
1472
|
const key = (useDataFieldPrefix ? "DataField::" : "Property::") + replaceSpecialChars(relativePath);
|
|
1493
1473
|
const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, property);
|
|
1494
1474
|
const isHidden = property.annotations?.UI?.Hidden?.valueOf() === true;
|
|
@@ -1575,8 +1555,8 @@ const getColumnDefinitionFromProperty = function (
|
|
|
1575
1555
|
/**
|
|
1576
1556
|
* Returns Boolean true for valid columns, false for invalid columns.
|
|
1577
1557
|
*
|
|
1578
|
-
* @param
|
|
1579
|
-
* @returns
|
|
1558
|
+
* @param dataField Different DataField types defined in the annotations
|
|
1559
|
+
* @returns True for valid columns, false for invalid columns
|
|
1580
1560
|
* @private
|
|
1581
1561
|
*/
|
|
1582
1562
|
const _isValidColumn = function (dataField: DataFieldAbstractTypes) {
|
|
@@ -1596,23 +1576,20 @@ const _isValidColumn = function (dataField: DataFieldAbstractTypes) {
|
|
|
1596
1576
|
// throw new Error("Unhandled DataField Abstract type: " + dataField.$Type);
|
|
1597
1577
|
}
|
|
1598
1578
|
};
|
|
1599
|
-
|
|
1600
1579
|
/**
|
|
1601
1580
|
* Returns the binding expression to evaluate the visibility of a DataField or DataPoint annotation.
|
|
1602
1581
|
*
|
|
1603
1582
|
* SAP Fiori elements will evaluate either the UI.Hidden annotation defined on the annotation itself or on the target property.
|
|
1604
1583
|
*
|
|
1605
|
-
* @param
|
|
1606
|
-
* @param
|
|
1607
|
-
* @param
|
|
1608
|
-
* @
|
|
1609
|
-
* @returns {BindingExpression<string>} An expression that you can bind to the UI.
|
|
1584
|
+
* @param dataFieldModelPath The metapath referring to the annotation that is evaluated by SAP Fiori elements.
|
|
1585
|
+
* @param [formatOptions] FormatOptions optional.
|
|
1586
|
+
* @param formatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
|
|
1587
|
+
* @returns An expression that you can bind to the UI.
|
|
1610
1588
|
*/
|
|
1611
1589
|
export const _getVisibleExpression = function (
|
|
1612
1590
|
dataFieldModelPath: DataModelObjectPath,
|
|
1613
|
-
formatOptions?: any
|
|
1614
|
-
|
|
1615
|
-
): BindingExpression<string> {
|
|
1591
|
+
formatOptions?: any
|
|
1592
|
+
): BindingToolkitExpression<any> {
|
|
1616
1593
|
const targetObject: DataFieldAbstractTypes | DataPointTypeTypes = dataFieldModelPath.targetObject;
|
|
1617
1594
|
let propertyValue;
|
|
1618
1595
|
if (targetObject) {
|
|
@@ -1644,41 +1621,43 @@ export const _getVisibleExpression = function (
|
|
|
1644
1621
|
// - the UI.Hidden expression in the original annotation does not evaluate to 'true'
|
|
1645
1622
|
// - the UI.Hidden expression in the target property does not evaluate to 'true'
|
|
1646
1623
|
// - in case of Analytics it's not visible for an expanded GroupHeader
|
|
1647
|
-
|
|
1624
|
+
return and(
|
|
1648
1625
|
...[
|
|
1649
|
-
not(equal(
|
|
1650
|
-
ifElse(
|
|
1626
|
+
not(equal(getExpressionFromAnnotation(targetObject?.annotations?.UI?.Hidden), true)),
|
|
1627
|
+
ifElse(
|
|
1628
|
+
!!propertyValue,
|
|
1629
|
+
propertyValue && not(equal(getExpressionFromAnnotation(propertyValue.annotations?.UI?.Hidden), true)),
|
|
1630
|
+
true
|
|
1631
|
+
),
|
|
1651
1632
|
or(not(isAnalyticalGroupHeaderExpanded), isAnalyticalLeaf)
|
|
1652
1633
|
]
|
|
1653
1634
|
);
|
|
1654
|
-
return returnExpression ? (expression as any as BindingExpression<string>) : compileBinding(expression);
|
|
1655
1635
|
};
|
|
1656
1636
|
|
|
1657
1637
|
/**
|
|
1658
1638
|
* Returns hidden binding expressions for a field group.
|
|
1659
|
-
*
|
|
1660
|
-
* @param
|
|
1661
|
-
* @param
|
|
1662
|
-
* @
|
|
1639
|
+
*
|
|
1640
|
+
* @param dataFieldGroup DataField defined in the annotations
|
|
1641
|
+
* @param fieldFormatOptions FormatOptions optional.
|
|
1642
|
+
* @param fieldFormatOptions.isAnalytics This flag is used to check if the analytic table has GroupHeader expanded.
|
|
1643
|
+
* @returns Compile binding of field group expressions.
|
|
1663
1644
|
* @private
|
|
1664
1645
|
*/
|
|
1665
1646
|
const _getFieldGroupHiddenExpressions = function (
|
|
1666
1647
|
dataFieldGroup: DataFieldAbstractTypes,
|
|
1667
1648
|
fieldFormatOptions: any
|
|
1668
|
-
):
|
|
1669
|
-
const aFieldGroupHiddenExpressions:
|
|
1649
|
+
): CompiledBindingToolkitExpression | undefined {
|
|
1650
|
+
const aFieldGroupHiddenExpressions: BindingToolkitExpression<any>[] = [];
|
|
1670
1651
|
if (
|
|
1671
1652
|
dataFieldGroup.$Type === UIAnnotationTypes.DataFieldForAnnotation &&
|
|
1672
1653
|
dataFieldGroup.Target?.$target?.$Type === UIAnnotationTypes.FieldGroupType
|
|
1673
1654
|
) {
|
|
1674
1655
|
dataFieldGroup.Target.$target.Data?.forEach((innerDataField: DataFieldAbstractTypes | DataPointTypeTypes) => {
|
|
1675
1656
|
aFieldGroupHiddenExpressions.push(
|
|
1676
|
-
_getVisibleExpression({ targetObject: innerDataField } as DataModelObjectPath, fieldFormatOptions
|
|
1657
|
+
_getVisibleExpression({ targetObject: innerDataField } as DataModelObjectPath, fieldFormatOptions)
|
|
1677
1658
|
);
|
|
1678
1659
|
});
|
|
1679
|
-
return
|
|
1680
|
-
ifElse(or(...(aFieldGroupHiddenExpressions as any as ExpressionOrPrimitive<boolean>[])), constant(true), constant(false))
|
|
1681
|
-
);
|
|
1660
|
+
return compileExpression(ifElse(or(...aFieldGroupHiddenExpressions), constant(true), constant(false)));
|
|
1682
1661
|
} else {
|
|
1683
1662
|
return undefined;
|
|
1684
1663
|
}
|
|
@@ -1686,9 +1665,10 @@ const _getFieldGroupHiddenExpressions = function (
|
|
|
1686
1665
|
|
|
1687
1666
|
/**
|
|
1688
1667
|
* Returns the label for the property and dataField.
|
|
1689
|
-
*
|
|
1668
|
+
*
|
|
1669
|
+
* @param [property] Property or DataField defined in the annotations
|
|
1690
1670
|
* @param isGroup
|
|
1691
|
-
* @returns
|
|
1671
|
+
* @returns Label of the property or DataField
|
|
1692
1672
|
* @private
|
|
1693
1673
|
*/
|
|
1694
1674
|
const _getLabel = function (property: DataFieldAbstractTypes | Property, isGroup: boolean = false): string | undefined {
|
|
@@ -1698,26 +1678,26 @@ const _getLabel = function (property: DataFieldAbstractTypes | Property, isGroup
|
|
|
1698
1678
|
if (isProperty(property)) {
|
|
1699
1679
|
const dataFieldDefault = property.annotations?.UI?.DataFieldDefault;
|
|
1700
1680
|
if (dataFieldDefault && !dataFieldDefault.qualifier && dataFieldDefault.Label?.valueOf()) {
|
|
1701
|
-
return
|
|
1681
|
+
return compileExpression(getExpressionFromAnnotation(dataFieldDefault.Label?.valueOf()));
|
|
1702
1682
|
}
|
|
1703
|
-
return
|
|
1683
|
+
return compileExpression(getExpressionFromAnnotation(property.annotations.Common?.Label?.valueOf() || property.name));
|
|
1704
1684
|
} else if (isDataFieldTypes(property)) {
|
|
1705
1685
|
if (!!isGroup && property.$Type === UIAnnotationTypes.DataFieldWithIntentBasedNavigation) {
|
|
1706
|
-
return
|
|
1686
|
+
return compileExpression(getExpressionFromAnnotation(property.Label?.valueOf()));
|
|
1707
1687
|
}
|
|
1708
|
-
return
|
|
1709
|
-
|
|
1688
|
+
return compileExpression(
|
|
1689
|
+
getExpressionFromAnnotation(
|
|
1710
1690
|
property.Label?.valueOf() || property.Value?.$target?.annotations?.Common?.Label?.valueOf() || property.Value?.$target?.name
|
|
1711
1691
|
)
|
|
1712
1692
|
);
|
|
1713
1693
|
} else if (property.$Type === UIAnnotationTypes.DataFieldForAnnotation) {
|
|
1714
|
-
return
|
|
1715
|
-
|
|
1694
|
+
return compileExpression(
|
|
1695
|
+
getExpressionFromAnnotation(
|
|
1716
1696
|
property.Label?.valueOf() || (property.Target?.$target as DataPoint)?.Value?.$target?.annotations?.Common?.Label?.valueOf()
|
|
1717
1697
|
)
|
|
1718
1698
|
);
|
|
1719
1699
|
} else {
|
|
1720
|
-
return
|
|
1700
|
+
return compileExpression(getExpressionFromAnnotation(property.Label?.valueOf()));
|
|
1721
1701
|
}
|
|
1722
1702
|
};
|
|
1723
1703
|
|
|
@@ -1728,36 +1708,36 @@ const _getTooltip = function (source: DataFieldAbstractTypes | Property): string
|
|
|
1728
1708
|
|
|
1729
1709
|
if (isProperty(source)) {
|
|
1730
1710
|
return source.annotations.Common?.QuickInfo
|
|
1731
|
-
?
|
|
1711
|
+
? compileExpression(getExpressionFromAnnotation(source.annotations.Common.QuickInfo.valueOf()))
|
|
1732
1712
|
: undefined;
|
|
1733
1713
|
} else if (isDataFieldTypes(source)) {
|
|
1734
1714
|
return source.Value?.$target?.annotations?.Common?.QuickInfo
|
|
1735
|
-
?
|
|
1715
|
+
? compileExpression(getExpressionFromAnnotation(source.Value.$target.annotations.Common.QuickInfo.valueOf()))
|
|
1736
1716
|
: undefined;
|
|
1737
1717
|
} else if (source.$Type === UIAnnotationTypes.DataFieldForAnnotation) {
|
|
1738
1718
|
const datapointTarget = source.Target?.$target as DataPoint;
|
|
1739
1719
|
return datapointTarget?.Value?.$target?.annotations?.Common?.QuickInfo
|
|
1740
|
-
?
|
|
1720
|
+
? compileExpression(getExpressionFromAnnotation(datapointTarget.Value.$target.annotations.Common.QuickInfo.valueOf()))
|
|
1741
1721
|
: undefined;
|
|
1742
1722
|
} else {
|
|
1743
1723
|
return undefined;
|
|
1744
1724
|
}
|
|
1745
1725
|
};
|
|
1746
|
-
export function getRowStatusVisibility():
|
|
1726
|
+
export function getRowStatusVisibility(): BindingToolkitExpression<boolean> {
|
|
1747
1727
|
return formatResult(
|
|
1748
|
-
[
|
|
1728
|
+
[pathInModel(`semanticKeyHasDraftIndicator`, "internal"), pathInModel(`filteredMessages`, "internal")],
|
|
1749
1729
|
tableFormatters.getErrorStatusTextVisibilityFormatter
|
|
1750
1730
|
);
|
|
1751
1731
|
}
|
|
1752
1732
|
/**
|
|
1753
1733
|
* Creates a PropertyInfo for each identified property consumed by a LineItem.
|
|
1754
1734
|
*
|
|
1755
|
-
* @param
|
|
1735
|
+
* @param columnsToBeCreated Identified properties.
|
|
1756
1736
|
* @param existingColumns The list of columns created for LineItems and Properties of entityType.
|
|
1757
1737
|
* @param nonSortableColumns The array of column names which cannot be sorted.
|
|
1758
1738
|
* @param converterContext The converter context.
|
|
1759
1739
|
* @param entityType The entity type for the LineItem
|
|
1760
|
-
* @returns
|
|
1740
|
+
* @returns The array of columns created.
|
|
1761
1741
|
*/
|
|
1762
1742
|
const _createRelatedColumns = function (
|
|
1763
1743
|
columnsToBeCreated: Record<string, Property>,
|
|
@@ -1798,7 +1778,7 @@ const _createRelatedColumns = function (
|
|
|
1798
1778
|
// Case 3: This is a self reference from an existing column and
|
|
1799
1779
|
// both cases require a dummy PropertyInfo for setting correct export settings.
|
|
1800
1780
|
|
|
1801
|
-
const newName =
|
|
1781
|
+
const newName = `Property::${name}`;
|
|
1802
1782
|
|
|
1803
1783
|
// Checking whether the related property column has already been created in a previous iteration.
|
|
1804
1784
|
if (!existingColumns.some((column) => column.name === newName)) {
|
|
@@ -1838,8 +1818,8 @@ const _createRelatedColumns = function (
|
|
|
1838
1818
|
* If it points to a DataField with one property or DataPoint with one property, it will use the property name
|
|
1839
1819
|
* here to be consistent with the existing flex changes.
|
|
1840
1820
|
*
|
|
1841
|
-
* @param
|
|
1842
|
-
* @returns
|
|
1821
|
+
* @param dataField Different DataField types defined in the annotations
|
|
1822
|
+
* @returns The name of annotation columns
|
|
1843
1823
|
* @private
|
|
1844
1824
|
*/
|
|
1845
1825
|
const _getAnnotationColumnName = function (dataField: DataFieldAbstractTypes) {
|
|
@@ -1856,10 +1836,11 @@ const _getAnnotationColumnName = function (dataField: DataFieldAbstractTypes) {
|
|
|
1856
1836
|
|
|
1857
1837
|
/**
|
|
1858
1838
|
* Determines if the data field labels have to be displayed in the table.
|
|
1859
|
-
*
|
|
1860
|
-
* @param
|
|
1861
|
-
* @param
|
|
1862
|
-
* @
|
|
1839
|
+
*
|
|
1840
|
+
* @param fieldGroupName The `DataField` name being processed.
|
|
1841
|
+
* @param visualizationPath
|
|
1842
|
+
* @param converterContext
|
|
1843
|
+
* @returns `showDataFieldsLabel` value from the manifest
|
|
1863
1844
|
* @private
|
|
1864
1845
|
*/
|
|
1865
1846
|
const _getShowDataFieldsLabel = function (fieldGroupName: string, visualizationPath: string, converterContext: ConverterContext): boolean {
|
|
@@ -1875,8 +1856,9 @@ const _getShowDataFieldsLabel = function (fieldGroupName: string, visualizationP
|
|
|
1875
1856
|
|
|
1876
1857
|
/**
|
|
1877
1858
|
* Determines the relative path of the property with respect to the root entity.
|
|
1859
|
+
*
|
|
1878
1860
|
* @param dataField The `DataField` being processed.
|
|
1879
|
-
* @returns
|
|
1861
|
+
* @returns The relative path
|
|
1880
1862
|
*/
|
|
1881
1863
|
const _getRelativePath = function (dataField: DataFieldAbstractTypes): string {
|
|
1882
1864
|
let relativePath: string = "";
|
|
@@ -1891,11 +1873,13 @@ const _getRelativePath = function (dataField: DataFieldAbstractTypes): string {
|
|
|
1891
1873
|
break;
|
|
1892
1874
|
|
|
1893
1875
|
case UIAnnotationTypes.DataFieldForAnnotation:
|
|
1894
|
-
relativePath =
|
|
1876
|
+
relativePath = dataField?.Target?.value;
|
|
1895
1877
|
break;
|
|
1896
1878
|
|
|
1897
1879
|
case UIAnnotationTypes.DataFieldForAction:
|
|
1898
1880
|
case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
|
|
1881
|
+
case UIAnnotationTypes.DataFieldForActionGroup:
|
|
1882
|
+
case UIAnnotationTypes.DataFieldWithActionGroup:
|
|
1899
1883
|
relativePath = KeyHelper.generateKeyFromDataField(dataField);
|
|
1900
1884
|
break;
|
|
1901
1885
|
}
|
|
@@ -1918,33 +1902,23 @@ const _sliceAtSlash = function (path: string, isLastSlash: boolean, isLastPart:
|
|
|
1918
1902
|
* @param dataField The data field being processed
|
|
1919
1903
|
* @param propertyPath The property path
|
|
1920
1904
|
* @param nonSortableColumns Collection of non-sortable column names as per annotation
|
|
1921
|
-
* @returns
|
|
1905
|
+
* @returns True if the column is sortable
|
|
1922
1906
|
*/
|
|
1923
1907
|
const _isColumnSortable = function (dataField: DataFieldAbstractTypes, propertyPath: string, nonSortableColumns: string[]): boolean {
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
break;
|
|
1932
|
-
|
|
1933
|
-
case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
|
|
1934
|
-
case UIAnnotationTypes.DataFieldForAction:
|
|
1935
|
-
// Action columns are not sortable
|
|
1936
|
-
isSortable = false;
|
|
1937
|
-
break;
|
|
1938
|
-
}
|
|
1939
|
-
}
|
|
1940
|
-
return isSortable;
|
|
1908
|
+
return (
|
|
1909
|
+
nonSortableColumns.indexOf(propertyPath) === -1 && // Column is not marked as non-sortable via annotation
|
|
1910
|
+
(dataField.$Type === UIAnnotationTypes.DataField ||
|
|
1911
|
+
dataField.$Type === UIAnnotationTypes.DataFieldWithUrl ||
|
|
1912
|
+
dataField.$Type === UIAnnotationTypes.DataFieldWithIntentBasedNavigation ||
|
|
1913
|
+
dataField.$Type === UIAnnotationTypes.DataFieldWithAction)
|
|
1914
|
+
);
|
|
1941
1915
|
};
|
|
1942
1916
|
|
|
1943
1917
|
/**
|
|
1944
1918
|
* Returns whether filtering on the table is case sensitive.
|
|
1945
1919
|
*
|
|
1946
|
-
* @param
|
|
1947
|
-
* @returns
|
|
1920
|
+
* @param converterContext The instance of the converter context
|
|
1921
|
+
* @returns Returns 'false' if FilterFunctions annotation supports 'tolower', else 'true'
|
|
1948
1922
|
*/
|
|
1949
1923
|
export const isFilteringCaseSensitive = function (converterContext: ConverterContext): boolean {
|
|
1950
1924
|
const filterFunctions: FilterFunctions | undefined =
|
|
@@ -1956,7 +1930,7 @@ export const isFilteringCaseSensitive = function (converterContext: ConverterCon
|
|
|
1956
1930
|
/**
|
|
1957
1931
|
* Returns default format options for text fields in a table.
|
|
1958
1932
|
*
|
|
1959
|
-
* @returns
|
|
1933
|
+
* @returns Collection of format options with default values
|
|
1960
1934
|
*/
|
|
1961
1935
|
function getDefaultFormatOptionsForTable(): FormatOptionsType {
|
|
1962
1936
|
return {
|
|
@@ -2026,11 +2000,12 @@ function _findSemanticKeyValuesInFieldGroup(dataFieldGroup: DataFieldAbstractTyp
|
|
|
2026
2000
|
|
|
2027
2001
|
/**
|
|
2028
2002
|
* Returns default format options with draftIndicator for a column.
|
|
2003
|
+
*
|
|
2029
2004
|
* @param name
|
|
2030
2005
|
* @param semanticKeys
|
|
2031
2006
|
* @param isFieldGroupColumn
|
|
2032
2007
|
* @param dataFieldGroup
|
|
2033
|
-
* @returns
|
|
2008
|
+
* @returns Collection of format options with default values
|
|
2034
2009
|
*/
|
|
2035
2010
|
function getDefaultDraftIndicatorForColumn(
|
|
2036
2011
|
name: string,
|
|
@@ -2047,18 +2022,16 @@ function getDefaultDraftIndicatorForColumn(
|
|
|
2047
2022
|
return {
|
|
2048
2023
|
hasDraftIndicator: true,
|
|
2049
2024
|
semantickeys: semanticKey.values,
|
|
2050
|
-
objectStatusTextVisibility:
|
|
2025
|
+
objectStatusTextVisibility: compileExpression(getRowStatusVisibility())
|
|
2051
2026
|
};
|
|
2027
|
+
} else if (!semanticKeyInFieldGroup.semanticKeyHasPropertyInFieldGroup) {
|
|
2028
|
+
return {};
|
|
2052
2029
|
} else {
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
FieldGroupDraftIndicatorPropertyPath: semanticKeyInFieldGroup.propertyPath,
|
|
2059
|
-
FieldGroupName: name
|
|
2060
|
-
};
|
|
2061
|
-
}
|
|
2030
|
+
// Semantic Key has a property in a FieldGroup
|
|
2031
|
+
return {
|
|
2032
|
+
FieldGroupDraftIndicatorPropertyPath: semanticKeyInFieldGroup.propertyPath,
|
|
2033
|
+
FieldGroupName: name
|
|
2034
|
+
};
|
|
2062
2035
|
}
|
|
2063
2036
|
}
|
|
2064
2037
|
|
|
@@ -2104,7 +2077,7 @@ function _getMaxImportance(fields: DataFieldTypes[]): Importance {
|
|
|
2104
2077
|
*
|
|
2105
2078
|
* @param dataField
|
|
2106
2079
|
* @param semanticKeys
|
|
2107
|
-
* @returns
|
|
2080
|
+
* @returns The importance value
|
|
2108
2081
|
*/
|
|
2109
2082
|
export function getImportance(dataField: DataFieldAbstractTypes, semanticKeys: SemanticKey): Importance | undefined {
|
|
2110
2083
|
//Evaluate default Importance is not set explicitly
|
|
@@ -2158,10 +2131,10 @@ export function getImportance(dataField: DataFieldAbstractTypes, semanticKeys: S
|
|
|
2158
2131
|
/**
|
|
2159
2132
|
* Returns line items from metadata annotations.
|
|
2160
2133
|
*
|
|
2161
|
-
* @param
|
|
2162
|
-
* @param
|
|
2163
|
-
* @param
|
|
2164
|
-
* @returns
|
|
2134
|
+
* @param lineItemAnnotation Collection of data fields with their annotations
|
|
2135
|
+
* @param visualizationPath The visualization path
|
|
2136
|
+
* @param converterContext The converter context
|
|
2137
|
+
* @returns The columns from the annotations
|
|
2165
2138
|
*/
|
|
2166
2139
|
const getColumnsFromAnnotations = function (
|
|
2167
2140
|
lineItemAnnotation: LineItem,
|
|
@@ -2205,7 +2178,7 @@ const getColumnsFromAnnotations = function (
|
|
|
2205
2178
|
...getDefaultFormatOptionsForTable(),
|
|
2206
2179
|
...getDefaultDraftIndicatorForColumn(name, semanticKeys, isFieldGroupColumn, lineItem)
|
|
2207
2180
|
};
|
|
2208
|
-
let fieldGroupHiddenExpressions:
|
|
2181
|
+
let fieldGroupHiddenExpressions: CompiledBindingToolkitExpression;
|
|
2209
2182
|
if (
|
|
2210
2183
|
lineItem.$Type === UIAnnotationTypes.DataFieldForAnnotation &&
|
|
2211
2184
|
lineItem.Target?.$target?.$Type === UIAnnotationTypes.FieldGroupType
|
|
@@ -2247,7 +2220,7 @@ const getColumnsFromAnnotations = function (
|
|
|
2247
2220
|
// In case of text arrangement annotation with display mode as text only, exclude text property from the width calculation
|
|
2248
2221
|
visualSettings = {
|
|
2249
2222
|
widthCalculation: {
|
|
2250
|
-
excludeProperties: [
|
|
2223
|
+
excludeProperties: [`Property::${relatedPropertiesInfo.visualSettingsToBeExcluded}`]
|
|
2251
2224
|
}
|
|
2252
2225
|
};
|
|
2253
2226
|
} else if (!dataType || !oTypeConfig) {
|
|
@@ -2269,7 +2242,7 @@ const getColumnsFromAnnotations = function (
|
|
|
2269
2242
|
showDataFieldsLabel: showDataFieldsLabel,
|
|
2270
2243
|
relativePath: relativePath,
|
|
2271
2244
|
sortable: _isColumnSortable(lineItem, relativePath, nonSortableColumns),
|
|
2272
|
-
propertyInfos: relatedPropertyNames.length
|
|
2245
|
+
propertyInfos: relatedPropertyNames.length ? relatedPropertyNames : undefined,
|
|
2273
2246
|
additionalPropertyInfos: additionalPropertyNames.length > 0 ? additionalPropertyNames : undefined,
|
|
2274
2247
|
exportSettings: exportSettings,
|
|
2275
2248
|
width: lineItem.annotations?.HTML5?.CssDefaults?.width || undefined,
|
|
@@ -2290,14 +2263,14 @@ const getColumnsFromAnnotations = function (
|
|
|
2290
2263
|
annotationColumns.push(oColumn as AnnotationTableColumn);
|
|
2291
2264
|
|
|
2292
2265
|
// Collect information of related columns to be created.
|
|
2293
|
-
relatedPropertyNames.forEach((
|
|
2294
|
-
columnsToBeCreated[
|
|
2266
|
+
relatedPropertyNames.forEach((relatedPropertyName) => {
|
|
2267
|
+
columnsToBeCreated[relatedPropertyName] = relatedPropertiesInfo.properties[relatedPropertyName];
|
|
2295
2268
|
});
|
|
2296
2269
|
|
|
2297
2270
|
// Create columns for additional properties identified for ALP use case.
|
|
2298
|
-
additionalPropertyNames.forEach((
|
|
2271
|
+
additionalPropertyNames.forEach((additionalPropertyName) => {
|
|
2299
2272
|
// Intentional overwrite as we require only one new PropertyInfo for a related Property.
|
|
2300
|
-
columnsToBeCreated[
|
|
2273
|
+
columnsToBeCreated[additionalPropertyName] = relatedPropertiesInfo.additionalProperties[additionalPropertyName];
|
|
2301
2274
|
});
|
|
2302
2275
|
});
|
|
2303
2276
|
}
|
|
@@ -2323,11 +2296,12 @@ const getColumnsFromAnnotations = function (
|
|
|
2323
2296
|
/**
|
|
2324
2297
|
* Gets the property names from the manifest and checks against existing properties already added by annotations.
|
|
2325
2298
|
* If a not yet stored property is found it adds it for sorting and filtering only to the annotationColumns.
|
|
2326
|
-
*
|
|
2327
|
-
* @param
|
|
2328
|
-
* @param
|
|
2299
|
+
*
|
|
2300
|
+
* @param properties
|
|
2301
|
+
* @param annotationColumns
|
|
2302
|
+
* @param converterContext
|
|
2329
2303
|
* @param entityType
|
|
2330
|
-
* @returns
|
|
2304
|
+
* @returns The columns from the annotations
|
|
2331
2305
|
*/
|
|
2332
2306
|
const _getPropertyNames = function (
|
|
2333
2307
|
properties: string[] | undefined,
|
|
@@ -2374,10 +2348,10 @@ const _appendCustomTemplate = function (properties: string[]): string {
|
|
|
2374
2348
|
* Manifest defined property value for custom / annotation columns
|
|
2375
2349
|
* Default property value for custom column if not overwritten in manifest.
|
|
2376
2350
|
*
|
|
2377
|
-
* @param
|
|
2378
|
-
* @param
|
|
2379
|
-
* @param
|
|
2380
|
-
* @returns
|
|
2351
|
+
* @param property The column property defined in the manifest
|
|
2352
|
+
* @param defaultValue The default value of the property
|
|
2353
|
+
* @param isAnnotationColumn Whether the column, defined in manifest, corresponds to an existing annotation column.
|
|
2354
|
+
* @returns Determined property value for the column
|
|
2381
2355
|
*/
|
|
2382
2356
|
const _getManifestOrDefaultValue = function (property: any, defaultValue: any, isAnnotationColumn: boolean): any {
|
|
2383
2357
|
if (property === undefined) {
|
|
@@ -2391,12 +2365,13 @@ const _getManifestOrDefaultValue = function (property: any, defaultValue: any, i
|
|
|
2391
2365
|
|
|
2392
2366
|
/**
|
|
2393
2367
|
* Returns table column definitions from manifest.
|
|
2368
|
+
*
|
|
2394
2369
|
* @param columns
|
|
2395
2370
|
* @param annotationColumns
|
|
2396
2371
|
* @param converterContext
|
|
2397
2372
|
* @param entityType
|
|
2398
2373
|
* @param navigationSettings
|
|
2399
|
-
* @returns
|
|
2374
|
+
* @returns The columns from the manifest
|
|
2400
2375
|
*/
|
|
2401
2376
|
const getColumnsFromManifest = function (
|
|
2402
2377
|
columns: Record<string, ManifestTableColumn>,
|
|
@@ -2419,7 +2394,7 @@ const getColumnsFromManifest = function (
|
|
|
2419
2394
|
entityType
|
|
2420
2395
|
);
|
|
2421
2396
|
if (!manifestColumn?.template && manifestColumn?.type !== "Slot" && !isAnnotationColumn) {
|
|
2422
|
-
const Message =
|
|
2397
|
+
const Message = `The annotation column '${key}' referenced in the manifest is not found`;
|
|
2423
2398
|
converterContext
|
|
2424
2399
|
.getDiagnostics()
|
|
2425
2400
|
.addIssue(
|
|
@@ -2432,8 +2407,8 @@ const getColumnsFromManifest = function (
|
|
|
2432
2407
|
} else {
|
|
2433
2408
|
internalColumns[key] = {
|
|
2434
2409
|
key: key,
|
|
2435
|
-
id:
|
|
2436
|
-
name:
|
|
2410
|
+
id: `CustomColumn::${key}`,
|
|
2411
|
+
name: `CustomColumn::${key}`,
|
|
2437
2412
|
header: manifestColumn.header,
|
|
2438
2413
|
width: manifestColumn.width || undefined,
|
|
2439
2414
|
importance: _getManifestOrDefaultValue(manifestColumn?.importance, Importance.None, isAnnotationColumn),
|
|
@@ -2545,9 +2520,9 @@ export function getP13nMode(
|
|
|
2545
2520
|
* Chart has a dependency to filter bar (issue with loading data). Once resolved, the check for chart should be removed here.
|
|
2546
2521
|
* Until then, hiding filter bar is now allowed if a chart is being used on LR.
|
|
2547
2522
|
*
|
|
2548
|
-
* @param
|
|
2549
|
-
* @param
|
|
2550
|
-
* @returns
|
|
2523
|
+
* @param manifestWrapper Manifest settings getter for the page
|
|
2524
|
+
* @param converterContext The instance of the converter context
|
|
2525
|
+
* @returns Boolean suggesting if a filter bar is being used on the page.
|
|
2551
2526
|
*/
|
|
2552
2527
|
function _isFilterBarHidden(manifestWrapper: ManifestWrapper, converterContext: ConverterContext): boolean {
|
|
2553
2528
|
return (
|
|
@@ -2561,13 +2536,13 @@ function _isFilterBarHidden(manifestWrapper: ManifestWrapper, converterContext:
|
|
|
2561
2536
|
* Returns a JSON string containing the sort conditions for the presentation variant.
|
|
2562
2537
|
*
|
|
2563
2538
|
* @param converterContext The instance of the converter context
|
|
2564
|
-
* @param
|
|
2539
|
+
* @param presentationVariantAnnotation Presentation variant annotation
|
|
2565
2540
|
* @param columns Table columns processed by the converter
|
|
2566
|
-
* @returns
|
|
2541
|
+
* @returns Sort conditions for a presentation variant.
|
|
2567
2542
|
*/
|
|
2568
2543
|
function getSortConditions(
|
|
2569
2544
|
converterContext: ConverterContext,
|
|
2570
|
-
presentationVariantAnnotation:
|
|
2545
|
+
presentationVariantAnnotation: PresentationVariantType | undefined,
|
|
2571
2546
|
columns: TableColumn[]
|
|
2572
2547
|
): string | undefined {
|
|
2573
2548
|
// Currently navigation property is not supported as sorter
|
|
@@ -2623,18 +2598,19 @@ function convertPropertyPathsToInfoNames(paths: PropertyPath[], columns: TableCo
|
|
|
2623
2598
|
/**
|
|
2624
2599
|
* Returns a JSON string containing Presentation Variant group conditions.
|
|
2625
2600
|
*
|
|
2626
|
-
* @param
|
|
2601
|
+
* @param presentationVariantAnnotation Presentation variant annotation
|
|
2627
2602
|
* @param columns Converter processed table columns
|
|
2628
|
-
* @
|
|
2603
|
+
* @param tableType The table type.
|
|
2604
|
+
* @returns Group conditions for a Presentation variant.
|
|
2629
2605
|
*/
|
|
2630
2606
|
function getGroupConditions(
|
|
2631
|
-
presentationVariantAnnotation:
|
|
2607
|
+
presentationVariantAnnotation: PresentationVariantType | undefined,
|
|
2632
2608
|
columns: TableColumn[],
|
|
2633
2609
|
tableType: string
|
|
2634
2610
|
): string | undefined {
|
|
2635
2611
|
let groupConditions: string | undefined;
|
|
2636
2612
|
if (presentationVariantAnnotation?.GroupBy) {
|
|
2637
|
-
let aGroupBy = presentationVariantAnnotation.GroupBy
|
|
2613
|
+
let aGroupBy = presentationVariantAnnotation.GroupBy;
|
|
2638
2614
|
if (tableType === "ResponsiveTable") {
|
|
2639
2615
|
aGroupBy = aGroupBy.slice(0, 1);
|
|
2640
2616
|
}
|
|
@@ -2650,17 +2626,17 @@ function getGroupConditions(
|
|
|
2650
2626
|
/**
|
|
2651
2627
|
* Returns a JSON string containing Presentation Variant aggregate conditions.
|
|
2652
2628
|
*
|
|
2653
|
-
* @param
|
|
2629
|
+
* @param presentationVariantAnnotation Presentation variant annotation
|
|
2654
2630
|
* @param columns Converter processed table columns
|
|
2655
|
-
* @returns
|
|
2631
|
+
* @returns Group conditions for a Presentation variant.
|
|
2656
2632
|
*/
|
|
2657
2633
|
function getAggregateConditions(
|
|
2658
|
-
presentationVariantAnnotation:
|
|
2634
|
+
presentationVariantAnnotation: PresentationVariantType | undefined,
|
|
2659
2635
|
columns: TableColumn[]
|
|
2660
2636
|
): string | undefined {
|
|
2661
2637
|
let aggregateConditions: string | undefined;
|
|
2662
2638
|
if (presentationVariantAnnotation?.Total) {
|
|
2663
|
-
const aTotals = presentationVariantAnnotation.Total
|
|
2639
|
+
const aTotals = presentationVariantAnnotation.Total;
|
|
2664
2640
|
const aggregates: Record<string, object> = {};
|
|
2665
2641
|
convertPropertyPathsToInfoNames(aTotals, columns).forEach((infoName) => {
|
|
2666
2642
|
aggregates[infoName] = {};
|
|
@@ -2678,7 +2654,7 @@ export function getTableAnnotationConfiguration(
|
|
|
2678
2654
|
converterContext: ConverterContext,
|
|
2679
2655
|
tableManifestConfiguration: TableControlConfiguration,
|
|
2680
2656
|
columns: TableColumn[],
|
|
2681
|
-
presentationVariantAnnotation?:
|
|
2657
|
+
presentationVariantAnnotation?: PresentationVariantType,
|
|
2682
2658
|
viewConfiguration?: ViewPathConfiguration
|
|
2683
2659
|
): TableAnnotationConfiguration {
|
|
2684
2660
|
// Need to get the target
|
|
@@ -2688,7 +2664,7 @@ export function getTableAnnotationConfiguration(
|
|
|
2688
2664
|
const pageManifestSettings: ManifestWrapper = converterContext.getManifestWrapper();
|
|
2689
2665
|
const hasAbsolutePath = navigationPropertyPath.length === 0,
|
|
2690
2666
|
p13nMode: string | undefined = getP13nMode(visualizationPath, converterContext, tableManifestConfiguration),
|
|
2691
|
-
id = navigationPropertyPath ?
|
|
2667
|
+
id = navigationPropertyPath ? getTableID(visualizationPath) : getTableID(converterContext.getContextPath(), "LineItem");
|
|
2692
2668
|
const targetCapabilities = getCapabilityRestriction(converterContext);
|
|
2693
2669
|
const navigationTargetPath = getNavigationTargetPath(converterContext, navigationPropertyPath);
|
|
2694
2670
|
const navigationSettings = pageManifestSettings.getNavigationConfiguration(navigationTargetPath);
|
|
@@ -2712,7 +2688,7 @@ export function getTableAnnotationConfiguration(
|
|
|
2712
2688
|
const isInsertUpdateTemplated = getInsertUpdateActionsTemplating(
|
|
2713
2689
|
standardActionsContext,
|
|
2714
2690
|
isDraftOrStickySupported(converterContext),
|
|
2715
|
-
|
|
2691
|
+
compileExpression(createButtonVisibilityExpression) === "false"
|
|
2716
2692
|
);
|
|
2717
2693
|
|
|
2718
2694
|
const selectionMode = getSelectionMode(
|
|
@@ -2813,7 +2789,7 @@ function _getExportDataType(dataType: string, isComplexProperty: boolean = false
|
|
|
2813
2789
|
* Split the visualization path into the navigation property path and annotation.
|
|
2814
2790
|
*
|
|
2815
2791
|
* @param visualizationPath
|
|
2816
|
-
* @returns
|
|
2792
|
+
* @returns The split path
|
|
2817
2793
|
*/
|
|
2818
2794
|
export function splitPath(visualizationPath: string) {
|
|
2819
2795
|
let [navigationPropertyPath, annotationPath] = visualizationPath.split("@");
|
|
@@ -2836,9 +2812,9 @@ export function getSelectionVariantConfiguration(
|
|
|
2836
2812
|
const propertyNames: string[] = [];
|
|
2837
2813
|
selection.SelectOptions?.forEach((selectOption: SelectOptionType) => {
|
|
2838
2814
|
const propertyName: any = selectOption.PropertyName;
|
|
2839
|
-
const
|
|
2840
|
-
if (propertyNames.indexOf(
|
|
2841
|
-
propertyNames.push(
|
|
2815
|
+
const propertyPath: string = propertyName.value;
|
|
2816
|
+
if (propertyNames.indexOf(propertyPath) === -1) {
|
|
2817
|
+
propertyNames.push(propertyPath);
|
|
2842
2818
|
}
|
|
2843
2819
|
});
|
|
2844
2820
|
return {
|
|
@@ -2896,17 +2872,11 @@ function _getTableType(
|
|
|
2896
2872
|
converterContext: ConverterContext
|
|
2897
2873
|
): TableType {
|
|
2898
2874
|
let tableType = tableSettings?.type || "ResponsiveTable";
|
|
2899
|
-
if
|
|
2900
|
-
if
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
if (converterContext.getManifestWrapper().isDesktop() && aggregationHelper.isAnalyticsSupported()) {
|
|
2905
|
-
tableType = "AnalyticalTable";
|
|
2906
|
-
} else {
|
|
2907
|
-
tableType = "ResponsiveTable";
|
|
2908
|
-
}
|
|
2909
|
-
}
|
|
2875
|
+
/* Now, we keep the configuration in the manifest, even if it leads to errors.
|
|
2876
|
+
We only change if we're not on desktop from Analytical to Responsive.
|
|
2877
|
+
*/
|
|
2878
|
+
if (tableType === "AnalyticalTable" && !converterContext.getManifestWrapper().isDesktop()) {
|
|
2879
|
+
tableType = "ResponsiveTable";
|
|
2910
2880
|
}
|
|
2911
2881
|
return tableType;
|
|
2912
2882
|
}
|
|
@@ -2954,7 +2924,7 @@ function _getFilterConfiguration(
|
|
|
2954
2924
|
let quickSelectionVariant: any;
|
|
2955
2925
|
let filters;
|
|
2956
2926
|
tableSettings?.quickVariantSelection?.paths?.forEach((path: { annotationPath: string }) => {
|
|
2957
|
-
quickSelectionVariant = targetEntityType.resolvePath(
|
|
2927
|
+
quickSelectionVariant = targetEntityType.resolvePath(`@${path.annotationPath}`);
|
|
2958
2928
|
filters = _getFilters(tableSettings, quickFilterPaths, quickSelectionVariant, path, converterContext);
|
|
2959
2929
|
});
|
|
2960
2930
|
|
|
@@ -3011,7 +2981,8 @@ export function getTableManifestConfiguration(
|
|
|
3011
2981
|
showRowCount:
|
|
3012
2982
|
!tableSettings?.quickVariantSelection?.showCounts && !converterContext.getManifestWrapper().getViewConfiguration()?.showCounts,
|
|
3013
2983
|
type: tableType,
|
|
3014
|
-
useCondensedTableLayout: condensedTableLayout && isCondensedTableLayoutCompliant
|
|
2984
|
+
useCondensedTableLayout: condensedTableLayout && isCondensedTableLayoutCompliant,
|
|
2985
|
+
isCompactType: converterContext.getManifestWrapper().isCompactType()
|
|
3015
2986
|
};
|
|
3016
2987
|
|
|
3017
2988
|
return { ...oConfiguration, ...oFilterConfiguration };
|
|
@@ -3068,7 +3039,7 @@ export function getTypeConfig(oProperty: Property | DataFieldAbstractTypes, data
|
|
|
3068
3039
|
isDigitSequence:
|
|
3069
3040
|
propertyTypeConfig.type === "sap.ui.model.odata.type.String" &&
|
|
3070
3041
|
oTargetMapping.constraints?.["@com.sap.vocabularies.Common.v1.IsDigitSequence"] &&
|
|
3071
|
-
|
|
3042
|
+
oProperty.annotations?.Common?.IsDigitSequence
|
|
3072
3043
|
? true
|
|
3073
3044
|
: undefined
|
|
3074
3045
|
};
|