@sapui5/sap.fe.core 1.100.0 → 1.102.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 +4 -4
- package/src/sap/fe/core/.library +2 -3
- package/src/sap/fe/core/AppComponent.js +23 -30
- package/src/sap/fe/core/AppComponent.ts +35 -40
- package/src/sap/fe/core/AppStateHandler.js +8 -8
- package/src/sap/fe/core/AppStateHandler.ts +11 -11
- package/src/sap/fe/core/BaseController.js +9 -9
- package/src/sap/fe/core/BaseController.ts +3 -4
- package/src/sap/fe/core/CommonUtils.js +122 -101
- package/src/sap/fe/core/CommonUtils.ts +239 -193
- package/src/sap/fe/core/ExtensionAPI.js +12 -13
- package/src/sap/fe/core/ExtensionAPI.ts +21 -31
- package/src/sap/fe/core/PageController.js +19 -13
- package/src/sap/fe/core/PageController.ts +40 -34
- package/src/sap/fe/core/TemplateComponent.js +198 -123
- package/src/sap/fe/core/TemplateComponent.ts +109 -121
- package/src/sap/fe/core/TemplateModel.js +7 -9
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
- package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
- package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
- package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
- package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
- package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +34 -16
- package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
- package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
- package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/Any.js +28 -0
- package/src/sap/fe/core/controls/Any.ts +30 -0
- package/src/sap/fe/core/controls/CommandExecution.js +50 -16
- package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
- package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
- package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
- package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
- package/src/sap/fe/core/controls/FileWrapper.js +360 -0
- package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
- package/src/sap/fe/core/controls/FilterBar.js +154 -119
- package/src/sap/fe/core/controls/FilterBar.ts +128 -123
- package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
- package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
- package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
- package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
- package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
- package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
- package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
- package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
- package/src/sap/fe/core/fpm/Component.js +46 -17
- package/src/sap/fe/core/fpm/Component.ts +11 -16
- package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
- package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
- package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
- package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
- package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
- package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
- package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
- package/src/sap/fe/core/library.js +13 -5
- package/src/sap/fe/core/library.ts +26 -17
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
- package/src/sap/fe/core/messagebundle.properties +135 -180
- package/src/sap/fe/core/messagebundle_ar.properties +31 -64
- package/src/sap/fe/core/messagebundle_bg.properties +31 -64
- package/src/sap/fe/core/messagebundle_ca.properties +31 -64
- package/src/sap/fe/core/messagebundle_cs.properties +31 -64
- package/src/sap/fe/core/messagebundle_cy.properties +32 -65
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +29 -62
- package/src/sap/fe/core/messagebundle_el.properties +32 -65
- package/src/sap/fe/core/messagebundle_en.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
- package/src/sap/fe/core/messagebundle_es.properties +31 -64
- package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
- package/src/sap/fe/core/messagebundle_et.properties +31 -64
- package/src/sap/fe/core/messagebundle_fi.properties +29 -62
- package/src/sap/fe/core/messagebundle_fr.properties +36 -69
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
- package/src/sap/fe/core/messagebundle_hi.properties +29 -62
- package/src/sap/fe/core/messagebundle_hr.properties +32 -65
- package/src/sap/fe/core/messagebundle_hu.properties +30 -63
- package/src/sap/fe/core/messagebundle_id.properties +32 -65
- package/src/sap/fe/core/messagebundle_it.properties +31 -64
- package/src/sap/fe/core/messagebundle_iw.properties +31 -64
- package/src/sap/fe/core/messagebundle_ja.properties +29 -62
- package/src/sap/fe/core/messagebundle_kk.properties +31 -64
- package/src/sap/fe/core/messagebundle_ko.properties +31 -64
- package/src/sap/fe/core/messagebundle_lt.properties +31 -64
- package/src/sap/fe/core/messagebundle_lv.properties +32 -65
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +31 -64
- package/src/sap/fe/core/messagebundle_pl.properties +34 -67
- package/src/sap/fe/core/messagebundle_pt.properties +32 -65
- package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
- package/src/sap/fe/core/messagebundle_ro.properties +33 -66
- package/src/sap/fe/core/messagebundle_ru.properties +33 -66
- package/src/sap/fe/core/messagebundle_sh.properties +31 -64
- package/src/sap/fe/core/messagebundle_sk.properties +31 -64
- package/src/sap/fe/core/messagebundle_sl.properties +29 -62
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +31 -64
- package/src/sap/fe/core/messagebundle_tr.properties +31 -64
- package/src/sap/fe/core/messagebundle_uk.properties +32 -65
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
- package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
- package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
- package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
- package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +0 -3
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
- package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
- package/src/sap/fe/core/templating/UIFormatters.js +133 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +26 -8
- package/src/sap/fe/core/type/Email.ts +8 -7
- package/src/sap/fe/core/AnnotationHelper.js +0 -312
- package/src/sap/fe/core/AnnotationHelper.ts +0 -315
- package/src/sap/fe/core/RouterProxy.js +0 -926
- package/src/sap/fe/core/TransactionHelper.js +0 -1562
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
- package/src/sap/fe/core/actions/draft.js +0 -523
- package/src/sap/fe/core/actions/messageHandling.js +0 -567
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -2,115 +2,175 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/ui/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/model/json/JSONModel"], function (Log, Fragment, XMLPreprocessor, XMLTemplateProcessor, JSONModel) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
|
|
10
|
+
var DraftDataLossOptions;
|
|
11
|
+
|
|
12
|
+
(function (DraftDataLossOptions) {
|
|
13
|
+
DraftDataLossOptions["Save"] = "draftDataLossOptionSave";
|
|
14
|
+
DraftDataLossOptions["Keep"] = "draftDataLossOptionKeep";
|
|
15
|
+
DraftDataLossOptions["Discard"] = "draftDataLossOptionDiscard";
|
|
16
|
+
})(DraftDataLossOptions || (DraftDataLossOptions = {}));
|
|
17
|
+
|
|
10
18
|
var fnOnDataLossConfirmed;
|
|
11
19
|
var fnOnDataLossCancel;
|
|
12
20
|
|
|
13
|
-
function fnDataLossConfirmation(
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
function fnDataLossConfirmation(onDataLossOk, onDataLossCancel, controller, skipBindingToView) {
|
|
22
|
+
// Open the data loss popup and after processing the selected function finally call
|
|
23
|
+
// onDataLossConfirmed which resolves the promise and leads to processing of the originally
|
|
24
|
+
// triggered action like e.g. a back navigation
|
|
25
|
+
var dataLossPopup;
|
|
26
|
+
fnOnDataLossConfirmed = onDataLossOk;
|
|
16
27
|
fnOnDataLossCancel = onDataLossCancel;
|
|
17
|
-
var
|
|
18
|
-
var
|
|
28
|
+
var fragmentName = "sap.fe.core.controls.DataLossOrDraftDiscard.DataLossDraft";
|
|
29
|
+
var view = controller.getView();
|
|
19
30
|
var fragmentController = {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
})
|
|
31
|
+
onDataLossOk: function () {
|
|
32
|
+
var selectedKey = getSelectedKey(dataLossPopup);
|
|
33
|
+
|
|
34
|
+
if (selectedKey === DraftDataLossOptions.Save) {
|
|
35
|
+
saveDocument(controller).then(fnOnDataLossConfirmed).catch(function (error) {
|
|
36
|
+
Log.error("Error while saving document", error);
|
|
37
|
+
});
|
|
38
|
+
dataLossPopup.close();
|
|
39
|
+
} else if (selectedKey === DraftDataLossOptions.Keep) {
|
|
40
|
+
fnOnDataLossConfirmed();
|
|
41
|
+
dataLossPopup.close();
|
|
42
|
+
} else if (selectedKey === DraftDataLossOptions.Discard) {
|
|
43
|
+
discardDraft(controller, skipBindingToView).then(fnOnDataLossConfirmed).catch(function (error) {
|
|
44
|
+
Log.error("Error while discarding draft", error);
|
|
45
|
+
});
|
|
46
|
+
dataLossPopup.close();
|
|
47
|
+
}
|
|
29
48
|
},
|
|
30
49
|
onDataLossCancel: function () {
|
|
31
|
-
oDataLossPopup.close();
|
|
32
50
|
fnOnDataLossCancel();
|
|
51
|
+
dataLossPopup.close();
|
|
52
|
+
},
|
|
53
|
+
setDataLossPopup: function (dataLossPopup) {
|
|
54
|
+
controller.dataLossPopup = dataLossPopup;
|
|
33
55
|
}
|
|
34
56
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
var oThis = new JSONModel({
|
|
41
|
-
id: oView.getId()
|
|
42
|
-
}),
|
|
43
|
-
oPreprocessorSettings = {
|
|
57
|
+
var i18nModel = view.getModel("sap.fe.i18n");
|
|
58
|
+
var localThisModel = new JSONModel({}),
|
|
59
|
+
preprocessorSettings = {
|
|
44
60
|
bindingContexts: {
|
|
45
|
-
"this":
|
|
61
|
+
"this": localThisModel.createBindingContext("/")
|
|
46
62
|
},
|
|
47
63
|
models: {
|
|
48
|
-
"this":
|
|
49
|
-
"
|
|
64
|
+
"this": localThisModel,
|
|
65
|
+
"i18n": i18nModel
|
|
50
66
|
}
|
|
51
67
|
};
|
|
52
|
-
var oPopoverFragment = XMLTemplateProcessor.loadTemplate(sFragmentname, "fragment");
|
|
53
68
|
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
69
|
+
if (controller.dataLossPopup) {
|
|
70
|
+
dataLossPopup = controller.dataLossPopup;
|
|
71
|
+
dataLossPopup.open();
|
|
72
|
+
selectAndFocusFirstEntry(dataLossPopup);
|
|
57
73
|
} else {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
var dialogFragment = XMLTemplateProcessor.loadTemplate(fragmentName, "fragment");
|
|
75
|
+
Promise.resolve(XMLPreprocessor.process(dialogFragment, {
|
|
76
|
+
name: fragmentName
|
|
77
|
+
}, preprocessorSettings)).then(function (fragment) {
|
|
61
78
|
return Fragment.load({
|
|
62
|
-
definition:
|
|
79
|
+
definition: fragment,
|
|
63
80
|
controller: fragmentController
|
|
64
81
|
});
|
|
65
|
-
}).then(function (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
Log.error("Error while opening the Discard Dialog fragment", oError);
|
|
82
|
+
}).then(function (popup) {
|
|
83
|
+
dataLossPopup = popup;
|
|
84
|
+
popup.attachAfterOpen(function () {
|
|
85
|
+
selectAndFocusFirstEntry(dataLossPopup);
|
|
86
|
+
});
|
|
87
|
+
view.addDependent(dataLossPopup);
|
|
88
|
+
dataLossPopup.open();
|
|
89
|
+
fragmentController.setDataLossPopup(dataLossPopup);
|
|
90
|
+
}).catch(function (error) {
|
|
91
|
+
Log.error("Error while opening the Discard Dialog fragment", error);
|
|
76
92
|
});
|
|
77
93
|
}
|
|
78
94
|
}
|
|
79
95
|
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
var oRet = fnProcessFunction(oContext);
|
|
88
|
-
resolve(oRet);
|
|
96
|
+
function performAfterDiscardorKeepDraft(processFunctionOnDatalossOk, processFunctionOnDatalossCancel, controller, skipBindingToView) {
|
|
97
|
+
// Depending on if the user closed the data loss popup with Ok or Cancel,
|
|
98
|
+
// execute the provided follow-up function and resolve or reject the promise
|
|
99
|
+
return new Promise(function (resolve, reject) {
|
|
100
|
+
var dataLossPopupOk = function (context) {
|
|
101
|
+
var returnValue = processFunctionOnDatalossOk(context);
|
|
102
|
+
resolve(returnValue);
|
|
89
103
|
};
|
|
90
104
|
|
|
91
|
-
var
|
|
92
|
-
|
|
105
|
+
var dataLossPopupCancel = function () {
|
|
106
|
+
processFunctionOnDatalossCancel();
|
|
93
107
|
reject();
|
|
94
108
|
};
|
|
95
109
|
|
|
96
|
-
|
|
110
|
+
fnDataLossConfirmation(dataLossPopupOk, dataLossPopupCancel, controller, skipBindingToView);
|
|
97
111
|
});
|
|
98
|
-
return oRet;
|
|
99
112
|
}
|
|
100
113
|
|
|
101
114
|
_exports.performAfterDiscardorKeepDraft = performAfterDiscardorKeepDraft;
|
|
102
115
|
|
|
103
|
-
function discardDraft(
|
|
104
|
-
var
|
|
105
|
-
var
|
|
116
|
+
function discardDraft(controller, skipBindingToView) {
|
|
117
|
+
var context = controller.getView().getBindingContext();
|
|
118
|
+
var params = {
|
|
106
119
|
skipBackNavigation: true,
|
|
107
120
|
skipDiscardPopover: true,
|
|
108
|
-
skipBindingToView:
|
|
121
|
+
skipBindingToView: skipBindingToView !== undefined ? skipBindingToView : true
|
|
109
122
|
};
|
|
110
|
-
return
|
|
123
|
+
return controller.editFlow.cancelDocument(context, params);
|
|
111
124
|
}
|
|
112
125
|
|
|
113
126
|
_exports.discardDraft = discardDraft;
|
|
114
|
-
|
|
127
|
+
|
|
128
|
+
function saveDocument(controller) {
|
|
129
|
+
var context = controller.getView().getBindingContext(); // We check if we are on the OP and then call the internal _saveDocument from the OP controller
|
|
130
|
+
// since here some special handling is done for creationRow before editFlow.saveDocument is called.
|
|
131
|
+
// In case of a custom controller we directly call saveDocument from the editFlow
|
|
132
|
+
|
|
133
|
+
if (controller.isA("sap.fe.templates.ObjectPage.ObjectPageController")) {
|
|
134
|
+
return controller._saveDocument(context);
|
|
135
|
+
} else {
|
|
136
|
+
return controller.editFlow.saveDocument(context);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
_exports.saveDocument = saveDocument;
|
|
141
|
+
|
|
142
|
+
function getSelectedKey(dataLossPopup) {
|
|
143
|
+
// For not using control IDs we introduced customData in the fragment and
|
|
144
|
+
// use it here for finding the correct list in the dialog and for
|
|
145
|
+
// determining the selected option from the list
|
|
146
|
+
var dataLossOptionsList = dataLossPopup.getContent().find(function (element) {
|
|
147
|
+
return element.data("listIdentifier") === "draftDataLossOptionsList";
|
|
148
|
+
});
|
|
149
|
+
return dataLossOptionsList.getSelectedItem().data("itemKey");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
_exports.getSelectedKey = getSelectedKey;
|
|
153
|
+
|
|
154
|
+
function selectAndFocusFirstEntry(dataLossPopup) {
|
|
155
|
+
// For not using control IDs we introduced customData in the fragment and
|
|
156
|
+
// use it here for finding the correct list in the dialog.
|
|
157
|
+
var dataLossOptionsList = dataLossPopup.getContent().find(function (element) {
|
|
158
|
+
return element.data("listIdentifier") === "draftDataLossOptionsList";
|
|
159
|
+
}); // Preselect the first entry in the list
|
|
160
|
+
|
|
161
|
+
var firstListItemOption = dataLossOptionsList.getItems()[0];
|
|
162
|
+
dataLossOptionsList.setSelectedItem(firstListItemOption); // By default set the focus on the first button of the dialog
|
|
163
|
+
|
|
164
|
+
dataLossPopup.getButtons()[0].focus();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
_exports.selectAndFocusFirstEntry = selectAndFocusFirstEntry;
|
|
168
|
+
return {
|
|
169
|
+
performAfterDiscardorKeepDraft: performAfterDiscardorKeepDraft,
|
|
170
|
+
discardDraft: discardDraft,
|
|
171
|
+
saveDocument: saveDocument,
|
|
172
|
+
getSelectedKey: getSelectedKey,
|
|
173
|
+
selectAndFocusFirstEntry: selectAndFocusFirstEntry
|
|
174
|
+
};
|
|
115
175
|
}, false);
|
|
116
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFMb3NzT3JEcmFmdERpc2NhcmRIYW5kbGVyLnRzIl0sIm5hbWVzIjpbImZuT25EYXRhTG9zc0NvbmZpcm1lZCIsImZuT25EYXRhTG9zc0NhbmNlbCIsImZuRGF0YUxvc3NDb25maXJtYXRpb24iLCJvbkRhdGFMb3NzQ29uZmlybWVkIiwib25EYXRhTG9zc0NhbmNlbCIsIm9Db250cm9sbGVyIiwiYlNraXBCaW5kaW5nVG9WaWV3Iiwib0RhdGFMb3NzUG9wdXAiLCJzRnJhZ21lbnRuYW1lIiwib1ZpZXciLCJnZXRWaWV3IiwiZnJhZ21lbnRDb250cm9sbGVyIiwib25EYXRhTG9zc0tlZXBEcmFmdCIsImNsb3NlIiwib25EYXRhTG9zc0Rpc2NhcmREcmFmdCIsImRpc2NhcmREcmFmdCIsInRoZW4iLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwic2V0RGF0YUxvc3NQb3B1cCIsImRhdGFMb3NzUG9wdXAiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiZ2V0SWQiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm1vZGVscyIsImdldE1vZGVsIiwib1BvcG92ZXJGcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib3BlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJvRnJhZ21lbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIm9Qb3B1cCIsImFkZERlcGVuZGVudCIsIm9Nb2RlbCIsInNldE1vZGVsIiwib2kxOG5Nb2RlbCIsImZuUGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0SW1wbCIsImZuUG9zaXRpdmUiLCJmbk5lZ2F0aXZlIiwicGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IiwiZm5Qcm9jZXNzRnVuY3Rpb24iLCJmbkNhbmNlbEZ1bmN0aW9uIiwib1JldCIsInJlamVjdCIsIm9Db250ZXh0Iiwib1BhcmFtc0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm1QYXJhbXMiLCJza2lwQmFja05hdmlnYXRpb24iLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJza2lwQmluZGluZ1RvVmlldyIsInVuZGVmaW5lZCIsImVkaXRGbG93IiwiY2FuY2VsRG9jdW1lbnQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUtBLE1BQUlBLHFCQUFKO0FBQ0EsTUFBSUMsa0JBQUo7O0FBQ0EsV0FBU0Msc0JBQVQsQ0FBZ0NDLG1CQUFoQyxFQUEwREMsZ0JBQTFELEVBQWlGQyxXQUFqRixFQUFtR0Msa0JBQW5HLEVBQTRIO0FBQzNILFFBQUlDLGNBQUo7QUFDQVAsSUFBQUEscUJBQXFCLEdBQUdHLG1CQUF4QjtBQUNBRixJQUFBQSxrQkFBa0IsR0FBR0csZ0JBQXJCO0FBQ0EsUUFBTUksYUFBYSxHQUFHLDJEQUF0QjtBQUNBLFFBQU1DLEtBQUssR0FBR0osV0FBVyxDQUFDSyxPQUFaLEVBQWQ7QUFDQSxRQUFNQyxrQkFBdUIsR0FBRztBQUMvQkMsTUFBQUEsbUJBQW1CLEVBQUUsWUFBVztBQUMvQkwsUUFBQUEsY0FBYyxDQUFDTSxLQUFmO0FBQ0FiLFFBQUFBLHFCQUFxQjtBQUNyQixPQUo4QjtBQUsvQmMsTUFBQUEsc0JBQXNCLEVBQUUsWUFBVztBQUNsQ1AsUUFBQUEsY0FBYyxDQUFDTSxLQUFmO0FBQ0FFLFFBQUFBLFlBQVksQ0FBQ1YsV0FBRCxFQUFjQyxrQkFBZCxDQUFaLENBQ0VVLElBREYsQ0FDT2hCLHFCQURQLEVBRUVpQixLQUZGLENBRVEsVUFBU0MsTUFBVCxFQUFzQjtBQUM1QkMsVUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsOEJBQVYsRUFBMENGLE1BQTFDO0FBQ0EsU0FKRjtBQUtBLE9BWjhCO0FBYS9CZCxNQUFBQSxnQkFBZ0IsRUFBRSxZQUFXO0FBQzVCRyxRQUFBQSxjQUFjLENBQUNNLEtBQWY7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SSxHQUFHRixpQkFBaUIsQ0FBQ0ksUUFBRCxDQUE5QjtBQUNBdEIsUUFBQUEsT0FBTyxDQUFDb0IsSUFBRCxDQUFQO0FBQ0EsT0FIRDs7QUFJQSxVQUFNSixVQUFVLEdBQUcsWUFBVztBQUM3QkcsUUFBQUEsZ0JBQWdCO0FBQ2hCRSxRQUFBQSxNQUFNO0FBQ04sT0FIRDs7QUFJQVAsTUFBQUEsb0NBQW9DLENBQUNDLFVBQUQsRUFBYUMsVUFBYixFQUF5QmhELFdBQXpCLEVBQXNDQyxrQkFBdEMsQ0FBcEM7QUFDQSxLQVZZLENBQWI7QUFXQSxXQUFPbUQsSUFBUDtBQUNBOzs7O0FBQ00sV0FBUzFDLFlBQVQsQ0FBc0JWLFdBQXRCLEVBQXdDQyxrQkFBeEMsRUFBaUU7QUFDdkUsUUFBTXNELGNBQWMsR0FBR3ZELFdBQVcsQ0FBQ0ssT0FBWixHQUFzQm1ELGlCQUF0QixFQUF2QjtBQUNBLFFBQU1DLE9BQU8sR0FBRztBQUNmQyxNQUFBQSxrQkFBa0IsRUFBRSxJQURMO0FBRWZDLE1BQUFBLGtCQUFrQixFQUFFLElBRkw7QUFHZkMsTUFBQUEsaUJBQWlCLEVBQUUzRCxrQkFBa0IsS0FBSzRELFNBQXZCLEdBQW1DNUQsa0JBQW5DLEdBQXdEO0FBSDVELEtBQWhCO0FBTUEsV0FBT0QsV0FBVyxDQUFDOEQsUUFBWixDQUFxQkMsY0FBckIsQ0FBb0NSLGNBQXBDLEVBQW9ERSxPQUFwRCxDQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuXG5sZXQgZm5PbkRhdGFMb3NzQ29uZmlybWVkOiBGdW5jdGlvbjtcbmxldCBmbk9uRGF0YUxvc3NDYW5jZWw6IEZ1bmN0aW9uO1xuZnVuY3Rpb24gZm5EYXRhTG9zc0NvbmZpcm1hdGlvbihvbkRhdGFMb3NzQ29uZmlybWVkOiBhbnksIG9uRGF0YUxvc3NDYW5jZWw6IGFueSwgb0NvbnRyb2xsZXI6IGFueSwgYlNraXBCaW5kaW5nVG9WaWV3OiBhbnkpIHtcblx0bGV0IG9EYXRhTG9zc1BvcHVwOiBQb3B1cDtcblx0Zm5PbkRhdGFMb3NzQ29uZmlybWVkID0gb25EYXRhTG9zc0NvbmZpcm1lZDtcblx0Zm5PbkRhdGFMb3NzQ2FuY2VsID0gb25EYXRhTG9zc0NhbmNlbDtcblx0Y29uc3Qgc0ZyYWdtZW50bmFtZSA9IFwic2FwLmZlLmNvcmUuY29udHJvbHMuRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC5EYXRhTG9zc0RyYWZ0XCI7XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBmcmFnbWVudENvbnRyb2xsZXI6IGFueSA9IHtcblx0XHRvbkRhdGFMb3NzS2VlcERyYWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdG9EYXRhTG9zc1BvcHVwLmNsb3NlKCk7XG5cdFx0XHRmbk9uRGF0YUxvc3NDb25maXJtZWQoKTtcblx0XHR9LFxuXHRcdG9uRGF0YUxvc3NEaXNjYXJkRHJhZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0b0RhdGFMb3NzUG9wdXAuY2xvc2UoKTtcblx0XHRcdGRpc2NhcmREcmFmdChvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3KVxuXHRcdFx0XHQudGhlbihmbk9uRGF0YUxvc3NDb25maXJtZWQpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRpc2NhcmRpbmcgZHJhZnRcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblx0XHRvbkRhdGFMb3NzQ2FuY2VsOiBmdW5jdGlvbigpIHtcblx0XHRcdG9EYXRhTG9zc1BvcHVwLmNsb3NlKCk7XG5cdFx0XHRmbk9uRGF0YUxvc3NDYW5jZWwoKTtcblx0XHR9XG5cdH07XG5cdGZyYWdtZW50Q29udHJvbGxlci5zZXREYXRhTG9zc1BvcHVwID0gZnVuY3Rpb24ob0RhdGFMb3NzUG9wdXA6IFBvcHVwKSB7XG5cdFx0b0NvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cCA9IG9EYXRhTG9zc1BvcHVwO1xuXHR9O1xuXG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogb1ZpZXcuZ2V0SWQoKVxuXHRcdH0pLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcInRoaXNcIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFwidGhpc1wiOiBvVGhpcyxcblx0XHRcdFx0XCJ0aGlzLmkxOG5cIjogb1ZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0fVxuXHRcdH07XG5cdGNvbnN0IG9Qb3BvdmVyRnJhZ21lbnQgPSBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50bmFtZSwgXCJmcmFnbWVudFwiKTtcblxuXHRpZiAob0NvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cCkge1xuXHRcdG9EYXRhTG9zc1BvcHVwID0gb0NvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cDtcblx0XHRvRGF0YUxvc3NQb3B1cC5vcGVuKCk7XG5cdH0gZWxzZSB7XG5cdFx0UHJvbWlzZS5yZXNvbHZlKFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9Qb3BvdmVyRnJhZ21lbnQsIHsgbmFtZTogc0ZyYWdtZW50bmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24ob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoeyBkZWZpbml0aW9uOiBvRnJhZ21lbnQsIGNvbnRyb2xsZXI6IGZyYWdtZW50Q29udHJvbGxlciB9KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihvUG9wdXA6IGFueSkge1xuXHRcdFx0XHRvRGF0YUxvc3NQb3B1cCA9IG9Qb3B1cDtcblx0XHRcdFx0b1ZpZXcuYWRkRGVwZW5kZW50KG9EYXRhTG9zc1BvcHVwKTtcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdFx0XHRvRGF0YUxvc3NQb3B1cC5zZXRNb2RlbChvTW9kZWwsIFwiZGF0YUxvc3NcIik7XG5cdFx0XHRcdGNvbnN0IG9pMThuTW9kZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKTtcblx0XHRcdFx0b0RhdGFMb3NzUG9wdXAuc2V0TW9kZWwob2kxOG5Nb2RlbCwgXCJpMThuXCIpO1xuXHRcdFx0XHRvRGF0YUxvc3NQb3B1cC5vcGVuKCk7XG5cdFx0XHRcdGZyYWdtZW50Q29udHJvbGxlci5zZXREYXRhTG9zc1BvcHVwKG9EYXRhTG9zc1BvcHVwKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgb3BlbmluZyB0aGUgRGlzY2FyZCBEaWFsb2cgZnJhZ21lbnRcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBmblBlcmZvcm1BZnRlckRpc2NhcmRvcktlZXBEcmFmdEltcGwoZm5Qb3NpdGl2ZTogYW55LCBmbk5lZ2F0aXZlOiBhbnksIG9Db250cm9sbGVyOiBhbnksIGJTa2lwQmluZGluZ1RvVmlldzogYW55KSB7XG5cdGZuRGF0YUxvc3NDb25maXJtYXRpb24oZm5Qb3NpdGl2ZSwgZm5OZWdhdGl2ZSwgb0NvbnRyb2xsZXIsIGJTa2lwQmluZGluZ1RvVmlldyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0KGZuUHJvY2Vzc0Z1bmN0aW9uOiBhbnksIGZuQ2FuY2VsRnVuY3Rpb246IGFueSwgb0NvbnRyb2xsZXI6IGFueSwgYlNraXBCaW5kaW5nVG9WaWV3OiBhbnkpIHtcblx0Y29uc3Qgb1JldCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBmblBvc2l0aXZlID0gZnVuY3Rpb24ob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1JldCA9IGZuUHJvY2Vzc0Z1bmN0aW9uKG9Db250ZXh0KTtcblx0XHRcdHJlc29sdmUob1JldCk7XG5cdFx0fTtcblx0XHRjb25zdCBmbk5lZ2F0aXZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRmbkNhbmNlbEZ1bmN0aW9uKCk7XG5cdFx0XHRyZWplY3QoKTtcblx0XHR9O1xuXHRcdGZuUGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0SW1wbChmblBvc2l0aXZlLCBmbk5lZ2F0aXZlLCBvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3KTtcblx0fSk7XG5cdHJldHVybiBvUmV0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpc2NhcmREcmFmdChvQ29udHJvbGxlcjogYW55LCBiU2tpcEJpbmRpbmdUb1ZpZXc6IGFueSkge1xuXHRjb25zdCBvUGFyYW1zQ29udGV4dCA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBtUGFyYW1zID0ge1xuXHRcdHNraXBCYWNrTmF2aWdhdGlvbjogdHJ1ZSxcblx0XHRza2lwRGlzY2FyZFBvcG92ZXI6IHRydWUsXG5cdFx0c2tpcEJpbmRpbmdUb1ZpZXc6IGJTa2lwQmluZGluZ1RvVmlldyAhPT0gdW5kZWZpbmVkID8gYlNraXBCaW5kaW5nVG9WaWV3IDogdHJ1ZVxuXHR9O1xuXG5cdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvUGFyYW1zQ29udGV4dCwgbVBhcmFtcyk7XG59XG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFMb3NzT3JEcmFmdERpc2NhcmRIYW5kbGVyLnRzIl0sIm5hbWVzIjpbIkRyYWZ0RGF0YUxvc3NPcHRpb25zIiwiZm5PbkRhdGFMb3NzQ29uZmlybWVkIiwiZm5PbkRhdGFMb3NzQ2FuY2VsIiwiZm5EYXRhTG9zc0NvbmZpcm1hdGlvbiIsIm9uRGF0YUxvc3NPayIsIm9uRGF0YUxvc3NDYW5jZWwiLCJjb250cm9sbGVyIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJkYXRhTG9zc1BvcHVwIiwiZnJhZ21lbnROYW1lIiwidmlldyIsImdldFZpZXciLCJmcmFnbWVudENvbnRyb2xsZXIiLCJzZWxlY3RlZEtleSIsImdldFNlbGVjdGVkS2V5IiwiU2F2ZSIsInNhdmVEb2N1bWVudCIsInRoZW4iLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiY2xvc2UiLCJLZWVwIiwiRGlzY2FyZCIsImRpc2NhcmREcmFmdCIsInNldERhdGFMb3NzUG9wdXAiLCJpMThuTW9kZWwiLCJnZXRNb2RlbCIsImxvY2FsVGhpc01vZGVsIiwiSlNPTk1vZGVsIiwicHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm1vZGVscyIsIm9wZW4iLCJzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkiLCJkaWFsb2dGcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwibmFtZSIsImZyYWdtZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsInBvcHVwIiwiYXR0YWNoQWZ0ZXJPcGVuIiwiYWRkRGVwZW5kZW50IiwicGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IiwicHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc09rIiwicHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc0NhbmNlbCIsInJlamVjdCIsImRhdGFMb3NzUG9wdXBPayIsImNvbnRleHQiLCJyZXR1cm5WYWx1ZSIsImRhdGFMb3NzUG9wdXBDYW5jZWwiLCJnZXRCaW5kaW5nQ29udGV4dCIsInBhcmFtcyIsInNraXBCYWNrTmF2aWdhdGlvbiIsInNraXBEaXNjYXJkUG9wb3ZlciIsInVuZGVmaW5lZCIsImVkaXRGbG93IiwiY2FuY2VsRG9jdW1lbnQiLCJpc0EiLCJfc2F2ZURvY3VtZW50IiwiZGF0YUxvc3NPcHRpb25zTGlzdCIsImdldENvbnRlbnQiLCJmaW5kIiwiZWxlbWVudCIsImRhdGEiLCJnZXRTZWxlY3RlZEl0ZW0iLCJmaXJzdExpc3RJdGVtT3B0aW9uIiwiZ2V0SXRlbXMiLCJzZXRTZWxlY3RlZEl0ZW0iLCJnZXRCdXR0b25zIiwiZm9jdXMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztNQU9LQSxvQjs7YUFBQUEsb0I7QUFBQUEsSUFBQUEsb0I7QUFBQUEsSUFBQUEsb0I7QUFBQUEsSUFBQUEsb0I7S0FBQUEsb0IsS0FBQUEsb0I7O0FBTUwsTUFBSUMscUJBQUo7QUFDQSxNQUFJQyxrQkFBSjs7QUFDQSxXQUFTQyxzQkFBVCxDQUFnQ0MsWUFBaEMsRUFBbURDLGdCQUFuRCxFQUEwRUMsVUFBMUUsRUFBMkZDLGlCQUEzRixFQUFtSDtBQUNsSDtBQUNBO0FBQ0E7QUFDQSxRQUFJQyxhQUFKO0FBQ0FQLElBQUFBLHFCQUFxQixHQUFHRyxZQUF4QjtBQUNBRixJQUFBQSxrQkFBa0IsR0FBR0csZ0JBQXJCO0FBQ0EsUUFBTUksWUFBWSxHQUFHLDJEQUFyQjtBQUNBLFFBQU1DLElBQUksR0FBR0osVUFBVSxDQUFDSyxPQUFYLEVBQWI7QUFDQSxRQUFNQyxrQkFBdUIsR0FBRztBQUMvQlIsTUFBQUEsWUFBWSxFQUFFLFlBQVk7QUFDekIsWUFBTVMsV0FBVyxHQUFHQyxjQUFjLENBQUNOLGFBQUQsQ0FBbEM7O0FBQ0EsWUFBSUssV0FBVyxLQUFLYixvQkFBb0IsQ0FBQ2UsSUFBekMsRUFBK0M7QUFDOUNDLFVBQUFBLFlBQVks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L0Q7O0FBQ0FsRSxJQUFBQSxhQUFhLENBQUNxRSxVQUFkLEdBQTJCLENBQTNCLEVBQThCQyxLQUE5QjtBQUNBOzs7U0FFYztBQUFFM0IsSUFBQUEsOEJBQThCLEVBQTlCQSw4QkFBRjtBQUFrQzNCLElBQUFBLFlBQVksRUFBWkEsWUFBbEM7QUFBZ0RSLElBQUFBLFlBQVksRUFBWkEsWUFBaEQ7QUFBOERGLElBQUFBLGNBQWMsRUFBZEEsY0FBOUQ7QUFBOEVxQixJQUFBQSx3QkFBd0IsRUFBeEJBO0FBQTlFLEciLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5lbnVtIERyYWZ0RGF0YUxvc3NPcHRpb25zIHtcblx0U2F2ZSA9IFwiZHJhZnREYXRhTG9zc09wdGlvblNhdmVcIixcblx0S2VlcCA9IFwiZHJhZnREYXRhTG9zc09wdGlvbktlZXBcIixcblx0RGlzY2FyZCA9IFwiZHJhZnREYXRhTG9zc09wdGlvbkRpc2NhcmRcIlxufVxuXG5sZXQgZm5PbkRhdGFMb3NzQ29uZmlybWVkOiBGdW5jdGlvbjtcbmxldCBmbk9uRGF0YUxvc3NDYW5jZWw6IEZ1bmN0aW9uO1xuZnVuY3Rpb24gZm5EYXRhTG9zc0NvbmZpcm1hdGlvbihvbkRhdGFMb3NzT2s6IGFueSwgb25EYXRhTG9zc0NhbmNlbDogYW55LCBjb250cm9sbGVyOiBhbnksIHNraXBCaW5kaW5nVG9WaWV3OiBhbnkpIHtcblx0Ly8gT3BlbiB0aGUgZGF0YSBsb3NzIHBvcHVwIGFuZCBhZnRlciBwcm9jZXNzaW5nIHRoZSBzZWxlY3RlZCBmdW5jdGlvbiBmaW5hbGx5IGNhbGxcblx0Ly8gb25EYXRhTG9zc0NvbmZpcm1lZCB3aGljaCByZXNvbHZlcyB0aGUgcHJvbWlzZSBhbmQgbGVhZHMgdG8gcHJvY2Vzc2luZyBvZiB0aGUgb3JpZ2luYWxseVxuXHQvLyB0cmlnZ2VyZWQgYWN0aW9uIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvblxuXHRsZXQgZGF0YUxvc3NQb3B1cDogRGlhbG9nO1xuXHRmbk9uRGF0YUxvc3NDb25maXJtZWQgPSBvbkRhdGFMb3NzT2s7XG5cdGZuT25EYXRhTG9zc0NhbmNlbCA9IG9uRGF0YUxvc3NDYW5jZWw7XG5cdGNvbnN0IGZyYWdtZW50TmFtZSA9IFwic2FwLmZlLmNvcmUuY29udHJvbHMuRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC5EYXRhTG9zc0RyYWZ0XCI7XG5cdGNvbnN0IHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKTtcblx0Y29uc3QgZnJhZ21lbnRDb250cm9sbGVyOiBhbnkgPSB7XG5cdFx0b25EYXRhTG9zc09rOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEtleSA9IGdldFNlbGVjdGVkS2V5KGRhdGFMb3NzUG9wdXApO1xuXHRcdFx0aWYgKHNlbGVjdGVkS2V5ID09PSBEcmFmdERhdGFMb3NzT3B0aW9ucy5TYXZlKSB7XG5cdFx0XHRcdHNhdmVEb2N1bWVudChjb250cm9sbGVyKVxuXHRcdFx0XHRcdC50aGVuKGZuT25EYXRhTG9zc0NvbmZpcm1lZClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNhdmluZyBkb2N1bWVudFwiLCBlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGRhdGFMb3NzUG9wdXAuY2xvc2UoKTtcblx0XHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWRLZXkgPT09IERyYWZ0RGF0YUxvc3NPcHRpb25zLktlZXApIHtcblx0XHRcdFx0Zm5PbkRhdGFMb3NzQ29uZmlybWVkKCk7XG5cdFx0XHRcdGRhdGFMb3NzUG9wdXAuY2xvc2UoKTtcblx0XHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWRLZXkgPT09IERyYWZ0RGF0YUxvc3NPcHRpb25zLkRpc2NhcmQpIHtcblx0XHRcdFx0ZGlzY2FyZERyYWZ0KGNvbnRyb2xsZXIsIHNraXBCaW5kaW5nVG9WaWV3KVxuXHRcdFx0XHRcdC50aGVuKGZuT25EYXRhTG9zc0NvbmZpcm1lZClcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRpc2NhcmRpbmcgZHJhZnRcIiwgZXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRkYXRhTG9zc1BvcHVwLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkRhdGFMb3NzQ2FuY2VsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRmbk9uRGF0YUxvc3NDYW5jZWwoKTtcblx0XHRcdGRhdGFMb3NzUG9wdXAuY2xvc2UoKTtcblx0XHR9LFxuXHRcdHNldERhdGFMb3NzUG9wdXA6IGZ1bmN0aW9uIChkYXRhTG9zc1BvcHVwOiBEaWFsb2cpIHtcblx0XHRcdGNvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cCA9IGRhdGFMb3NzUG9wdXA7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IGkxOG5Nb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKTtcblx0Y29uc3QgbG9jYWxUaGlzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHt9KSxcblx0XHRwcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcInRoaXNcIjogbG9jYWxUaGlzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFwidGhpc1wiOiBsb2NhbFRoaXNNb2RlbCxcblx0XHRcdFx0XCJpMThuXCI6IGkxOG5Nb2RlbFxuXHRcdFx0fVxuXHRcdH07XG5cblx0aWYgKGNvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cCkge1xuXHRcdGRhdGFMb3NzUG9wdXAgPSBjb250cm9sbGVyLmRhdGFMb3NzUG9wdXA7XG5cdFx0ZGF0YUxvc3NQb3B1cC5vcGVuKCk7XG5cdFx0c2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KGRhdGFMb3NzUG9wdXApO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGRpYWxvZ0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKGZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKTtcblx0XHRQcm9taXNlLnJlc29sdmUoWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoZGlhbG9nRnJhZ21lbnQsIHsgbmFtZTogZnJhZ21lbnROYW1lIH0sIHByZXByb2Nlc3NvclNldHRpbmdzKSlcblx0XHRcdC50aGVuKChmcmFnbWVudCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7IGRlZmluaXRpb246IGZyYWdtZW50LCBjb250cm9sbGVyOiBmcmFnbWVudENvbnRyb2xsZXIgfSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHBvcHVwOiBhbnkpID0+IHtcblx0XHRcdFx0ZGF0YUxvc3NQb3B1cCA9IHBvcHVwO1xuXHRcdFx0XHRwb3B1cC5hdHRhY2hBZnRlck9wZW4oKCkgPT4ge1xuXHRcdFx0XHRcdHNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeShkYXRhTG9zc1BvcHVwKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHZpZXcuYWRkRGVwZW5kZW50KGRhdGFMb3NzUG9wdXApO1xuXHRcdFx0XHRkYXRhTG9zc1BvcHVwLm9wZW4oKTtcblx0XHRcdFx0ZnJhZ21lbnRDb250cm9sbGVyLnNldERhdGFMb3NzUG9wdXAoZGF0YUxvc3NQb3B1cCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIG9wZW5pbmcgdGhlIERpc2NhcmQgRGlhbG9nIGZyYWdtZW50XCIsIGVycm9yKTtcblx0XHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJmb3JtQWZ0ZXJEaXNjYXJkb3JLZWVwRHJhZnQoXG5cdHByb2Nlc3NGdW5jdGlvbk9uRGF0YWxvc3NPazogYW55LFxuXHRwcm9jZXNzRnVuY3Rpb25PbkRhdGFsb3NzQ2FuY2VsOiBhbnksXG5cdGNvbnRyb2xsZXI6IGFueSxcblx0c2tpcEJpbmRpbmdUb1ZpZXc6IGFueVxuKSB7XG5cdC8vIERlcGVuZGluZyBvbiBpZiB0aGUgdXNlciBjbG9zZWQgdGhlIGRhdGEgbG9zcyBwb3B1cCB3aXRoIE9rIG9yIENhbmNlbCxcblx0Ly8gZXhlY3V0ZSB0aGUgcHJvdmlkZWQgZm9sbG93LXVwIGZ1bmN0aW9uIGFuZCByZXNvbHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZVxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBkYXRhTG9zc1BvcHVwT2sgPSBmdW5jdGlvbiAoY29udGV4dDogYW55KSB7XG5cdFx0XHRjb25zdCByZXR1cm5WYWx1ZSA9IHByb2Nlc3NGdW5jdGlvbk9uRGF0YWxvc3NPayhjb250ZXh0KTtcblx0XHRcdHJlc29sdmUocmV0dXJuVmFsdWUpO1xuXHRcdH07XG5cdFx0Y29uc3QgZGF0YUxvc3NQb3B1cENhbmNlbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHByb2Nlc3NGdW5jdGlvbk9uRGF0YWxvc3NDYW5jZWwoKTtcblx0XHRcdHJlamVjdCgpO1xuXHRcdH07XG5cdFx0Zm5EYXRhTG9zc0NvbmZpcm1hdGlvbihkYXRhTG9zc1BvcHVwT2ssIGRhdGFMb3NzUG9wdXBDYW5jZWwsIGNvbnRyb2xsZXIsIHNraXBCaW5kaW5nVG9WaWV3KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNjYXJkRHJhZnQoY29udHJvbGxlcjogYW55LCBza2lwQmluZGluZ1RvVmlldzogYW55KSB7XG5cdGNvbnN0IGNvbnRleHQgPSBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBwYXJhbXMgPSB7XG5cdFx0c2tpcEJhY2tOYXZpZ2F0aW9uOiB0cnVlLFxuXHRcdHNraXBEaXNjYXJkUG9wb3ZlcjogdHJ1ZSxcblx0XHRza2lwQmluZGluZ1RvVmlldzogc2tpcEJpbmRpbmdUb1ZpZXcgIT09IHVuZGVmaW5lZCA/IHNraXBCaW5kaW5nVG9WaWV3IDogdHJ1ZVxuXHR9O1xuXHRyZXR1cm4gY29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChjb250ZXh0LCBwYXJhbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURvY3VtZW50KGNvbnRyb2xsZXI6IGFueSkge1xuXHRjb25zdCBjb250ZXh0ID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0Ly8gV2UgY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBPUCBhbmQgdGhlbiBjYWxsIHRoZSBpbnRlcm5hbCBfc2F2ZURvY3VtZW50IGZyb20gdGhlIE9QIGNvbnRyb2xsZXJcblx0Ly8gc2luY2UgaGVyZSBzb21lIHNwZWNpYWwgaGFuZGxpbmcgaXMgZG9uZSBmb3IgY3JlYXRpb25Sb3cgYmVmb3JlIGVkaXRGbG93LnNhdmVEb2N1bWVudCBpcyBjYWxsZWQuXG5cdC8vIEluIGNhc2Ugb2YgYSBjdXN0b20gY29udHJvbGxlciB3ZSBkaXJlY3RseSBjYWxsIHNhdmVEb2N1bWVudCBmcm9tIHRoZSBlZGl0Rmxvd1xuXHRpZiAoY29udHJvbGxlci5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIikpIHtcblx0XHRyZXR1cm4gY29udHJvbGxlci5fc2F2ZURvY3VtZW50KGNvbnRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb250cm9sbGVyLmVkaXRGbG93LnNhdmVEb2N1bWVudChjb250ZXh0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRLZXkoZGF0YUxvc3NQb3B1cDogRGlhbG9nKSB7XG5cdC8vIEZvciBub3QgdXNpbmcgY29udHJvbCBJRHMgd2UgaW50cm9kdWNlZCBjdXN0b21EYXRhIGluIHRoZSBmcmFnbWVudCBhbmRcblx0Ly8gdXNlIGl0IGhlcmUgZm9yIGZpbmRpbmcgdGhlIGNvcnJlY3QgbGlzdCBpbiB0aGUgZGlhbG9nIGFuZCBmb3Jcblx0Ly8gZGV0ZXJtaW5pbmcgdGhlIHNlbGVjdGVkIG9wdGlvbiBmcm9tIHRoZSBsaXN0XG5cdGNvbnN0IGRhdGFMb3NzT3B0aW9uc0xpc3Q6IExpc3QgPSBkYXRhTG9zc1BvcHVwXG5cdFx0LmdldENvbnRlbnQoKVxuXHRcdC5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmRhdGEoXCJsaXN0SWRlbnRpZmllclwiKSA9PT0gXCJkcmFmdERhdGFMb3NzT3B0aW9uc0xpc3RcIikgYXMgTGlzdDtcblx0cmV0dXJuIGRhdGFMb3NzT3B0aW9uc0xpc3QuZ2V0U2VsZWN0ZWRJdGVtKCkuZGF0YShcIml0ZW1LZXlcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoZGF0YUxvc3NQb3B1cDogRGlhbG9nKSB7XG5cdC8vIEZvciBub3QgdXNpbmcgY29udHJvbCBJRHMgd2UgaW50cm9kdWNlZCBjdXN0b21EYXRhIGluIHRoZSBmcmFnbWVudCBhbmRcblx0Ly8gdXNlIGl0IGhlcmUgZm9yIGZpbmRpbmcgdGhlIGNvcnJlY3QgbGlzdCBpbiB0aGUgZGlhbG9nLlxuXHRjb25zdCBkYXRhTG9zc09wdGlvbnNMaXN0OiBMaXN0ID0gZGF0YUxvc3NQb3B1cFxuXHRcdC5nZXRDb250ZW50KClcblx0XHQuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5kYXRhKFwibGlzdElkZW50aWZpZXJcIikgPT09IFwiZHJhZnREYXRhTG9zc09wdGlvbnNMaXN0XCIpIGFzIExpc3Q7XG5cdC8vIFByZXNlbGVjdCB0aGUgZmlyc3QgZW50cnkgaW4gdGhlIGxpc3Rcblx0Y29uc3QgZmlyc3RMaXN0SXRlbU9wdGlvbjogQ3VzdG9tTGlzdEl0ZW0gPSBkYXRhTG9zc09wdGlvbnNMaXN0LmdldEl0ZW1zKClbMF0gYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdGRhdGFMb3NzT3B0aW9uc0xpc3Quc2V0U2VsZWN0ZWRJdGVtKGZpcnN0TGlzdEl0ZW1PcHRpb24pO1xuXHQvLyBCeSBkZWZhdWx0IHNldCB0aGUgZm9jdXMgb24gdGhlIGZpcnN0IGJ1dHRvbiBvZiB0aGUgZGlhbG9nXG5cdGRhdGFMb3NzUG9wdXAuZ2V0QnV0dG9ucygpWzBdLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgcGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0LCBkaXNjYXJkRHJhZnQsIHNhdmVEb2N1bWVudCwgZ2V0U2VsZWN0ZWRLZXksIHNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSB9O1xuIl19
|
|
@@ -1,101 +1,161 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import CustomListItem from "sap/m/CustomListItem";
|
|
3
|
+
import Dialog from "sap/m/Dialog";
|
|
4
|
+
import List from "sap/m/List";
|
|
5
5
|
import Fragment from "sap/ui/core/Fragment";
|
|
6
|
-
import
|
|
6
|
+
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
7
|
+
import XMLTemplateProcessor from "sap/ui/core/XMLTemplateProcessor";
|
|
8
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
9
|
+
|
|
10
|
+
enum DraftDataLossOptions {
|
|
11
|
+
Save = "draftDataLossOptionSave",
|
|
12
|
+
Keep = "draftDataLossOptionKeep",
|
|
13
|
+
Discard = "draftDataLossOptionDiscard"
|
|
14
|
+
}
|
|
7
15
|
|
|
8
16
|
let fnOnDataLossConfirmed: Function;
|
|
9
17
|
let fnOnDataLossCancel: Function;
|
|
10
|
-
function fnDataLossConfirmation(
|
|
11
|
-
|
|
12
|
-
|
|
18
|
+
function fnDataLossConfirmation(onDataLossOk: any, onDataLossCancel: any, controller: any, skipBindingToView: any) {
|
|
19
|
+
// Open the data loss popup and after processing the selected function finally call
|
|
20
|
+
// onDataLossConfirmed which resolves the promise and leads to processing of the originally
|
|
21
|
+
// triggered action like e.g. a back navigation
|
|
22
|
+
let dataLossPopup: Dialog;
|
|
23
|
+
fnOnDataLossConfirmed = onDataLossOk;
|
|
13
24
|
fnOnDataLossCancel = onDataLossCancel;
|
|
14
|
-
const
|
|
15
|
-
const
|
|
25
|
+
const fragmentName = "sap.fe.core.controls.DataLossOrDraftDiscard.DataLossDraft";
|
|
26
|
+
const view = controller.getView();
|
|
16
27
|
const fragmentController: any = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
onDataLossOk: function () {
|
|
29
|
+
const selectedKey = getSelectedKey(dataLossPopup);
|
|
30
|
+
if (selectedKey === DraftDataLossOptions.Save) {
|
|
31
|
+
saveDocument(controller)
|
|
32
|
+
.then(fnOnDataLossConfirmed)
|
|
33
|
+
.catch(function (error: any) {
|
|
34
|
+
Log.error("Error while saving document", error);
|
|
35
|
+
});
|
|
36
|
+
dataLossPopup.close();
|
|
37
|
+
} else if (selectedKey === DraftDataLossOptions.Keep) {
|
|
38
|
+
fnOnDataLossConfirmed();
|
|
39
|
+
dataLossPopup.close();
|
|
40
|
+
} else if (selectedKey === DraftDataLossOptions.Discard) {
|
|
41
|
+
discardDraft(controller, skipBindingToView)
|
|
42
|
+
.then(fnOnDataLossConfirmed)
|
|
43
|
+
.catch(function (error: any) {
|
|
44
|
+
Log.error("Error while discarding draft", error);
|
|
45
|
+
});
|
|
46
|
+
dataLossPopup.close();
|
|
47
|
+
}
|
|
28
48
|
},
|
|
29
|
-
onDataLossCancel: function() {
|
|
30
|
-
oDataLossPopup.close();
|
|
49
|
+
onDataLossCancel: function () {
|
|
31
50
|
fnOnDataLossCancel();
|
|
51
|
+
dataLossPopup.close();
|
|
52
|
+
},
|
|
53
|
+
setDataLossPopup: function (dataLossPopup: Dialog) {
|
|
54
|
+
controller.dataLossPopup = dataLossPopup;
|
|
32
55
|
}
|
|
33
56
|
};
|
|
34
|
-
fragmentController.setDataLossPopup = function(oDataLossPopup: Popup) {
|
|
35
|
-
oController.dataLossPopup = oDataLossPopup;
|
|
36
|
-
};
|
|
37
57
|
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
oPreprocessorSettings = {
|
|
58
|
+
const i18nModel = view.getModel("sap.fe.i18n");
|
|
59
|
+
const localThisModel = new JSONModel({}),
|
|
60
|
+
preprocessorSettings = {
|
|
42
61
|
bindingContexts: {
|
|
43
|
-
"this":
|
|
62
|
+
"this": localThisModel.createBindingContext("/")
|
|
44
63
|
},
|
|
45
64
|
models: {
|
|
46
|
-
"this":
|
|
47
|
-
"
|
|
65
|
+
"this": localThisModel,
|
|
66
|
+
"i18n": i18nModel
|
|
48
67
|
}
|
|
49
68
|
};
|
|
50
|
-
const oPopoverFragment = XMLTemplateProcessor.loadTemplate(sFragmentname, "fragment");
|
|
51
69
|
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
70
|
+
if (controller.dataLossPopup) {
|
|
71
|
+
dataLossPopup = controller.dataLossPopup;
|
|
72
|
+
dataLossPopup.open();
|
|
73
|
+
selectAndFocusFirstEntry(dataLossPopup);
|
|
55
74
|
} else {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
75
|
+
const dialogFragment = XMLTemplateProcessor.loadTemplate(fragmentName, "fragment");
|
|
76
|
+
Promise.resolve(XMLPreprocessor.process(dialogFragment, { name: fragmentName }, preprocessorSettings))
|
|
77
|
+
.then((fragment) => {
|
|
78
|
+
return Fragment.load({ definition: fragment, controller: fragmentController });
|
|
59
79
|
})
|
|
60
|
-
.then(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
fragmentController.setDataLossPopup(oDataLossPopup);
|
|
80
|
+
.then((popup: any) => {
|
|
81
|
+
dataLossPopup = popup;
|
|
82
|
+
popup.attachAfterOpen(() => {
|
|
83
|
+
selectAndFocusFirstEntry(dataLossPopup);
|
|
84
|
+
});
|
|
85
|
+
view.addDependent(dataLossPopup);
|
|
86
|
+
dataLossPopup.open();
|
|
87
|
+
fragmentController.setDataLossPopup(dataLossPopup);
|
|
69
88
|
})
|
|
70
|
-
.catch(function(
|
|
71
|
-
Log.error("Error while opening the Discard Dialog fragment",
|
|
89
|
+
.catch(function (error: any) {
|
|
90
|
+
Log.error("Error while opening the Discard Dialog fragment", error);
|
|
72
91
|
});
|
|
73
92
|
}
|
|
74
93
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
94
|
+
|
|
95
|
+
export function performAfterDiscardorKeepDraft(
|
|
96
|
+
processFunctionOnDatalossOk: any,
|
|
97
|
+
processFunctionOnDatalossCancel: any,
|
|
98
|
+
controller: any,
|
|
99
|
+
skipBindingToView: any
|
|
100
|
+
) {
|
|
101
|
+
// Depending on if the user closed the data loss popup with Ok or Cancel,
|
|
102
|
+
// execute the provided follow-up function and resolve or reject the promise
|
|
103
|
+
return new Promise(function (resolve: (value: any) => void, reject: (reason?: any) => void) {
|
|
104
|
+
const dataLossPopupOk = function (context: any) {
|
|
105
|
+
const returnValue = processFunctionOnDatalossOk(context);
|
|
106
|
+
resolve(returnValue);
|
|
83
107
|
};
|
|
84
|
-
const
|
|
85
|
-
|
|
108
|
+
const dataLossPopupCancel = function () {
|
|
109
|
+
processFunctionOnDatalossCancel();
|
|
86
110
|
reject();
|
|
87
111
|
};
|
|
88
|
-
|
|
112
|
+
fnDataLossConfirmation(dataLossPopupOk, dataLossPopupCancel, controller, skipBindingToView);
|
|
89
113
|
});
|
|
90
|
-
return oRet;
|
|
91
114
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const
|
|
115
|
+
|
|
116
|
+
export function discardDraft(controller: any, skipBindingToView: any) {
|
|
117
|
+
const context = controller.getView().getBindingContext();
|
|
118
|
+
const params = {
|
|
95
119
|
skipBackNavigation: true,
|
|
96
120
|
skipDiscardPopover: true,
|
|
97
|
-
skipBindingToView:
|
|
121
|
+
skipBindingToView: skipBindingToView !== undefined ? skipBindingToView : true
|
|
98
122
|
};
|
|
123
|
+
return controller.editFlow.cancelDocument(context, params);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function saveDocument(controller: any) {
|
|
127
|
+
const context = controller.getView().getBindingContext();
|
|
128
|
+
// We check if we are on the OP and then call the internal _saveDocument from the OP controller
|
|
129
|
+
// since here some special handling is done for creationRow before editFlow.saveDocument is called.
|
|
130
|
+
// In case of a custom controller we directly call saveDocument from the editFlow
|
|
131
|
+
if (controller.isA("sap.fe.templates.ObjectPage.ObjectPageController")) {
|
|
132
|
+
return controller._saveDocument(context);
|
|
133
|
+
} else {
|
|
134
|
+
return controller.editFlow.saveDocument(context);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
99
137
|
|
|
100
|
-
|
|
138
|
+
export function getSelectedKey(dataLossPopup: Dialog) {
|
|
139
|
+
// For not using control IDs we introduced customData in the fragment and
|
|
140
|
+
// use it here for finding the correct list in the dialog and for
|
|
141
|
+
// determining the selected option from the list
|
|
142
|
+
const dataLossOptionsList: List = dataLossPopup
|
|
143
|
+
.getContent()
|
|
144
|
+
.find((element) => element.data("listIdentifier") === "draftDataLossOptionsList") as List;
|
|
145
|
+
return dataLossOptionsList.getSelectedItem().data("itemKey");
|
|
101
146
|
}
|
|
147
|
+
|
|
148
|
+
export function selectAndFocusFirstEntry(dataLossPopup: Dialog) {
|
|
149
|
+
// For not using control IDs we introduced customData in the fragment and
|
|
150
|
+
// use it here for finding the correct list in the dialog.
|
|
151
|
+
const dataLossOptionsList: List = dataLossPopup
|
|
152
|
+
.getContent()
|
|
153
|
+
.find((element) => element.data("listIdentifier") === "draftDataLossOptionsList") as List;
|
|
154
|
+
// Preselect the first entry in the list
|
|
155
|
+
const firstListItemOption: CustomListItem = dataLossOptionsList.getItems()[0] as CustomListItem;
|
|
156
|
+
dataLossOptionsList.setSelectedItem(firstListItemOption);
|
|
157
|
+
// By default set the focus on the first button of the dialog
|
|
158
|
+
dataLossPopup.getButtons()[0].focus();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export default { performAfterDiscardorKeepDraft, discardDraft, saveDocument, getSelectedKey, selectAndFocusFirstEntry };
|