@sapui5/sap.fe.core 1.97.0 → 1.100.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 +7 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +309 -405
- package/src/sap/fe/core/AnnotationHelper.ts +315 -0
- package/src/sap/fe/core/AppComponent.js +389 -397
- package/src/sap/fe/core/AppComponent.ts +403 -0
- package/src/sap/fe/core/AppStateHandler.js +198 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +83 -58
- package/src/sap/fe/core/BaseController.ts +68 -0
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2164 -2379
- package/src/sap/fe/core/CommonUtils.ts +2177 -0
- package/src/sap/fe/core/ExtensionAPI.js +279 -266
- package/src/sap/fe/core/ExtensionAPI.ts +250 -0
- package/src/sap/fe/core/PageController.js +218 -125
- package/src/sap/fe/core/PageController.ts +129 -0
- package/src/sap/fe/core/RouterProxy.js +924 -807
- package/src/sap/fe/core/RouterProxy.ts +840 -0
- package/src/sap/fe/core/Synchronization.js +41 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +173 -0
- package/src/sap/fe/core/TemplateModel.js +79 -54
- package/src/sap/fe/core/TemplateModel.ts +63 -0
- package/src/sap/fe/core/TransactionHelper.js +1560 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1717 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
- package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
- package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/src/sap/fe/core/actions/draft.js +521 -581
- package/src/sap/fe/core/actions/draft.ts +566 -0
- package/src/sap/fe/core/actions/messageHandling.js +564 -511
- package/src/sap/fe/core/actions/messageHandling.ts +552 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1093 -1211
- package/src/sap/fe/core/actions/operations.ts +1192 -0
- package/src/sap/fe/core/actions/sticky.js +114 -104
- package/src/sap/fe/core/actions/sticky.ts +119 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
- package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
- package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
- package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
- package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
- package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Share.js +220 -244
- package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
- package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
- package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/src/sap/fe/core/controls/CommandExecution.js +68 -66
- package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
- package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
- package/src/sap/fe/core/controls/FilterBar.js +163 -159
- package/src/sap/fe/core/controls/FilterBar.ts +143 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
- package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
- package/src/sap/fe/core/converters/ConverterContext.js +348 -367
- package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
- package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
- package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
- package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
- package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
- package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
- package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/helpers/Key.js +42 -57
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
- package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +51 -54
- package/src/sap/fe/core/fpm/Component.ts +48 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
- package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
- package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
- package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +427 -425
- package/src/sap/fe/core/library.support.js +23 -27
- package/src/sap/fe/core/library.support.ts +23 -0
- package/src/sap/fe/core/library.ts +420 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
- package/src/sap/fe/core/messagebundle.properties +78 -13
- package/src/sap/fe/core/messagebundle_ar.properties +58 -7
- package/src/sap/fe/core/messagebundle_bg.properties +58 -7
- package/src/sap/fe/core/messagebundle_ca.properties +58 -7
- package/src/sap/fe/core/messagebundle_cs.properties +59 -8
- package/src/sap/fe/core/messagebundle_cy.properties +58 -7
- package/src/sap/fe/core/messagebundle_da.properties +58 -7
- package/src/sap/fe/core/messagebundle_de.properties +58 -7
- package/src/sap/fe/core/messagebundle_el.properties +58 -7
- package/src/sap/fe/core/messagebundle_en.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
- package/src/sap/fe/core/messagebundle_es.properties +58 -7
- package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
- package/src/sap/fe/core/messagebundle_et.properties +58 -7
- package/src/sap/fe/core/messagebundle_fi.properties +60 -9
- package/src/sap/fe/core/messagebundle_fr.properties +64 -13
- package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
- package/src/sap/fe/core/messagebundle_hi.properties +58 -7
- package/src/sap/fe/core/messagebundle_hr.properties +58 -7
- package/src/sap/fe/core/messagebundle_hu.properties +59 -8
- package/src/sap/fe/core/messagebundle_id.properties +61 -10
- package/src/sap/fe/core/messagebundle_it.properties +58 -7
- package/src/sap/fe/core/messagebundle_iw.properties +58 -7
- package/src/sap/fe/core/messagebundle_ja.properties +58 -7
- package/src/sap/fe/core/messagebundle_kk.properties +58 -7
- package/src/sap/fe/core/messagebundle_ko.properties +58 -7
- package/src/sap/fe/core/messagebundle_lt.properties +58 -7
- package/src/sap/fe/core/messagebundle_lv.properties +59 -8
- package/src/sap/fe/core/messagebundle_ms.properties +58 -7
- package/src/sap/fe/core/messagebundle_nl.properties +58 -7
- package/src/sap/fe/core/messagebundle_no.properties +58 -7
- package/src/sap/fe/core/messagebundle_pl.properties +58 -7
- package/src/sap/fe/core/messagebundle_pt.properties +59 -8
- package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
- package/src/sap/fe/core/messagebundle_ro.properties +58 -7
- package/src/sap/fe/core/messagebundle_ru.properties +58 -7
- package/src/sap/fe/core/messagebundle_sh.properties +58 -7
- package/src/sap/fe/core/messagebundle_sk.properties +58 -7
- package/src/sap/fe/core/messagebundle_sl.properties +58 -7
- package/src/sap/fe/core/messagebundle_sv.properties +59 -8
- package/src/sap/fe/core/messagebundle_th.properties +58 -7
- package/src/sap/fe/core/messagebundle_tr.properties +60 -9
- package/src/sap/fe/core/messagebundle_uk.properties +58 -7
- package/src/sap/fe/core/messagebundle_vi.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
- package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +36 -48
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +140 -78
- package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +76 -135
- package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
2
|
+
import ControllerExtensionMetadata from "sap/fe/core/controllerextensions/ControllerExtensionMetadata";
|
|
3
3
|
import { UI5Class, Override, Public } from "../helpers/ClassSupport";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
4
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
5
|
+
import ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
6
|
+
import Context from "sap/ui/model/odata/v4/Context";
|
|
7
|
+
import Log from "sap/base/Log";
|
|
8
|
+
import { KPIChartDefinition, KPIDefinition, NavigationInfo } from "sap/fe/core/converters/controls/Common/KPI";
|
|
9
|
+
import BaseController from "sap/fe/core/BaseController";
|
|
9
10
|
import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
|
|
10
11
|
import { FilterDefinition, RangeDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
12
|
+
import NumberFormat from "sap/ui/core/format/NumberFormat";
|
|
13
|
+
import DateFormat from "sap/ui/core/format/DateFormat";
|
|
14
|
+
import Locale from "sap/ui/core/Locale";
|
|
15
|
+
import Filter from "sap/ui/model/Filter";
|
|
16
|
+
import FilterOperator from "sap/ui/model/FilterOperator";
|
|
17
|
+
import Sorter from "sap/ui/model/Sorter";
|
|
18
|
+
import GenericTag from "sap/m/GenericTag";
|
|
19
|
+
import Popover from "sap/m/Popover";
|
|
20
|
+
import ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
16
21
|
|
|
17
22
|
const MessageTypeFromCriticality: Record<string, MessageType> = {
|
|
18
23
|
"1": MessageType.Error,
|
|
@@ -212,7 +217,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
|
|
|
212
217
|
.getConfiguration()
|
|
213
218
|
.getLanguage()
|
|
214
219
|
);
|
|
215
|
-
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
220
|
+
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
|
|
216
221
|
const dateFormat = DateFormat.getDateInstance({ style: "medium" }, currentLocale);
|
|
217
222
|
|
|
218
223
|
function formatRange(range: RangeDefinition): string {
|
|
@@ -264,7 +269,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
|
|
|
264
269
|
}
|
|
265
270
|
|
|
266
271
|
function formatChartTitle(kpiDef: KPIDefinition): string {
|
|
267
|
-
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
272
|
+
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
|
|
268
273
|
|
|
269
274
|
function formatList(items: { name: string; label: string }[]) {
|
|
270
275
|
if (items.length === 0) {
|
|
@@ -523,6 +528,37 @@ function getChartFeeds(chartDefinition: KPIChartDefinition): { uid: string; type
|
|
|
523
528
|
return res;
|
|
524
529
|
}
|
|
525
530
|
|
|
531
|
+
function getNavigationParameters(
|
|
532
|
+
navInfo: NavigationInfo,
|
|
533
|
+
oShellService: any
|
|
534
|
+
): Promise<{ semanticObject?: string; action?: string; outbound?: string } | undefined> {
|
|
535
|
+
if (navInfo.semanticObject) {
|
|
536
|
+
if (navInfo.action) {
|
|
537
|
+
// Action is already specified: check if it's available in the shell
|
|
538
|
+
return oShellService.getLinks({ semanticObject: navInfo.semanticObject, action: navInfo.action }).then((aLinks: any[]) => {
|
|
539
|
+
return aLinks.length ? { semanticObject: navInfo.semanticObject, action: navInfo.action } : undefined;
|
|
540
|
+
});
|
|
541
|
+
} else {
|
|
542
|
+
// We get the primary intent from the shell
|
|
543
|
+
return oShellService.getPrimaryIntent(navInfo.semanticObject).then((oLink: any) => {
|
|
544
|
+
if (!oLink) {
|
|
545
|
+
// No primary intent...
|
|
546
|
+
return undefined;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Check that the primary intent is not part of the unavailable actions
|
|
550
|
+
const oInfo = oShellService.parseShellHash(oLink.intent);
|
|
551
|
+
return navInfo.unavailableActions && navInfo.unavailableActions.indexOf(oInfo.action) >= 0
|
|
552
|
+
? undefined
|
|
553
|
+
: { semanticObject: oInfo.semanticObject, action: oInfo.action };
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
} else {
|
|
557
|
+
// Outbound navigation specified in the manifest
|
|
558
|
+
return navInfo.outboundNavigation ? Promise.resolve({ outbound: navInfo.outboundNavigation }) : Promise.resolve(undefined);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
526
562
|
/**
|
|
527
563
|
* @class A controller extension for managing the KPIs in an analytical list page
|
|
528
564
|
*
|
|
@@ -535,7 +571,7 @@ function getChartFeeds(chartDefinition: KPIChartDefinition): { uid: string; type
|
|
|
535
571
|
@UI5Class("sap.fe.core.controllerextensions.KPIManagement", ControllerExtensionMetadata)
|
|
536
572
|
class KPIManagementControllerExtension extends ControllerExtension {
|
|
537
573
|
protected aKPIDefinitions?: KPIDefinition[];
|
|
538
|
-
protected oCard
|
|
574
|
+
protected oCard: any;
|
|
539
575
|
protected oPopover!: Popover;
|
|
540
576
|
|
|
541
577
|
/**
|
|
@@ -544,7 +580,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
544
580
|
* @param kpiDefinition The KPI definition
|
|
545
581
|
* @param oKPIModel The JSON model in which the manifest will be stored
|
|
546
582
|
*/
|
|
547
|
-
protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel
|
|
583
|
+
protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel): void {
|
|
548
584
|
const oCardManifest: any = {
|
|
549
585
|
"sap.app": {
|
|
550
586
|
id: "sap.fe",
|
|
@@ -588,7 +624,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
588
624
|
|
|
589
625
|
// Add side indicators in the card header if a target is defined for the KPI
|
|
590
626
|
if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
|
|
591
|
-
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
|
|
627
|
+
const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
|
|
592
628
|
oCardManifest["sap.card"].header.sideIndicators = [
|
|
593
629
|
{
|
|
594
630
|
title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
|
|
@@ -635,6 +671,24 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
635
671
|
});
|
|
636
672
|
}
|
|
637
673
|
|
|
674
|
+
protected initNavigationInfo(kpiDefinition: KPIDefinition, oKPIModel: JSONModel, oShellService: any): Promise<void> {
|
|
675
|
+
// Add navigation
|
|
676
|
+
if (kpiDefinition.navigation) {
|
|
677
|
+
return getNavigationParameters(kpiDefinition.navigation, oShellService).then(oNavInfo => {
|
|
678
|
+
if (oNavInfo) {
|
|
679
|
+
oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/header/actions", [
|
|
680
|
+
{
|
|
681
|
+
type: "Navigation",
|
|
682
|
+
parameters: oNavInfo
|
|
683
|
+
}
|
|
684
|
+
]);
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
} else {
|
|
688
|
+
return Promise.resolve();
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
638
692
|
@Override()
|
|
639
693
|
public onInit(): void {
|
|
640
694
|
this.aKPIDefinitions = this.getKPIData();
|
|
@@ -651,6 +705,11 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
651
705
|
// Create the manifest for the KPI card and store it in the KPI model
|
|
652
706
|
this.initCardManifest(kpiDefinition, oKPIModel);
|
|
653
707
|
|
|
708
|
+
// Set the navigation information in the manifest
|
|
709
|
+
this.initNavigationInfo(kpiDefinition, oKPIModel, oAppComponent.getShellServices()).catch(function(err: any) {
|
|
710
|
+
Log.error(err);
|
|
711
|
+
});
|
|
712
|
+
|
|
654
713
|
// Load tag data for the KPI
|
|
655
714
|
this.loadKPITagData(kpiDefinition, oAppComponent.getModel() as ODataModel, oKPIModel).catch(function(err: any) {
|
|
656
715
|
Log.error(err);
|
|
@@ -661,7 +720,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
661
720
|
|
|
662
721
|
@Override()
|
|
663
722
|
public onExit(): void {
|
|
664
|
-
const oKPIModel = this.getView().getModel("kpiModel") as JSONModel
|
|
723
|
+
const oKPIModel = this.getView().getModel("kpiModel") as JSONModel;
|
|
665
724
|
|
|
666
725
|
if (oKPIModel) {
|
|
667
726
|
oKPIModel.destroy();
|
|
@@ -684,7 +743,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
684
743
|
}
|
|
685
744
|
}
|
|
686
745
|
|
|
687
|
-
private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
746
|
+
private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
688
747
|
const currentLocale = new Locale(
|
|
689
748
|
sap.ui
|
|
690
749
|
.getCore()
|
|
@@ -761,7 +820,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
761
820
|
}
|
|
762
821
|
}
|
|
763
822
|
|
|
764
|
-
private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
823
|
+
private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
765
824
|
const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
766
825
|
|
|
767
826
|
let criticalityValue = MessageType.None;
|
|
@@ -803,7 +862,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
803
862
|
);
|
|
804
863
|
}
|
|
805
864
|
|
|
806
|
-
private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
865
|
+
private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
807
866
|
const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
808
867
|
|
|
809
868
|
let trendValue = "None";
|
|
@@ -838,7 +897,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
838
897
|
oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", trendValue);
|
|
839
898
|
}
|
|
840
899
|
|
|
841
|
-
private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel
|
|
900
|
+
private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
|
|
842
901
|
if (kpiDefinition.datapoint.targetValue === undefined && kpiDefinition.datapoint.targetPath === undefined) {
|
|
843
902
|
return; // No target set for the KPI
|
|
844
903
|
}
|
|
@@ -905,7 +964,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
905
964
|
* @param loadFull If not true, loads only data for the KPI tag
|
|
906
965
|
* @returns {Promise} Returns the promise that is resolved when data is loaded.
|
|
907
966
|
*/
|
|
908
|
-
protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel
|
|
967
|
+
protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel, loadFull?: boolean): any {
|
|
909
968
|
// If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
|
|
910
969
|
// If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
|
|
911
970
|
const oListBinding = loadFull
|
|
@@ -988,7 +1047,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
988
1047
|
* @param {JSONModel} oKPIModel The JSON model where the data will be stored
|
|
989
1048
|
* @returns {Promise} Returns the promise that is resolved when data is loaded.
|
|
990
1049
|
*/
|
|
991
|
-
protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel
|
|
1050
|
+
protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel): any {
|
|
992
1051
|
const oListBinding = oMainModel.bindList("/" + kpiDefinition.entitySet);
|
|
993
1052
|
const oGroup: Record<string, Object> = {};
|
|
994
1053
|
const oAggregate: Record<string, Object> = {};
|
|
@@ -1041,34 +1100,64 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
1041
1100
|
/**
|
|
1042
1101
|
* Gets the popover to display the KPI card
|
|
1043
1102
|
* The popover and the contained card for the KPIs are created if necessary.
|
|
1044
|
-
* The popover is shared between all KPIs, so
|
|
1103
|
+
* The popover is shared between all KPIs, so it's created only once.
|
|
1045
1104
|
*
|
|
1046
|
-
* @param oKPITag The
|
|
1047
|
-
* @returns The shared popover.
|
|
1105
|
+
* @param oKPITag The tag that triggered the popover opening.
|
|
1106
|
+
* @returns The shared popover as a promise.
|
|
1048
1107
|
*/
|
|
1049
|
-
protected getPopover(oKPITag: GenericTag): Popover {
|
|
1108
|
+
protected getPopover(oKPITag: GenericTag): Promise<Popover> {
|
|
1050
1109
|
if (!this.oPopover) {
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1110
|
+
return new Promise((resolve, reject) => {
|
|
1111
|
+
(sap.ui.getCore().loadLibrary("sap/ui/integration", { async: true }) as Promise<object>)
|
|
1112
|
+
.then(() => {
|
|
1113
|
+
sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], (Card: any, Host: any) => {
|
|
1114
|
+
const oHost = new Host();
|
|
1115
|
+
|
|
1116
|
+
oHost.attachAction((oEvent: any) => {
|
|
1117
|
+
const sType = oEvent.getParameter("type");
|
|
1118
|
+
const oParams = oEvent.getParameter("parameters");
|
|
1119
|
+
|
|
1120
|
+
if (sType === "Navigation") {
|
|
1121
|
+
if (oParams.semanticObject) {
|
|
1122
|
+
(this.getView().getController() as any)._intentBasedNavigation.navigate(
|
|
1123
|
+
oParams.semanticObject,
|
|
1124
|
+
oParams.action
|
|
1125
|
+
);
|
|
1126
|
+
} else {
|
|
1127
|
+
(this.getView().getController() as any)._intentBasedNavigation.navigateOutbound(oParams.outbound);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
});
|
|
1131
|
+
|
|
1132
|
+
this.oCard = new Card({
|
|
1133
|
+
width: "25rem",
|
|
1134
|
+
height: "auto"
|
|
1135
|
+
});
|
|
1136
|
+
this.oCard.setHost(oHost as any);
|
|
1137
|
+
|
|
1138
|
+
this.oPopover = new Popover("kpi-Popover", {
|
|
1139
|
+
showHeader: false,
|
|
1140
|
+
placement: "Auto",
|
|
1141
|
+
content: [this.oCard]
|
|
1142
|
+
});
|
|
1143
|
+
|
|
1144
|
+
oKPITag.addDependent(this.oPopover); // The first clicked tag gets the popover as dependent
|
|
1145
|
+
|
|
1146
|
+
resolve(this.oPopover);
|
|
1147
|
+
});
|
|
1148
|
+
})
|
|
1149
|
+
.catch(function() {
|
|
1150
|
+
reject();
|
|
1151
|
+
});
|
|
1061
1152
|
});
|
|
1062
|
-
|
|
1063
|
-
|
|
1153
|
+
} else {
|
|
1154
|
+
return Promise.resolve(this.oPopover);
|
|
1064
1155
|
}
|
|
1065
|
-
|
|
1066
|
-
return this.oPopover;
|
|
1067
1156
|
}
|
|
1068
1157
|
|
|
1069
1158
|
@Public
|
|
1070
1159
|
public onKPIPressed(oKPITag: any, kpiID: string): void {
|
|
1071
|
-
const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel
|
|
1160
|
+
const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel;
|
|
1072
1161
|
|
|
1073
1162
|
if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
|
|
1074
1163
|
const kpiDefinition = this.aKPIDefinitions.find(function(oDef) {
|
|
@@ -1079,14 +1168,16 @@ class KPIManagementControllerExtension extends ControllerExtension {
|
|
|
1079
1168
|
const oModel = oKPITag.getModel();
|
|
1080
1169
|
const aPromises = [
|
|
1081
1170
|
this.loadKPITagData(kpiDefinition, oModel, oKPIModel, true),
|
|
1082
|
-
this.loadKPICardData(kpiDefinition, oModel, oKPIModel)
|
|
1171
|
+
this.loadKPICardData(kpiDefinition, oModel, oKPIModel),
|
|
1172
|
+
this.getPopover(oKPITag)
|
|
1083
1173
|
];
|
|
1084
|
-
const oPopover = this.getPopover(oKPITag);
|
|
1085
1174
|
|
|
1086
1175
|
Promise.all(aPromises)
|
|
1087
|
-
.then(
|
|
1176
|
+
.then(aResults => {
|
|
1088
1177
|
this.oCard.setManifest(oKPIModel.getProperty("/" + kpiID + "/manifest"));
|
|
1089
1178
|
this.oCard.refresh();
|
|
1179
|
+
|
|
1180
|
+
const oPopover = aResults[2];
|
|
1090
1181
|
oPopover.openBy(oKPITag, false);
|
|
1091
1182
|
})
|
|
1092
1183
|
.catch(err => {
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/fe/core/helpers/MassEditHelper", "sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "sap/fe/core/helpers/ModelHelper", "sap/m/MessageBox"], function (ControllerExtension, OverrideExecution, MassEditHelper, Log, ClassSupport, ControllerExtensionMetadata, ModelHelper, MessageBox) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _dec, _dec2, _class, _class2;
|
|
9
|
+
|
|
10
|
+
var UI5Class = ClassSupport.UI5Class;
|
|
11
|
+
var Public = ClassSupport.Public;
|
|
12
|
+
var Private = ClassSupport.Private;
|
|
13
|
+
var Final = ClassSupport.Final;
|
|
14
|
+
var Extensible = ClassSupport.Extensible;
|
|
15
|
+
|
|
16
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
17
|
+
|
|
18
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
19
|
+
|
|
20
|
+
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @class Controller extension providing hooks for the mass edit in a table
|
|
24
|
+
*
|
|
25
|
+
* @name sap.fe.core.controllerextensions.MassEdit
|
|
26
|
+
* @hideconstructor
|
|
27
|
+
* @private
|
|
28
|
+
*/
|
|
29
|
+
var MassEdit = (_dec = UI5Class("sap.fe.core.controllerextensions.MassEdit", ControllerExtensionMetadata), _dec2 = Extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
|
|
30
|
+
_inherits(MassEdit, _ControllerExtension);
|
|
31
|
+
|
|
32
|
+
function MassEdit() {
|
|
33
|
+
return _ControllerExtension.apply(this, arguments) || this;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
var _proto = MassEdit.prototype;
|
|
37
|
+
|
|
38
|
+
_proto.getMessageDetailForNonEditable = function getMessageDetailForNonEditable(oResourceBundle) {
|
|
39
|
+
var sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
|
|
40
|
+
sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
|
|
41
|
+
sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
|
|
42
|
+
sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
|
|
43
|
+
return "<p><strong>" + sHeader + "</strong></p>\n" + "<p>" + sReasonGroup + "</p>\n" + "<ul>" + "<li>" + sReasonDraft + "</li>" + "<li>" + sReasonNonEditable + "</li>" + "</ul>";
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
_proto._openConfirmDialog = function _openConfirmDialog(oTable, aContexts, iSelectedContexts) {
|
|
47
|
+
var _this = this;
|
|
48
|
+
|
|
49
|
+
var iUpdatableContexts = (aContexts || []).length;
|
|
50
|
+
return new Promise(function (resolve) {
|
|
51
|
+
_this.getView().getModel("sap.fe.i18n").getResourceBundle().then(function (oResourceBundle) {
|
|
52
|
+
var sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
53
|
+
sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
|
|
54
|
+
iNonEditable = iSelectedContexts - iUpdatableContexts,
|
|
55
|
+
sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [iNonEditable, iSelectedContexts, iUpdatableContexts]),
|
|
56
|
+
sPath = oTable.data("targetCollectionPath"),
|
|
57
|
+
oMetaModel = oTable.getModel().getMetaModel(),
|
|
58
|
+
bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
|
|
59
|
+
bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
|
|
60
|
+
sMessageDetail = bIsDraft && bDisplayMode && _this.getMessageDetailForNonEditable(oResourceBundle);
|
|
61
|
+
|
|
62
|
+
MessageBox.warning(sMessage, {
|
|
63
|
+
details: sMessageDetail,
|
|
64
|
+
actions: [sEditButton, sCancelButton],
|
|
65
|
+
emphasizedAction: sEditButton,
|
|
66
|
+
contentWidth: "100px",
|
|
67
|
+
onClose: function (sSelection) {
|
|
68
|
+
var aContextsForEdit = [];
|
|
69
|
+
|
|
70
|
+
if (sSelection === sEditButton) {
|
|
71
|
+
Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts.toString(), " selections.");
|
|
72
|
+
aContextsForEdit = aContexts;
|
|
73
|
+
} else if (sSelection === sCancelButton) {
|
|
74
|
+
Log.info("Mass Edit: Cancelled.");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
resolve(aContextsForEdit);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}).catch(function (error) {
|
|
81
|
+
Log.error(error);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
_proto._confirmContexts = function _confirmContexts(oTable, aContexts) {
|
|
87
|
+
var oInternalModelContext = oTable.getBindingContext("internal"),
|
|
88
|
+
iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
|
|
89
|
+
aContexts = aContexts || [];
|
|
90
|
+
|
|
91
|
+
if (aContexts.length && aContexts.length !== iSelectedContexts) {
|
|
92
|
+
return this._openConfirmDialog(oTable, aContexts, iSelectedContexts);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return Promise.resolve(aContexts);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The following operations are performed by method openMassEditDialog:
|
|
99
|
+
* => Opens the mass edit dialog.
|
|
100
|
+
* => Implements the save and cancel functionality.
|
|
101
|
+
* => Sets the runtime model to the dialog.
|
|
102
|
+
* => Sets the static model's context to the dialog.
|
|
103
|
+
*
|
|
104
|
+
* @param {sap.ui.mdc.Table} oTable Instance of the table
|
|
105
|
+
* @returns {Promise} A promise that resolves on open of the mass edit dialog.
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
;
|
|
109
|
+
|
|
110
|
+
_proto.openMassEditDialog = function openMassEditDialog(oTable) {
|
|
111
|
+
var oController = this.getView().getController(),
|
|
112
|
+
pContextsForEdit = this.fetchContextsForEdit(oTable);
|
|
113
|
+
return pContextsForEdit.then(this._confirmContexts.bind(this, oTable)).then(function (aContexts) {
|
|
114
|
+
return aContexts && aContexts.length > 0 ? MassEditHelper.createDialog(oTable, aContexts, oController) : Promise.resolve();
|
|
115
|
+
}).then(function (oDialog) {
|
|
116
|
+
if (oDialog) {
|
|
117
|
+
oDialog.open();
|
|
118
|
+
}
|
|
119
|
+
}).catch(function (oError) {
|
|
120
|
+
Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Returns a promise that resolves to the contexts for mass edit.
|
|
125
|
+
* @function
|
|
126
|
+
* @param {sap.ui.mdc.Table} oTable Table for mass edit.
|
|
127
|
+
* @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
|
|
128
|
+
* @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
|
|
129
|
+
* @private
|
|
130
|
+
**/
|
|
131
|
+
;
|
|
132
|
+
|
|
133
|
+
_proto.fetchContextsForEdit = function fetchContextsForEdit(oTable) {
|
|
134
|
+
//To be overridden by the application
|
|
135
|
+
var oInternalModelContext = oTable.getBindingContext("internal"),
|
|
136
|
+
aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
|
|
137
|
+
return Promise.resolve(aSelectedContexts);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
return MassEdit;
|
|
141
|
+
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "getMessageDetailForNonEditable", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getMessageDetailForNonEditable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "openMassEditDialog", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "openMassEditDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchContextsForEdit", [Private, _dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchContextsForEdit"), _class2.prototype)), _class2)) || _class);
|
|
142
|
+
return MassEdit;
|
|
143
|
+
}, false);
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0LnRzIl0sIm5hbWVzIjpbIk1hc3NFZGl0IiwiVUk1Q2xhc3MiLCJDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEiLCJFeHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNIZWFkZXIiLCJnZXRUZXh0Iiwic1JlYXNvbkdyb3VwIiwic1JlYXNvbkRyYWZ0Iiwic1JlYXNvbk5vbkVkaXRhYmxlIiwiX29wZW5Db25maXJtRGlhbG9nIiwib1RhYmxlIiwiYUNvbnRleHRzIiwiaVNlbGVjdGVkQ29udGV4dHMiLCJpVXBkYXRhYmxlQ29udGV4dHMiLCJsZW5ndGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldFZpZXciLCJnZXRNb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwidGhlbiIsInNFZGl0QnV0dG9uIiwic0NhbmNlbEJ1dHRvbiIsImlOb25FZGl0YWJsZSIsInNNZXNzYWdlIiwic1BhdGgiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImJJc0RyYWZ0IiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiYkRpc3BsYXlNb2RlIiwic01lc3NhZ2VEZXRhaWwiLCJNZXNzYWdlQm94Iiwid2FybmluZyIsImRldGFpbHMiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsImNvbnRlbnRXaWR0aCIsIm9uQ2xvc2UiLCJzU2VsZWN0aW9uIiwiYUNvbnRleHRzRm9yRWRpdCIsIkxvZyIsImluZm8iLCJ0b1N0cmluZyIsImNhdGNoIiwiZXJyb3IiLCJfY29uZmlybUNvbnRleHRzIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInBDb250ZXh0c0ZvckVkaXQiLCJmZXRjaENvbnRleHRzRm9yRWRpdCIsImJpbmQiLCJNYXNzRWRpdEhlbHBlciIsImNyZWF0ZURpYWxvZyIsIm9EaWFsb2ciLCJvcGVuIiwib0Vycm9yIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiUHVibGljIiwiRmluYWwiLCJQcml2YXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUVNQSxRLFdBRExDLFFBQVEsQ0FBQywyQ0FBRCxFQUE4Q0MsMkJBQTlDLEMsVUE0SFBDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEM7Ozs7Ozs7OztXQXhIWEMsOEIsR0FGQSx3Q0FFK0JDLGVBRi9CLEVBRWdFO0FBQy9ELFVBQU1DLE9BQU8sR0FBR0QsZUFBZSxDQUFDRSxPQUFoQixDQUF3QiwyQ0FBeEIsQ0FBaEI7QUFBQSxVQUNDQyxZQUFZLEdBQUdILGVBQWUsQ0FBQ0UsT0FBaEIsQ0FBd0IsMkNBQXhCLENBRGhCO0FBQUEsVUFFQ0UsWUFBWSxHQUFHSixlQUFlLENBQUNFLE9BQWhCLENBQXdCLGlEQUF4QixDQUZoQjtBQUFBLFVBR0NHLGtCQUFrQixHQUFHTCxlQUFlLENBQUNFLE9BQWhCLENBQXdCLHdEQUF4QixDQUh0QjtBQUtBLGFBQ0MsZ0JBQ0FELE9BREEsR0FFQSxpQkFGQSxHQUdBLEtBSEEsR0FJQUUsWUFKQSxHQUtBLFFBTEEsR0FNQSxNQU5BLEdBT0EsTUFQQSxHQVFBQyxZQVJBLEdBU0EsT0FUQSxHQVVBLE1BVkEsR0FXQUMsa0JBWEEsR0FZQSxPQVpBLEdBYUEsT0FkRDtBQWdCQSxLOztXQUVEQyxrQixHQUFBLDRCQUFtQkMsTUFBbkIsRUFBa0NDLFNBQWxDLEVBQXdEQyxpQkFBeEQsRUFBbUY7QUFBQTs7QUFDbEYsVUFBTUMsa0JBQWtCLEdBQUcsQ0FBQ0YsU0FBUyxJQUFJLEVBQWQsRUFBa0JHLE1BQTdDO0FBRUEsYUFBTyxJQUFJ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QUFBLFVBQ0NhLGlCQUFpQixHQUFHZCxxQkFBcUIsQ0FBQ0UsV0FBdEIsQ0FBa0MsbUJBQWxDLEtBQTBELEVBRC9FO0FBR0EsYUFBT3BDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQitDLGlCQUFoQixDQUFQO0FBQ0EsSzs7O0lBbElxQkMsbUIsb0ZBQ3JCQyxNLEVBQ0FDLEssaUxBMkZBRCxNLEVBQ0FDLEssdUtBNEJBQyxPO1NBV2F2RSxRIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgTWFzc0VkaXRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFzc0VkaXRIZWxwZXJcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgeyBFeHRlbnNpYmxlLCBGaW5hbCwgUHJpdmF0ZSwgUHVibGljLCBVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIsIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcblxuLyoqXG4gKiBAY2xhc3MgQ29udHJvbGxlciBleHRlbnNpb24gcHJvdmlkaW5nIGhvb2tzIGZvciB0aGUgbWFzcyBlZGl0IGluIGEgdGFibGVcbiAqXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NYXNzRWRpdFxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuTWFzc0VkaXRcIiwgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhKVxuY2xhc3MgTWFzc0VkaXQgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0TWVzc2FnZURldGFpbEZvck5vbkVkaXRhYmxlKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRjb25zdCBzSGVhZGVyID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKSxcblx0XHRcdHNSZWFzb25Hcm91cCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05cIiksXG5cdFx0XHRzUmVhc29uRHJhZnQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRV9ERVRBSUxfUkVBU09OX0RSQUZUXCIpLFxuXHRcdFx0c1JlYXNvbk5vbkVkaXRhYmxlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9OT05fRURJVEFCTEVcIik7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0XCI8cD48c3Ryb25nPlwiICtcblx0XHRcdHNIZWFkZXIgK1xuXHRcdFx0XCI8L3N0cm9uZz48L3A+XFxuXCIgK1xuXHRcdFx0XCI8cD5cIiArXG5cdFx0XHRzUmVhc29uR3JvdXAgK1xuXHRcdFx0XCI8L3A+XFxuXCIgK1xuXHRcdFx0XCI8dWw+XCIgK1xuXHRcdFx0XCI8bGk+XCIgK1xuXHRcdFx0c1JlYXNvbkRyYWZ0ICtcblx0XHRcdFwiPC9saT5cIiArXG5cdFx0XHRcIjxsaT5cIiArXG5cdFx0XHRzUmVhc29uTm9uRWRpdGFibGUgK1xuXHRcdFx0XCI8L2xpPlwiICtcblx0XHRcdFwiPC91bD5cIlxuXHRcdCk7XG5cdH1cblxuXHRfb3BlbkNvbmZpcm1EaWFsb2cob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIGlTZWxlY3RlZENvbnRleHRzOiBudW1iZXIpIHtcblx0XHRjb25zdCBpVXBkYXRhYmxlQ29udGV4dHMgPSAoYUNvbnRleHRzIHx8IFtdKS5sZW5ndGg7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0LnRoZW4ob1Jlc291cmNlQnVuZGxlID0+IHtcblx0XHRcdFx0XHRjb25zdCBzRWRpdEJ1dHRvbiA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFx0XHRcdHNDYW5jZWxCdXR0b24gPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NBTkNFTF9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFx0XHRcdGlOb25FZGl0YWJsZSA9IGlTZWxlY3RlZENvbnRleHRzIC0gaVVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c01lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRVwiLCBbXG5cdFx0XHRcdFx0XHRcdGlOb25FZGl0YWJsZSxcblx0XHRcdFx0XHRcdFx0aVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdGlVcGRhdGFibGVDb250ZXh0c1xuXHRcdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0XHRzUGF0aCA9IG9UYWJsZS5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsID0gb1RhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRiSXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob01ldGFNb2RlbCwgc1BhdGgpLFxuXHRcdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gb1RhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHRzTWVzc2FnZURldGFpbCA9IGJJc0RyYWZ0ICYmIGJEaXNwbGF5TW9kZSAmJiB0aGlzLmdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZShvUmVzb3VyY2VCdW5kbGUpO1xuXG5cdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNNZXNzYWdlLCB7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBzTWVzc2FnZURldGFpbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IFtzRWRpdEJ1dHRvbiwgc0NhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBzRWRpdEJ1dHRvbixcblx0XHRcdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIxMDBweFwiLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc1NlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBhQ29udGV4dHNGb3JFZGl0OiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRpZiAoc1NlbGVjdGlvbiA9PT0gc0VkaXRCdXR0b24pIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuaW5mbyhcIk1hc3MgRWRpdDogQ29uZmlybWVkIHRvIGVkaXQgXCIsIGlVcGRhdGFibGVDb250ZXh0cy50b1N0cmluZygpLCBcIiBzZWxlY3Rpb25zLlwiKTtcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHNGb3JFZGl0ID0gYUNvbnRleHRzO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNTZWxlY3Rpb24gPT09IHNDYW5jZWxCdXR0b24pIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuaW5mbyhcIk1hc3MgRWRpdDogQ2FuY2VsbGVkLlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGFDb250ZXh0c0ZvckVkaXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gYXMgYW55KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRfY29uZmlybUNvbnRleHRzKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRpU2VsZWN0ZWRDb250ZXh0cyA9ICtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgfHwgMDtcblxuXHRcdGFDb250ZXh0cyA9IGFDb250ZXh0cyB8fCBbXTtcblxuXHRcdGlmIChhQ29udGV4dHMubGVuZ3RoICYmIGFDb250ZXh0cy5sZW5ndGggIT09IGlTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb3BlbkNvbmZpcm1EaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIGlTZWxlY3RlZENvbnRleHRzKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhQ29udGV4dHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGJ5IG1ldGhvZCBvcGVuTWFzc0VkaXREaWFsb2c6XG5cdCAqID0+IE9wZW5zIHRoZSBtYXNzIGVkaXQgZGlhbG9nLlxuXHQgKiA9PiBJbXBsZW1lbnRzIHRoZSBzYXZlIGFuZCBjYW5jZWwgZnVuY3Rpb25hbGl0eS5cblx0ICogPT4gU2V0cyB0aGUgcnVudGltZSBtb2RlbCB0byB0aGUgZGlhbG9nLlxuXHQgKiA9PiBTZXRzIHRoZSBzdGF0aWMgbW9kZWwncyBjb250ZXh0IHRvIHRoZSBkaWFsb2cuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5UYWJsZX0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb24gb3BlbiBvZiB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdG9wZW5NYXNzRWRpdERpYWxvZyhvVGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRwQ29udGV4dHNGb3JFZGl0ID0gdGhpcy5mZXRjaENvbnRleHRzRm9yRWRpdChvVGFibGUpO1xuXG5cdFx0cmV0dXJuIHBDb250ZXh0c0ZvckVkaXRcblx0XHRcdC50aGVuKHRoaXMuX2NvbmZpcm1Db250ZXh0cy5iaW5kKHRoaXMsIG9UYWJsZSkpXG5cdFx0XHQudGhlbihmdW5jdGlvbihhQ29udGV4dHM6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gYUNvbnRleHRzICYmIGFDb250ZXh0cy5sZW5ndGggPiAwID8gTWFzc0VkaXRIZWxwZXIuY3JlYXRlRGlhbG9nKG9UYWJsZSwgYUNvbnRleHRzLCBvQ29udHJvbGxlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihvRGlhbG9nPzogYW55KSB7XG5cdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiBtYXNzIGVkaXQgZGlhbG9nIGNyZWF0aW9uLlwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGV4dHMgZm9yIG1hc3MgZWRpdC5cblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5UYWJsZX0gb1RhYmxlIFRhYmxlIGZvciBtYXNzIGVkaXQuXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cmxsZXJleHRlbnNpb25zLk1hc3NFZGl0I2ZldGNoQ29udGV4dHNGb3JFZGl0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2l0aCBhbiBhcnJheSBvZiBjb250ZXh0KHMpIHdoaWNoIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBtYXNzIGVkaXQuXG5cdCAqIEBwcml2YXRlXG5cdCAqKi9cblx0QFByaXZhdGVcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGZldGNoQ29udGV4dHNGb3JFZGl0KG9UYWJsZTogVGFibGUpIHtcblx0XHQvL1RvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInVwZGF0YWJsZUNvbnRleHRzXCIpIHx8IFtdO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFzc0VkaXQ7XG4iXX0=
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
2
|
+
import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
|
|
3
|
+
import MassEditHelper from "sap/fe/core/helpers/MassEditHelper";
|
|
4
|
+
import Log from "sap/base/Log";
|
|
5
|
+
import Table from "sap/ui/mdc/Table";
|
|
6
|
+
import { Extensible, Final, Private, Public, UI5Class } from "sap/fe/core/helpers/ClassSupport";
|
|
7
|
+
import ControllerExtensionMetadata from "sap/fe/core/controllerextensions/ControllerExtensionMetadata";
|
|
8
|
+
import ModelHelper, { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
9
|
+
import MessageBox from "sap/m/MessageBox";
|
|
10
|
+
import ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
11
|
+
import Context from "sap/ui/model/Context";
|
|
12
|
+
import ResourceModel from "sap/ui/model/resource/ResourceModel";
|
|
13
|
+
import PageController from "sap/fe/core/PageController";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @class Controller extension providing hooks for the mass edit in a table
|
|
17
|
+
*
|
|
18
|
+
* @name sap.fe.core.controllerextensions.MassEdit
|
|
19
|
+
* @hideconstructor
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
@UI5Class("sap.fe.core.controllerextensions.MassEdit", ControllerExtensionMetadata)
|
|
23
|
+
class MassEdit extends ControllerExtension {
|
|
24
|
+
@Public
|
|
25
|
+
@Final
|
|
26
|
+
getMessageDetailForNonEditable(oResourceBundle: ResourceBundle) {
|
|
27
|
+
const sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
|
|
28
|
+
sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
|
|
29
|
+
sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
|
|
30
|
+
sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
"<p><strong>" +
|
|
34
|
+
sHeader +
|
|
35
|
+
"</strong></p>\n" +
|
|
36
|
+
"<p>" +
|
|
37
|
+
sReasonGroup +
|
|
38
|
+
"</p>\n" +
|
|
39
|
+
"<ul>" +
|
|
40
|
+
"<li>" +
|
|
41
|
+
sReasonDraft +
|
|
42
|
+
"</li>" +
|
|
43
|
+
"<li>" +
|
|
44
|
+
sReasonNonEditable +
|
|
45
|
+
"</li>" +
|
|
46
|
+
"</ul>"
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_openConfirmDialog(oTable: Table, aContexts: Context[], iSelectedContexts: number) {
|
|
51
|
+
const iUpdatableContexts = (aContexts || []).length;
|
|
52
|
+
|
|
53
|
+
return new Promise(resolve => {
|
|
54
|
+
((this.getView().getModel("sap.fe.i18n") as ResourceModel).getResourceBundle() as Promise<ResourceBundle>)
|
|
55
|
+
.then(oResourceBundle => {
|
|
56
|
+
const sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
|
|
57
|
+
sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
|
|
58
|
+
iNonEditable = iSelectedContexts - iUpdatableContexts,
|
|
59
|
+
sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
|
|
60
|
+
iNonEditable,
|
|
61
|
+
iSelectedContexts,
|
|
62
|
+
iUpdatableContexts
|
|
63
|
+
]),
|
|
64
|
+
sPath = oTable.data("targetCollectionPath"),
|
|
65
|
+
oMetaModel = oTable.getModel().getMetaModel(),
|
|
66
|
+
bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
|
|
67
|
+
bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
|
|
68
|
+
sMessageDetail = bIsDraft && bDisplayMode && this.getMessageDetailForNonEditable(oResourceBundle);
|
|
69
|
+
|
|
70
|
+
MessageBox.warning(sMessage, {
|
|
71
|
+
details: sMessageDetail,
|
|
72
|
+
actions: [sEditButton, sCancelButton],
|
|
73
|
+
emphasizedAction: sEditButton,
|
|
74
|
+
contentWidth: "100px",
|
|
75
|
+
onClose: function(sSelection: string) {
|
|
76
|
+
let aContextsForEdit: any[] = [];
|
|
77
|
+
if (sSelection === sEditButton) {
|
|
78
|
+
Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts.toString(), " selections.");
|
|
79
|
+
aContextsForEdit = aContexts;
|
|
80
|
+
} else if (sSelection === sCancelButton) {
|
|
81
|
+
Log.info("Mass Edit: Cancelled.");
|
|
82
|
+
}
|
|
83
|
+
resolve(aContextsForEdit);
|
|
84
|
+
}
|
|
85
|
+
} as any);
|
|
86
|
+
})
|
|
87
|
+
.catch(function(error) {
|
|
88
|
+
Log.error(error);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
_confirmContexts(oTable: Table, aContexts: Context[]) {
|
|
94
|
+
const oInternalModelContext = oTable.getBindingContext("internal") as InternalModelContext,
|
|
95
|
+
iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
|
|
96
|
+
|
|
97
|
+
aContexts = aContexts || [];
|
|
98
|
+
|
|
99
|
+
if (aContexts.length && aContexts.length !== iSelectedContexts) {
|
|
100
|
+
return this._openConfirmDialog(oTable, aContexts, iSelectedContexts);
|
|
101
|
+
}
|
|
102
|
+
return Promise.resolve(aContexts);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The following operations are performed by method openMassEditDialog:
|
|
107
|
+
* => Opens the mass edit dialog.
|
|
108
|
+
* => Implements the save and cancel functionality.
|
|
109
|
+
* => Sets the runtime model to the dialog.
|
|
110
|
+
* => Sets the static model's context to the dialog.
|
|
111
|
+
*
|
|
112
|
+
* @param {sap.ui.mdc.Table} oTable Instance of the table
|
|
113
|
+
* @returns {Promise} A promise that resolves on open of the mass edit dialog.
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
@Public
|
|
117
|
+
@Final
|
|
118
|
+
openMassEditDialog(oTable: Table) {
|
|
119
|
+
const oController = this.getView().getController() as PageController,
|
|
120
|
+
pContextsForEdit = this.fetchContextsForEdit(oTable);
|
|
121
|
+
|
|
122
|
+
return pContextsForEdit
|
|
123
|
+
.then(this._confirmContexts.bind(this, oTable))
|
|
124
|
+
.then(function(aContexts: any) {
|
|
125
|
+
return aContexts && aContexts.length > 0 ? MassEditHelper.createDialog(oTable, aContexts, oController) : Promise.resolve();
|
|
126
|
+
})
|
|
127
|
+
.then(function(oDialog?: any) {
|
|
128
|
+
if (oDialog) {
|
|
129
|
+
oDialog.open();
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
.catch(function(oError: any) {
|
|
133
|
+
Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Returns a promise that resolves to the contexts for mass edit.
|
|
139
|
+
* @function
|
|
140
|
+
* @param {sap.ui.mdc.Table} oTable Table for mass edit.
|
|
141
|
+
* @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
|
|
142
|
+
* @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
|
|
143
|
+
* @private
|
|
144
|
+
**/
|
|
145
|
+
@Private
|
|
146
|
+
@Extensible(OverrideExecution.After)
|
|
147
|
+
fetchContextsForEdit(oTable: Table) {
|
|
148
|
+
//To be overridden by the application
|
|
149
|
+
const oInternalModelContext = oTable.getBindingContext("internal") as InternalModelContext,
|
|
150
|
+
aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
|
|
151
|
+
|
|
152
|
+
return Promise.resolve(aSelectedContexts);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export default MassEdit;
|