@sapui5/sap.fe.core 1.134.0 → 1.136.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.
Files changed (395) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +6 -62
  4. package/src/sap/fe/core/ActionRuntime.ts +14 -65
  5. package/src/sap/fe/core/AppComponent.js +10 -2
  6. package/src/sap/fe/core/AppComponent.ts +6 -0
  7. package/src/sap/fe/core/AppStateHandler.js +9 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +7 -5
  9. package/src/sap/fe/core/BaseController.js +1 -1
  10. package/src/sap/fe/core/CommonUtils.js +8 -4
  11. package/src/sap/fe/core/CommonUtils.ts +19 -4
  12. package/src/sap/fe/core/ExtensionAPI.js +7 -5
  13. package/src/sap/fe/core/ExtensionAPI.ts +5 -3
  14. package/src/sap/fe/core/IRowBindingInterface.js +1 -1
  15. package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
  16. package/src/sap/fe/core/PageController.js +36 -6
  17. package/src/sap/fe/core/PageController.ts +30 -0
  18. package/src/sap/fe/core/ResourceModel.js +1 -1
  19. package/src/sap/fe/core/ReuseComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.js +1 -1
  21. package/src/sap/fe/core/TemplateModel.js +1 -1
  22. package/src/sap/fe/core/UIProvider.js +2 -2
  23. package/src/sap/fe/core/UIProvider.ts +3 -32
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
  27. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
  28. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
  29. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
  35. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
  36. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
  37. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  38. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
  40. package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
  42. package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
  43. package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
  45. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
  54. package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
  55. package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
  59. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
  60. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  61. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
  63. package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
  64. package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
  65. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
  67. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
  68. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
  70. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
  71. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
  72. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  74. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
  75. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
  76. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
  77. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
  78. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
  79. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
  81. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
  82. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  85. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
  86. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
  87. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
  88. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
  89. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
  90. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
  91. package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
  96. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
  97. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
  98. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
  99. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
  100. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
  101. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
  102. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
  104. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  105. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
  106. package/src/sap/fe/core/controls/Any.js +1 -1
  107. package/src/sap/fe/core/controls/AnyElement.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  109. package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
  112. package/src/sap/fe/core/controls/DataWatcher.js +4 -3
  113. package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
  114. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  115. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
  116. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
  117. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  118. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
  119. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
  120. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
  121. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
  122. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
  123. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
  124. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
  125. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  126. package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  132. package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
  133. package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
  134. package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
  135. package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
  136. package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
  137. package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
  138. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
  139. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  140. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
  141. package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
  142. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  143. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
  144. package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
  145. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
  146. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
  147. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
  148. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
  149. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
  150. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
  151. package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
  152. package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
  153. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
  154. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
  155. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  156. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
  157. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
  158. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
  159. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
  161. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
  162. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  163. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  165. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  166. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  167. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
  169. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
  171. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  173. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
  174. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
  175. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  176. package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
  177. package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
  178. package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
  179. package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
  180. package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
  181. package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
  182. package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
  183. package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
  184. package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
  185. package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
  186. package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
  187. package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
  188. package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
  189. package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
  190. package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
  191. package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
  192. package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
  193. package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
  194. package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
  195. package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
  196. package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
  197. package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
  198. package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
  199. package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
  200. package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
  201. package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
  202. package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
  203. package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
  204. package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
  205. package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
  206. package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
  207. package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
  208. package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
  209. package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
  210. package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
  211. package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
  212. package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
  213. package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
  214. package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
  215. package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
  216. package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
  217. package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
  218. package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
  219. package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
  220. package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
  221. package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
  222. package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
  223. package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
  224. package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
  225. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  226. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  227. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  228. package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
  229. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  230. package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
  231. package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
  232. package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
  233. package/src/sap/fe/core/fpm/Component.js +1 -1
  234. package/src/sap/fe/core/fpm/manifest.json +1 -1
  235. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
  236. package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
  237. package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
  238. package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
  239. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
  240. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
  241. package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
  242. package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
  243. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  244. package/src/sap/fe/core/helpers/EditState.js +1 -1
  245. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  246. package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
  247. package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
  248. package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
  249. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
  250. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  251. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
  252. package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
  253. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  254. package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
  255. package/src/sap/fe/core/helpers/MetaPath.js +1 -1
  256. package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
  257. package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
  258. package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
  259. package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
  260. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  261. package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
  262. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  263. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  264. package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
  265. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  266. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
  267. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  268. package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
  269. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
  270. package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
  271. package/src/sap/fe/core/helpers/WebSocket.js +11 -2
  272. package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
  273. package/src/sap/fe/core/library.js +16 -4
  274. package/src/sap/fe/core/library.support.js +1 -1
  275. package/src/sap/fe/core/library.ts +1 -0
  276. package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
  277. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  278. package/src/sap/fe/core/messagebundle.properties +41 -2
  279. package/src/sap/fe/core/messagebundle_ar.properties +25 -4
  280. package/src/sap/fe/core/messagebundle_bg.properties +25 -4
  281. package/src/sap/fe/core/messagebundle_ca.properties +24 -3
  282. package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
  283. package/src/sap/fe/core/messagebundle_cs.properties +23 -2
  284. package/src/sap/fe/core/messagebundle_cy.properties +24 -3
  285. package/src/sap/fe/core/messagebundle_da.properties +25 -4
  286. package/src/sap/fe/core/messagebundle_de.properties +28 -7
  287. package/src/sap/fe/core/messagebundle_el.properties +23 -2
  288. package/src/sap/fe/core/messagebundle_en.properties +25 -4
  289. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
  290. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
  291. package/src/sap/fe/core/messagebundle_es.properties +23 -2
  292. package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
  293. package/src/sap/fe/core/messagebundle_et.properties +23 -2
  294. package/src/sap/fe/core/messagebundle_fi.properties +23 -2
  295. package/src/sap/fe/core/messagebundle_fr.properties +26 -5
  296. package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
  297. package/src/sap/fe/core/messagebundle_hi.properties +24 -3
  298. package/src/sap/fe/core/messagebundle_hr.properties +27 -6
  299. package/src/sap/fe/core/messagebundle_hu.properties +23 -2
  300. package/src/sap/fe/core/messagebundle_id.properties +23 -2
  301. package/src/sap/fe/core/messagebundle_it.properties +25 -4
  302. package/src/sap/fe/core/messagebundle_iw.properties +24 -3
  303. package/src/sap/fe/core/messagebundle_ja.properties +24 -3
  304. package/src/sap/fe/core/messagebundle_kk.properties +23 -2
  305. package/src/sap/fe/core/messagebundle_ko.properties +25 -4
  306. package/src/sap/fe/core/messagebundle_lt.properties +23 -2
  307. package/src/sap/fe/core/messagebundle_lv.properties +25 -4
  308. package/src/sap/fe/core/messagebundle_mk.properties +23 -2
  309. package/src/sap/fe/core/messagebundle_ms.properties +24 -3
  310. package/src/sap/fe/core/messagebundle_nl.properties +23 -2
  311. package/src/sap/fe/core/messagebundle_no.properties +23 -2
  312. package/src/sap/fe/core/messagebundle_pl.properties +25 -4
  313. package/src/sap/fe/core/messagebundle_pt.properties +25 -4
  314. package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
  315. package/src/sap/fe/core/messagebundle_ro.properties +25 -4
  316. package/src/sap/fe/core/messagebundle_ru.properties +24 -3
  317. package/src/sap/fe/core/messagebundle_sh.properties +25 -4
  318. package/src/sap/fe/core/messagebundle_sk.properties +24 -3
  319. package/src/sap/fe/core/messagebundle_sl.properties +28 -7
  320. package/src/sap/fe/core/messagebundle_sr.properties +25 -4
  321. package/src/sap/fe/core/messagebundle_sv.properties +23 -2
  322. package/src/sap/fe/core/messagebundle_th.properties +25 -4
  323. package/src/sap/fe/core/messagebundle_tr.properties +23 -2
  324. package/src/sap/fe/core/messagebundle_uk.properties +25 -4
  325. package/src/sap/fe/core/messagebundle_vi.properties +25 -4
  326. package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
  327. package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
  328. package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
  329. package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
  330. package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
  331. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  332. package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
  333. package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
  334. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  335. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  336. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
  337. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
  338. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  339. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
  340. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
  341. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
  342. package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
  343. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
  344. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  345. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  346. package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
  347. package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
  348. package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
  349. package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
  350. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
  351. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
  352. package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
  353. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  354. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
  355. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
  356. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
  357. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  358. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  359. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  360. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  361. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  362. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  363. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  364. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  365. package/src/sap/fe/core/templating/ActionHelper.js +1 -1
  366. package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
  367. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
  368. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  369. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  370. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  371. package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
  372. package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
  373. package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
  374. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  375. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  376. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  377. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  378. package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
  379. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
  380. package/src/sap/fe/core/templating/UIFormatters.js +5 -2
  381. package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
  382. package/src/sap/fe/core/type/Date.js +1 -1
  383. package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
  384. package/src/sap/fe/core/type/EDM.js +1 -1
  385. package/src/sap/fe/core/type/Email.js +1 -1
  386. package/src/sap/fe/core/type/FiscalDate.js +1 -1
  387. package/src/sap/fe/core/type/InputMask.js +1 -1
  388. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
  389. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
  390. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
  391. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
  392. package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
  393. package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
  394. package/src/sap/fe/core/operationsHelper.js +0 -192
  395. package/src/sap/fe/core/operationsHelper.ts +0 -277
