@sapui5/sap.fe.core 1.127.2 → 1.129.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -9
- package/src/sap/fe/core/ActionRuntime.ts +3 -7
- package/src/sap/fe/core/AppComponent.js +9 -19
- package/src/sap/fe/core/AppComponent.ts +2 -12
- package/src/sap/fe/core/AppStateHandler.js +3 -11
- package/src/sap/fe/core/AppStateHandler.ts +0 -7
- package/src/sap/fe/core/BaseController.js +4 -8
- package/src/sap/fe/core/BaseController.ts +0 -5
- package/src/sap/fe/core/CommonUtils.js +1 -9
- package/src/sap/fe/core/CommonUtils.ts +4 -8
- package/src/sap/fe/core/ExtensionAPI.js +10 -25
- package/src/sap/fe/core/ExtensionAPI.ts +4 -19
- package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
- package/src/sap/fe/core/PageController.js +7 -10
- package/src/sap/fe/core/PageController.ts +0 -3
- package/src/sap/fe/core/ResourceModel.js +3 -5
- package/src/sap/fe/core/ResourceModel.ts +0 -2
- package/src/sap/fe/core/ReuseComponent.js +8 -14
- package/src/sap/fe/core/ReuseComponent.ts +0 -6
- package/src/sap/fe/core/TemplateComponent.js +37 -9
- package/src/sap/fe/core/TemplateComponent.ts +3 -2
- package/src/sap/fe/core/TemplateModel.js +5 -5
- package/src/sap/fe/core/TemplateModel.ts +0 -1
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +44 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
- package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
- package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
- package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
- package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
- package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +17 -11
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
- package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
- package/src/sap/fe/core/controls/Any.js +1 -2
- package/src/sap/fe/core/controls/Any.ts +0 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -2
- package/src/sap/fe/core/controls/AnyElement.ts +0 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
- package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
- package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
- package/src/sap/fe/core/converters/ConverterContext.js +8 -30
- package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
- package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
- package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
- package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
- package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
- package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
- package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
- package/src/sap/fe/core/converters/helpers/ID.js +1 -2
- package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -5
- package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
- package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
- package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
- package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
- package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
- package/src/sap/fe/core/fpm/Component.js +14 -17
- package/src/sap/fe/core/fpm/Component.ts +7 -10
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
- package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
- package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
- package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
- package/src/sap/fe/core/helpers/MetaPath.js +1 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
- package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
- package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
- package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
- package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
- package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
- package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
- package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
- package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
- package/src/sap/fe/core/helpers/WebSocket.js +1 -1
- package/src/sap/fe/core/library.js +10 -44
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +8 -45
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
- package/src/sap/fe/core/messagebundle.properties +12 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -0
- package/src/sap/fe/core/messagebundle_bg.properties +8 -0
- package/src/sap/fe/core/messagebundle_ca.properties +8 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
- package/src/sap/fe/core/messagebundle_cs.properties +9 -1
- package/src/sap/fe/core/messagebundle_cy.properties +8 -0
- package/src/sap/fe/core/messagebundle_da.properties +8 -0
- package/src/sap/fe/core/messagebundle_de.properties +8 -0
- package/src/sap/fe/core/messagebundle_el.properties +8 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
- package/src/sap/fe/core/messagebundle_es.properties +9 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
- package/src/sap/fe/core/messagebundle_et.properties +8 -0
- package/src/sap/fe/core/messagebundle_fi.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
- package/src/sap/fe/core/messagebundle_hi.properties +9 -1
- package/src/sap/fe/core/messagebundle_hr.properties +8 -0
- package/src/sap/fe/core/messagebundle_hu.properties +8 -0
- package/src/sap/fe/core/messagebundle_id.properties +12 -4
- package/src/sap/fe/core/messagebundle_it.properties +8 -0
- package/src/sap/fe/core/messagebundle_iw.properties +8 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -0
- package/src/sap/fe/core/messagebundle_kk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ko.properties +8 -0
- package/src/sap/fe/core/messagebundle_lt.properties +8 -0
- package/src/sap/fe/core/messagebundle_lv.properties +8 -0
- package/src/sap/fe/core/messagebundle_mk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ms.properties +8 -0
- package/src/sap/fe/core/messagebundle_nl.properties +16 -8
- package/src/sap/fe/core/messagebundle_no.properties +8 -0
- package/src/sap/fe/core/messagebundle_pl.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
- package/src/sap/fe/core/messagebundle_ro.properties +8 -0
- package/src/sap/fe/core/messagebundle_ru.properties +8 -0
- package/src/sap/fe/core/messagebundle_sh.properties +8 -0
- package/src/sap/fe/core/messagebundle_sk.properties +8 -0
- package/src/sap/fe/core/messagebundle_sl.properties +8 -0
- package/src/sap/fe/core/messagebundle_sr.properties +8 -0
- package/src/sap/fe/core/messagebundle_sv.properties +8 -0
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +8 -0
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
- package/src/sap/fe/core/operationsHelper.js +22 -7
- package/src/sap/fe/core/operationsHelper.ts +24 -5
- package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
- package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
- package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
- package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +4 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
- package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
- package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
- package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -31
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
- package/src/sap/fe/core/templating/UIFormatters.js +18 -14
- package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
- package/src/sap/fe/core/type/Date.js +3 -6
- package/src/sap/fe/core/type/Date.ts +0 -3
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/FiscalDate.js +3 -9
- package/src/sap/fe/core/type/FiscalDate.ts +0 -6
- package/src/sap/fe/core/type/InputMask.js +3 -7
- package/src/sap/fe/core/type/InputMask.ts +0 -4
|
@@ -12,12 +12,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
12
12
|
var getResourceModel = ResourceModelHelper.getResourceModel;
|
|
13
13
|
var defineBuildingBlock = BuildingBlockSupport.defineBuildingBlock;
|
|
14
14
|
var defineReference = ClassSupport.defineReference;
|
|
15
|
-
function _initializerDefineProperty(
|
|
16
|
-
function _assertThisInitialized(
|
|
17
|
-
function _inheritsLoose(
|
|
18
|
-
function _setPrototypeOf(
|
|
19
|
-
function _applyDecoratedDescriptor(
|
|
20
|
-
function _initializerWarningHelper(
|
|
15
|
+
function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
|
|
16
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
17
|
+
function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
|
|
18
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
19
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
20
|
+
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
21
21
|
let RecommendationDialogDecision;
|
|
22
22
|
(function (RecommendationDialogDecision) {
|
|
23
23
|
RecommendationDialogDecision["Accept"] = "Accept_Recommendations";
|
|
@@ -42,14 +42,135 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
42
42
|
_exports.ConfirmRecommendationDialogBlock = ConfirmRecommendationDialogBlock;
|
|
43
43
|
var _proto = ConfirmRecommendationDialogBlock.prototype;
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* Resolves the promise with the selected dialog list option
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* Rejects the promise of open dialog
|
|
49
|
+
*/
|
|
50
|
+
/**
|
|
51
|
+
*
|
|
52
|
+
* @returns Recommendation Data
|
|
53
|
+
*/
|
|
54
|
+
_proto.getOpenRecommendations = function getOpenRecommendations() {
|
|
55
|
+
const visibleContextPaths = this.getVisiblePageContextPaths();
|
|
56
|
+
const openRecommendations = this.getOpenRecommendationsForVisibleContextPaths(visibleContextPaths);
|
|
57
|
+
const recommendations = [];
|
|
58
|
+
if (openRecommendations.length > 0) {
|
|
59
|
+
openRecommendations.forEach(recommendation => {
|
|
60
|
+
const context = this.view.getBindingContext();
|
|
61
|
+
const propertyPath = recommendation.propertyPath ? recommendation.propertyPath : "";
|
|
62
|
+
if ((context === null || context === void 0 ? void 0 : context.getProperty(propertyPath)) === null || (context === null || context === void 0 ? void 0 : context.getProperty(propertyPath)) === undefined || (context === null || context === void 0 ? void 0 : context.getProperty(propertyPath)) == "") {
|
|
63
|
+
recommendations.push(recommendation);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return recommendations;
|
|
68
|
+
// check if we have recommendations from the current page in the localAnnotationModel
|
|
69
|
+
// return open recommendations.
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
*
|
|
74
|
+
* @returns Collection of context paths
|
|
75
|
+
*/;
|
|
76
|
+
_proto.getVisiblePageContextPaths = function getVisiblePageContextPaths() {
|
|
77
|
+
var _this$view$getBinding;
|
|
78
|
+
const visiblePageContextPaths = [(_this$view$getBinding = this.view.getBindingContext()) === null || _this$view$getBinding === void 0 ? void 0 : _this$view$getBinding.getPath()];
|
|
79
|
+
const controller = this.view.getController();
|
|
80
|
+
const fclController = controller.getAppComponent().getRootViewController();
|
|
81
|
+
const isFclEnabled = controller.getAppComponent()._isFclEnabled();
|
|
82
|
+
const isFullScreen = isFclEnabled ? fclController.getHelper().getCurrentUIState().isFullScreen : true;
|
|
83
|
+
if (isFclEnabled && !isFullScreen) {
|
|
84
|
+
const rightMostContext = fclController.getRightmostContext();
|
|
85
|
+
visiblePageContextPaths.push(rightMostContext === null || rightMostContext === void 0 ? void 0 : rightMostContext.getPath());
|
|
86
|
+
}
|
|
87
|
+
return visiblePageContextPaths;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
46
91
|
*
|
|
92
|
+
* @param contextPaths Paths of the contexts
|
|
93
|
+
* @returns RecommendationData for visible contexts
|
|
94
|
+
*/;
|
|
95
|
+
_proto.getOpenRecommendationsForVisibleContextPaths = function getOpenRecommendationsForVisibleContextPaths(contextPaths) {
|
|
96
|
+
const openRecommendations = [];
|
|
97
|
+
if (contextPaths.length > 0) {
|
|
98
|
+
const localAnnotationModel = this.view.getModel().getLocalAnnotationModel();
|
|
99
|
+
// check context paths in local annotation models which match to
|
|
100
|
+
// 1. current page and
|
|
101
|
+
// 2. immediate children of the current page
|
|
102
|
+
// Need to consider also immediate children
|
|
103
|
+
// iterate over all keys
|
|
104
|
+
contextPaths.forEach(contextPath => {
|
|
105
|
+
if (contextPath !== undefined) {
|
|
106
|
+
const localAnnotationObject = localAnnotationModel.getObject(contextPath);
|
|
107
|
+
if (localAnnotationObject) {
|
|
108
|
+
this.getOpenRecommendationsForContext(localAnnotationObject, localAnnotationObject["recommendationContext"], openRecommendations);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return openRecommendations;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
*
|
|
118
|
+
* @param contextData The context data object for recommendations
|
|
119
|
+
* @param recommendationContext The recommendation context
|
|
120
|
+
* @param openRecommendations RecommendationData
|
|
121
|
+
* @param contextKey Context Key
|
|
122
|
+
*/;
|
|
123
|
+
_proto.getOpenRecommendationsForContext = function getOpenRecommendationsForContext(contextData, recommendationContext, openRecommendations) {
|
|
124
|
+
let contextKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
|
|
125
|
+
for (const currentKey in contextData) {
|
|
126
|
+
const currentValue = contextData[currentKey];
|
|
127
|
+
if (currentValue) {
|
|
128
|
+
const currentValueIsContext = currentValue.isA && currentValue.isA("sap.ui.model.odata.v4.Context");
|
|
129
|
+
if (currentKey.includes("@$ui5.fe.recommendations.placeholderValue")) {
|
|
130
|
+
const propertyPath = currentKey.split("@$ui5.fe.recommendations.placeholderValue")[0];
|
|
131
|
+
const openRecommendation = {
|
|
132
|
+
context: recommendationContext,
|
|
133
|
+
propertyPath: contextKey ? `${contextKey}/${propertyPath}` : propertyPath,
|
|
134
|
+
value: currentValue,
|
|
135
|
+
contextIdentifier: [],
|
|
136
|
+
contextIdentifierText: []
|
|
137
|
+
};
|
|
138
|
+
const description = contextData[`${propertyPath}@$ui5.fe.recommendations.placeholderDescription`];
|
|
139
|
+
if (description) {
|
|
140
|
+
openRecommendation.text = description;
|
|
141
|
+
}
|
|
142
|
+
openRecommendations.push(openRecommendation);
|
|
143
|
+
} else if (typeof currentValue === "object" && !Array.isArray(currentValue) && !currentValueIsContext) {
|
|
144
|
+
this.getOpenRecommendationsForContext(currentValue, recommendationContext, openRecommendations, currentKey);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Opens the confirm recommendations dialog.
|
|
47
152
|
* @param isSave Boolean flag which would be set to true if we are saving the document and would be false if we do apply changes
|
|
48
153
|
* @returns Promise which would resolve with RecommendationDialogDecision (Accept, Ignore, Continue, Skipped)
|
|
49
|
-
|
|
154
|
+
*/;
|
|
50
155
|
_proto.open = async function open(isSave) {
|
|
51
|
-
var
|
|
52
|
-
|
|
156
|
+
var _acceptModel$getData$;
|
|
157
|
+
// check for built-in recommendations
|
|
158
|
+
const openRecommendations = this.getOpenRecommendations();
|
|
159
|
+
if (openRecommendations.length > 0) {
|
|
160
|
+
this.acceptAllParams = {
|
|
161
|
+
recommendationData: openRecommendations
|
|
162
|
+
};
|
|
163
|
+
} else {
|
|
164
|
+
var _this$view;
|
|
165
|
+
// if built-in recommendations are not found then check for legacy recommendations.
|
|
166
|
+
const legacyRecommendationsExist = ((_this$view = this.view) === null || _this$view === void 0 ? void 0 : _this$view.getController()).recommendations.checkIfRecommendationsExist();
|
|
167
|
+
if (legacyRecommendationsExist) {
|
|
168
|
+
var _this$view2;
|
|
169
|
+
this.acceptAllParams = await ((_this$view2 = this.view) === null || _this$view2 === void 0 ? void 0 : _this$view2.getController()).recommendations.fetchAcceptAllParams();
|
|
170
|
+
} else {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
53
174
|
const acceptModel = this.getAcceptAllModel();
|
|
54
175
|
this.view.setModel(acceptModel, "_acceptDialogModel");
|
|
55
176
|
if (!((_acceptModel$getData$ = acceptModel.getData().items) !== null && _acceptModel$getData$ !== void 0 && _acceptModel$getData$.length)) {
|
|
@@ -81,8 +202,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
81
202
|
*/;
|
|
82
203
|
_proto.onAcceptAndSave = async function onAcceptAndSave() {
|
|
83
204
|
try {
|
|
84
|
-
var _this$
|
|
85
|
-
const isAccepted = await ((_this$
|
|
205
|
+
var _this$view3;
|
|
206
|
+
const isAccepted = await ((_this$view3 = this.view) === null || _this$view3 === void 0 ? void 0 : _this$view3.getController()).recommendations.acceptRecommendations(this.acceptAllParams);
|
|
86
207
|
if (!isAccepted) {
|
|
87
208
|
this.promiseReject("Accept Failed");
|
|
88
209
|
}
|
|
@@ -99,8 +220,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
99
220
|
* Handler for Ignore and Save button.
|
|
100
221
|
*/;
|
|
101
222
|
_proto.onIgnoreAndSave = function onIgnoreAndSave() {
|
|
102
|
-
var _this$
|
|
103
|
-
((_this$
|
|
223
|
+
var _this$view4;
|
|
224
|
+
((_this$view4 = this.view) === null || _this$view4 === void 0 ? void 0 : _this$view4.getController()).recommendations.ignoreRecommendationForContexts();
|
|
104
225
|
this.promiseResolve(RecommendationDialogDecision.Ignore);
|
|
105
226
|
this.close();
|
|
106
227
|
}
|
|
@@ -115,19 +236,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
115
236
|
|
|
116
237
|
/**
|
|
117
238
|
* Gets the label or name of the Field based on its property path.
|
|
118
|
-
*
|
|
119
239
|
* @param targetPath
|
|
120
240
|
* @returns Returns the label of the Field.
|
|
121
241
|
*/;
|
|
122
242
|
_proto.getFieldName = function getFieldName(targetPath) {
|
|
123
|
-
var _this$
|
|
124
|
-
const involvedDataModelObject = MetaModelConverter.getInvolvedDataModelObjectsForTargetPath(targetPath, (_this$
|
|
243
|
+
var _this$view5, _this$view5$getBindin, _this$view5$getBindin2, _involvedDataModelObj, _involvedDataModelObj2, _involvedDataModelObj3, _involvedDataModelObj4;
|
|
244
|
+
const involvedDataModelObject = MetaModelConverter.getInvolvedDataModelObjectsForTargetPath(targetPath, (_this$view5 = this.view) === null || _this$view5 === void 0 ? void 0 : (_this$view5$getBindin = _this$view5.getBindingContext()) === null || _this$view5$getBindin === void 0 ? void 0 : (_this$view5$getBindin2 = _this$view5$getBindin.getModel()) === null || _this$view5$getBindin2 === void 0 ? void 0 : _this$view5$getBindin2.getMetaModel());
|
|
125
245
|
return (involvedDataModelObject === null || involvedDataModelObject === void 0 ? void 0 : (_involvedDataModelObj = involvedDataModelObject.targetObject) === null || _involvedDataModelObj === void 0 ? void 0 : (_involvedDataModelObj2 = _involvedDataModelObj.annotations) === null || _involvedDataModelObj2 === void 0 ? void 0 : (_involvedDataModelObj3 = _involvedDataModelObj2.Common) === null || _involvedDataModelObj3 === void 0 ? void 0 : (_involvedDataModelObj4 = _involvedDataModelObj3.Label) === null || _involvedDataModelObj4 === void 0 ? void 0 : _involvedDataModelObj4.toString()) || targetPath.split("/")[targetPath.split("/").length - 1];
|
|
126
246
|
}
|
|
127
247
|
|
|
128
248
|
/**
|
|
129
249
|
* Fetches text for recommendation based on display mode.
|
|
130
|
-
*
|
|
131
250
|
* @param recommendation
|
|
132
251
|
* @param displayMode
|
|
133
252
|
* @returns Text for a recommendation
|
|
@@ -150,7 +269,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
150
269
|
|
|
151
270
|
/**
|
|
152
271
|
* Returns Button with given text, type and pressHandler.
|
|
153
|
-
*
|
|
154
272
|
* @param text Text for the button
|
|
155
273
|
* @param type Type of the button
|
|
156
274
|
* @param pressHandler Press Handler for the button
|
|
@@ -174,7 +292,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
174
292
|
|
|
175
293
|
/**
|
|
176
294
|
* Returns Footer with Buttons.
|
|
177
|
-
*
|
|
178
295
|
* @returns Footer
|
|
179
296
|
*/;
|
|
180
297
|
_proto.getFooter = function getFooter() {
|
|
@@ -199,9 +316,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
199
316
|
const entityNameLabel = standardRecommendationHelper.getEntityName(recommendationData.context) || "";
|
|
200
317
|
const identifierTexts = recommendationData.contextIdentifierText && recommendationData.contextIdentifierText.length > 0 ? `${entityNameLabel} (${recommendationData.contextIdentifierText})` : entityNameLabel;
|
|
201
318
|
if (recommendationData.value || recommendationData.text) {
|
|
202
|
-
var _recommendationData$c, _this$
|
|
319
|
+
var _recommendationData$c, _this$view6, _this$view6$getBindin, _this$view6$getBindin2;
|
|
203
320
|
const targetPath = ((_recommendationData$c = recommendationData.context) === null || _recommendationData$c === void 0 ? void 0 : _recommendationData$c.getPath()) + "/" + recommendationData.propertyPath;
|
|
204
|
-
const displayMode = standardRecommendationHelper.getDisplayModeForTargetPath(targetPath, (_this$
|
|
321
|
+
const displayMode = standardRecommendationHelper.getDisplayModeForTargetPath(targetPath, (_this$view6 = this.view) === null || _this$view6 === void 0 ? void 0 : (_this$view6$getBindin = _this$view6.getBindingContext()) === null || _this$view6$getBindin === void 0 ? void 0 : (_this$view6$getBindin2 = _this$view6$getBindin.getModel()) === null || _this$view6$getBindin2 === void 0 ? void 0 : _this$view6$getBindin2.getMetaModel());
|
|
205
322
|
const listData = {
|
|
206
323
|
fieldName: this.getFieldName(targetPath).valueOf(),
|
|
207
324
|
fieldValue: this.getText(recommendationData, displayMode),
|
|
@@ -262,7 +379,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
262
379
|
|
|
263
380
|
/**
|
|
264
381
|
* The building block render function.
|
|
265
|
-
*
|
|
266
382
|
* @returns An XML-based string
|
|
267
383
|
*/;
|
|
268
384
|
_proto.getContent = function getContent() {
|
|
@@ -293,4 +409,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
|
|
|
293
409
|
_exports.ConfirmRecommendationDialogBlock = ConfirmRecommendationDialogBlock;
|
|
294
410
|
return _exports;
|
|
295
411
|
}, false);
|
|
296
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nQmxvY2siLCJkZWZpbmVCdWlsZGluZ0Jsb2NrIiwibmFtZSIsIm5hbWVzcGFjZSIsImRlZmluZVJlZmVyZW5jZSIsInByb3BzIiwidmlldyIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwib3BlbiIsImlzU2F2ZSIsImFjY2VwdEFsbFBhcmFtcyIsImdldENvbnRyb2xsZXIiLCJyZWNvbW1lbmRhdGlvbnMiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsImFjY2VwdE1vZGVsIiwiZ2V0QWNjZXB0QWxsTW9kZWwiLCJzZXRNb2RlbCIsImdldERhdGEiLCJpdGVtcyIsImxlbmd0aCIsIlNraXBwZWQiLCJkaWFsb2ciLCJnZXRDb250ZW50Iiwic2V0RXNjYXBlSGFuZGxlciIsIm9uQ29udGludWVFZGl0aW5nIiwiYmluZCIsImFkZERlcGVuZGVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZVJlc29sdmUiLCJwcm9taXNlUmVqZWN0IiwiY2xvc2UiLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJjdXJyZW50IiwiZGVzdHJveSIsIm9uQWNjZXB0QW5kU2F2ZSIsImlzQWNjZXB0ZWQiLCJhY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJBY2NlcHQiLCJMb2ciLCJlcnJvciIsIm9uSWdub3JlQW5kU2F2ZSIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJJZ25vcmUiLCJDb250aW51ZSIsImdldEZpZWxkTmFtZSIsInRhcmdldFBhdGgiLCJpbnZvbHZlZERhdGFNb2RlbE9iamVjdCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwic3BsaXQiLCJnZXRUZXh0IiwicmVjb21tZW5kYXRpb24iLCJkaXNwbGF5TW9kZSIsInRleHQiLCJ2YWx1ZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsImdldEJ1dHRvbiIsInR5cGUiLCJwcmVzc0hhbmRsZXIiLCJsYXlvdXREYXRhIiwiZ2V0Rm9vdGVyIiwiY29udGVudCIsIkpTT05Nb2RlbCIsInJlY29tbWVuZGF0aW9uRGF0YSIsImVudGl0eU5hbWVMYWJlbCIsInN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlOYW1lIiwiY29udGV4dCIsImlkZW50aWZpZXJUZXh0cyIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImdldFBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwicHVzaCIsInNldERhdGEiLCJnZXRHcm91cCIsImdldFByb3BlcnR5IiwiZ2V0TWVzc2FnZVN0cmlwIiwiYWNjZXB0QWxsRGF0YSIsIm1lc3NhZ2VTdHJpcFRleHQiLCJnZXREaWFsb2dDb250ZW50IiwibW9kZWwiLCJwYXRoIiwic29ydGVyIiwiU29ydGVyIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwiZm9vdGVyIiwiUnVudGltZUJ1aWxkaW5nQmxvY2siXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5ibG9jay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVJlZmVyZW5jZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgZGVmaW5lQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgUnVudGltZUJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvUnVudGltZUJ1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBDdXN0b21MaXN0SXRlbSBmcm9tIFwic2FwL20vQ3VzdG9tTGlzdEl0ZW1cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHsgVmFsdWVTdGF0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCIuLi8uLi9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEFjY2VwdEFsbFBhcmFtcyB9IGZyb20gXCIuLi8uLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9SZWNvbW1lbmRhdGlvbnNcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcIi4uLy4uL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIsIHR5cGUgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuXG5leHBvcnQgZW51bSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRfUmVjb21tZW5kYXRpb25zXCIsXG5cdElnbm9yZSA9IFwiSWdub3JlX1JlY29tbWVuZGF0aW9uc1wiLFxuXHRDb250aW51ZSA9IFwiQ29udGludWVfRWRpdGluZ1wiLFxuXHRTa2lwcGVkID0gXCJTa2lwcGVkXCJcbn1cblxuQGRlZmluZUJ1aWxkaW5nQmxvY2soe1xuXHRuYW1lOiBcIkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiLFxuXHRuYW1lc3BhY2U6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnNcIlxufSlcbmV4cG9ydCBjbGFzcyBDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dCbG9jayBleHRlbmRzIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIHtcblx0Y29uc3RydWN0b3IocHJvcHM6IFByb3BlcnRpZXNPZjxDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dCbG9jaz4pIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy52aWV3ID0gcHJvcHMudmlldyBhcyBWaWV3O1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy52aWV3KTtcblx0fVxuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2chOiBSZWY8RGlhbG9nPjtcblxuXHRwdWJsaWMgdmlldyE6IFZpZXc7XG5cblx0cHJpdmF0ZSBjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQga2V5ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgaXNTYXZlITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGFjY2VwdEFsbFBhcmFtcyE6IEFjY2VwdEFsbFBhcmFtcztcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFJlamVjdHMgdGhlIHByb21pc2Ugb2Ygb3BlbiBkaWFsb2dcblx0ICovXG5cdHByaXZhdGUgcHJvbWlzZVJlamVjdCE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybSByZWNvbW1lbmRhdGlvbnMgZGlhbG9nLlxuXHQgKlxuXHQgKiBAcGFyYW0gaXNTYXZlIEJvb2xlYW4gZmxhZyB3aGljaCB3b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBhcmUgc2F2aW5nIHRoZSBkb2N1bWVudCBhbmQgd291bGQgYmUgZmFsc2UgaWYgd2UgZG8gYXBwbHkgY2hhbmdlc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdvdWxkIHJlc29sdmUgd2l0aCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIChBY2NlcHQsIElnbm9yZSwgQ29udGludWUsIFNraXBwZWQpXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihpc1NhdmU6IGJvb2xlYW4pOiBQcm9taXNlPFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24+IHtcblx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtcyA9IGF3YWl0ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmZldGNoQWNjZXB0QWxsUGFyYW1zKCk7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSB0aGlzLmdldEFjY2VwdEFsbE1vZGVsKCk7XG5cdFx0dGhpcy52aWV3LnNldE1vZGVsKGFjY2VwdE1vZGVsLCBcIl9hY2NlcHREaWFsb2dNb2RlbFwiKTtcblx0XHRpZiAoIWFjY2VwdE1vZGVsLmdldERhdGEoKS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Ta2lwcGVkO1xuXHRcdH1cblx0XHR0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRkaWFsb2c/LnNldEVzY2FwZUhhbmRsZXIodGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KGRpYWxvZyBhcyBVSTVFbGVtZW50KTtcblx0XHRkaWFsb2c/Lm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgY29uZmlybVJlY29tbWVuZGF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBBY2NlcHQgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFjY2VwdEFuZFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGlzQWNjZXB0ZWQgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5hY2NlcHRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFpc0FjY2VwdGVkKSB7XG5cdFx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcihcIkFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRmFpbGVkXCIpO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBJZ25vcmUgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0KHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cygpO1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBDb250aW51ZSBFZGl0aW5nIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25Db250aW51ZUVkaXRpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgb3IgbmFtZSBvZiB0aGUgRmllbGQgYmFzZWQgb24gaXRzIHByb3BlcnR5IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBGaWVsZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGROYW1lKHRhcmdldFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8XG5cdFx0XHR0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKVt0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggLSAxXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0ZXh0IGZvciByZWNvbW1lbmRhdGlvbiBiYXNlZCBvbiBkaXNwbGF5IG1vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGVcblx0ICogQHJldHVybnMgVGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUZXh0KHJlY29tbWVuZGF0aW9uOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbi50ZXh0IHx8IHJlY29tbWVuZGF0aW9uLnZhbHVlKSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi50ZXh0ITtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi50ZXh0LCByZWNvbW1lbmRhdGlvbi52YWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udmFsdWUsIHJlY29tbWVuZGF0aW9uLnRleHQpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEJ1dHRvbiB3aXRoIGdpdmVuIHRleHQsIHR5cGUgYW5kIHByZXNzSGFuZGxlci5cblx0ICpcblx0ICogQHBhcmFtIHRleHQgVGV4dCBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHByZXNzSGFuZGxlciBQcmVzcyBIYW5kbGVyIGZvciB0aGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIEJ1dHRvbiB3aXRoIHRoZSBnaXZlbiBzZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRCdXR0b24odGV4dDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHByZXNzSGFuZGxlcjogRXZlbnRIYW5kbGVyKTogQnV0dG9uIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvbiB0ZXh0PXt0ZXh0fSB0eXBlPXt0eXBlfSB3aWR0aD17XCJhdXRvXCJ9IHByZXNzPXtwcmVzc0hhbmRsZXJ9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgbWluV2lkdGg9e1wiMTAwJVwifT48L0ZsZXhJdGVtRGF0YT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBGb290ZXIgd2l0aCBCdXR0b25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBGb290ZXJcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRGb290ZXIoKTogVG9vbGJhciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmlzU2F2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQWNjZXB0QW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmlzU2F2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRV9BTkRfU0FWRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbklnbm9yZUFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19DT05USU5VRV9FRElUSU5HXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZWQgYSBKU09OIE1vZGVsIGZvciB0aGUgYWNjZXB0IGFsbCBkaWFsb2cgZGF0YS5cblx0ICogQHJldHVybnMgVGhlIEpTT04gTW9kZWwgZm9yIGFjY2VwdCBhbGwgZGlhbG9nLlxuXHQgKi9cblx0Z2V0QWNjZXB0QWxsTW9kZWwoKTogSlNPTk1vZGVsIHtcblx0XHRjb25zdCBhY2NlcHRNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRjb25zdCBpdGVtcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcmVjb21tZW5kYXRpb25EYXRhIG9mIHRoaXMuYWNjZXB0QWxsUGFyYW1zPy5yZWNvbW1lbmRhdGlvbkRhdGEgfHwgW10pIHtcblx0XHRcdGNvbnN0IGVudGl0eU5hbWVMYWJlbCA9IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuZ2V0RW50aXR5TmFtZShyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkgfHwgXCJcIjtcblxuXHRcdFx0Y29uc3QgaWRlbnRpZmllclRleHRzID1cblx0XHRcdFx0cmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dCAmJiByZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHQ/IGAke2VudGl0eU5hbWVMYWJlbH0gKCR7cmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dH0pYFxuXHRcdFx0XHRcdDogZW50aXR5TmFtZUxhYmVsO1xuXG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25EYXRhLnZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGF0YS50ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFBhdGggPSByZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dD8uZ2V0UGF0aCgpICsgXCIvXCIgKyByZWNvbW1lbmRhdGlvbkRhdGEucHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuZ2V0RGlzcGxheU1vZGVGb3JUYXJnZXRQYXRoKFxuXHRcdFx0XHRcdHRhcmdldFBhdGgsXG5cdFx0XHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBsaXN0RGF0YSA9IHtcblx0XHRcdFx0XHRmaWVsZE5hbWU6IHRoaXMuZ2V0RmllbGROYW1lKHRhcmdldFBhdGgpLnZhbHVlT2YoKSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlOiB0aGlzLmdldFRleHQocmVjb21tZW5kYXRpb25EYXRhLCBkaXNwbGF5TW9kZSksXG5cdFx0XHRcdFx0aWRlbnRpZmllclRleHRzOiBpZGVudGlmaWVyVGV4dHNcblx0XHRcdFx0fTtcblx0XHRcdFx0aXRlbXMucHVzaChsaXN0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFjY2VwdE1vZGVsLnNldERhdGEoeyBpdGVtczogaXRlbXMgfSk7XG5cdFx0cmV0dXJuIGFjY2VwdE1vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGdyb3VwcyB0aGUgY29udGV4dHMgYWNjb3JkaW5nIHRvIHRoZSBpZGVudGlmaWVyIHRleHRzLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgaXRlbVxuXHQgKiBAcmV0dXJucyBUaGUgdGV4dCBvZiB0aGUgZ3JvdXBcblx0ICovXG5cdGdldEdyb3VwKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkZW50aWZpZXJUZXh0c1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaXAgdG8gYmUgc2hvd24gaW4gdGhlIGFjY2VwdCBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbWVzc2FnZSBzdHJpcCB3aXRoIHRoZSBkZXNpcmVkIHRleHQuXG5cdCAqL1xuXHRnZXRNZXNzYWdlU3RyaXAoKTogTWVzc2FnZVN0cmlwIHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VTdHJpcFRleHQgPVxuXHRcdFx0YWNjZXB0QWxsRGF0YS5sZW5ndGggPiAxXG5cdFx0XHRcdD8gdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19URVhUXCIsIFthY2NlcHRBbGxEYXRhLmxlbmd0aF0pXG5cdFx0XHRcdDogdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19URVhUX1NJTkdVTEFSXCIpO1xuXHRcdHJldHVybiA8TWVzc2FnZVN0cmlwIHRleHQ9e21lc3NhZ2VTdHJpcFRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2VTdHJpcCgpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXREaWFsb2dDb250ZW50KCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZvb3RlcjogPD57dGhpcy5nZXRGb290ZXIoKX08Lz5cblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCkgYXMgRGlhbG9nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUNZQSw0QkFBNEI7RUFBQSxXQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7RUFBQSxHQUE1QkEsNEJBQTRCLEtBQTVCQSw0QkFBNEI7RUFBQTtFQUFBLElBVzNCQyxnQ0FBZ0MsV0FKNUNDLG1CQUFtQixDQUFDO0lBQ3BCQyxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DQyxTQUFTLEVBQUU7RUFDWixDQUFDLENBQUMsVUFRQUMsZUFBZSxFQUFFO0lB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
|
|
412
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dCbG9jayIsIl9kZWMiLCJkZWZpbmVCdWlsZGluZ0Jsb2NrIiwibmFtZSIsIm5hbWVzcGFjZSIsIl9kZWMyIiwiZGVmaW5lUmVmZXJlbmNlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9SdW50aW1lQnVpbGRpbmdCbG9jayIsIl9pbmhlcml0c0xvb3NlIiwicHJvcHMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9wcm90byIsInByb3RvdHlwZSIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnMiLCJ2aXNpYmxlQ29udGV4dFBhdGhzIiwiZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJvcGVuUmVjb21tZW5kYXRpb25zIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJsZW5ndGgiLCJmb3JFYWNoIiwicmVjb21tZW5kYXRpb24iLCJjb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJnZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsInB1c2giLCJfdGhpcyR2aWV3JGdldEJpbmRpbmciLCJ2aXNpYmxlUGFnZUNvbnRleHRQYXRocyIsImdldFBhdGgiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImZjbENvbnRyb2xsZXIiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJfaXNGY2xFbmFibGVkIiwiaXNGdWxsU2NyZWVuIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJyaWdodE1vc3RDb250ZXh0IiwiZ2V0UmlnaHRtb3N0Q29udGV4dCIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlY29tbWVuZGF0aW9uQ29udGV4dCIsImNvbnRleHRLZXkiLCJhcmd1bWVudHMiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwiY3VycmVudFZhbHVlSXNDb250ZXh0IiwiaXNBIiwiaW5jbHVkZXMiLCJzcGxpdCIsIm9wZW5SZWNvbW1lbmRhdGlvbiIsInZhbHVlIiwiY29udGV4dElkZW50aWZpZXIiLCJjb250ZXh0SWRlbnRpZmllclRleHQiLCJkZXNjcmlwdGlvbiIsInRleHQiLCJBcnJheSIsImlzQXJyYXkiLCJvcGVuIiwiaXNTYXZlIiwiX2FjY2VwdE1vZGVsJGdldERhdGEkIiwiYWNjZXB0QWxsUGFyYW1zIiwicmVjb21tZW5kYXRpb25EYXRhIiwiX3RoaXMkdmlldyIsImxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0IiwiY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0IiwiX3RoaXMkdmlldzIiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsImFjY2VwdE1vZGVsIiwiZ2V0QWNjZXB0QWxsTW9kZWwiLCJzZXRNb2RlbCIsImdldERhdGEiLCJpdGVtcyIsIlNraXBwZWQiLCJkaWFsb2ciLCJnZXRDb250ZW50Iiwic2V0RXNjYXBlSGFuZGxlciIsIm9uQ29udGludWVFZGl0aW5nIiwiYmluZCIsImFkZERlcGVuZGVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZVJlc29sdmUiLCJwcm9taXNlUmVqZWN0IiwiY2xvc2UiLCJfdGhpcyRjb25maXJtUmVjb21tZW4iLCJfdGhpcyRjb25maXJtUmVjb21tZW4yIiwiY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiY3VycmVudCIsImRlc3Ryb3kiLCJvbkFjY2VwdEFuZFNhdmUiLCJfdGhpcyR2aWV3MyIsImlzQWNjZXB0ZWQiLCJhY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJBY2NlcHQiLCJMb2ciLCJlcnJvciIsIm9uSWdub3JlQW5kU2F2ZSIsIl90aGlzJHZpZXc0IiwiaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cyIsIklnbm9yZSIsIkNvbnRpbnVlIiwiZ2V0RmllbGROYW1lIiwidGFyZ2V0UGF0aCIsIl90aGlzJHZpZXc1IiwiX3RoaXMkdmlldzUkZ2V0QmluZGluIiwiX3RoaXMkdmlldzUkZ2V0QmluZGluMiIsIl9pbnZvbHZlZERhdGFNb2RlbE9iaiIsIl9pbnZvbHZlZERhdGFNb2RlbE9iajIiLCJfaW52b2x2ZWREYXRhTW9kZWxPYmozIiwiX2ludm9sdmVkRGF0YU1vZGVsT2JqNCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aCIsImdldE1ldGFNb2RlbCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsImdldFRleHQiLCJkaXNwbGF5TW9kZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsImdldEJ1dHRvbiIsInR5cGUiLCJwcmVzc0hhbmRsZXIiLCJfanN4IiwiQnV0dG9uIiwid2lkdGgiLCJwcmVzcyIsImNoaWxkcmVuIiwibGF5b3V0RGF0YSIsIl9GcmFnbWVudCIsIkZsZXhJdGVtRGF0YSIsIm1pbldpZHRoIiwiZ2V0Rm9vdGVyIiwiVG9vbGJhciIsImNvbnRlbnQiLCJfanN4cyIsIlRvb2xiYXJTcGFjZXIiLCJKU09OTW9kZWwiLCJfdGhpcyRhY2NlcHRBbGxQYXJhbXMiLCJlbnRpdHlOYW1lTGFiZWwiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiZ2V0RW50aXR5TmFtZSIsImlkZW50aWZpZXJUZXh0cyIsIl9yZWNvbW1lbmRhdGlvbkRhdGEkYyIsIl90aGlzJHZpZXc2IiwiX3RoaXMkdmlldzYkZ2V0QmluZGluIiwiX3RoaXMkdmlldzYkZ2V0QmluZGluMiIsImdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aCIsImxpc3REYXRhIiwiZmllbGROYW1lIiwidmFsdWVPZiIsImZpZWxkVmFsdWUiLCJzZXREYXRhIiwiZ2V0R3JvdXAiLCJnZXRNZXNzYWdlU3RyaXAiLCJfdGhpcyR2aWV3JGdldE1vZGVsIiwiX3RoaXMkdmlldyRnZXRNb2RlbCRnIiwiYWNjZXB0QWxsRGF0YSIsIm1lc3NhZ2VTdHJpcFRleHQiLCJNZXNzYWdlU3RyaXAiLCJnZXREaWFsb2dDb250ZW50IiwiTGlzdCIsIm1vZGVsIiwicGF0aCIsInNvcnRlciIsIlNvcnRlciIsIkN1c3RvbUxpc3RJdGVtIiwiSEJveCIsImNsYXNzIiwiVGV4dCIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJWYWx1ZVN0YXRlIiwiSW5mb3JtYXRpb24iLCJyZWYiLCJyZXNpemFibGUiLCJjb250ZW50V2lkdGgiLCJmb290ZXIiLCJSdW50aW1lQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmJsb2NrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgeyBkZWZpbmVCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCBSdW50aW1lQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9SdW50aW1lQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJcIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQWNjZXB0QWxsUGFyYW1zLCBSZWNvbW1lbmRhdGlvbkRhdGEgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCIuLi8uLi9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLCB0eXBlIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0SWdub3JlID0gXCJJZ25vcmVfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7XG5cdG5hbWU6IFwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIsXG5cdG5hbWVzcGFjZTogXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9uc1wiXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ0Jsb2NrIGV4dGVuZHMgUnVudGltZUJ1aWxkaW5nQmxvY2sge1xuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ0Jsb2NrPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHR9XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdHB1YmxpYyB2aWV3ITogVmlldztcblxuXHRwcml2YXRlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwhOiBSZXNvdXJjZU1vZGVsO1xuXG5cdHByb3RlY3RlZCBrZXkhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBpc1NhdmUhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYWNjZXB0QWxsUGFyYW1zITogQWNjZXB0QWxsUGFyYW1zO1xuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzZWxlY3RlZCBkaWFsb2cgbGlzdCBvcHRpb25cblx0ICovXG5cdHByaXZhdGUgcHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogUmVqZWN0cyB0aGUgcHJvbWlzZSBvZiBvcGVuIGRpYWxvZ1xuXHQgKi9cblx0cHVibGljIHByb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwdWJsaWMgZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZUNvbnRleHRQYXRocyA9IHRoaXMuZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyh2aXNpYmxlQ29udGV4dFBhdGhzKTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoID8gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoIDogXCJcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkgPT09IG51bGwgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09IFwiXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25zLnB1c2gocmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9ucztcblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIHJlY29tbWVuZGF0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxvY2FsQW5ub3RhdGlvbk1vZGVsXG5cdFx0Ly8gcmV0dXJuIG9wZW4gcmVjb21tZW5kYXRpb25zLlxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdHZpc2libGVQYWdlQ29udGV4dFBhdGhzLnB1c2gocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZpc2libGVQYWdlQ29udGV4dFBhdGhzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aHMgUGF0aHMgb2YgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YSBmb3IgdmlzaWJsZSBjb250ZXh0c1xuXHQgKi9cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKGNvbnRleHRQYXRoczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXHRcdGlmIChjb250ZXh0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRcdC8vIGNoZWNrIGNvbnRleHQgcGF0aHMgaW4gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbHMgd2hpY2ggbWF0Y2ggdG9cblx0XHRcdC8vIDEuIGN1cnJlbnQgcGFnZSBhbmRcblx0XHRcdC8vIDIuIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBwYWdlXG5cdFx0XHQvLyBOZWVkIHRvIGNvbnNpZGVyIGFsc28gaW1tZWRpYXRlIGNoaWxkcmVuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIGtleXNcblx0XHRcdGNvbnRleHRQYXRocy5mb3JFYWNoKChjb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAoY29udGV4dFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsQW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRsb2NhbEFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0sXG5cdFx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9wZW5SZWNvbW1lbmRhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHREYXRhIFRoZSBjb250ZXh0IGRhdGEgb2JqZWN0IGZvciByZWNvbW1lbmRhdGlvbnNcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uQ29udGV4dCBUaGUgcmVjb21tZW5kYXRpb24gY29udGV4dFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbkRhdGFcblx0ICogQHBhcmFtIGNvbnRleHRLZXkgQ29udGV4dCBLZXlcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRjb250ZXh0RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cmVjb21tZW5kYXRpb25Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSxcblx0XHRjb250ZXh0S2V5ID0gXCJcIlxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGN1cnJlbnRLZXkgaW4gY29udGV4dERhdGEpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRleHREYXRhW2N1cnJlbnRLZXldO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWVJc0NvbnRleHQgPVxuXHRcdFx0XHRcdChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQSAmJiAoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGN1cnJlbnRLZXkuc3BsaXQoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKVswXTtcblx0XHRcdFx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb246IFJlY29tbWVuZGF0aW9uRGF0YSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogY29udGV4dEtleSA/IGAke2NvbnRleHRLZXl9LyR7cHJvcGVydHlQYXRofWAgOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHR2YWx1ZTogY3VycmVudFZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyOiBbXSxcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyVGV4dDogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGV4dERhdGFbYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uYF07XG5cdFx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb24udGV4dCA9IGRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5wdXNoKG9wZW5SZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmICFjdXJyZW50VmFsdWVJc0NvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBjb25maXJtIHJlY29tbWVuZGF0aW9ucyBkaWFsb2cuXG5cdCAqIEBwYXJhbSBpc1NhdmUgQm9vbGVhbiBmbGFnIHdoaWNoIHdvdWxkIGJlIHNldCB0byB0cnVlIGlmIHdlIGFyZSBzYXZpbmcgdGhlIGRvY3VtZW50IGFuZCB3b3VsZCBiZSBmYWxzZSBpZiB3ZSBkbyBhcHBseSBjaGFuZ2VzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd291bGQgcmVzb2x2ZSB3aXRoIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gKEFjY2VwdCwgSWdub3JlLCBDb250aW51ZSwgU2tpcHBlZClcblx0ICovXG5cdHB1YmxpYyBhc3luYyBvcGVuKGlzU2F2ZTogYm9vbGVhbik6IFByb21pc2U8UmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIGNoZWNrIGZvciBidWlsdC1pbiByZWNvbW1lbmRhdGlvbnNcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zKCk7XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSB7XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgZm91bmQgdGhlbiBjaGVjayBmb3IgbGVnYWN5IHJlY29tbWVuZGF0aW9ucy5cblx0XHRcdGNvbnN0IGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0ID0gKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0KCk7XG5cdFx0XHRpZiAobGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QpIHtcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFjY2VwdEFsbFBhcmFtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSB0aGlzLmdldEFjY2VwdEFsbE1vZGVsKCk7XG5cdFx0dGhpcy52aWV3LnNldE1vZGVsKGFjY2VwdE1vZGVsLCBcIl9hY2NlcHREaWFsb2dNb2RlbFwiKTtcblx0XHRpZiAoIWFjY2VwdE1vZGVsLmdldERhdGEoKS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Ta2lwcGVkO1xuXHRcdH1cblx0XHR0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRkaWFsb2c/LnNldEVzY2FwZUhhbmRsZXIodGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KGRpYWxvZyBhcyBVSTVFbGVtZW50KTtcblx0XHRkaWFsb2c/Lm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgY29uZmlybVJlY29tbWVuZGF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBBY2NlcHQgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFjY2VwdEFuZFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGlzQWNjZXB0ZWQgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5hY2NlcHRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFpc0FjY2VwdGVkKSB7XG5cdFx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcihcIkFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRmFpbGVkXCIpO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBJZ25vcmUgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0KHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cygpO1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBDb250aW51ZSBFZGl0aW5nIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25Db250aW51ZUVkaXRpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgb3IgbmFtZSBvZiB0aGUgRmllbGQgYmFzZWQgb24gaXRzIHByb3BlcnR5IHBhdGguXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBGaWVsZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGROYW1lKHRhcmdldFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8XG5cdFx0XHR0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKVt0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggLSAxXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0ZXh0IGZvciByZWNvbW1lbmRhdGlvbiBiYXNlZCBvbiBkaXNwbGF5IG1vZGUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGVcblx0ICogQHJldHVybnMgVGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUZXh0KHJlY29tbWVuZGF0aW9uOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbi50ZXh0IHx8IHJlY29tbWVuZGF0aW9uLnZhbHVlKSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi50ZXh0ITtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi50ZXh0LCByZWNvbW1lbmRhdGlvbi52YWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udmFsdWUsIHJlY29tbWVuZGF0aW9uLnRleHQpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEJ1dHRvbiB3aXRoIGdpdmVuIHRleHQsIHR5cGUgYW5kIHByZXNzSGFuZGxlci5cblx0ICogQHBhcmFtIHRleHQgVGV4dCBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHByZXNzSGFuZGxlciBQcmVzcyBIYW5kbGVyIGZvciB0aGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIEJ1dHRvbiB3aXRoIHRoZSBnaXZlbiBzZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRCdXR0b24odGV4dDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHByZXNzSGFuZGxlcjogRXZlbnRIYW5kbGVyKTogQnV0dG9uIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvbiB0ZXh0PXt0ZXh0fSB0eXBlPXt0eXBlfSB3aWR0aD17XCJhdXRvXCJ9IHByZXNzPXtwcmVzc0hhbmRsZXJ9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgbWluV2lkdGg9e1wiMTAwJVwifT48L0ZsZXhJdGVtRGF0YT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBGb290ZXIgd2l0aCBCdXR0b25zLlxuXHQgKiBAcmV0dXJucyBGb290ZXJcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRGb290ZXIoKTogVG9vbGJhciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmlzU2F2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQWNjZXB0QW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmlzU2F2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRV9BTkRfU0FWRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbklnbm9yZUFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19DT05USU5VRV9FRElUSU5HXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZWQgYSBKU09OIE1vZGVsIGZvciB0aGUgYWNjZXB0IGFsbCBkaWFsb2cgZGF0YS5cblx0ICogQHJldHVybnMgVGhlIEpTT04gTW9kZWwgZm9yIGFjY2VwdCBhbGwgZGlhbG9nLlxuXHQgKi9cblx0Z2V0QWNjZXB0QWxsTW9kZWwoKTogSlNPTk1vZGVsIHtcblx0XHRjb25zdCBhY2NlcHRNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRjb25zdCBpdGVtcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgcmVjb21tZW5kYXRpb25EYXRhIG9mIHRoaXMuYWNjZXB0QWxsUGFyYW1zPy5yZWNvbW1lbmRhdGlvbkRhdGEgfHwgW10pIHtcblx0XHRcdGNvbnN0IGVudGl0eU5hbWVMYWJlbCA9IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuZ2V0RW50aXR5TmFtZShyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCkgfHwgXCJcIjtcblxuXHRcdFx0Y29uc3QgaWRlbnRpZmllclRleHRzID1cblx0XHRcdFx0cmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dCAmJiByZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHQ/IGAke2VudGl0eU5hbWVMYWJlbH0gKCR7cmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dH0pYFxuXHRcdFx0XHRcdDogZW50aXR5TmFtZUxhYmVsO1xuXG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25EYXRhLnZhbHVlIHx8IHJlY29tbWVuZGF0aW9uRGF0YS50ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldFBhdGggPSByZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dD8uZ2V0UGF0aCgpICsgXCIvXCIgKyByZWNvbW1lbmRhdGlvbkRhdGEucHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuZ2V0RGlzcGxheU1vZGVGb3JUYXJnZXRQYXRoKFxuXHRcdFx0XHRcdHRhcmdldFBhdGgsXG5cdFx0XHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBsaXN0RGF0YSA9IHtcblx0XHRcdFx0XHRmaWVsZE5hbWU6IHRoaXMuZ2V0RmllbGROYW1lKHRhcmdldFBhdGgpLnZhbHVlT2YoKSxcblx0XHRcdFx0XHRmaWVsZFZhbHVlOiB0aGlzLmdldFRleHQocmVjb21tZW5kYXRpb25EYXRhLCBkaXNwbGF5TW9kZSksXG5cdFx0XHRcdFx0aWRlbnRpZmllclRleHRzOiBpZGVudGlmaWVyVGV4dHNcblx0XHRcdFx0fTtcblx0XHRcdFx0aXRlbXMucHVzaChsaXN0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGFjY2VwdE1vZGVsLnNldERhdGEoeyBpdGVtczogaXRlbXMgfSk7XG5cdFx0cmV0dXJuIGFjY2VwdE1vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGdyb3VwcyB0aGUgY29udGV4dHMgYWNjb3JkaW5nIHRvIHRoZSBpZGVudGlmaWVyIHRleHRzLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgaXRlbVxuXHQgKiBAcmV0dXJucyBUaGUgdGV4dCBvZiB0aGUgZ3JvdXBcblx0ICovXG5cdGdldEdyb3VwKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkZW50aWZpZXJUZXh0c1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1lc3NhZ2Ugc3RyaXAgdG8gYmUgc2hvd24gaW4gdGhlIGFjY2VwdCBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbWVzc2FnZSBzdHJpcCB3aXRoIHRoZSBkZXNpcmVkIHRleHQuXG5cdCAqL1xuXHRnZXRNZXNzYWdlU3RyaXAoKTogTWVzc2FnZVN0cmlwIHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VTdHJpcFRleHQgPVxuXHRcdFx0YWNjZXB0QWxsRGF0YS5sZW5ndGggPiAxXG5cdFx0XHRcdD8gdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19URVhUXCIsIFthY2NlcHRBbGxEYXRhLmxlbmd0aF0pXG5cdFx0XHRcdDogdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19URVhUX1NJTkdVTEFSXCIpO1xuXHRcdHJldHVybiA8TWVzc2FnZVN0cmlwIHRleHQ9e21lc3NhZ2VTdHJpcFRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2VTdHJpcCgpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXREaWFsb2dDb250ZW50KCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZvb3RlcjogPD57dGhpcy5nZXRGb290ZXIoKX08Lz5cblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCkgYXMgRGlhbG9nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bb0NZQSw0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
|
|
@@ -24,12 +24,15 @@ import Sorter from "sap/ui/model/Sorter";
|
|
|
24
24
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
25
25
|
import type { default as ODataV4Context } from "sap/ui/model/odata/v4/Context";
|
|
26
26
|
import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
27
|
+
import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
|
|
27
28
|
import type { EventHandler } from "types/extension_types";
|
|
29
|
+
import type BaseController from "../../BaseController";
|
|
28
30
|
import type PageController from "../../PageController";
|
|
29
31
|
import type ResourceModel from "../../ResourceModel";
|
|
30
|
-
import type { AcceptAllParams } from "../../controllerextensions/Recommendations";
|
|
32
|
+
import type { AcceptAllParams, RecommendationData } from "../../controllerextensions/Recommendations";
|
|
31
33
|
import valueFormatters from "../../formatters/ValueFormatter";
|
|
32
34
|
import { standardRecommendationHelper, type StandardRecommendationDataType } from "../../helpers/StandardRecommendationHelper";
|
|
35
|
+
import type FclController from "../../rootView/Fcl.controller";
|
|
33
36
|
|
|
34
37
|
export enum RecommendationDialogDecision {
|
|
35
38
|
Accept = "Accept_Recommendations",
|
|
@@ -70,16 +73,149 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
|
|
|
70
73
|
/**
|
|
71
74
|
* Rejects the promise of open dialog
|
|
72
75
|
*/
|
|
73
|
-
|
|
76
|
+
public promiseReject!: Function;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @returns Recommendation Data
|
|
81
|
+
*/
|
|
82
|
+
|
|
83
|
+
public getOpenRecommendations(): RecommendationData[] {
|
|
84
|
+
const visibleContextPaths = this.getVisiblePageContextPaths();
|
|
85
|
+
const openRecommendations = this.getOpenRecommendationsForVisibleContextPaths(visibleContextPaths);
|
|
86
|
+
const recommendations: RecommendationData[] = [];
|
|
87
|
+
if (openRecommendations.length > 0) {
|
|
88
|
+
openRecommendations.forEach((recommendation) => {
|
|
89
|
+
const context = this.view.getBindingContext();
|
|
90
|
+
const propertyPath: string = recommendation.propertyPath ? recommendation.propertyPath : "";
|
|
91
|
+
if (
|
|
92
|
+
context?.getProperty(propertyPath) === null ||
|
|
93
|
+
context?.getProperty(propertyPath) === undefined ||
|
|
94
|
+
context?.getProperty(propertyPath) == ""
|
|
95
|
+
) {
|
|
96
|
+
recommendations.push(recommendation);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return recommendations;
|
|
101
|
+
// check if we have recommendations from the current page in the localAnnotationModel
|
|
102
|
+
// return open recommendations.
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
*
|
|
107
|
+
* @returns Collection of context paths
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
public getVisiblePageContextPaths(): (string | undefined)[] {
|
|
111
|
+
const visiblePageContextPaths = [this.view.getBindingContext()?.getPath()];
|
|
112
|
+
const controller = this.view.getController() as BaseController;
|
|
113
|
+
const fclController = controller.getAppComponent().getRootViewController() as FclController;
|
|
114
|
+
const isFclEnabled = controller.getAppComponent()._isFclEnabled();
|
|
115
|
+
const isFullScreen = isFclEnabled ? fclController.getHelper().getCurrentUIState().isFullScreen : true;
|
|
116
|
+
if (isFclEnabled && !isFullScreen) {
|
|
117
|
+
const rightMostContext = fclController.getRightmostContext();
|
|
118
|
+
visiblePageContextPaths.push(rightMostContext?.getPath());
|
|
119
|
+
}
|
|
120
|
+
return visiblePageContextPaths;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
*
|
|
125
|
+
* @param contextPaths Paths of the contexts
|
|
126
|
+
* @returns RecommendationData for visible contexts
|
|
127
|
+
*/
|
|
128
|
+
public getOpenRecommendationsForVisibleContextPaths(contextPaths: (string | undefined)[]): RecommendationData[] {
|
|
129
|
+
const openRecommendations: RecommendationData[] = [];
|
|
130
|
+
if (contextPaths.length > 0) {
|
|
131
|
+
const localAnnotationModel = (this.view.getModel() as ODataModel).getLocalAnnotationModel();
|
|
132
|
+
// check context paths in local annotation models which match to
|
|
133
|
+
// 1. current page and
|
|
134
|
+
// 2. immediate children of the current page
|
|
135
|
+
// Need to consider also immediate children
|
|
136
|
+
// iterate over all keys
|
|
137
|
+
contextPaths.forEach((contextPath) => {
|
|
138
|
+
if (contextPath !== undefined) {
|
|
139
|
+
const localAnnotationObject = localAnnotationModel.getObject(contextPath);
|
|
140
|
+
if (localAnnotationObject) {
|
|
141
|
+
this.getOpenRecommendationsForContext(
|
|
142
|
+
localAnnotationObject,
|
|
143
|
+
localAnnotationObject["recommendationContext"],
|
|
144
|
+
openRecommendations
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return openRecommendations;
|
|
151
|
+
}
|
|
74
152
|
|
|
75
153
|
/**
|
|
76
|
-
* Opens the confirm recommendations dialog.
|
|
77
154
|
*
|
|
155
|
+
* @param contextData The context data object for recommendations
|
|
156
|
+
* @param recommendationContext The recommendation context
|
|
157
|
+
* @param openRecommendations RecommendationData
|
|
158
|
+
* @param contextKey Context Key
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
private getOpenRecommendationsForContext(
|
|
162
|
+
contextData: Record<string, unknown>,
|
|
163
|
+
recommendationContext: ODataV4Context,
|
|
164
|
+
openRecommendations: RecommendationData[],
|
|
165
|
+
contextKey = ""
|
|
166
|
+
): void {
|
|
167
|
+
for (const currentKey in contextData) {
|
|
168
|
+
const currentValue = contextData[currentKey];
|
|
169
|
+
if (currentValue) {
|
|
170
|
+
const currentValueIsContext =
|
|
171
|
+
(currentValue as ODataV4Context).isA && (currentValue as ODataV4Context).isA("sap.ui.model.odata.v4.Context");
|
|
172
|
+
if (currentKey.includes("@$ui5.fe.recommendations.placeholderValue")) {
|
|
173
|
+
const propertyPath = currentKey.split("@$ui5.fe.recommendations.placeholderValue")[0];
|
|
174
|
+
const openRecommendation: RecommendationData = {
|
|
175
|
+
context: recommendationContext,
|
|
176
|
+
propertyPath: contextKey ? `${contextKey}/${propertyPath}` : propertyPath,
|
|
177
|
+
value: currentValue as string,
|
|
178
|
+
contextIdentifier: [],
|
|
179
|
+
contextIdentifierText: []
|
|
180
|
+
};
|
|
181
|
+
const description = contextData[`${propertyPath}@$ui5.fe.recommendations.placeholderDescription`];
|
|
182
|
+
if (description) {
|
|
183
|
+
openRecommendation.text = description as string;
|
|
184
|
+
}
|
|
185
|
+
openRecommendations.push(openRecommendation);
|
|
186
|
+
} else if (typeof currentValue === "object" && !Array.isArray(currentValue) && !currentValueIsContext) {
|
|
187
|
+
this.getOpenRecommendationsForContext(
|
|
188
|
+
currentValue as Record<string, unknown>,
|
|
189
|
+
recommendationContext,
|
|
190
|
+
openRecommendations,
|
|
191
|
+
currentKey
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Opens the confirm recommendations dialog.
|
|
78
200
|
* @param isSave Boolean flag which would be set to true if we are saving the document and would be false if we do apply changes
|
|
79
201
|
* @returns Promise which would resolve with RecommendationDialogDecision (Accept, Ignore, Continue, Skipped)
|
|
80
202
|
*/
|
|
81
|
-
public async open(isSave: boolean): Promise<RecommendationDialogDecision> {
|
|
82
|
-
|
|
203
|
+
public async open(isSave: boolean): Promise<RecommendationDialogDecision | undefined> {
|
|
204
|
+
// check for built-in recommendations
|
|
205
|
+
const openRecommendations = this.getOpenRecommendations();
|
|
206
|
+
if (openRecommendations.length > 0) {
|
|
207
|
+
this.acceptAllParams = {
|
|
208
|
+
recommendationData: openRecommendations
|
|
209
|
+
};
|
|
210
|
+
} else {
|
|
211
|
+
// if built-in recommendations are not found then check for legacy recommendations.
|
|
212
|
+
const legacyRecommendationsExist = (this.view?.getController() as PageController).recommendations.checkIfRecommendationsExist();
|
|
213
|
+
if (legacyRecommendationsExist) {
|
|
214
|
+
this.acceptAllParams = await (this.view?.getController() as PageController).recommendations.fetchAcceptAllParams();
|
|
215
|
+
} else {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
83
219
|
const acceptModel = this.getAcceptAllModel();
|
|
84
220
|
this.view.setModel(acceptModel, "_acceptDialogModel");
|
|
85
221
|
if (!acceptModel.getData().items?.length) {
|
|
@@ -144,7 +280,6 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
|
|
|
144
280
|
|
|
145
281
|
/**
|
|
146
282
|
* Gets the label or name of the Field based on its property path.
|
|
147
|
-
*
|
|
148
283
|
* @param targetPath
|
|
149
284
|
* @returns Returns the label of the Field.
|
|
150
285
|
*/
|
|
@@ -161,7 +296,6 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
|
|
|
161
296
|
|
|
162
297
|
/**
|
|
163
298
|
* Fetches text for recommendation based on display mode.
|
|
164
|
-
*
|
|
165
299
|
* @param recommendation
|
|
166
300
|
* @param displayMode
|
|
167
301
|
* @returns Text for a recommendation
|
|
@@ -184,7 +318,6 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
|
|
|
184
318
|
|
|
185
319
|
/**
|
|
186
320
|
* Returns Button with given text, type and pressHandler.
|
|
187
|
-
*
|
|
188
321
|
* @param text Text for the button
|
|
189
322
|
* @param type Type of the button
|
|
190
323
|
* @param pressHandler Press Handler for the button
|
|
@@ -206,7 +339,6 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
|
|
|
206
339
|
|
|
207
340
|
/**
|
|
208
341
|
* Returns Footer with Buttons.
|
|
209
|
-
*
|
|
210
342
|
* @returns Footer
|
|
211
343
|
*/
|
|
212
344
|
|
|
@@ -316,7 +448,6 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
|
|
|
316
448
|
|
|
317
449
|
/**
|
|
318
450
|
* The building block render function.
|
|
319
|
-
*
|
|
320
451
|
* @returns An XML-based string
|
|
321
452
|
*/
|
|
322
453
|
getContent(): Dialog {
|