@sapui5/sap.fe.core 1.97.0 → 1.99.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +377 -405
- package/src/sap/fe/core/AnnotationHelper.ts +385 -0
- package/src/sap/fe/core/AppComponent.js +6 -3
- package/src/sap/fe/core/AppStateHandler.js +229 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +3 -2
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2073 -2379
- package/src/sap/fe/core/CommonUtils.ts +2078 -0
- package/src/sap/fe/core/ExtensionAPI.js +16 -7
- package/src/sap/fe/core/PageController.js +84 -119
- package/src/sap/fe/core/PageController.ts +101 -0
- package/src/sap/fe/core/RouterProxy.js +986 -807
- package/src/sap/fe/core/RouterProxy.ts +838 -0
- package/src/sap/fe/core/Synchronization.js +51 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +166 -0
- package/src/sap/fe/core/TemplateModel.js +97 -54
- package/src/sap/fe/core/TemplateModel.ts +64 -0
- package/src/sap/fe/core/TransactionHelper.js +1576 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1706 -0
- package/src/sap/fe/core/actions/draft.js +560 -581
- package/src/sap/fe/core/actions/draft.ts +594 -0
- package/src/sap/fe/core/actions/messageHandling.js +545 -511
- package/src/sap/fe/core/actions/messageHandling.ts +532 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1074 -1211
- package/src/sap/fe/core/actions/operations.ts +1162 -0
- package/src/sap/fe/core/actions/sticky.js +102 -105
- package/src/sap/fe/core/actions/sticky.ts +102 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +229 -260
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -23
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +82 -46
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +113 -25
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +135 -44
- package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +22 -9
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
- package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
- package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
- package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +22 -8
- package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
- package/src/sap/fe/core/controls/FilterBar.js +3 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/converters/ConverterContext.js +14 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
- package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +67 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +70 -14
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
- package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +20 -10
- package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +390 -398
- package/src/sap/fe/core/converters/controls/Common/Table.ts +497 -484
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
- package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +3 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +484 -437
- package/src/sap/fe/core/helpers/BindingExpression.ts +480 -463
- package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
- package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.support.js +12 -5
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
- package/src/sap/fe/core/messagebundle.properties +61 -13
- package/src/sap/fe/core/messagebundle_ar.properties +33 -2
- package/src/sap/fe/core/messagebundle_bg.properties +33 -2
- package/src/sap/fe/core/messagebundle_ca.properties +33 -2
- package/src/sap/fe/core/messagebundle_cs.properties +34 -3
- package/src/sap/fe/core/messagebundle_cy.properties +33 -2
- package/src/sap/fe/core/messagebundle_da.properties +33 -2
- package/src/sap/fe/core/messagebundle_de.properties +33 -2
- package/src/sap/fe/core/messagebundle_el.properties +33 -2
- package/src/sap/fe/core/messagebundle_en.properties +32 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +32 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +36 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +33 -2
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +33 -2
- package/src/sap/fe/core/messagebundle_es.properties +33 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +33 -2
- package/src/sap/fe/core/messagebundle_et.properties +33 -2
- package/src/sap/fe/core/messagebundle_fi.properties +34 -3
- package/src/sap/fe/core/messagebundle_fr.properties +38 -7
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -2
- package/src/sap/fe/core/messagebundle_hi.properties +33 -2
- package/src/sap/fe/core/messagebundle_hr.properties +33 -2
- package/src/sap/fe/core/messagebundle_hu.properties +34 -3
- package/src/sap/fe/core/messagebundle_id.properties +36 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -2
- package/src/sap/fe/core/messagebundle_iw.properties +33 -2
- package/src/sap/fe/core/messagebundle_ja.properties +33 -2
- package/src/sap/fe/core/messagebundle_kk.properties +33 -2
- package/src/sap/fe/core/messagebundle_ko.properties +33 -2
- package/src/sap/fe/core/messagebundle_lt.properties +33 -2
- package/src/sap/fe/core/messagebundle_lv.properties +33 -2
- package/src/sap/fe/core/messagebundle_ms.properties +33 -2
- package/src/sap/fe/core/messagebundle_nl.properties +33 -2
- package/src/sap/fe/core/messagebundle_no.properties +33 -2
- package/src/sap/fe/core/messagebundle_pl.properties +33 -2
- package/src/sap/fe/core/messagebundle_pt.properties +34 -3
- package/src/sap/fe/core/messagebundle_pt_PT.properties +33 -2
- package/src/sap/fe/core/messagebundle_ro.properties +33 -2
- package/src/sap/fe/core/messagebundle_ru.properties +33 -2
- package/src/sap/fe/core/messagebundle_sh.properties +33 -2
- package/src/sap/fe/core/messagebundle_sk.properties +33 -2
- package/src/sap/fe/core/messagebundle_sl.properties +33 -2
- package/src/sap/fe/core/messagebundle_sv.properties +34 -3
- package/src/sap/fe/core/messagebundle_th.properties +33 -2
- package/src/sap/fe/core/messagebundle_tr.properties +33 -2
- package/src/sap/fe/core/messagebundle_uk.properties +33 -2
- package/src/sap/fe/core/messagebundle_vi.properties +33 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +33 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +33 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +42 -85
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +57 -100
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +10 -48
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +14 -46
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +139 -70
- package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +45 -110
- package/src/sap/fe/core/templating/UIFormatters.ts +39 -75
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/* This class contains helpers to be used at runtime to retrieve further information on the model */
|
|
2
|
+
import Context from "sap/ui/model/odata/v4/Context";
|
|
3
|
+
import BaseContext from "sap/ui/model/Context";
|
|
4
|
+
import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
|
|
5
|
+
|
|
6
|
+
const ModelHelper = {
|
|
7
|
+
/**
|
|
8
|
+
* Method to determine if the programming model is sticky.
|
|
9
|
+
*
|
|
10
|
+
* @function
|
|
11
|
+
* @name isStickySessionSupported
|
|
12
|
+
* @param {sap.ui.model.odata.v4.ODataMetaModel} oMetaModel ODataModelMetaModel to check for sticky enabled entity
|
|
13
|
+
* @returns {boolean} Returns true if sticky, else false
|
|
14
|
+
*/
|
|
15
|
+
isStickySessionSupported: function(oMetaModel: ODataMetaModel) {
|
|
16
|
+
const oEntityContainer = oMetaModel.getObject("/");
|
|
17
|
+
for (const sEntitySet in oEntityContainer) {
|
|
18
|
+
if (
|
|
19
|
+
oEntityContainer[sEntitySet].$kind === "EntitySet" &&
|
|
20
|
+
oMetaModel.getObject(`/${sEntitySet}@com.sap.vocabularies.Session.v1.StickySessionSupported`)
|
|
21
|
+
) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Method to determine if the programming model is draft.
|
|
30
|
+
*
|
|
31
|
+
* @function
|
|
32
|
+
* @name isDraftSupported
|
|
33
|
+
* @param {sap.ui.model.odata.v4.MetaModel} oMetaModel ODataModelMetaModel of the context for which draft support shall be checked
|
|
34
|
+
* @param {string} sPath Path for which draft support shall be checked
|
|
35
|
+
* @returns {boolean} Returns true if draft, else false
|
|
36
|
+
*/
|
|
37
|
+
isDraftSupported: function(oMetaModel: any, sPath: string) {
|
|
38
|
+
const oMetaContext = oMetaModel.getMetaContext(sPath);
|
|
39
|
+
let sTargetEntitySet = this.getTargetEntitySet(oMetaContext),
|
|
40
|
+
oParentEntitySetContext,
|
|
41
|
+
aParts;
|
|
42
|
+
|
|
43
|
+
if (oMetaContext.getProperty && oMetaContext.getProperty() && oMetaContext.getProperty().$ContainsTarget === true) {
|
|
44
|
+
aParts = oMetaModel
|
|
45
|
+
.getMetaPath(sPath)
|
|
46
|
+
.split("/")
|
|
47
|
+
.filter(Boolean);
|
|
48
|
+
if (aParts.length) {
|
|
49
|
+
for (let i = aParts.length - 1; i >= 0; i--) {
|
|
50
|
+
oParentEntitySetContext = oMetaModel.getMetaContext(oMetaModel.getMetaPath("/" + aParts[i]));
|
|
51
|
+
if (oParentEntitySetContext.getObject("$kind") === "EntitySet") {
|
|
52
|
+
sTargetEntitySet = this.getTargetEntitySet(oParentEntitySetContext);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
sTargetEntitySet = this.getTargetEntitySet(oMetaContext);
|
|
59
|
+
}
|
|
60
|
+
const oEntityContext = oMetaModel.getMetaContext(sTargetEntitySet);
|
|
61
|
+
if (
|
|
62
|
+
oEntityContext.getObject("@com.sap.vocabularies.Common.v1.DraftRoot") ||
|
|
63
|
+
oEntityContext.getObject("@com.sap.vocabularies.Common.v1.DraftNode")
|
|
64
|
+
) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Returns path to the target entity set via using navigation property binding.
|
|
72
|
+
*
|
|
73
|
+
* @function
|
|
74
|
+
* @name getTargetEntitySet
|
|
75
|
+
* @param {sap.ui.model.odata.v4.Context} oContext Context for which the target entity set shall be determined
|
|
76
|
+
* @returns {string} Returns path to the target entity set
|
|
77
|
+
*/
|
|
78
|
+
getTargetEntitySet: function(oContext: Context) {
|
|
79
|
+
const sPath = oContext.getPath();
|
|
80
|
+
if (
|
|
81
|
+
oContext.getObject("$kind") === "EntitySet" ||
|
|
82
|
+
oContext.getObject("$kind") === "Action" ||
|
|
83
|
+
oContext.getObject("0/$kind") === "Action"
|
|
84
|
+
) {
|
|
85
|
+
return sPath;
|
|
86
|
+
}
|
|
87
|
+
const sEntitySetPath = ModelHelper.getEntitySetPath(sPath);
|
|
88
|
+
return "/" + oContext.getObject(sEntitySetPath);
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Returns complete path to the entity set via using navigation property binding.
|
|
93
|
+
*
|
|
94
|
+
* @function
|
|
95
|
+
* @name getEntitySetPath
|
|
96
|
+
* @param {string} sPath Path for which complete entitySet path needs to be determined
|
|
97
|
+
* @returns {string} Returns complete path to the entity set
|
|
98
|
+
*/
|
|
99
|
+
getEntitySetPath: function(sPath: string) {
|
|
100
|
+
return (
|
|
101
|
+
"/" +
|
|
102
|
+
sPath
|
|
103
|
+
.split("/")
|
|
104
|
+
.filter(ModelHelper.filterOutNavPropBinding)
|
|
105
|
+
.join("/$NavigationPropertyBinding/")
|
|
106
|
+
);
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Gets the path for the items property of MultiValueField parameters.
|
|
111
|
+
*
|
|
112
|
+
* @function
|
|
113
|
+
* @name getActionParameterItemsModelPath
|
|
114
|
+
* @param {object} oParameter Action Parameter
|
|
115
|
+
* @returns {string} Returns the complete model path for the items property of MultiValueField parameters
|
|
116
|
+
*/
|
|
117
|
+
getActionParameterItemsModelPath: function(oParameter: any) {
|
|
118
|
+
return oParameter && oParameter.$Name ? `{path: 'mvfview>/${oParameter.$Name}'}` : undefined;
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
filterOutNavPropBinding: function(sPathPart: any) {
|
|
122
|
+
return sPathPart !== "" && sPathPart !== "$NavigationPropertyBinding";
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Adds a setProperty to the created binding contexts of the internal JSON model.
|
|
127
|
+
*
|
|
128
|
+
* @function
|
|
129
|
+
* @name enhanceInternalJSONModel
|
|
130
|
+
* @param {sap.ui.model.json.JSONModel} Internal JSON Model which is enhanced
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
enhanceInternalJSONModel: function(oInternalModel: any) {
|
|
134
|
+
const fnBindContext = oInternalModel.bindContext;
|
|
135
|
+
oInternalModel.bindContext = function(sPath: any, oContext: any, mParameters: any, ...args: any[]) {
|
|
136
|
+
oContext = fnBindContext.apply(this, [sPath, oContext, mParameters, ...args]);
|
|
137
|
+
const fnGetBoundContext = oContext.getBoundContext;
|
|
138
|
+
|
|
139
|
+
oContext.getBoundContext = function(...subArgs: any[]) {
|
|
140
|
+
const oBoundContext = fnGetBoundContext.apply(this, ...subArgs);
|
|
141
|
+
if (oBoundContext && !oBoundContext.setProperty) {
|
|
142
|
+
oBoundContext.setProperty = function(sSetPropPath: any, value: any) {
|
|
143
|
+
if (this.getObject() === undefined) {
|
|
144
|
+
// initialize
|
|
145
|
+
this.getModel().setProperty(this.getPath(), {});
|
|
146
|
+
}
|
|
147
|
+
this.getModel().setProperty(sSetPropPath, value, this);
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return oBoundContext;
|
|
151
|
+
};
|
|
152
|
+
return oContext;
|
|
153
|
+
};
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Returns whether filtering on the table is case sensitive.
|
|
158
|
+
*
|
|
159
|
+
* @param oMetaModel The instance of the meta model
|
|
160
|
+
* @returns {boolean|undefined} Returns 'false' if FilterFunctions annotation supports 'tolower', else 'true'
|
|
161
|
+
*/
|
|
162
|
+
isFilteringCaseSensitive: function(oMetaModel: any) {
|
|
163
|
+
if (!oMetaModel) {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
const aFilterFunctions = oMetaModel.getObject("/@Org.OData.Capabilities.V1.FilterFunctions");
|
|
167
|
+
// Get filter functions defined at EntityContainer and check for existence of 'tolower'
|
|
168
|
+
return aFilterFunctions ? aFilterFunctions.indexOf("tolower") === -1 : true;
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Get MetaPath for the context.
|
|
173
|
+
*
|
|
174
|
+
* @param {Context} oContext Context to be used
|
|
175
|
+
* @returns {string | undefined} Returns meta path for the context.
|
|
176
|
+
*/
|
|
177
|
+
getMetaPathForContext: function(oContext: any) {
|
|
178
|
+
const oModel = oContext.getModel(),
|
|
179
|
+
oMetaModel = oModel.getMetaModel(),
|
|
180
|
+
sPath = oContext.getPath();
|
|
181
|
+
return oMetaModel && sPath && oMetaModel.getMetaPath(sPath);
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Get MetaPath for the listbinding.
|
|
186
|
+
*
|
|
187
|
+
* @param {View} oView View of the control using listBinding
|
|
188
|
+
* @param {ODataListBinding | string} vListBinding ODataListBinding object or the binding path for a temporary list binding
|
|
189
|
+
* @returns {string | undefined} Returns meta path for the listbinding.
|
|
190
|
+
*/
|
|
191
|
+
getAbsoluteMetaPathForListBinding: function(oView: any, vListBinding: any) {
|
|
192
|
+
const oMetaModel = oView.getModel().getMetaModel();
|
|
193
|
+
let sMetaPath;
|
|
194
|
+
|
|
195
|
+
if (typeof vListBinding === "string") {
|
|
196
|
+
if (vListBinding.startsWith("/")) {
|
|
197
|
+
// absolute path
|
|
198
|
+
sMetaPath = oMetaModel.getMetaPath(vListBinding);
|
|
199
|
+
} else {
|
|
200
|
+
// relative path
|
|
201
|
+
const oBindingContext = oView.getBindingContext();
|
|
202
|
+
const sRootContextPath = oBindingContext.getPath();
|
|
203
|
+
sMetaPath = oMetaModel.getMetaPath(`${sRootContextPath}/${vListBinding}`);
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
// we already get a list binding use this one
|
|
207
|
+
const oBinding = vListBinding;
|
|
208
|
+
const oRootBinding = oBinding.getRootBinding();
|
|
209
|
+
if (oBinding === oRootBinding) {
|
|
210
|
+
// absolute path
|
|
211
|
+
sMetaPath = oMetaModel.getMetaPath(oBinding.getPath());
|
|
212
|
+
} else {
|
|
213
|
+
// relative path
|
|
214
|
+
const sRootBindingPath = oRootBinding.getPath();
|
|
215
|
+
const sRelativePath = oBinding.getPath();
|
|
216
|
+
sMetaPath = oMetaModel.getMetaPath(`${sRootBindingPath}/${sRelativePath}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return sMetaPath;
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export type InternalModelContext = BaseContext & {
|
|
224
|
+
setProperty(sPath: string, vValue: any): void;
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export default ModelHelper;
|
|
@@ -1,135 +1,213 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
*
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
+
sap.ui.define(["sap/ui/core/util/PasteHelper", "sap/m/MessageBox", "sap/base/Log"], function (CorePasteHelper, MessageBox, Log) {
|
|
6
|
+
"use strict";
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
8
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
|
|
10
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
11
|
+
|
|
12
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
+
|
|
14
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
15
|
+
|
|
16
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
17
|
+
|
|
18
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
19
|
+
|
|
20
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
21
|
+
|
|
22
|
+
var getInfoForEntityProperty = function (propertyPath, rowBindingPath, metaContext, metaModel) {
|
|
23
|
+
var property = metaContext.getProperty(propertyPath),
|
|
24
|
+
formatOptions = {
|
|
25
|
+
parseKeepsEmptyString: true
|
|
26
|
+
},
|
|
27
|
+
type = metaModel.getUI5Type("".concat(rowBindingPath, "/").concat(propertyPath), formatOptions),
|
|
28
|
+
isIgnored = !property || metaContext.getProperty(propertyPath + "@Org.OData.Core.V1.Computed");
|
|
29
|
+
return {
|
|
30
|
+
property: propertyPath,
|
|
31
|
+
ignore: isIgnored,
|
|
32
|
+
type: type
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
var displayErrorMessages = function (errorMessages) {
|
|
37
|
+
var messageDetails = _toConsumableArray(errorMessages);
|
|
38
|
+
|
|
39
|
+
var resourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core"),
|
|
40
|
+
errorCorrectionMessage = resourceBundle.getText("C_PASTE_HELPER_SAPFE_PASTE_ERROR_CORRECTION_MESSAGE"),
|
|
41
|
+
noteMessage = resourceBundle.getText("C_PASTE_HELPER_SAPFE_PASTE_ERROR_CORRECTION_NOTE");
|
|
42
|
+
var pasteErrorMessage;
|
|
43
|
+
|
|
44
|
+
if (messageDetails.length > 1) {
|
|
45
|
+
pasteErrorMessage = resourceBundle.getText("C_PASTE_HELPER_SAPFE_PASTE_ERROR_MESSAGE_PLURAL", [messageDetails.length]);
|
|
46
|
+
} else {
|
|
47
|
+
pasteErrorMessage = resourceBundle.getText("C_PASTE_HELPER_SAPFE_PASTE_ERROR_MESSAGE_SINGULAR");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
messageDetails.unshift(""); // To show space between the short text and the list of errors
|
|
51
|
+
|
|
52
|
+
messageDetails.unshift(noteMessage);
|
|
53
|
+
messageDetails.unshift(errorCorrectionMessage);
|
|
54
|
+
MessageBox.error(pasteErrorMessage, {
|
|
55
|
+
title: resourceBundle.getText("C_COMMON_SAPFE_ERROR_MESSAGES_PAGE_TITLE_ERROR"),
|
|
56
|
+
details: messageDetails.join("<br>")
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var PasteHelper = {
|
|
61
|
+
displayErrorMessages: displayErrorMessages,
|
|
62
|
+
formatCustomMessage: function (validationMessages, iRowNumber) {
|
|
63
|
+
var errorMessage = "";
|
|
64
|
+
var numberMessages = validationMessages.length;
|
|
65
|
+
var resourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core"),
|
|
66
|
+
i18nRow = resourceBundle.getText("T_MESSAGE_GROUP_DESCRIPTION_TABLE_ROW");
|
|
67
|
+
|
|
68
|
+
if (numberMessages > 0) {
|
|
69
|
+
errorMessage += "".concat(i18nRow, " ").concat(iRowNumber, ": ");
|
|
70
|
+
validationMessages.forEach(function (message, indexMessage) {
|
|
71
|
+
if (message.messageText) {
|
|
72
|
+
errorMessage += message.messageText + (indexMessage + 1 !== numberMessages ? " " : "");
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return errorMessage;
|
|
78
|
+
},
|
|
79
|
+
getColumnInfo: function (table) {
|
|
80
|
+
var _this = this;
|
|
81
|
+
|
|
82
|
+
var model = table.getRowBinding().getModel(),
|
|
83
|
+
metaModel = model.getMetaModel(),
|
|
84
|
+
rowBindingPath = model.resolve(table.getRowBinding().getPath(), table.getRowBinding().getContext()),
|
|
85
|
+
metaContext = metaModel.getMetaContext(rowBindingPath);
|
|
86
|
+
return table.getControlDelegate().fetchProperties(table).then(function (propertyInfo) {
|
|
87
|
+
var PropertyInfoDict = Object.assign.apply(Object, [{}].concat(_toConsumableArray(propertyInfo.map(function (property) {
|
|
88
|
+
return _defineProperty({}, property.name, property);
|
|
89
|
+
}))));
|
|
90
|
+
var columnInfos = [];
|
|
91
|
+
table.getColumns().forEach(function (column) {
|
|
92
|
+
var infoProperty = PropertyInfoDict[column.getDataProperty()]; // Check if it's a complex property (property associated to multiple simple properties)
|
|
93
|
+
|
|
94
|
+
if (infoProperty.propertyInfos) {
|
|
95
|
+
// Get data from simple property
|
|
96
|
+
infoProperty.propertyInfos.forEach(function (property) {
|
|
97
|
+
var dataProperty = PropertyInfoDict[property]; // Check if there is a simple property associated to a Rating or Progress ComplexProperty --> ignore
|
|
98
|
+
// Or check a navigation property within the current Complex property --> ignore
|
|
99
|
+
// A fake property was created into the propertyInfos to include the Target Value
|
|
100
|
+
// from the DataPoint (path includes the @com.sap.vocabularies.UI.v1.DataPoint annotation)
|
|
101
|
+
|
|
102
|
+
if (dataProperty && dataProperty.path.indexOf("@com.sap.vocabularies.UI.v1.DataPoint") > -1 || property.indexOf("/") > -1) {
|
|
103
|
+
columnInfos.push({
|
|
104
|
+
property: dataProperty.path,
|
|
105
|
+
ignore: true
|
|
106
|
+
});
|
|
107
|
+
} else {
|
|
108
|
+
columnInfos.push(_this.getInfoForEntityProperty(dataProperty.path, rowBindingPath, metaContext, metaModel));
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
} else if (infoProperty.path) {
|
|
112
|
+
columnInfos.push(_this.getInfoForEntityProperty(infoProperty.path, rowBindingPath, metaContext, metaModel));
|
|
113
|
+
} else {
|
|
114
|
+
// Empty column --> ignore
|
|
115
|
+
columnInfos.push({
|
|
116
|
+
property: "unused",
|
|
117
|
+
type: null,
|
|
118
|
+
ignore: true
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return columnInfos;
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
getInfoForEntityProperty: getInfoForEntityProperty,
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
*
|
|
129
|
+
* @param rawData
|
|
130
|
+
* @param table
|
|
131
|
+
* @returns {Promise<any>}
|
|
132
|
+
*/
|
|
133
|
+
parsePastedData: function (rawData, table) {
|
|
134
|
+
var _this2 = this;
|
|
135
|
+
|
|
136
|
+
return this.getColumnInfo(table).then(function (pasteInfos) {
|
|
137
|
+
// Check if we have data for at least the first editable column
|
|
138
|
+
var pastedColumnCount = rawData.length ? rawData[0].length : 0;
|
|
139
|
+
var firstEditableColumnIndex = -1;
|
|
140
|
+
|
|
141
|
+
for (var I = 0; I < pasteInfos.length && firstEditableColumnIndex < 0; I++) {
|
|
142
|
+
if (!pasteInfos[I].ignore) {
|
|
143
|
+
firstEditableColumnIndex = I;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return firstEditableColumnIndex < 0 || firstEditableColumnIndex > pastedColumnCount - 1 ? Promise.resolve({}) // We don't have data for an editable column --> return empty parsed data
|
|
148
|
+
: CorePasteHelper.parse(rawData, pasteInfos);
|
|
149
|
+
}).then(function (parseResult) {
|
|
150
|
+
if (parseResult.errors) {
|
|
151
|
+
var errorMessages = parseResult.errors.map(function (oElement) {
|
|
152
|
+
return oElement.message;
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
_this2.displayErrorMessages(errorMessages);
|
|
156
|
+
|
|
157
|
+
return []; // Errors --> return nothing
|
|
158
|
+
} else {
|
|
159
|
+
return parseResult.parsedData ? parseResult.parsedData : [];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
},
|
|
163
|
+
pasteData: function (rawData, table, controller) {
|
|
164
|
+
var _this3 = this;
|
|
165
|
+
|
|
166
|
+
var oInternalEditFlow = controller._editFlow;
|
|
167
|
+
var tableDefinition = table.getParent().getTableDefinition();
|
|
168
|
+
var aData = [];
|
|
169
|
+
return this.parsePastedData(rawData, table).then(function (aParsedData) {
|
|
170
|
+
aData = aParsedData || [];
|
|
171
|
+
return Promise.all(aData.map(function (mData) {
|
|
172
|
+
var _tableDefinition$cont;
|
|
173
|
+
|
|
174
|
+
return oInternalEditFlow.getTransactionHelper().validateDocument(table.getBindingContext(), {
|
|
175
|
+
data: mData,
|
|
176
|
+
customValidationFunction: tableDefinition === null || tableDefinition === void 0 ? void 0 : (_tableDefinition$cont = tableDefinition.control) === null || _tableDefinition$cont === void 0 ? void 0 : _tableDefinition$cont.customValidationFunction
|
|
177
|
+
}, controller.getView());
|
|
178
|
+
}));
|
|
179
|
+
}).then(function (aValidationMessages) {
|
|
180
|
+
var aErrorMessages = aValidationMessages.reduce(function (aMessages, aCustomMessages, index) {
|
|
181
|
+
if (aCustomMessages.length > 0) {
|
|
182
|
+
aMessages.push({
|
|
183
|
+
messages: aCustomMessages,
|
|
184
|
+
row: index + 1
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return aMessages;
|
|
189
|
+
}, []);
|
|
190
|
+
|
|
191
|
+
if (aErrorMessages.length > 0) {
|
|
192
|
+
var aRowMessages = aErrorMessages.map(function (mError) {
|
|
193
|
+
return _this3.formatCustomMessage(mError.messages, mError.row);
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
_this3.displayErrorMessages(aRowMessages);
|
|
197
|
+
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return aData;
|
|
202
|
+
}).then(function (aValidatedData) {
|
|
203
|
+
var _tableDefinition$cont2;
|
|
204
|
+
|
|
205
|
+
return aValidatedData.length > 0 ? oInternalEditFlow.createMultipleDocuments(table.getRowBinding(), aValidatedData, tableDefinition === null || tableDefinition === void 0 ? void 0 : (_tableDefinition$cont2 = tableDefinition.control) === null || _tableDefinition$cont2 === void 0 ? void 0 : _tableDefinition$cont2.createAtEnd, true, controller.editFlow.onBeforeCreate) : undefined;
|
|
206
|
+
}).catch(function (oError) {
|
|
207
|
+
Log.error("Error while pasting data", oError);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
return PasteHelper;
|
|
212
|
+
}, false);
|
|
213
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlBhc3RlSGVscGVyLnRzIl0sIm5hbWVzIjpbImdldEluZm9Gb3JFbnRpdHlQcm9wZXJ0eSIsInByb3BlcnR5UGF0aCIsInJvd0JpbmRpbmdQYXRoIiwibWV0YUNvbnRleHQiLCJtZXRhTW9kZWwiLCJwcm9wZXJ0eSIsImdldFByb3BlcnR5IiwiZm9ybWF0T3B0aW9ucyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsInR5cGUiLCJnZXRVSTVUeXBlIiwiaXNJZ25vcmVkIiwiaWdub3JlIiwiZGlzcGxheUVycm9yTWVzc2FnZXMiLCJlcnJvck1lc3NhZ2VzIiwibWVzc2FnZURldGFpbHMiLCJyZXNvdXJjZUJ1bmRsZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImVycm9yQ29ycmVjdGlvbk1lc3NhZ2UiLCJnZXRUZXh0Iiwibm90ZU1lc3NhZ2UiLCJwYXN0ZUVycm9yTWVzc2FnZSIsImxlbmd0aCIsInVuc2hpZnQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJ0aXRsZSIsImRldGFpbHMiLCJqb2luIiwiUGFzdGVIZWxwZXIiLCJmb3JtYXRDdXN0b21NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VzIiwiaVJvd051bWJlciIsImVycm9yTWVzc2FnZSIsIm51bWJlck1lc3NhZ2VzIiwiaTE4blJvdyIsImZvckVhY2giLCJtZXNzYWdlIiwiaW5kZXhNZXNzYWdlIiwibWVzc2FnZVRleHQiLCJnZXRDb2x1bW5JbmZvIiwidGFibGUiLCJtb2RlbCIsImdldFJvd0JpbmRpbmciLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlc29sdmUiLCJnZXRQYXRoIiwiZ2V0Q29udGV4dCIsImdldE1ldGFDb250ZXh0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGhlbiIsInByb3BlcnR5SW5mbyIsIlByb3BlcnR5SW5mb0RpY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJtYXAiLCJuYW1lIiwiY29sdW1uSW5mb3MiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiaW5mb1Byb3BlcnR5IiwiZ2V0RGF0YVByb3BlcnR5IiwicHJvcGVydHlJbmZvcyIsImRhdGFQcm9wZXJ0eSIsInBhdGgiLCJpbmRleE9mIiwicHVzaCIsInBhcnNlUGFzdGVkRGF0YSIsInJhd0RhdGEiLCJwYXN0ZUluZm9zIiwicGFzdGVkQ29sdW1uQ291bnQiLCJmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXgiLCJJIiwiUHJvbWlzZSIsIkNvcmVQYXN0ZUhlbHBlciIsInBhcnNlIiwicGFyc2VSZXN1bHQiLCJlcnJvcnMiLCJvRWxlbWVudCIsInBhcnNlZERhdGEiLCJwYXN0ZURhdGEiLCJjb250cm9sbGVyIiwib0ludGVybmFsRWRpdEZsb3ciLCJfZWRpdEZsb3ciLCJ0YWJsZURlZmluaXRpb24iLCJnZXRQYXJlbnQiLCJnZXRUYWJsZURlZmluaXRpb24iLCJhRGF0YSIsImFQYXJzZWREYXRhIiwiYWxsIiwibURhdGEiLCJnZXRUcmFuc2FjdGlvbkhlbHBlciIsInZhbGlkYXRlRG9jdW1lbnQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImRhdGEiLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjb250cm9sIiwiZ2V0VmlldyIsImFWYWxpZGF0aW9uTWVzc2FnZXMiLCJhRXJyb3JNZXNzYWdlcyIsInJlZHVjZSIsImFNZXNzYWdlcyIsImFDdXN0b21NZXNzYWdlcyIsImluZGV4IiwibWVzc2FnZXMiLCJyb3ciLCJhUm93TWVzc2FnZXMiLCJtRXJyb3IiLCJhVmFsaWRhdGVkRGF0YSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwiY3JlYXRlQXRFbmQiLCJlZGl0RmxvdyIsIm9uQmVmb3JlQ3JlYXRlIiwidW5kZWZpbmVkIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLE1BQU1BLHdCQUF3QixHQUFHLFVBQVNDLFlBQVQsRUFBNEJDLGNBQTVCLEVBQWlEQyxX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QUFELENBQW9COEIsUUFBcEIsQ0FBNkJDLGNBTDdCLENBREksR0FRSkMsU0FSSDtBQVNBLE9BeENLLEVBeUNMQyxLQXpDSyxDQXlDQyxVQUFBQyxNQUFNLEVBQUk7QUFDaEJDLFFBQUFBLEdBQUcsQ0FBQzdGLEtBQUosQ0FBVSwwQkFBVixFQUFzQzRGLE1BQXRDO0FBQ0EsT0EzQ0ssQ0FBUDtBQTRDQTtBQXBKa0IsR0FBcEI7U0F1SmV4RixXIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBDb3JlUGFzdGVIZWxwZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvUGFzdGVIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuXG5leHBvcnQgdHlwZSBjdXN0b21WYWxpZGF0aW9uTWVzc2FnZSA9IHtcblx0bWVzc2FnZVRleHQ/OiBzdHJpbmc7XG5cdG1lc3NhZ2VUYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBnZXRJbmZvRm9yRW50aXR5UHJvcGVydHkgPSBmdW5jdGlvbihwcm9wZXJ0eVBhdGg6IGFueSwgcm93QmluZGluZ1BhdGg6IGFueSwgbWV0YUNvbnRleHQ6IGFueSwgbWV0YU1vZGVsOiBhbnkpOiBhbnkge1xuXHRjb25zdCBwcm9wZXJ0eSA9IG1ldGFDb250ZXh0LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCksXG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgcGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlIH0sXG5cdFx0dHlwZSA9IG1ldGFNb2RlbC5nZXRVSTVUeXBlKGAke3Jvd0JpbmRpbmdQYXRofS8ke3Byb3BlcnR5UGF0aH1gLCBmb3JtYXRPcHRpb25zKSxcblx0XHRpc0lnbm9yZWQgPSAhcHJvcGVydHkgfHwgbWV0YUNvbnRleHQuZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoICsgXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIik7XG5cdHJldHVybiB7XG5cdFx0cHJvcGVydHk6IHByb3BlcnR5UGF0aCxcblx0XHRpZ25vcmU6IGlzSWdub3JlZCxcblx0XHR0eXBlOiB0eXBlXG5cdH07XG59O1xuXG5jb25zdCBkaXNwbGF5RXJyb3JNZXNzYWdlcyA9IGZ1bmN0aW9uKGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdKTogdm9pZCB7XG5cdGNvbnN0IG1lc3NhZ2VEZXRhaWxzID0gWy4uLmVycm9yTWVzc2FnZXNdO1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGUsXG5cdFx0ZXJyb3JDb3JyZWN0aW9uTWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX1BBU1RFX0hFTFBFUl9TQVBGRV9QQVNURV9FUlJPUl9DT1JSRUNUSU9OX01FU1NBR0VcIiksXG5cdFx0bm90ZU1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19QQVNURV9IRUxQRVJfU0FQRkVfUEFTVEVfRVJST1JfQ09SUkVDVElPTl9OT1RFXCIpO1xuXHRsZXQgcGFzdGVFcnJvck1lc3NhZ2U7XG5cblx0aWYgKG1lc3NhZ2VEZXRhaWxzLmxlbmd0aCA+IDEpIHtcblx0XHRwYXN0ZUVycm9yTWVzc2FnZSA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX1BBU1RFX0hFTFBFUl9TQVBGRV9QQVNURV9FUlJPUl9NRVNTQUdFX1BMVVJBTFwiLCBbbWVzc2FnZURldGFpbHMubGVuZ3RoXSk7XG5cdH0gZWxzZSB7XG5cdFx0cGFzdGVFcnJvck1lc3NhZ2UgPSByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19QQVNURV9IRUxQRVJfU0FQRkVfUEFTVEVfRVJST1JfTUVTU0FHRV9TSU5HVUxBUlwiKTtcblx0fVxuXHRtZXNzYWdlRGV0YWlscy51bnNoaWZ0KFwiXCIpOyAvLyBUbyBzaG93IHNwYWNlIGJldHdlZW4gdGhlIHNob3J0IHRleHQgYW5kIHRoZSBsaXN0IG9mIGVycm9yc1xuXHRtZXNzYWdlRGV0YWlscy51bnNoaWZ0KG5vdGVNZXNzYWdlKTtcblx0bWVzc2FnZURldGFpbHMudW5zaGlmdChlcnJvckNvcnJlY3Rpb25NZXNzYWdlKTtcblx0TWVzc2FnZUJveC5lcnJvcihwYXN0ZUVycm9yTWVzc2FnZSwge1xuXHRcdHRpdGxlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9FUlJPUlwiKSxcblx0XHRkZXRhaWxzOiBtZXNzYWdlRGV0YWlscy5qb2luKFwiPGJyPlwiKVxuXHR9KTtcbn07XG5cbmNvbnN0IFBhc3RlSGVscGVyID0ge1xuXHRkaXNwbGF5RXJyb3JNZXNzYWdlczogZGlzcGxheUVycm9yTWVzc2FnZXMsXG5cdGZvcm1hdEN1c3RvbU1lc3NhZ2U6IGZ1bmN0aW9uKHZhbGlkYXRpb25NZXNzYWdlczogY3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2VbXSwgaVJvd051bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblx0XHRjb25zdCBudW1iZXJNZXNzYWdlcyA9IHZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGg7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlLFxuXHRcdFx0aTE4blJvdyA9IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XXCIpO1xuXHRcdGlmIChudW1iZXJNZXNzYWdlcyA+IDApIHtcblx0XHRcdGVycm9yTWVzc2FnZSArPSBgJHtpMThuUm93fSAke2lSb3dOdW1iZXJ9OiBgO1xuXHRcdFx0dmFsaWRhdGlvbk1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UsIGluZGV4TWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRpZiAobWVzc2FnZS5tZXNzYWdlVGV4dCkge1xuXHRcdFx0XHRcdGVycm9yTWVzc2FnZSArPSBtZXNzYWdlLm1lc3NhZ2VUZXh0ICsgKGluZGV4TWVzc2FnZSArIDEgIT09IG51bWJlck1lc3NhZ2VzID8gXCIgXCIgOiBcIlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBlcnJvck1lc3NhZ2U7XG5cdH0sXG5cdGdldENvbHVtbkluZm86IGZ1bmN0aW9uKHRhYmxlOiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0TW9kZWwoKSxcblx0XHRcdG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0cm93QmluZGluZ1BhdGggPSBtb2RlbC5yZXNvbHZlKHRhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCksIHRhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRDb250ZXh0KCkpLFxuXHRcdFx0bWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocm93QmluZGluZ1BhdGgpO1xuXHRcdHJldHVybiB0YWJsZVxuXHRcdFx0LmdldENvbnRyb2xEZWxlZ2F0ZSgpXG5cdFx0XHQuZmV0Y2hQcm9wZXJ0aWVzKHRhYmxlKVxuXHRcdFx0LnRoZW4oKHByb3BlcnR5SW5mbzogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IFByb3BlcnR5SW5mb0RpY3QgPSBPYmplY3QuYXNzaWduKHt9LCAuLi5wcm9wZXJ0eUluZm8ubWFwKChwcm9wZXJ0eTogYW55KSA9PiAoeyBbcHJvcGVydHkubmFtZV06IHByb3BlcnR5IH0pKSk7XG5cdFx0XHRcdGNvbnN0IGNvbHVtbkluZm9zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHR0YWJsZS5nZXRDb2x1bW5zKCkuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpbmZvUHJvcGVydHkgPSBQcm9wZXJ0eUluZm9EaWN0W2NvbHVtbi5nZXREYXRhUHJvcGVydHkoKV07XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgaXQncyBhIGNvbXBsZXggcHJvcGVydHkgKHByb3BlcnR5IGFzc29jaWF0ZWQgdG8gbXVsdGlwbGUgc2ltcGxlIHByb3BlcnRpZXMpXG5cdFx0XHRcdFx0aWYgKGluZm9Qcm9wZXJ0eS5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRcdFx0XHQvLyBHZXQgZGF0YSBmcm9tIHNpbXBsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0aW5mb1Byb3BlcnR5LnByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkYXRhUHJvcGVydHkgPSBQcm9wZXJ0eUluZm9EaWN0W3Byb3BlcnR5XTtcblxuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNpbXBsZSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIGEgUmF0aW5nIG9yIFByb2dyZXNzIENvbXBsZXhQcm9wZXJ0eSAtLT4gaWdub3JlXG5cdFx0XHRcdFx0XHRcdC8vIE9yIGNoZWNrIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSB3aXRoaW4gdGhlIGN1cnJlbnQgQ29tcGxleCBwcm9wZXJ0eSAtLT4gaWdub3JlXG5cdFx0XHRcdFx0XHRcdC8vIEEgZmFrZSBwcm9wZXJ0eSB3YXMgY3JlYXRlZCBpbnRvIHRoZSBwcm9wZXJ0eUluZm9zIHRvIGluY2x1ZGUgdGhlIFRhcmdldCBWYWx1ZVxuXHRcdFx0XHRcdFx0XHQvLyBmcm9tIHRoZSBEYXRhUG9pbnQgKHBhdGggaW5jbHVkZXMgdGhlIEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnQgYW5ub3RhdGlvbilcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdChkYXRhUHJvcGVydHkgJiYgZGF0YVByb3BlcnR5LnBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMSkgfHxcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHk6IGRhdGFQcm9wZXJ0eS5wYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWdub3JlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaCh0aGlzLmdldEluZm9Gb3JFbnRpdHlQcm9wZXJ0eShkYXRhUHJvcGVydHkucGF0aCwgcm93QmluZGluZ1BhdGgsIG1ldGFDb250ZXh0LCBtZXRhTW9kZWwpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpbmZvUHJvcGVydHkucGF0aCkge1xuXHRcdFx0XHRcdFx0Y29sdW1uSW5mb3MucHVzaCh0aGlzLmdldEluZm9Gb3JFbnRpdHlQcm9wZXJ0eShpbmZvUHJvcGVydHkucGF0aCwgcm93QmluZGluZ1BhdGgsIG1ldGFDb250ZXh0LCBtZXRhTW9kZWwpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gRW1wdHkgY29sdW1uIC0tPiBpZ25vcmVcblx0XHRcdFx0XHRcdGNvbHVtbkluZm9zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eTogXCJ1bnVzZWRcIixcblx0XHRcdFx0XHRcdFx0dHlwZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0aWdub3JlOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gY29sdW1uSW5mb3M7XG5cdFx0XHR9KTtcblx0fSxcblx0Z2V0SW5mb0ZvckVudGl0eVByb3BlcnR5OiBnZXRJbmZvRm9yRW50aXR5UHJvcGVydHksXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gcmF3RGF0YVxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cblx0ICovXG5cdHBhcnNlUGFzdGVkRGF0YTogZnVuY3Rpb24ocmF3RGF0YTogYW55LCB0YWJsZTogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbHVtbkluZm8odGFibGUpXG5cdFx0XHQudGhlbihmdW5jdGlvbihwYXN0ZUluZm9zOiBhbnlbXSkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiB3ZSBoYXZlIGRhdGEgZm9yIGF0IGxlYXN0IHRoZSBmaXJzdCBlZGl0YWJsZSBjb2x1bW5cblx0XHRcdFx0Y29uc3QgcGFzdGVkQ29sdW1uQ291bnQgPSByYXdEYXRhLmxlbmd0aCA/IHJhd0RhdGFbMF0ubGVuZ3RoIDogMDtcblx0XHRcdFx0bGV0IGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA9IC0xO1xuXHRcdFx0XHRmb3IgKGxldCBJID0gMDsgSSA8IHBhc3RlSW5mb3MubGVuZ3RoICYmIGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA8IDA7IEkrKykge1xuXHRcdFx0XHRcdGlmICghcGFzdGVJbmZvc1tJXS5pZ25vcmUpIHtcblx0XHRcdFx0XHRcdGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA9IEk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmaXJzdEVkaXRhYmxlQ29sdW1uSW5kZXggPCAwIHx8IGZpcnN0RWRpdGFibGVDb2x1bW5JbmRleCA+IHBhc3RlZENvbHVtbkNvdW50IC0gMVxuXHRcdFx0XHRcdD8gUHJvbWlzZS5yZXNvbHZlKHt9KSAvLyBXZSBkb24ndCBoYXZlIGRhdGEgZm9yIGFuIGVkaXRhYmxlIGNvbHVtbiAtLT4gcmV0dXJuIGVtcHR5IHBhcnNlZCBkYXRhXG5cdFx0XHRcdFx0OiAoQ29yZVBhc3RlSGVscGVyIGFzIGFueSkucGFyc2UocmF3RGF0YSwgcGFzdGVJbmZvcyk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHBhcnNlUmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHBhcnNlUmVzdWx0LmVycm9ycykge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yTWVzc2FnZXMgPSBwYXJzZVJlc3VsdC5lcnJvcnMubWFwKGZ1bmN0aW9uKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5tZXNzYWdlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoaXMuZGlzcGxheUVycm9yTWVzc2FnZXMoZXJyb3JNZXNzYWdlcyk7XG5cdFx0XHRcdFx0cmV0dXJuIFtdOyAvLyBFcnJvcnMgLS0+IHJldHVybiBub3RoaW5nXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlUmVzdWx0LnBhcnNlZERhdGEgPyBwYXJzZVJlc3VsdC5wYXJzZWREYXRhIDogW107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9LFxuXHRwYXN0ZURhdGE6IGZ1bmN0aW9uKHJhd0RhdGE6IGFueSwgdGFibGU6IGFueSwgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG9JbnRlcm5hbEVkaXRGbG93ID0gKGNvbnRyb2xsZXIgYXMgYW55KS5fZWRpdEZsb3c7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGUuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0bGV0IGFEYXRhOiBhbnlbXSA9IFtdO1xuXHRcdHJldHVybiB0aGlzLnBhcnNlUGFzdGVkRGF0YShyYXdEYXRhLCB0YWJsZSlcblx0XHRcdC50aGVuKGFQYXJzZWREYXRhID0+IHtcblx0XHRcdFx0YURhdGEgPSBhUGFyc2VkRGF0YSB8fCBbXTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGFEYXRhLm1hcChtRGF0YSA9PlxuXHRcdFx0XHRcdFx0b0ludGVybmFsRWRpdEZsb3cuZ2V0VHJhbnNhY3Rpb25IZWxwZXIoKS52YWxpZGF0ZURvY3VtZW50KFxuXHRcdFx0XHRcdFx0XHR0YWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTogbURhdGEsXG5cdFx0XHRcdFx0XHRcdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiB0YWJsZURlZmluaXRpb24/LmNvbnRyb2w/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvblxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmdldFZpZXcoKVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhVmFsaWRhdGlvbk1lc3NhZ2VzID0+IHtcblx0XHRcdFx0Y29uc3QgYUVycm9yTWVzc2FnZXMgPSBhVmFsaWRhdGlvbk1lc3NhZ2VzLnJlZHVjZShmdW5jdGlvbihhTWVzc2FnZXMsIGFDdXN0b21NZXNzYWdlcywgaW5kZXgpIHtcblx0XHRcdFx0XHRpZiAoYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlcy5wdXNoKHsgbWVzc2FnZXM6IGFDdXN0b21NZXNzYWdlcywgcm93OiBpbmRleCArIDEgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBhTWVzc2FnZXM7XG5cdFx0XHRcdH0sIFtdKTtcblx0XHRcdFx0aWYgKGFFcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRjb25zdCBhUm93TWVzc2FnZXMgPSBhRXJyb3JNZXNzYWdlcy5tYXAoKG1FcnJvcjogYW55KSA9PiB0aGlzLmZvcm1hdEN1c3RvbU1lc3NhZ2UobUVycm9yLm1lc3NhZ2VzLCBtRXJyb3Iucm93KSk7XG5cdFx0XHRcdFx0dGhpcy5kaXNwbGF5RXJyb3JNZXNzYWdlcyhhUm93TWVzc2FnZXMpO1xuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYURhdGE7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oYVZhbGlkYXRlZERhdGEgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYVZhbGlkYXRlZERhdGEubGVuZ3RoID4gMFxuXHRcdFx0XHRcdD8gb0ludGVybmFsRWRpdEZsb3cuY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMoXG5cdFx0XHRcdFx0XHRcdHRhYmxlLmdldFJvd0JpbmRpbmcoKSxcblx0XHRcdFx0XHRcdFx0YVZhbGlkYXRlZERhdGEsXG5cdFx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbj8uY29udHJvbD8uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdChjb250cm9sbGVyIGFzIGFueSkuZWRpdEZsb3cub25CZWZvcmVDcmVhdGVcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2gob0Vycm9yID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcGFzdGluZyBkYXRhXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgUGFzdGVIZWxwZXI7XG4iXX0=
|