@@ -1,502 +0,0 @@
1
- import type { ActionImport, ActionParameter, Action as EdmAction } from "@sap-ux/vocabularies-types";
2
- import Log from "sap/base/Log";
3
- import type { ShowActionDialogParameters } from "sap/fe/core/controllerextensions/editFlow/operations/facade";
4
- import FELibrary from "sap/fe/core/library";
5
- import Messaging from "sap/ui/core/Messaging";
6
- import type Message from "sap/ui/core/message/Message";
7
- import MessageType from "sap/ui/core/message/MessageType";
8
- import type View from "sap/ui/core/mvc/View";
9
- import type { default as ODataV4Context } from "sap/ui/model/odata/v4/Context";
10
- import type ODataContextBinding from "sap/ui/model/odata/v4/ODataContextBinding";
11
- import SubmitMode from "sap/ui/model/odata/v4/SubmitMode";
12
- import ActionRuntime from "../../ActionRuntime";
13
- import operationsHelper, { type StrictHandlingUtilities } from "../../operationsHelper";
14
- import type { ActionSideEffectsType } from "../../services/SideEffectsServiceFactory";
15
- import type MessageHandler from "../MessageHandler";
16
- import messageHandling from "../messageHandler/messageHandling";
17
-
18
- const Constants = FELibrary.Constants;
19
-
20
- export type OperationResult = {
21
- returnedContext?: ODataV4Context;
22
- boundContext: ODataV4Context;
23
- };
24
-
25
- export default class ODataOperation {
26
- private readonly enableStrictHandling: boolean = true;
27
-
28
- private readonly firstIterationOperations: Promise<unknown>[] = [];
29
-
30
- private operationParameters: ActionParameter[] = [];
31
-
32
- private neverSubmitted = true;
33
-
34
- private readonly apiGroupIdsToSubmit: Set<string> = new Set();
35
-
36
- constructor(
37
- private readonly operation: EdmAction | ActionImport,
38
- private readonly parameters: ShowActionDialogParameters,
39
- private readonly messageHandler: MessageHandler,
40
- private readonly strictHandlingUtilities: StrictHandlingUtilities | undefined,
41
- private readonly operationProperties: {
42
- deferredSubmit?: boolean;
43
- ignoreETag?: boolean;
44
- replaceWithRVC?: boolean;
45
- } = {}
46
- ) {
47
- this.enableStrictHandling = this.parameters.disableStrictHandling !== true && !(this.operation as EdmAction).isFunction;
48
- this.defineOperationParameters();
49
- }
50
-
51
- /**
52
- * Defines the parameters of the operation.
53
- */
54
- private defineOperationParameters(): void {
55
- if (this.operation._type === "ActionImport") {
56
- this.operationParameters = this.operation.action.parameters;
57
- } else {
58
- //Remove the binding parameters from the parameters list
59
- this.operationParameters = this.operation.isBound ? this.operation.parameters.slice(1) : this.operation.parameters;
60
- }
61
- }
62
-
63
- /**
64
- * Executes the operation.
65
- * @returns The promise of the operation
66
- */
67
- async execute(): Promise<PromiseSettledResult<OperationResult>[]> {
68
- let result: PromiseSettledResult<OperationResult>[];
69
- try {
70
- if (this.parameters.aContexts.length) {
71
- result = await (this.parameters.bGrouped === true ? this.executeChangeset() : this.executeSequentially());
72
- } else {
73
- result = await Promise.allSettled([this.executeImport()]);
74
- }
75
- } catch (error) {
76
- Log.error("Error while executing operation " + this.parameters.actionName, error as string);
77
- throw error;
78
- } finally {
79
- this.parameters.fnOnResponse?.();
80
- }
81
- return result;
82
- }
83
-
84
- /**
85
- * Executes the import operation.
86
- * @returns The promise of the operation
87
- */
88
- private async executeImport(): Promise<OperationResult> {
89
- let sideEffectsContextBinding: ODataContextBinding | undefined;
90
- const operationContext = this.parameters.model.bindContext(`/${this.parameters.actionName}(...)`);
91
- this.setParametersValue(operationContext);
92
- const groupId = this.parameters.groupId ?? "actionImport";
93
- const promises = [this.invoke(operationContext, groupId, null)];
94
-
95
- if (this.parameters.additionalSideEffect) {
96
- // We always need a context to trigger side-effects, so we create a context binding with a dummy path and destroy it afterwards
97
- sideEffectsContextBinding = this.parameters.model.bindContext("/unBoundAction");
98
- const sideEffect = {
99
- context: sideEffectsContextBinding.getBoundContext(),
100
- pathExpressions: this.parameters.additionalSideEffect.pathExpressions,
101
- triggerActions: this.parameters.additionalSideEffect.triggerActions
102
- };
103
- this.requestSideEffects(sideEffect, groupId, promises);
104
- }
105
- this.defaultSubmit(groupId);
106
-
107
- const currentPromiseValues = await Promise.all(promises);
108
- sideEffectsContextBinding?.destroy();
109
- return currentPromiseValues[0];
110
- }
111
-
112
- /**
113
- * Executes the operations on one changeset.
114
- * @returns The promise of the operations
115
- */
116
- private async executeChangeset(): Promise<PromiseSettledResult<OperationResult>[]> {
117
- const operationPromises = this.parameters.aContexts.map(async (context) =>
118
- this.executeBoundOperation(context, this.parameters.groupId)
119
- );
120
- await Promise.allSettled(this.firstIterationOperations);
121
- await this.manageStrictHandlingFails();
122
- return Promise.allSettled(operationPromises);
123
- }
124
-
125
- /**
126
- * Executes the operations sequentially.
127
- * @returns The promise of the operations
128
- */
129
- private async executeSequentially(): Promise<PromiseSettledResult<OperationResult>[]> {
130
- const operationPromises: Promise<OperationResult>[] = [];
131
-
132
- // serialization: executeBoundOperation to be called for each entry only after the promise returned from the one before has been resolved
133
- await this.parameters.aContexts.reduce(async (promise: Promise<void>, context: ODataV4Context, id: number): Promise<void> => {
134
- await promise;
135
- operationPromises.push(this.executeBoundOperation(context, this.parameters.groupId ?? `apiMode${id + 1}`));
136
- await Promise.allSettled(this.firstIterationOperations);
137
- }, Promise.resolve());
138
- await this.manageStrictHandlingFails(true);
139
- return Promise.allSettled(operationPromises);
140
- }
141
-
142
- /**
143
- * Executes the bound operation.
144
- * @param targetContext The target context
145
- * @param groupId The groupId of the batch
146
- * @returns The promise of the operation
147
- */
148
- private async executeBoundOperation(targetContext: ODataV4Context, groupId?: string): Promise<OperationResult> {
149
- const operationContext = this.parameters.model.bindContext(
150
- `${this.parameters.actionName}(...)`,
151
- targetContext,
152
- this.parameters.mBindingParameters
153
- );
154
-
155
- const promises: Promise<unknown>[] = [];
156
- this.setParametersValue(operationContext);
157
- const finalGroupId = groupId ?? operationContext.getUpdateGroupId();
158
- const sideEffects = {
159
- context: targetContext,
160
- pathExpressions: this.parameters.additionalSideEffect?.pathExpressions,
161
- triggerActions: this.parameters.additionalSideEffect?.triggerActions
162
- };
163
- //Has to be removed when the refactoring is done
164
- this.parameters.requestSideEffects = this.requestSideEffects.bind(this, sideEffects, finalGroupId, promises);
165
- const operationPromise = this.invoke(
166
- operationContext,
167
- finalGroupId,
168
- this.parameters.aContexts.findIndex((context) => context === targetContext) + 1
169
- );
170
-
171
- promises.push(operationPromise);
172
-
173
- this.requestSideEffects(sideEffects, finalGroupId, promises);
174
- this.defaultSubmit(finalGroupId);
175
- Promise.allSettled(promises);
176
- return operationPromise;
177
- }
178
-
179
- /**
180
- * Enhances the side effects of the operation
181
- *
182
- * When a new entity is created using a DataFieldForAction, a new
183
- * oDataContextBinding is created to execute the action. By default, this
184
- * oDataContextBinding is relative to the OdataListBinding of the table.
185
- *
186
- * Because of this dependency, when a SideEffects is executed on the
187
- * context into the OdataListBinding where the oDataContextBinding was bound, this SideEffects is also triggered on this
188
- * oDataContextBinding. We don't manage the lifecycle of the
189
- * oDataContextBinding. It means even if the draft related to the action
190
- * is removed, the odataContextBinding is still there, so if a SideEffects
191
- * is executed on the source target into oDataContextBinding, an error from the back end will be
192
- * received because we ask to refresh a property on an unknown entity.
193
- *
194
- * The SideEffects are requested only if the page is still open.
195
- * This avoids generating issues with ghost oDataContextBinding linked to destroyed context.
196
- * @param operationContextBinding The operation
197
- * @param returnedContext The returned context of this operation
198
- */
199
- private enhanceSideEffects(operationContextBinding: ODataContextBinding, returnedContext: ODataV4Context | undefined): void {
200
- if (returnedContext) {
201
- const appComponent = this.parameters.appComponent;
202
- const origin = operationContextBinding.requestSideEffects.bind(operationContextBinding);
203
- operationContextBinding.requestSideEffects = async (...args: unknown[]): Promise<void> => {
204
- if (
205
- appComponent
206
- .getRootViewController()
207
- .getInstancedViews()
208
- .find((pageView: View) => pageView.getBindingContext() === returnedContext)
209
- ) {
210
- return origin(...args);
211
- }
212
- return Promise.resolve();
213
- };
214
- }
215
- }
216
-
217
- /**
218
- * Invokes the operation on the context.
219
- * @param operationContextBinding The operation context binding
220
- * @param groupId The groupId of the batch
221
- * @param contextIndex The index of the context
222
- * @returns The promise of the operation
223
- */
224
- private async invoke(
225
- operationContextBinding: ODataContextBinding,
226
- groupId: string,
227
- contextIndex: number | null
228
- ): Promise<OperationResult> {
229
- let returnedContext;
230
- let firstIterationResolve!: Function;
231
- let firstIterationReject!: Function;
232
- const strictHandlingPromise = new Promise<unknown>(function (resolve, reject) {
233
- firstIterationResolve = resolve;
234
- firstIterationReject = reject;
235
- });
236
- this.firstIterationOperations.push(strictHandlingPromise);
237
- if (groupId && this.isAPIMode(groupId)) {
238
- this.apiGroupIdsToSubmit.add(groupId);
239
- }
240
- try {
241
- const contextLength = this.parameters.aContexts.length ? this.parameters.aContexts.length : null;
242
- const operationInvoke = operationContextBinding.invoke(
243
- groupId,
244
- this.operationProperties.ignoreETag,
245
- this.enableStrictHandling
246
- ? operationsHelper.fnOnStrictHandlingFailed.bind(
247
- this,
248
- groupId,
249
- this.parameters,
250
- contextIndex,
251
- operationContextBinding.getContext(),
252
- contextLength,
253
- this.messageHandler,
254
- this.strictHandlingUtilities,
255
- firstIterationResolve
256
- )
257
- : undefined,
258
- this.operationProperties.replaceWithRVC
259
- );
260
- await Promise.race([operationInvoke, strictHandlingPromise]);
261
-
262
- returnedContext = await operationInvoke;
263
- this.enhanceSideEffects(operationContextBinding, returnedContext);
264
- firstIterationResolve();
265
- if (!this.parameters.bGrouped) {
266
- //Has to be removed when the refactoring is done
267
- this.update412TransitionMessages(operationContextBinding, groupId, true);
268
- }
269
- } catch (error) {
270
- if (!this.parameters.bGrouped) {
271
- this.update412TransitionMessages(operationContextBinding, groupId);
272
- }
273
- firstIterationReject(error);
274
- throw Constants.ActionExecutionFailed;
275
- }
276
-
277
- return {
278
- returnedContext,
279
- boundContext: operationContextBinding.getBoundContext()
280
- };
281
- }
282
-
283
- /**
284
- * Submits the batch related to the groupId of the operation.
285
- */
286
- public submit(): void {
287
- if (!this.neverSubmitted || this.apiGroupIdsToSubmit.size === 0) {
288
- return;
289
- }
290
- for (const groupId of Array.from(this.apiGroupIdsToSubmit.values())) {
291
- this.submitOnModel(groupId);
292
- }
293
- this.parameters.fnOnSubmitted?.();
294
- }
295
-
296
- /**
297
- * Submits the batch at the model level related to the groupId of the operation.
298
- * @param groupId The groupId of the batch
299
- */
300
- private submitOnModel(groupId: string): void {
301
- this.parameters.model.submitBatch(groupId);
302
- this.apiGroupIdsToSubmit.delete(groupId);
303
- }
304
-
305
- /**
306
- * Is the SubmitMode of the groupId set to API.
307
- * @param groupId The groupId of the batch
308
- * @returns True if the SubmitMode is set to API, false otherwise
309
- */
310
- private isAPIMode(groupId?: string): boolean {
311
- if (!groupId) {
312
- return false;
313
- }
314
- if (groupId.startsWith("$auto") || groupId.startsWith("$direct") || groupId.startsWith("$single")) {
315
- return false;
316
- }
317
- const submitMode = (
318
- this.parameters.appComponent.getManifestEntry("sap.ui5")?.models[""]?.settings as
319
- | { groupProperties?: Record<string, { submit: SubmitMode }> }
320
- | undefined
321
- )?.groupProperties?.[groupId]?.submit;
322
-
323
- if (submitMode === undefined || [SubmitMode.Auto, SubmitMode.Direct].includes(submitMode)) {
324
- return true;
325
- }
326
- return true;
327
- }
328
-
329
- /**
330
- * Executes the submit of the operation if the submitMode is on API and deferredSubmit is not set to true
331
- * The submitBatch is skipped if the groupId is $auto or $direct since done by the model.
332
- * @param groupId The groupId of the batch
333
- */
334
- private defaultSubmit(groupId?: string): void {
335
- const firstSubmit = this.neverSubmitted;
336
- const isAPIMode = this.isAPIMode(groupId);
337
- if (!isAPIMode) {
338
- // The submitBatch is skipped if the groupId is $auto or $direct since done by the model
339
- this.neverSubmitted = false;
340
- } else if (this.operationProperties.deferredSubmit !== true && groupId) {
341
- this.neverSubmitted = false;
342
- this.submitOnModel(groupId);
343
- }
344
- if (firstSubmit && !this.neverSubmitted) {
345
- //Trigger the callback only once
346
- this.parameters.fnOnSubmitted?.();
347
- }
348
- }
349
-
350
- /**
351
- * Manages the strict handling fails.
352
- * @param displayErrorOrWarning True, if the warning/error messages have to be displayed, false otherwise (default)
353
- * @returns The promise of the strict handling
354
- */
355
- private async manageStrictHandlingFails(displayErrorOrWarning = false): Promise<void> {
356
- if (this.strictHandlingUtilities && this.strictHandlingUtilities.strictHandlingPromises.length) {
357
- try {
358
- if (
359
- (!messageHandling.hasTransitionErrorsOrWarnings() || displayErrorOrWarning) &&
360
- this.strictHandlingUtilities.strictHandlingWarningMessages.length
361
- ) {
362
- await operationsHelper.renderMessageView(
363
- this.parameters,
364
- this.messageHandler,
365
- this.strictHandlingUtilities.strictHandlingWarningMessages,
366
- this.strictHandlingUtilities,
367
- this.parameters.aContexts.length > 1
368
- );
369
- } else {
370
- for (const shPromise of this.strictHandlingUtilities.strictHandlingPromises) {
371
- shPromise.resolve(false);
372
- }
373
- const messageModel = Messaging.getMessageModel();
374
- const messagesInModel = messageModel.getData();
375
- messageModel.setData(messagesInModel.concat(this.strictHandlingUtilities.strictHandlingWarningMessages));
376
- }
377
- } catch {
378
- Log.error("Re-triggering of strict handling operations failed");
379
- }
380
- }
381
- }
382
-
383
- /**
384
- * Updates the strictHandling utilities with the failed and successful transition messages.
385
- * @param operation The operation context binding
386
- * @param groupId GroupId of the batch
387
- * @param onlySuccessMessages To update only successful transition messages
388
- */
389
- private update412TransitionMessages(operation: ODataContextBinding, groupId: string, onlySuccessMessages = false): void {
390
- //Has to be removed from here when the refactoring is done
391
- if (this.enableStrictHandling && this.strictHandlingUtilities) {
392
- const messages: Array<Message> = Messaging.getMessageModel().getData();
393
- const { processedMessageIds, delaySuccessMessages, strictHandlingTransitionFails } = this.strictHandlingUtilities;
394
- const unProcessedMessages = messages.reduce((acc: Message[], message) => {
395
- if (!processedMessageIds.has(message.getId())) {
396
- acc.push(message);
397
- }
398
- return acc;
399
- }, []);
400
-
401
- const newTransitionErrorMessagesId = unProcessedMessages
402
- .filter(
403
- (message) =>
404
- message.getPersistent() === true &&
405
- message.getType() !== MessageType.Success &&
406
- !processedMessageIds.has(message.getId())
407
- )
408
- .map((message) => message.getId());
409
-
410
- if (newTransitionErrorMessagesId.length) {
411
- this.strictHandlingUtilities.processedMessageIds = new Set([
412
- ...Array.from(processedMessageIds),
413
- ...newTransitionErrorMessagesId
414
- ]);
415
- delaySuccessMessages.push(
416
- ...Object.values(unProcessedMessages).filter((message) => message.getType() === MessageType.Success)
417
- );
418
- if (!onlySuccessMessages && this.parameters.internalModelContext) {
419
- strictHandlingTransitionFails.push({
420
- oAction: operation,
421
- groupId
422
- });
423
- }
424
- }
425
- }
426
- }
427
-
428
- /**
429
- * Sets the default values for the parameters of the operation.
430
- * @param operationContextBinding The operation context binding
431
- */
432
- private setParametersValue(operationContextBinding: ODataContextBinding): void {
433
- if (this.operationParameters.length) {
434
- const defaultValues = this.parameters.defaultParametersValues ?? {};
435
- for (const parameter of this.operationParameters) {
436
- const name = parameter.name;
437
- if (!defaultValues[name]) {
438
- switch (parameter.type) {
439
- case "Edm.String":
440
- defaultValues[name] = "";
441
- break;
442
- case "Edm.Boolean":
443
- defaultValues[name] = false;
444
- break;
445
- case "Edm.Byte":
446
- case "Edm.Int16":
447
- case "Edm.Int32":
448
- case "Edm.Int64":
449
- defaultValues[name] = 0;
450
- break;
451
- default:
452
- break;
453
- }
454
- }
455
- operationContextBinding.setParameter(name, defaultValues[name]);
456
- }
457
- }
458
- }
459
-
460
- /**
461
- * Requests the side effects for the action.
462
- * @param sideEffect The side effect to be executed
463
- * @param groupId The groupId of the batch
464
- * @param localPromise The promise of the invoked action
465
- * @returns The promise of the side effect
466
- */
467
- private async requestSideEffects(
468
- sideEffect: (ActionSideEffectsType & { context: ODataV4Context }) | undefined,
469
- groupId: string,
470
- localPromise?: Promise<unknown>[]
471
- ): Promise<void> {
472
- const sideEffectsService = this.parameters.appComponent.getSideEffectsService();
473
- let promises: Promise<unknown>[] = localPromise ?? [];
474
- // trigger actions from side effects
475
- if (sideEffect) {
476
- promises = promises.concat(
477
- (sideEffect.triggerActions ?? []).map(async (action) =>
478
- sideEffectsService.executeAction(action, sideEffect.context, groupId)
479
- ),
480
- sideEffect.pathExpressions
481
- ? sideEffectsService.requestSideEffects(sideEffect.pathExpressions, sideEffect.context, groupId)
482
- : []
483
- );
484
- if (sideEffect.pathExpressions) {
485
- try {
486
- await Promise.all(promises);
487
- if (this.parameters.operationAvailableMap && this.parameters.internalModelContext) {
488
- ActionRuntime.setActionEnablement(
489
- this.parameters.internalModelContext,
490
- JSON.parse(this.parameters.operationAvailableMap),
491
- this.parameters.selectedItems,
492
- "table"
493
- );
494
- }
495
- return;
496
- } catch (error: unknown) {
497
- Log.error("Error while requesting side effects", error as string);
498
- }
499
- }
500
- }
501
- }
502
- }
@@ -1,100 +0,0 @@
1
- /*!
2
- * SAP UI development toolkit for HTML5 (SAPUI5)
3
- * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
- */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/ui/core/Component", "sap/fe/core/templating/PropertyHelper", "sap/ui/rta/plugin/annotations/AnnotationTypes"], function (Log, MetaModelConverter, MetaPath, Component, PropertyHelper, AnnotationTypes) {
6
- "use strict";
7
-
8
- var _exports = {};
9
- var isUnit = PropertyHelper.isUnit;
10
- var isCurrency = PropertyHelper.isCurrency;
11
- var hasUnit = PropertyHelper.hasUnit;
12
- var hasCurrency = PropertyHelper.hasCurrency;
13
- var convertTypes = MetaModelConverter.convertTypes;
14
- // OK since we are in designtime we can ignore that dependency
15
- // eslint-disable-next-line @typescript-eslint/no-restricted-imports
16
- const TEXT_ARRANGEMENT_LABELS = {
17
- ["UI.TextArrangementType/TextOnly"]: "Text Only",
18
- ["UI.TextArrangementType/TextFirst"]: "Text First",
19
- ["UI.TextArrangementType/TextLast"]: "Text Last",
20
- ["UI.TextArrangementType/TextSeparate"]: "ID Only"
21
- };
22
-
23
- /**
24
- * Collects all properties with a Text annotation from the given entity type and its navigation properties.
25
- * @param entityType The entity type to start with
26
- * @param properties The array to collect the properties in
27
- * @param visitedEntity A map to keep track of visited entities
28
- */
29
- function collectProperties(entityType, properties, visitedEntity) {
30
- if (visitedEntity[entityType.fullyQualifiedName]) {
31
- return;
32
- }
33
- visitedEntity[entityType.fullyQualifiedName] = true;
34
- properties.push(...entityType.entityProperties.filter(prop => {
35
- return prop.annotations.Common?.Text !== undefined && !hasCurrency(prop) && !hasUnit(prop) && !isCurrency(prop) && !isUnit(prop);
36
- }).map(prop => {
37
- return {
38
- property: prop,
39
- entityType: entityType
40
- };
41
- }));
42
- }
43
- function getTextArrangementChangeAction() {
44
- return {
45
- changeType: "textArrangement_Test",
46
- title: () => "Change Text Arrangement",
47
- type: AnnotationTypes.ValueListType,
48
- delegate: {
49
- getAnnotationsChangeInfo: (oControl, _annotation) => {
50
- const templateComponent = Component.getOwnerComponentFor(oControl);
51
- if (templateComponent) {
52
- const metaModel = templateComponent.getMetaModel();
53
- const contextPathToUse = templateComponent.getFullContextPath();
54
- // Find closest building block
55
- let buildingBlock = oControl;
56
- while (buildingBlock && !buildingBlock.isA("sap.fe.core.buildingBlocks.BuildingBlock")) {
57
- buildingBlock = buildingBlock.getParent();
58
- }
59
- let metaPath = contextPathToUse;
60
- if (buildingBlock) {
61
- metaPath = buildingBlock.getProperty("metaPath") ?? contextPathToUse;
62
- }
63
- if (metaModel && contextPathToUse) {
64
- let targetEntity;
65
- try {
66
- targetEntity = new MetaPath(convertTypes(metaModel), metaPath, contextPathToUse);
67
- } catch (e) {
68
- Log.warning(`No metamodel or metaPath is not reachable with ${metaPath} and ${contextPathToUse}`);
69
- return null;
70
- }
71
- const properties = [];
72
- const visitedEntity = {};
73
- const defaultType = targetEntity.getClosestEntityType().annotations.UI?.TextArrangement?.toString() ?? "UI.TextArrangementType/TextFirst".toString();
74
- collectProperties(targetEntity.getClosestEntityType(), properties, visitedEntity);
75
- return {
76
- serviceUrl: oControl.getModel()?.getServiceUrl(),
77
- properties: properties.map(prop => {
78
- return {
79
- propertyName: prop.property.annotations.Common?.Label?.toString() ?? prop.property.name,
80
- annotationPath: "/" + prop.entityType.fullyQualifiedName + "/" + prop.property.name + "@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement",
81
- currentValue: prop.property.annotations.Common?.Text?.annotations?.UI?.TextArrangement?.toString() ?? defaultType
82
- };
83
- }),
84
- possibleValues: Object.keys(TEXT_ARRANGEMENT_LABELS).map(sKey => ({
85
- key: sKey,
86
- text: TEXT_ARRANGEMENT_LABELS[sKey]
87
- })),
88
- preSelectedProperty: "" // if the action is triggered from a control that corresponds to a property, only this one will be shown in the Dialog initially (search field populated with this string)
89
- };
90
- }
91
- }
92
- return null;
93
- }
94
- }
95
- };
96
- }
97
- _exports.getTextArrangementChangeAction = getTextArrangementChangeAction;
98
- return _exports;
99
- }, false);
100
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJURVhUX0FSUkFOR0VNRU5UX0xBQkVMUyIsImNvbGxlY3RQcm9wZXJ0aWVzIiwiZW50aXR5VHlwZSIsInByb3BlcnRpZXMiLCJ2aXNpdGVkRW50aXR5IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicHVzaCIsImVudGl0eVByb3BlcnRpZXMiLCJmaWx0ZXIiLCJwcm9wIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwidW5kZWZpbmVkIiwiaGFzQ3VycmVuY3kiLCJoYXNVbml0IiwiaXNDdXJyZW5jeSIsImlzVW5pdCIsIm1hcCIsInByb3BlcnR5IiwiZ2V0VGV4dEFycmFuZ2VtZW50Q2hhbmdlQWN0aW9uIiwiY2hhbmdlVHlwZSIsInRpdGxlIiwidHlwZSIsIkFubm90YXRpb25UeXBlcyIsIlZhbHVlTGlzdFR5cGUiLCJkZWxlZ2F0ZSIsImdldEFubm90YXRpb25zQ2hhbmdlSW5mbyIsIm9Db250cm9sIiwiX2Fubm90YXRpb24iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiY29udGV4dFBhdGhUb1VzZSIsImdldEZ1bGxDb250ZXh0UGF0aCIsImJ1aWxkaW5nQmxvY2siLCJpc0EiLCJnZXRQYXJlbnQiLCJtZXRhUGF0aCIsImdldFByb3BlcnR5IiwidGFyZ2V0RW50aXR5IiwiTWV0YVBhdGgiLCJjb252ZXJ0VHlwZXMiLCJlIiwiTG9nIiwid2FybmluZyIsImRlZmF1bHRUeXBlIiwiZ2V0Q2xvc2VzdEVudGl0eVR5cGUiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwic2VydmljZVVybCIsImdldE1vZGVsIiwiZ2V0U2VydmljZVVybCIsInByb3BlcnR5TmFtZSIsIkxhYmVsIiwibmFtZSIsImFubm90YXRpb25QYXRoIiwiY3VycmVudFZhbHVlIiwicG9zc2libGVWYWx1ZXMiLCJPYmplY3QiLCJrZXlzIiwic0tleSIsImtleSIsInRleHQiLCJwcmVTZWxlY3RlZFByb3BlcnR5IiwiX2V4cG9ydHMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBUZXh0QXJyYW5nZW1lbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG4vLyBPSyBzaW5jZSB3ZSBhcmUgaW4gZGVzaWdudGltZSB3ZSBjYW4gaWdub3JlIHRoYXQgZGVwZW5kZW5jeVxuaW1wb3J0IHsgaGFzQ3VycmVuY3ksIGhhc1VuaXQsIGlzQ3VycmVuY3ksIGlzVW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IEFubm90YXRpb25UeXBlcyBmcm9tIFwic2FwL3VpL3J0YS9wbHVnaW4vYW5ub3RhdGlvbnMvQW5ub3RhdGlvblR5cGVzXCI7XG5cbnR5cGUgQW5ub3RhdGlvbkNoYW5nZVJldHVyblR5cGUgPSB7XG5cdHNlcnZpY2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cHJvcGVydGllczoge1xuXHRcdHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0Y3VycmVudFZhbHVlOiBzdHJpbmc7XG5cdH1bXTtcblx0cG9zc2libGVWYWx1ZXM6IHsga2V5OiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W107XG5cdHByZVNlbGVjdGVkUHJvcGVydHk6IHN0cmluZzsgLy8gaWYgdGhlIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBhIGNvbnRyb2wgdGhhdCBjb3JyZXNwb25kcyB0byBhIHByb3BlcnR5LCBvbmx5IHRoaXMgb25lIHdpbGwgYmUgc2hvd24gaW4gdGhlIERpYWxvZyBpbml0aWFsbHkgKHNlYXJjaCBmaWVsZCBwb3B1bGF0ZWQgd2l0aCB0aGlzIHN0cmluZylcbn07XG5cbmNvbnN0IFRFWFRfQVJSQU5HRU1FTlRfTEFCRUxTID0ge1xuXHRbVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0T25seV06IFwiVGV4dCBPbmx5XCIsXG5cdFtUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRGaXJzdF06IFwiVGV4dCBGaXJzdFwiLFxuXHRbVGV4dEFycmFuZ2VtZW50VHlwZS5UZXh0TGFzdF06IFwiVGV4dCBMYXN0XCIsXG5cdFtUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRTZXBhcmF0ZV06IFwiSUQgT25seVwiXG59O1xuXG4vKipcbiAqIENvbGxlY3RzIGFsbCBwcm9wZXJ0aWVzIHdpdGggYSBUZXh0IGFubm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gZW50aXR5IHR5cGUgYW5kIGl0cyBuYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIHByb3BlcnRpZXMgVGhlIGFycmF5IHRvIGNvbGxlY3QgdGhlIHByb3BlcnRpZXMgaW5cbiAqIEBwYXJhbSB2aXNpdGVkRW50aXR5IEEgbWFwIHRvIGtlZXAgdHJhY2sgb2YgdmlzaXRlZCBlbnRpdGllc1xuICovXG5mdW5jdGlvbiBjb2xsZWN0UHJvcGVydGllcyhcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydGllczogeyBwcm9wZXJ0eTogUHJvcGVydHk7IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgfVtdLFxuXHR2aXNpdGVkRW50aXR5OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKTogdm9pZCB7XG5cdGlmICh2aXNpdGVkRW50aXR5W2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdHJldHVybjtcblx0fVxuXHR2aXNpdGVkRW50aXR5W2VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHRydWU7XG5cdHByb3BlcnRpZXMucHVzaChcblx0XHQuLi5lbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXNcblx0XHRcdC5maWx0ZXIoKHByb3A6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0cHJvcC5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdCFoYXNDdXJyZW5jeShwcm9wKSAmJlxuXHRcdFx0XHRcdCFoYXNVbml0KHByb3ApICYmXG5cdFx0XHRcdFx0IWlzQ3VycmVuY3kocHJvcCkgJiZcblx0XHRcdFx0XHQhaXNVbml0KHByb3ApXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgocHJvcDogUHJvcGVydHkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRwcm9wZXJ0eTogcHJvcCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlXG5cdFx0XHRcdH07XG5cdFx0XHR9KVxuXHQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRBcnJhbmdlbWVudENoYW5nZUFjdGlvbigpOiB7XG5cdGNoYW5nZVR5cGU6IHN0cmluZztcblx0dGl0bGU6ICgpID0+IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRkZWxlZ2F0ZTogeyBnZXRBbm5vdGF0aW9uc0NoYW5nZUluZm86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgX2Fubm90YXRpb246IHN0cmluZykgPT4gQW5ub3RhdGlvbkNoYW5nZVJldHVyblR5cGUgfCBudWxsIH07XG59IHtcblx0cmV0dXJuIHtcblx0XHRjaGFuZ2VUeXBlOiBcInRleHRBcnJhbmdlbWVudF9UZXN0XCIsXG5cdFx0dGl0bGU6ICgpOiBzdHJpbmcgPT4gXCJDaGFuZ2UgVGV4dCBBcnJhbmdlbWVudFwiLFxuXHRcdHR5cGU6IEFubm90YXRpb25UeXBlcy5WYWx1ZUxpc3RUeXBlLFxuXHRcdGRlbGVnYXRlOiB7XG5cdFx0XHRnZXRBbm5vdGF0aW9uc0NoYW5nZUluZm86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgX2Fubm90YXRpb246IHN0cmluZyk6IEFubm90YXRpb25DaGFuZ2VSZXR1cm5UeXBlIHwgbnVsbCA9PiB7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKHRlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGVtcGxhdGVDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGhUb1VzZSA9IHRlbXBsYXRlQ29tcG9uZW50LmdldEZ1bGxDb250ZXh0UGF0aCgpO1xuXHRcdFx0XHRcdC8vIEZpbmQgY2xvc2VzdCBidWlsZGluZyBibG9ja1xuXHRcdFx0XHRcdGxldCBidWlsZGluZ0Jsb2NrOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IG9Db250cm9sO1xuXHRcdFx0XHRcdHdoaWxlIChidWlsZGluZ0Jsb2NrICYmICFidWlsZGluZ0Jsb2NrLmlzQTxCdWlsZGluZ0Jsb2NrPihcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tcIikpIHtcblx0XHRcdFx0XHRcdGJ1aWxkaW5nQmxvY2sgPSBidWlsZGluZ0Jsb2NrLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRsZXQgbWV0YVBhdGggPSBjb250ZXh0UGF0aFRvVXNlITtcblx0XHRcdFx0XHRpZiAoYnVpbGRpbmdCbG9jaykge1xuXHRcdFx0XHRcdFx0bWV0YVBhdGggPSBidWlsZGluZ0Jsb2NrLmdldFByb3BlcnR5KFwibWV0YVBhdGhcIikgPz8gY29udGV4dFBhdGhUb1VzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG1ldGFNb2RlbCAmJiBjb250ZXh0UGF0aFRvVXNlKSB7XG5cdFx0XHRcdFx0XHRsZXQgdGFyZ2V0RW50aXR5OiBNZXRhUGF0aDxFbnRpdHlUeXBlPjtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldEVudGl0eSA9IG5ldyBNZXRhUGF0aChjb252ZXJ0VHlwZXMobWV0YU1vZGVsKSwgbWV0YVBhdGgsIGNvbnRleHRQYXRoVG9Vc2UpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRMb2cud2FybmluZyhgTm8gbWV0YW1vZGVsIG9yIG1ldGFQYXRoIGlzIG5vdCByZWFjaGFibGUgd2l0aCAke21ldGFQYXRofSBhbmQgJHtjb250ZXh0UGF0aFRvVXNlfWApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnRpZXM6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH1bXSA9IFtdO1xuXHRcdFx0XHRcdFx0Y29uc3QgdmlzaXRlZEVudGl0eTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRcdFx0XHRcdGNvbnN0IGRlZmF1bHRUeXBlID1cblx0XHRcdFx0XHRcdFx0dGFyZ2V0RW50aXR5LmdldENsb3Nlc3RFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSA/P1xuXHRcdFx0XHRcdFx0XHRUZXh0QXJyYW5nZW1lbnRUeXBlLlRleHRGaXJzdC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0Y29sbGVjdFByb3BlcnRpZXModGFyZ2V0RW50aXR5LmdldENsb3Nlc3RFbnRpdHlUeXBlKCksIHByb3BlcnRpZXMsIHZpc2l0ZWRFbnRpdHkpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0c2VydmljZVVybDogKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCB8IHVuZGVmaW5lZCk/LmdldFNlcnZpY2VVcmwoKSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogcHJvcGVydGllcy5tYXAoKHByb3A6IHsgcHJvcGVydHk6IFByb3BlcnR5OyBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlIH0pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydHlOYW1lOiBwcm9wLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcC5wcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSArXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiL1wiICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcC5wcm9wZXJ0eS5uYW1lICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50VmFsdWU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHByb3AucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudD8udG9TdHJpbmcoKSA/PyBkZWZhdWx0VHlwZVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRwb3NzaWJsZVZhbHVlczogT2JqZWN0LmtleXMoVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFMpLm1hcCgoc0tleSkgPT4gKHtcblx0XHRcdFx0XHRcdFx0XHRrZXk6IHNLZXksXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogVEVYVF9BUlJBTkdFTUVOVF9MQUJFTFNbc0tleSBhcyB1bmtub3duIGFzIGtleW9mIHR5cGVvZiBURVhUX0FSUkFOR0VNRU5UX0xBQkVMU11cblx0XHRcdFx0XHRcdFx0fSkpLFxuXHRcdFx0XHRcdFx0XHRwcmVTZWxlY3RlZFByb3BlcnR5OiBcIlwiIC8vIGlmIHRoZSBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gYSBjb250cm9sIHRoYXQgY29ycmVzcG9uZHMgdG8gYSBwcm9wZXJ0eSwgb25seSB0aGlzIG9uZSB3aWxsIGJlIHNob3duIGluIHRoZSBEaWFsb2cgaW5pdGlhbGx5IChzZWFyY2ggZmllbGQgcG9wdWxhdGVkIHdpdGggdGhpcyBzdHJpbmcpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFVQTtFQUVBO0VBY0EsTUFBTUEsdUJBQXVCLEdBQUc7SUFDL0IscUNBQWdDLFdBQVc7SUFDM0Msc0NBQWlDLFlBQVk7SUFDN0MscUNBQWdDLFdBQVc7SUFDM0MseUNBQW9DO0VBQ3JDLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsaUJBQWlCQSxDQUN6QkMsVUFBc0IsRUFDdEJDLFVBQTRELEVBQzVEQyxhQUFzQyxFQUMvQjtJQUNQLElBQUlBLGFBQWEsQ0FBQ0YsVUFBVSxDQUFDRyxrQkFBa0IsQ0FBQyxFQUFFO01BQ2pEO0lBQ0Q7SUFDQUQsYUFBYSxDQUFDRixVQUFVLENBQUNHLGtCQUFrQixDQUFDLEdBQUcsSUFBSTtJQUNuREYsVUFBVSxDQUFDRyxJQUFJLENBQ2QsR0FBR0osVUFBVSxDQUFDSyxnQkFBZ0IsQ0FDNUJDLE1BQU0sQ0FBRUMsSUFBYyxJQUFLO01BQzNCLE9BQ0NBLElBQUksQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNLEVBQUVDLElBQUksS0FBS0MsU0FBUyxJQUMzQyxDQUFDQyxXQUFXLENBQUNMLElBQUksQ0FBQyxJQUNsQixDQUFDTSxPQUFPLENBQUNOLElBQUksQ0FBQyxJQUNkLENBQUNPLFVBQVUsQ0FBQ1AsSUFBSSxDQUFDLElBQ2pCLENBQUNRLE1BQU0sQ0FBQ1IsSUFBSSxDQUFDO0lBRWYsQ0FBQyxDQUFDLENBQ0RTLEdBQUcsQ0FBRVQsSUFBYyxJQUFLO01BQ3hCLE9BQU87UUFDTlUsUUFBUSxFQUFFVixJQUFJO1FBQ2RQLFVBQVUsRUFBRUE7TUFDYixDQUFDO0lBQ0YsQ0FBQyxDQUNILENBQUM7RUFDRjtFQUNPLFNBQVNrQiw4QkFBOEJBLENBQUEsRUFLNUM7SUFDRCxPQUFPO01BQ05DLFVBQVUsRUFBRSxzQkFBc0I7TUFDbENDLEtBQUssRUFBRUEsQ0FBQSxLQUFjLHlCQUF5QjtNQUM5Q0MsSUFBSSxFQUFFQyxlQUFlLENBQUNDLGFBQWE7TUFDbkNDLFFBQVEsRUFBRTtRQUNUQyx3QkFBd0IsRUFBRUEsQ0FBQ0MsUUFBdUIsRUFBRUMsV0FBbUIsS0FBd0M7VUFDOUcsTUFBTUMsaUJBQWlCLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNKLFFBQVEsQ0FBa0M7VUFDbkcsSUFBSUUsaUJBQWlCLEVBQUU7WUFDdEIsTUFBTUcsU0FBUyxHQUFHSCxpQkFBaUIsQ0FBQ0ksWUFBWSxDQUFDLENBQUM7WUFDbEQsTUFBTUMsZ0JBQWdCLEdBQUdMLGlCQUFpQixDQUFDTSxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9EO1lBQ0EsSUFBSUMsYUFBbUMsR0FBR1QsUUFBUTtZQUNsRCxPQUFPUyxhQUFhLElBQUksQ0FBQ0EsYUFBYSxDQUFDQyxHQUFHLENBQWdCLDBDQUEwQyxDQUFDLEVBQUU7Y0FDdEdELGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxTQUFTLENBQUMsQ0FBQztZQUMxQztZQUNBLElBQUlDLFFBQVEsR0FBR0wsZ0JBQWlCO1lBQ2hDLElBQUlFLGFBQWEsRUFBRTtjQUNsQkcsUUFBUSxHQUFHSCxhQUFhLENBQUNJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSU4sZ0JBQWdCO1lBQ3JFO1lBQ0EsSUFBSUYsU0FBUyxJQUFJRSxnQkFBZ0IsRUFBRTtjQUNsQyxJQUFJTyxZQUFrQztjQUN0QyxJQUFJO2dCQUNIQSxZQUFZLEdBQUcsSUFBSUMsUUFBUSxDQUFDQyxZQUFZLENBQUNYLFNBQVMsQ0FBQyxFQUFFTyxRQUFRLEVBQUVMLGdCQUFnQixDQUFDO2NBQ2pGLENBQUMsQ0FBQyxPQUFPVSxDQUFDLEVBQUU7Z0JBQ1hDLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLGtEQUFrRFAsUUFBUSxRQUFRTCxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNqRyxPQUFPLElBQUk7Y0FDWjtjQUNBLE1BQU1oQyxVQUE0RCxHQUFHLEVBQUU7Y0FDdkUsTUFBTUMsYUFBc0MsR0FBRyxDQUFDLENBQUM7Y0FDakQsTUFBTTRDLFdBQVcsR0FDaEJOLFlBQVksQ0FBQ08sb0JBQW9CLENBQUMsQ0FBQyxDQUFDdkMsV0FBVyxDQUFDd0MsRUFBRSxFQUFFQyxlQUFlLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQy9FLG1DQUE4QkEsUUFBUSxDQUFDLENBQUM7Y0FDekNuRCxpQkFBaUIsQ0FBQ3lDLFlBQVksQ0FBQ08sb0JBQW9CLENBQUMsQ0FBQyxFQUFFOUMsVUFBVSxFQUFFQyxhQUFhLENBQUM7Y0FDakYsT0FBTztnQkFDTmlELFVBQVUsRUFBR3pCLFFBQVEsQ0FBQzBCLFFBQVEsQ0FBQyxDQUFDLEVBQTZCQyxhQUFhLENBQUMsQ0FBQztnQkFDNUVwRCxVQUFVLEVBQUVBLFVBQVUsQ0FBQ2UsR0FBRyxDQUFFVCxJQUFvRCxJQUFLO2tCQUNwRixPQUFPO29CQUNOK0MsWUFBWSxFQUFFL0MsSUFBSSxDQUFDVSxRQUFRLENBQUNULFdBQVcsQ0FBQ0MsTUFBTSxFQUFFOEMsS0FBSyxFQUFFTCxRQUFRLENBQUMsQ0FBQyxJQUFJM0MsSUFBSSxDQUFDVSxRQUFRLENBQUN1QyxJQUFJO29CQUN2RkMsY0FBYyxFQUNiLEdBQUcsR0FDSGxELElBQUksQ0FBQ1AsVUFBVSxDQUFDRyxrQkFBa0IsR0FDbEMsR0FBRyxHQUNISSxJQUFJLENBQUNVLFFBQVEsQ0FBQ3VDLElBQUksR0FDbEIsaUZBQWlGO29CQUNsRkUsWUFBWSxFQUNYbkQsSUFBSSxDQUFDVSxRQUFRLENBQUNULFdBQVcsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUVGLFdBQVcsRUFBRXdDLEVBQUUsRUFBRUMsZUFBZSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJSjtrQkFDMUYsQ0FBQztnQkFDRixDQUFDLENBQUM7Z0JBQ0ZhLGNBQWMsRUFBRUMsTUFBTSxDQUFDQyxJQUFJLENBQUMvRCx1QkFBdUIsQ0FBQyxDQUFDa0IsR0FBRyxDQUFFOEMsSUFBSSxLQUFNO2tCQUNuRUMsR0FBRyxFQUFFRCxJQUFJO2tCQUNURSxJQUFJLEVBQUVsRSx1QkFBdUIsQ0FBQ2dFLElBQUk7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO2dCQUNIRyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7Y0FDekIsQ0FBQztZQUNGO1VBQ0Q7VUFDQSxPQUFPLElBQUk7UUFDWjtNQUNEO0lBQ0QsQ0FBQztFQUNGO0VBQUNDLFFBQUEsQ0FBQWhELDhCQUFBLEdBQUFBLDhCQUFBO0VBQUEsT0FBQWdELFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==