@sapui5/sap.fe.core 1.98.0 → 1.101.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 (318) hide show
  1. package/package.json +8 -5
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +328 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +321 -0
  5. package/src/sap/fe/core/AppComponent.js +382 -399
  6. package/src/sap/fe/core/AppComponent.ts +397 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +67 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2221 -2399
  14. package/src/sap/fe/core/CommonUtils.ts +2248 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +280 -274
  16. package/src/sap/fe/core/ExtensionAPI.ts +242 -0
  17. package/src/sap/fe/core/PageController.js +219 -131
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +936 -823
  20. package/src/sap/fe/core/RouterProxy.ts +854 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +248 -164
  24. package/src/sap/fe/core/TemplateComponent.ts +161 -0
  25. package/src/sap/fe/core/TemplateModel.js +77 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1575 -1664
  28. package/src/sap/fe/core/TransactionHelper.ts +1736 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +406 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +362 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +146 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +129 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +264 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +246 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +100 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +663 -608
  38. package/src/sap/fe/core/actions/draft.ts +669 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +576 -514
  40. package/src/sap/fe/core/actions/messageHandling.ts +562 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1215
  44. package/src/sap/fe/core/actions/operations.ts +1193 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  48. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  49. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  50. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  51. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  52. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  53. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  54. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  55. package/src/sap/fe/core/controllerextensions/EditFlow.js +1855 -1827
  56. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1792 -0
  57. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  58. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +60 -0
  59. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +717 -512
  60. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +785 -0
  61. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -815
  62. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +810 -0
  63. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1057 -1004
  64. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1001 -0
  65. package/src/sap/fe/core/controllerextensions/KPIManagement.js +498 -533
  66. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +36 -32
  67. package/src/sap/fe/core/controllerextensions/MassEdit.js +142 -77
  68. package/src/sap/fe/core/controllerextensions/MassEdit.ts +155 -0
  69. package/src/sap/fe/core/controllerextensions/MessageHandler.js +222 -236
  70. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +215 -0
  71. package/src/sap/fe/core/controllerextensions/PageReady.js +312 -345
  72. package/src/sap/fe/core/controllerextensions/PageReady.ts +63 -55
  73. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -175
  74. package/src/sap/fe/core/controllerextensions/Paginator.ts +169 -0
  75. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -149
  76. package/src/sap/fe/core/controllerextensions/Placeholder.ts +149 -0
  77. package/src/sap/fe/core/controllerextensions/Routing.js +145 -121
  78. package/src/sap/fe/core/controllerextensions/Routing.ts +131 -0
  79. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  80. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  81. package/src/sap/fe/core/controllerextensions/Share.js +231 -268
  82. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  83. package/src/sap/fe/core/controllerextensions/SideEffects.js +603 -644
  84. package/src/sap/fe/core/controllerextensions/SideEffects.ts +79 -79
  85. package/src/sap/fe/core/controllerextensions/ViewState.js +775 -806
  86. package/src/sap/fe/core/controllerextensions/ViewState.ts +796 -0
  87. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  88. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  89. package/src/sap/fe/core/controls/Any.js +28 -0
  90. package/src/sap/fe/core/controls/Any.ts +30 -0
  91. package/src/sap/fe/core/controls/CommandExecution.js +93 -68
  92. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +166 -79
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +74 -0
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +168 -125
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +116 -0
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +164 -122
  101. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +155 -0
  102. package/src/sap/fe/core/controls/FieldWrapper.js +213 -153
  103. package/src/sap/fe/core/controls/FieldWrapper.ts +104 -0
  104. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  105. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  106. package/src/sap/fe/core/controls/FilterBar.js +198 -159
  107. package/src/sap/fe/core/controls/FilterBar.ts +148 -0
  108. package/src/sap/fe/core/controls/FormElementWrapper.js +101 -39
  109. package/src/sap/fe/core/controls/FormElementWrapper.ts +37 -0
  110. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +148 -115
  114. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +102 -0
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +301 -265
  116. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +252 -0
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +186 -140
  118. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  120. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  121. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +76 -74
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +71 -0
  124. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  125. package/src/sap/fe/core/converters/ConverterContext.ts +23 -19
  126. package/src/sap/fe/core/converters/ManifestSettings.js +13 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -2
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -365
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +19 -0
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +16 -11
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +21 -18
  132. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  134. package/src/sap/fe/core/converters/annotations/DataField.js +26 -13
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +40 -17
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -11
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +22 -21
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +12 -10
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -14
  141. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  143. package/src/sap/fe/core/converters/controls/Common/Form.js +9 -7
  144. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -5
  145. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  146. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -2
  147. package/src/sap/fe/core/converters/controls/Common/Table.js +562 -218
  148. package/src/sap/fe/core/converters/controls/Common/Table.ts +670 -320
  149. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +218 -94
  150. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +265 -159
  151. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +495 -77
  152. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +535 -130
  153. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  154. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  155. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +10 -7
  156. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +13 -16
  157. package/src/sap/fe/core/converters/helpers/Aggregation.js +117 -127
  158. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  159. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  160. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  161. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  162. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  163. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  164. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  165. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  166. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  167. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  168. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  169. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +54 -30
  170. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +69 -43
  171. package/src/sap/fe/core/converters/templates/ListReportConverter.js +52 -28
  172. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +111 -74
  173. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +11 -9
  174. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -8
  175. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -98
  176. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  177. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  178. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  179. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  180. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  181. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  182. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  183. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  184. package/src/sap/fe/core/formatters/KPIFormatter.ts +4 -1
  185. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  186. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  187. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  188. package/src/sap/fe/core/formatters/ValueFormatter.ts +5 -7
  189. package/src/sap/fe/core/fpm/Component.js +81 -55
  190. package/src/sap/fe/core/fpm/Component.ts +43 -0
  191. package/src/sap/fe/core/helpers/AppStartupHelper.js +324 -310
  192. package/src/sap/fe/core/helpers/AppStartupHelper.ts +370 -341
  193. package/src/sap/fe/core/helpers/BindingExpression.js +319 -360
  194. package/src/sap/fe/core/helpers/BindingExpression.ts +323 -397
  195. package/src/sap/fe/core/helpers/ClassSupport.js +321 -168
  196. package/src/sap/fe/core/helpers/ClassSupport.ts +362 -158
  197. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  198. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  199. package/src/sap/fe/core/helpers/EditState.js +81 -84
  200. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  201. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  202. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  203. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  204. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  205. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  206. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  207. package/src/sap/fe/core/helpers/MassEditHelper.js +736 -676
  208. package/src/sap/fe/core/helpers/MassEditHelper.ts +803 -0
  209. package/src/sap/fe/core/helpers/ModelHelper.js +281 -225
  210. package/src/sap/fe/core/helpers/ModelHelper.ts +273 -0
  211. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  212. package/src/sap/fe/core/helpers/PasteHelper.ts +197 -0
  213. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  214. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +336 -0
  215. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  216. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  217. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -10
  218. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -10
  219. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  220. package/src/sap/fe/core/jsx-runtime/jsx.ts +23 -9
  221. package/src/sap/fe/core/library.js +426 -451
  222. package/src/sap/fe/core/library.support.js +23 -33
  223. package/src/sap/fe/core/library.support.ts +23 -0
  224. package/src/sap/fe/core/library.ts +420 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +5 -5
  227. package/src/sap/fe/core/messagebundle.properties +63 -18
  228. package/src/sap/fe/core/messagebundle_ar.properties +37 -6
  229. package/src/sap/fe/core/messagebundle_bg.properties +37 -6
  230. package/src/sap/fe/core/messagebundle_ca.properties +37 -6
  231. package/src/sap/fe/core/messagebundle_cs.properties +38 -7
  232. package/src/sap/fe/core/messagebundle_cy.properties +37 -6
  233. package/src/sap/fe/core/messagebundle_da.properties +37 -6
  234. package/src/sap/fe/core/messagebundle_de.properties +37 -6
  235. package/src/sap/fe/core/messagebundle_el.properties +37 -6
  236. package/src/sap/fe/core/messagebundle_en.properties +37 -6
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -6
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +37 -6
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -6
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +37 -6
  241. package/src/sap/fe/core/messagebundle_es.properties +37 -6
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +37 -6
  243. package/src/sap/fe/core/messagebundle_et.properties +37 -6
  244. package/src/sap/fe/core/messagebundle_fi.properties +38 -7
  245. package/src/sap/fe/core/messagebundle_fr.properties +43 -12
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +45 -14
  247. package/src/sap/fe/core/messagebundle_hi.properties +43 -12
  248. package/src/sap/fe/core/messagebundle_hr.properties +43 -12
  249. package/src/sap/fe/core/messagebundle_hu.properties +37 -6
  250. package/src/sap/fe/core/messagebundle_id.properties +38 -7
  251. package/src/sap/fe/core/messagebundle_it.properties +37 -6
  252. package/src/sap/fe/core/messagebundle_iw.properties +37 -6
  253. package/src/sap/fe/core/messagebundle_ja.properties +36 -5
  254. package/src/sap/fe/core/messagebundle_kk.properties +43 -12
  255. package/src/sap/fe/core/messagebundle_ko.properties +37 -6
  256. package/src/sap/fe/core/messagebundle_lt.properties +37 -6
  257. package/src/sap/fe/core/messagebundle_lv.properties +44 -13
  258. package/src/sap/fe/core/messagebundle_ms.properties +42 -11
  259. package/src/sap/fe/core/messagebundle_nl.properties +37 -6
  260. package/src/sap/fe/core/messagebundle_no.properties +37 -6
  261. package/src/sap/fe/core/messagebundle_pl.properties +37 -6
  262. package/src/sap/fe/core/messagebundle_pt.properties +38 -7
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +37 -6
  264. package/src/sap/fe/core/messagebundle_ro.properties +37 -6
  265. package/src/sap/fe/core/messagebundle_ru.properties +37 -6
  266. package/src/sap/fe/core/messagebundle_sh.properties +39 -8
  267. package/src/sap/fe/core/messagebundle_sk.properties +37 -6
  268. package/src/sap/fe/core/messagebundle_sl.properties +43 -12
  269. package/src/sap/fe/core/messagebundle_sv.properties +38 -7
  270. package/src/sap/fe/core/messagebundle_th.properties +36 -5
  271. package/src/sap/fe/core/messagebundle_tr.properties +39 -8
  272. package/src/sap/fe/core/messagebundle_uk.properties +37 -6
  273. package/src/sap/fe/core/messagebundle_vi.properties +37 -6
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +37 -6
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +43 -12
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +47 -73
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +211 -0
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +70 -96
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -8
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +963 -899
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +907 -0
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +694 -741
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -40
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +572 -643
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +67 -96
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -487
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +449 -0
  294. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +48 -8
  295. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +11 -0
  296. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  297. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  298. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  299. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  300. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  301. package/src/sap/fe/core/support/CommonHelper.ts +1 -4
  302. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  303. package/src/sap/fe/core/templating/DataModelPathHelper.js +91 -90
  304. package/src/sap/fe/core/templating/DataModelPathHelper.ts +126 -123
  305. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  307. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  308. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  309. package/src/sap/fe/core/templating/FilterHelper.js +138 -79
  310. package/src/sap/fe/core/templating/FilterHelper.ts +148 -79
  311. package/src/sap/fe/core/templating/PropertyHelper.js +16 -2
  312. package/src/sap/fe/core/templating/PropertyHelper.ts +31 -24
  313. package/src/sap/fe/core/templating/UIFormatters.js +179 -43
  314. package/src/sap/fe/core/templating/UIFormatters.ts +190 -61
  315. package/src/sap/fe/core/type/Email.js +26 -8
  316. package/src/sap/fe/core/type/Email.ts +10 -11
  317. package/ui5.yaml +0 -3
  318. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -74
@@ -1,17 +1,23 @@
1
- import { ControllerExtension } from "sap/ui/core/mvc";
2
- import { ControllerExtensionMetadata } from "sap/fe/core/controllerextensions";
3
- import { UI5Class, Override, Public } from "../helpers/ClassSupport";
4
- import { JSONModel } from "sap/ui/model/json";
5
- import { ODataModel, Context } from "sap/ui/model/odata/v4";
6
- import { Log } from "sap/base";
1
+ import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
2
+ import { defineUI5Class, methodOverride, publicExtension } from "../helpers/ClassSupport";
3
+ import JSONModel from "sap/ui/model/json/JSONModel";
4
+ import ODataModel from "sap/ui/model/odata/v4/ODataModel";
5
+ import Context from "sap/ui/model/odata/v4/Context";
6
+ import Log from "sap/base/Log";
7
7
  import { KPIChartDefinition, KPIDefinition, NavigationInfo } from "sap/fe/core/converters/controls/Common/KPI";
8
- import { BaseController } from "sap/fe/core";
8
+ import BaseController from "sap/fe/core/BaseController";
9
9
  import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
10
10
  import { FilterDefinition, RangeDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
11
- import { NumberFormat, DateFormat } from "sap/ui/core/format";
12
- import { Locale } from "sap/ui/core";
13
- import { Filter, FilterOperator, Sorter } from "sap/ui/model";
14
- import { GenericTag, Popover } from "sap/m";
11
+ import NumberFormat from "sap/ui/core/format/NumberFormat";
12
+ import DateFormat from "sap/ui/core/format/DateFormat";
13
+ import Locale from "sap/ui/core/Locale";
14
+ import Filter from "sap/ui/model/Filter";
15
+ import FilterOperator from "sap/ui/model/FilterOperator";
16
+ import Sorter from "sap/ui/model/Sorter";
17
+ import GenericTag from "sap/m/GenericTag";
18
+ import Popover from "sap/m/Popover";
19
+ import { CoreEx } from "types/extension_types";
20
+ import Core from "sap/ui/core/Core";
15
21
 
16
22
  const MessageTypeFromCriticality: Record<string, MessageType> = {
17
23
  "1": MessageType.Error,
@@ -211,7 +217,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
211
217
  .getConfiguration()
212
218
  .getLanguage()
213
219
  );
214
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
220
+ const resBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
215
221
  const dateFormat = DateFormat.getDateInstance({ style: "medium" }, currentLocale);
216
222
 
217
223
  function formatRange(range: RangeDefinition): string {
@@ -263,7 +269,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
263
269
  }
264
270
 
265
271
  function formatChartTitle(kpiDef: KPIDefinition): string {
266
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
272
+ const resBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
267
273
 
268
274
  function formatList(items: { name: string; label: string }[]) {
269
275
  if (items.length === 0) {
@@ -562,7 +568,7 @@ function getNavigationParameters(
562
568
  * @private
563
569
  * @since 1.93.0
564
570
  */
565
- @UI5Class("sap.fe.core.controllerextensions.KPIManagement", ControllerExtensionMetadata)
571
+ @defineUI5Class("sap.fe.core.controllerextensions.KPIManagement")
566
572
  class KPIManagementControllerExtension extends ControllerExtension {
567
573
  protected aKPIDefinitions?: KPIDefinition[];
568
574
  protected oCard: any;
@@ -574,7 +580,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
574
580
  * @param kpiDefinition The KPI definition
575
581
  * @param oKPIModel The JSON model in which the manifest will be stored
576
582
  */
577
- protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel<any>): void {
583
+ protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel): void {
578
584
  const oCardManifest: any = {
579
585
  "sap.app": {
580
586
  id: "sap.fe",
@@ -618,7 +624,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
618
624
 
619
625
  // Add side indicators in the card header if a target is defined for the KPI
620
626
  if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
621
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
627
+ const resBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
622
628
  oCardManifest["sap.card"].header.sideIndicators = [
623
629
  {
624
630
  title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
@@ -665,7 +671,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
665
671
  });
666
672
  }
667
673
 
668
- protected initNavigationInfo(kpiDefinition: KPIDefinition, oKPIModel: JSONModel<any>, oShellService: any): Promise<void> {
674
+ protected initNavigationInfo(kpiDefinition: KPIDefinition, oKPIModel: JSONModel, oShellService: any): Promise<void> {
669
675
  // Add navigation
670
676
  if (kpiDefinition.navigation) {
671
677
  return getNavigationParameters(kpiDefinition.navigation, oShellService).then(oNavInfo => {
@@ -683,7 +689,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
683
689
  }
684
690
  }
685
691
 
686
- @Override()
692
+ @methodOverride()
687
693
  public onInit(): void {
688
694
  this.aKPIDefinitions = this.getKPIData();
689
695
 
@@ -712,9 +718,9 @@ class KPIManagementControllerExtension extends ControllerExtension {
712
718
  }
713
719
  }
714
720
 
715
- @Override()
721
+ @methodOverride()
716
722
  public onExit(): void {
717
- const oKPIModel = this.getView().getModel("kpiModel") as JSONModel<any>;
723
+ const oKPIModel = this.getView().getModel("kpiModel") as JSONModel;
718
724
 
719
725
  if (oKPIModel) {
720
726
  oKPIModel.destroy();
@@ -737,7 +743,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
737
743
  }
738
744
  }
739
745
 
740
- private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
746
+ private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
741
747
  const currentLocale = new Locale(
742
748
  sap.ui
743
749
  .getCore()
@@ -814,7 +820,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
814
820
  }
815
821
  }
816
822
 
817
- private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
823
+ private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
818
824
  const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
819
825
 
820
826
  let criticalityValue = MessageType.None;
@@ -856,7 +862,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
856
862
  );
857
863
  }
858
864
 
859
- private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
865
+ private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
860
866
  const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
861
867
 
862
868
  let trendValue = "None";
@@ -891,7 +897,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
891
897
  oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", trendValue);
892
898
  }
893
899
 
894
- private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
900
+ private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
895
901
  if (kpiDefinition.datapoint.targetValue === undefined && kpiDefinition.datapoint.targetPath === undefined) {
896
902
  return; // No target set for the KPI
897
903
  }
@@ -958,7 +964,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
958
964
  * @param loadFull If not true, loads only data for the KPI tag
959
965
  * @returns {Promise} Returns the promise that is resolved when data is loaded.
960
966
  */
961
- protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel<any>, loadFull?: boolean): any {
967
+ protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel, loadFull?: boolean): any {
962
968
  // If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
963
969
  // If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
964
970
  const oListBinding = loadFull
@@ -1041,7 +1047,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
1041
1047
  * @param {JSONModel} oKPIModel The JSON model where the data will be stored
1042
1048
  * @returns {Promise} Returns the promise that is resolved when data is loaded.
1043
1049
  */
1044
- protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel<any>): any {
1050
+ protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel): any {
1045
1051
  const oListBinding = oMainModel.bindList("/" + kpiDefinition.entitySet);
1046
1052
  const oGroup: Record<string, Object> = {};
1047
1053
  const oAggregate: Record<string, Object> = {};
@@ -1102,8 +1108,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
1102
1108
  protected getPopover(oKPITag: GenericTag): Promise<Popover> {
1103
1109
  if (!this.oPopover) {
1104
1110
  return new Promise((resolve, reject) => {
1105
- sap.ui
1106
- .getCore()
1111
+ (Core as CoreEx)
1107
1112
  .loadLibrary("sap/ui/integration", { async: true })
1108
1113
  .then(() => {
1109
1114
  sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], (Card: any, Host: any) => {
@@ -1131,8 +1136,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
1131
1136
  });
1132
1137
  this.oCard.setHost(oHost as any);
1133
1138
 
1134
- this.oPopover = new Popover({
1135
- id: "kpi-Popover",
1139
+ this.oPopover = new Popover("kpi-Popover", {
1136
1140
  showHeader: false,
1137
1141
  placement: "Auto",
1138
1142
  content: [this.oCard]
@@ -1152,9 +1156,9 @@ class KPIManagementControllerExtension extends ControllerExtension {
1152
1156
  }
1153
1157
  }
1154
1158
 
1155
- @Public
1159
+ @publicExtension()
1156
1160
  public onKPIPressed(oKPITag: any, kpiID: string): void {
1157
- const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel<any>;
1161
+ const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel;
1158
1162
 
1159
1163
  if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
1160
1164
  const kpiDefinition = this.aKPIDefinitions.find(function(oDef) {
@@ -1,79 +1,144 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(
6
- ["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/fe/core/helpers/MassEditHelper", "sap/base/Log"],
7
- function(ControllerExtension, OverrideExecution, MassEditHelper, Log) {
8
- "use strict";
9
- /**
10
- * @class Controller extension providing hooks for the mass edit in a table
11
- *
12
- * @name sap.fe.core.controllerextensions.MassEdit
13
- * @hideconstructor
14
- * @private
15
- */
16
- return ControllerExtension.extend("sap.fe.core.controllerextensions.MassEdit", {
17
- metadata: {
18
- methods: {
19
- openMassEditDialog: {
20
- "final": true,
21
- "public": true
22
- },
23
- fetchContextsForEdit: {
24
- "final": false,
25
- "public": false,
26
- overrideExecution: OverrideExecution.After
27
- }
28
- }
29
- },
30
-
31
- /**
32
- * The following operations are performed by method openMassEditDialog:
33
- * => Opens the mass edit dialog.
34
- * => Implements the save and cancel functionality.
35
- * => Sets the runtime model to the dialog.
36
- * => Sets the static model's context to the dialog.
37
- *
38
- * @param {object} oTable Instance of the table
39
- * @returns {Promise} A promise that resolves on open of the mass edit dialog.
40
- * @private
41
- */
42
- openMassEditDialog: function(oTable) {
43
- var that = this,
44
- oController = that.getView().getController(),
45
- pContextsForEdit = that.fetchContextsForEdit(oTable);
46
-
47
- return pContextsForEdit
48
- .then(function(aContexts) {
49
- if (aContexts && aContexts.length > 0) {
50
- return MassEditHelper.createDialog(oTable, aContexts, oController);
51
- }
52
- })
53
- .then(function(oDialog) {
54
- if (oDialog) {
55
- oDialog.open();
56
- }
57
- })
58
- .catch(function(oError) {
59
- Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
60
- });
61
- },
62
-
63
- /**
64
- * Returns a promise that resolves to the contexts for mass edit.
65
- * @function
66
- * @param {string} oTable Table for mass edit.
67
- * @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
68
- * @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
69
- * @private
70
- **/
71
- fetchContextsForEdit: function(oTable) {
72
- //To be overridden by the application
73
- var aSelectedContexts = oTable.getSelectedContexts();
74
-
75
- return Promise.resolve(aSelectedContexts);
76
- }
77
- });
78
- }
79
- );
5
+ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/fe/core/helpers/MassEditHelper", "sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/m/MessageBox"], function (ControllerExtension, OverrideExecution, MassEditHelper, Log, ClassSupport, ModelHelper, MessageBox) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _class, _class2;
9
+
10
+ var defineUI5Class = ClassSupport.defineUI5Class;
11
+ var publicExtension = ClassSupport.publicExtension;
12
+ var privateExtension = ClassSupport.privateExtension;
13
+ var finalExtension = ClassSupport.finalExtension;
14
+ var extensible = ClassSupport.extensible;
15
+
16
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
17
+
18
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
19
+
20
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
21
+
22
+ /**
23
+ * @class Controller extension providing hooks for the mass edit in a table
24
+ *
25
+ * @name sap.fe.core.controllerextensions.MassEdit
26
+ * @hideconstructor
27
+ * @private
28
+ */
29
+ var MassEdit = (_dec = defineUI5Class("sap.fe.core.controllerextensions.MassEdit"), _dec2 = publicExtension(), _dec3 = finalExtension(), _dec4 = publicExtension(), _dec5 = finalExtension(), _dec6 = privateExtension(), _dec7 = extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
30
+ _inheritsLoose(MassEdit, _ControllerExtension);
31
+
32
+ function MassEdit() {
33
+ return _ControllerExtension.apply(this, arguments) || this;
34
+ }
35
+
36
+ var _proto = MassEdit.prototype;
37
+
38
+ _proto.getMessageDetailForNonEditable = function getMessageDetailForNonEditable(oResourceBundle) {
39
+ var sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
40
+ sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
41
+ sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
42
+ sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
43
+ return "<p><strong>" + sHeader + "</strong></p>\n" + "<p>" + sReasonGroup + "</p>\n" + "<ul>" + "<li>" + sReasonDraft + "</li>" + "<li>" + sReasonNonEditable + "</li>" + "</ul>";
44
+ };
45
+
46
+ _proto._openConfirmDialog = function _openConfirmDialog(oTable, aContexts, iSelectedContexts) {
47
+ var _this = this;
48
+
49
+ var iUpdatableContexts = (aContexts || []).length;
50
+ return new Promise(function (resolve) {
51
+ _this.getView().getModel("sap.fe.i18n").getResourceBundle().then(function (oResourceBundle) {
52
+ var sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
53
+ sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
54
+ iNonEditable = iSelectedContexts - iUpdatableContexts,
55
+ sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [iNonEditable, iSelectedContexts, iUpdatableContexts]),
56
+ sPath = oTable.data("targetCollectionPath"),
57
+ oMetaModel = oTable.getModel().getMetaModel(),
58
+ bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
59
+ bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
60
+ sMessageDetail = bIsDraft && bDisplayMode && _this.getMessageDetailForNonEditable(oResourceBundle);
61
+
62
+ MessageBox.warning(sMessage, {
63
+ details: sMessageDetail,
64
+ actions: [sEditButton, sCancelButton],
65
+ emphasizedAction: sEditButton,
66
+ contentWidth: "100px",
67
+ onClose: function (sSelection) {
68
+ var aContextsForEdit = [];
69
+
70
+ if (sSelection === sEditButton) {
71
+ Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts.toString(), " selections.");
72
+ aContextsForEdit = aContexts;
73
+ } else if (sSelection === sCancelButton) {
74
+ Log.info("Mass Edit: Cancelled.");
75
+ }
76
+
77
+ resolve(aContextsForEdit);
78
+ }
79
+ });
80
+ }).catch(function (error) {
81
+ Log.error(error);
82
+ });
83
+ });
84
+ };
85
+
86
+ _proto._confirmContexts = function _confirmContexts(oTable, aContexts) {
87
+ var oInternalModelContext = oTable.getBindingContext("internal"),
88
+ iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
89
+ aContexts = aContexts || [];
90
+
91
+ if (aContexts.length && aContexts.length !== iSelectedContexts) {
92
+ return this._openConfirmDialog(oTable, aContexts, iSelectedContexts);
93
+ }
94
+
95
+ return Promise.resolve(aContexts);
96
+ }
97
+ /**
98
+ * The following operations are performed by method openMassEditDialog:
99
+ * => Opens the mass edit dialog.
100
+ * => Implements the save and cancel functionality.
101
+ * => Sets the runtime model to the dialog.
102
+ * => Sets the static model's context to the dialog.
103
+ *
104
+ * @param {sap.ui.mdc.Table} oTable Instance of the table
105
+ * @returns {Promise} A promise that resolves on open of the mass edit dialog.
106
+ * @private
107
+ */
108
+ ;
109
+
110
+ _proto.openMassEditDialog = function openMassEditDialog(oTable) {
111
+ var oController = this.getView().getController(),
112
+ pContextsForEdit = this.fetchContextsForEdit(oTable);
113
+ return pContextsForEdit.then(this._confirmContexts.bind(this, oTable)).then(function (aContexts) {
114
+ return aContexts && aContexts.length > 0 ? MassEditHelper.createDialog(oTable, aContexts, oController) : Promise.resolve();
115
+ }).then(function (oDialog) {
116
+ if (oDialog) {
117
+ oDialog.open();
118
+ }
119
+ }).catch(function (oError) {
120
+ Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
121
+ });
122
+ }
123
+ /**
124
+ * Returns a promise that resolves to the contexts for mass edit.
125
+ * @function
126
+ * @param {sap.ui.mdc.Table} oTable Table for mass edit.
127
+ * @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
128
+ * @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
129
+ * @private
130
+ **/
131
+ ;
132
+
133
+ _proto.fetchContextsForEdit = function fetchContextsForEdit(oTable) {
134
+ //To be overridden by the application
135
+ var oInternalModelContext = oTable.getBindingContext("internal"),
136
+ aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
137
+ return Promise.resolve(aSelectedContexts);
138
+ };
139
+
140
+ return MassEdit;
141
+ }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "getMessageDetailForNonEditable", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "getMessageDetailForNonEditable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "openMassEditDialog", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "openMassEditDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchContextsForEdit", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchContextsForEdit"), _class2.prototype)), _class2)) || _class);
142
+ return MassEdit;
143
+ }, false);
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0LnRzIl0sIm5hbWVzIjpbIk1hc3NFZGl0IiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNIZWFkZXIiLCJnZXRUZXh0Iiwic1JlYXNvbkdyb3VwIiwic1JlYXNvbkRyYWZ0Iiwic1JlYXNvbk5vbkVkaXRhYmxlIiwiX29wZW5Db25maXJtRGlhbG9nIiwib1RhYmxlIiwiYUNvbnRleHRzIiwiaVNlbGVjdGVkQ29udGV4dHMiLCJpVXBkYXRhYmxlQ29udGV4dHMiLCJsZW5ndGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldFZpZXciLCJnZXRNb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwidGhlbiIsInNFZGl0QnV0dG9uIiwic0NhbmNlbEJ1dHRvbiIsImlOb25FZGl0YWJsZSIsInNNZXNzYWdlIiwic1BhdGgiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImJJc0RyYWZ0IiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiYkRpc3BsYXlNb2RlIiwic01lc3NhZ2VEZXRhaWwiLCJNZXNzYWdlQm94Iiwid2FybmluZyIsImRldGFpbHMiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsImNvbnRlbnRXaWR0aCIsIm9uQ2xvc2UiLCJzU2VsZWN0aW9uIiwiYUNvbnRleHRzRm9yRWRpdCIsIkxvZyIsImluZm8iLCJ0b1N0cmluZyIsImNhdGNoIiwiZXJyb3IiLCJfY29uZmlybUNvbnRleHRzIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInBDb250ZXh0c0ZvckVkaXQiLCJmZXRjaENvbnRleHRzRm9yRWRpdCIsImJpbmQiLCJNYXNzRWRpdEhlbHBlciIsImNyZWF0ZURpYWxvZyIsIm9EaWFsb2ciLCJvcGVuIiwib0Vycm9yIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUVNQSxRLFdBRExDLGNBQWMsQ0FBQywyQ0FBRCxDLFVBRWJDLGVBQWUsRSxVQUNmQyxjQUFjLEUsVUEyRmRELGVBQWUsRSxVQUNmQyxjQUFjLEUsVUE0QmRDLGdCQUFnQixFLFVBQ2hCQyxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFuQixDOzs7Ozs7Ozs7V0F4SFhDLDhCLEdBRkEsd0NBRStCQyxlQUYvQixFQUVnRTtBQUMvRCxVQUFNQyxPQUFPLEdBQUdELGVBQWUsQ0FBQ0UsT0FBaEIsQ0FBd0IsMkNBQXhCLENBQWhCO0FBQUEsVUFDQ0MsWUFBWSxHQUFHSCxlQUFlLENBQUNFLE9BQWhCLENBQXdCLDJDQUF4QixDQURoQjtBQUFBLFVBRUNFLFlBQVksR0FBR0osZUFBZSxDQUFDRSxPQUFoQixDQUF3QixpREFBeEIsQ0FGaEI7QUFBQSxVQUdDRyxrQkFBa0IsR0FBR0wsZUFBZSxDQUFDRSxPQUFoQixDQUF3Qix3REFBeEIsQ0FIdEI7QUFLQSxhQUNDLGdCQUNBRCxPQURBLEdBRUEsaUJBRkEsR0FHQSxLQUhBLEdBSUFFLFlBSkEsR0FLQSxRQUxBLEdBTUEsTUFOQSxHQU9BLE1BUEEsR0FRQUMsWUFSQSxHQVNBLE9BVEEsR0FVQSxNQVZBLEdBV0FDLGtCQVhBLEdBWUEsT0FaQSxHQWFBLE9BZEQ7QUFnQkEsSzs7V0FFREMsa0IsR0FBQSw0QkFBbUJDLE1BQW5CLEVBQWtDQyxTQUFsQyxFQUF3REMsaUJBQXhELEVBQW1GO0FBQUE7O0FBQ2xGLFVBQU1DLGtC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VUFBTXVDLHFCQUFxQixHQUFHdkMsTUFBTSxDQUFDd0MsaUJBQVAsQ0FBeUIsVUFBekIsQ0FBOUI7QUFBQSxVQUNDYSxpQkFBaUIsR0FBR2QscUJBQXFCLENBQUNFLFdBQXRCLENBQWtDLG1CQUFsQyxLQUEwRCxFQUQvRTtBQUdBLGFBQU9wQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IrQyxpQkFBaEIsQ0FBUDtBQUNBLEs7OztJQWxJcUJDLG1CO1NBcUlSdEUsUSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IE1hc3NFZGl0SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hc3NFZGl0SGVscGVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHsgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciwgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuXG4vKipcbiAqIEBjbGFzcyBDb250cm9sbGVyIGV4dGVuc2lvbiBwcm92aWRpbmcgaG9va3MgZm9yIHRoZSBtYXNzIGVkaXQgaW4gYSB0YWJsZVxuICpcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLk1hc3NFZGl0XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NYXNzRWRpdFwiKVxuY2xhc3MgTWFzc0VkaXQgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZShvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlKSB7XG5cdFx0Y29uc3Qgc0hlYWRlciA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9IRUFERVJcIiksXG5cdFx0XHRzUmVhc29uR3JvdXAgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRV9ERVRBSUxfUkVBU09OXCIpLFxuXHRcdFx0c1JlYXNvbkRyYWZ0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9EUkFGVFwiKSxcblx0XHRcdHNSZWFzb25Ob25FZGl0YWJsZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05fTk9OX0VESVRBQkxFXCIpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdFwiPHA+PHN0cm9uZz5cIiArXG5cdFx0XHRzSGVhZGVyICtcblx0XHRcdFwiPC9zdHJvbmc+PC9wPlxcblwiICtcblx0XHRcdFwiPHA+XCIgK1xuXHRcdFx0c1JlYXNvbkdyb3VwICtcblx0XHRcdFwiPC9wPlxcblwiICtcblx0XHRcdFwiPHVsPlwiICtcblx0XHRcdFwiPGxpPlwiICtcblx0XHRcdHNSZWFzb25EcmFmdCArXG5cdFx0XHRcIjwvbGk+XCIgK1xuXHRcdFx0XCI8bGk+XCIgK1xuXHRcdFx0c1JlYXNvbk5vbkVkaXRhYmxlICtcblx0XHRcdFwiPC9saT5cIiArXG5cdFx0XHRcIjwvdWw+XCJcblx0XHQpO1xuXHR9XG5cblx0X29wZW5Db25maXJtRGlhbG9nKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdLCBpU2VsZWN0ZWRDb250ZXh0czogbnVtYmVyKSB7XG5cdFx0Y29uc3QgaVVwZGF0YWJsZUNvbnRleHRzID0gKGFDb250ZXh0cyB8fCBbXSkubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuXHRcdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdC50aGVuKG9SZXNvdXJjZUJ1bmRsZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgc0VkaXRCdXR0b24gPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0XHRzQ2FuY2VsQnV0dG9uID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DQU5DRUxfQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcdFx0XHRpTm9uRWRpdGFibGUgPSBpU2VsZWN0ZWRDb250ZXh0cyAtIGlVcGRhdGFibGVDb250ZXh0cyxcblx0XHRcdFx0XHRcdHNNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRcdFx0XHRpTm9uRWRpdGFibGUsXG5cdFx0XHRcdFx0XHRcdGlTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0XHRcdFx0XHRpVXBkYXRhYmxlQ29udGV4dHNcblx0XHRcdFx0XHRcdF0pLFxuXHRcdFx0XHRcdFx0c1BhdGggPSBvVGFibGUuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpLFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRcdFx0YklzRHJhZnQgPSBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG9NZXRhTW9kZWwsIHNQYXRoKSxcblx0XHRcdFx0XHRcdGJEaXNwbGF5TW9kZSA9IG9UYWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0c01lc3NhZ2VEZXRhaWwgPSBiSXNEcmFmdCAmJiBiRGlzcGxheU1vZGUgJiYgdGhpcy5nZXRNZXNzYWdlRGV0YWlsRm9yTm9uRWRpdGFibGUob1Jlc291cmNlQnVuZGxlKTtcblxuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhzTWVzc2FnZSwge1xuXHRcdFx0XHRcdFx0ZGV0YWlsczogc01lc3NhZ2VEZXRhaWwsXG5cdFx0XHRcdFx0XHRhY3Rpb25zOiBbc0VkaXRCdXR0b24sIHNDYW5jZWxCdXR0b25dLFxuXHRcdFx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogc0VkaXRCdXR0b24sXG5cdFx0XHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMTAwcHhcIixcblx0XHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uKHNTZWxlY3Rpb246IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRsZXQgYUNvbnRleHRzRm9yRWRpdDogYW55W10gPSBbXTtcblx0XHRcdFx0XHRcdFx0aWYgKHNTZWxlY3Rpb24gPT09IHNFZGl0QnV0dG9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmluZm8oXCJNYXNzIEVkaXQ6IENvbmZpcm1lZCB0byBlZGl0IFwiLCBpVXBkYXRhYmxlQ29udGV4dHMudG9TdHJpbmcoKSwgXCIgc2VsZWN0aW9ucy5cIik7XG5cdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzRm9yRWRpdCA9IGFDb250ZXh0cztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzU2VsZWN0aW9uID09PSBzQ2FuY2VsQnV0dG9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLmluZm8oXCJNYXNzIEVkaXQ6IENhbmNlbGxlZC5cIik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShhQ29udGV4dHNGb3JFZGl0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGFzIGFueSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0X2NvbmZpcm1Db250ZXh0cyhvVGFibGU6IFRhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0aVNlbGVjdGVkQ29udGV4dHMgPSArb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIpIHx8IDA7XG5cblx0XHRhQ29udGV4dHMgPSBhQ29udGV4dHMgfHwgW107XG5cblx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCAmJiBhQ29udGV4dHMubGVuZ3RoICE9PSBpU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29wZW5Db25maXJtRGlhbG9nKG9UYWJsZSwgYUNvbnRleHRzLCBpU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYUNvbnRleHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBieSBtZXRob2Qgb3Blbk1hc3NFZGl0RGlhbG9nOlxuXHQgKiA9PiBPcGVucyB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICogPT4gSW1wbGVtZW50cyB0aGUgc2F2ZSBhbmQgY2FuY2VsIGZ1bmN0aW9uYWxpdHkuXG5cdCAqID0+IFNldHMgdGhlIHJ1bnRpbWUgbW9kZWwgdG8gdGhlIGRpYWxvZy5cblx0ICogPT4gU2V0cyB0aGUgc3RhdGljIG1vZGVsJ3MgY29udGV4dCB0byB0aGUgZGlhbG9nLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5tZGMuVGFibGV9IG9UYWJsZSBJbnN0YW5jZSBvZiB0aGUgdGFibGVcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uIG9wZW4gb2YgdGhlIG1hc3MgZWRpdCBkaWFsb2cuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0b3Blbk1hc3NFZGl0RGlhbG9nKG9UYWJsZTogVGFibGUpIHtcblx0XHRjb25zdCBvQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcixcblx0XHRcdHBDb250ZXh0c0ZvckVkaXQgPSB0aGlzLmZldGNoQ29udGV4dHNGb3JFZGl0KG9UYWJsZSk7XG5cblx0XHRyZXR1cm4gcENvbnRleHRzRm9yRWRpdFxuXHRcdFx0LnRoZW4odGhpcy5fY29uZmlybUNvbnRleHRzLmJpbmQodGhpcywgb1RhYmxlKSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uKGFDb250ZXh0czogYW55KSB7XG5cdFx0XHRcdHJldHVybiBhQ29udGV4dHMgJiYgYUNvbnRleHRzLmxlbmd0aCA+IDAgPyBNYXNzRWRpdEhlbHBlci5jcmVhdGVEaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIG9Db250cm9sbGVyKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uKG9EaWFsb2c/OiBhbnkpIHtcblx0XHRcdFx0aWYgKG9EaWFsb2cpIHtcblx0XHRcdFx0XHRvRGlhbG9nLm9wZW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIG1hc3MgZWRpdCBkaWFsb2cgY3JlYXRpb24uXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZXh0cyBmb3IgbWFzcyBlZGl0LlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHBhcmFtIHtzYXAudWkubWRjLlRhYmxlfSBvVGFibGUgVGFibGUgZm9yIG1hc3MgZWRpdC5cblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRybGxlcmV4dGVuc2lvbnMuTWFzc0VkaXQjZmV0Y2hDb250ZXh0c0ZvckVkaXRcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIGFuIGFycmF5IG9mIGNvbnRleHQocykgd2hpY2ggc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIG1hc3MgZWRpdC5cblx0ICogQHByaXZhdGVcblx0ICoqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRmZXRjaENvbnRleHRzRm9yRWRpdChvVGFibGU6IFRhYmxlKSB7XG5cdFx0Ly9UbyBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcHBsaWNhdGlvblxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJ1cGRhdGFibGVDb250ZXh0c1wiKSB8fCBbXTtcblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYVNlbGVjdGVkQ29udGV4dHMpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hc3NFZGl0O1xuIl19
@@ -0,0 +1,155 @@
1
+ import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
2
+ import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
3
+ import MassEditHelper from "sap/fe/core/helpers/MassEditHelper";
4
+ import Log from "sap/base/Log";
5
+ import Table from "sap/ui/mdc/Table";
6
+ import { extensible, finalExtension, privateExtension, publicExtension, defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
7
+ import ModelHelper, { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
8
+ import MessageBox from "sap/m/MessageBox";
9
+ import ResourceBundle from "sap/base/i18n/ResourceBundle";
10
+ import Context from "sap/ui/model/Context";
11
+ import ResourceModel from "sap/ui/model/resource/ResourceModel";
12
+ import PageController from "sap/fe/core/PageController";
13
+
14
+ /**
15
+ * @class Controller extension providing hooks for the mass edit in a table
16
+ *
17
+ * @name sap.fe.core.controllerextensions.MassEdit
18
+ * @hideconstructor
19
+ * @private
20
+ */
21
+ @defineUI5Class("sap.fe.core.controllerextensions.MassEdit")
22
+ class MassEdit extends ControllerExtension {
23
+ @publicExtension()
24
+ @finalExtension()
25
+ getMessageDetailForNonEditable(oResourceBundle: ResourceBundle) {
26
+ const sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
27
+ sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
28
+ sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
29
+ sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
30
+
31
+ return (
32
+ "<p><strong>" +
33
+ sHeader +
34
+ "</strong></p>\n" +
35
+ "<p>" +
36
+ sReasonGroup +
37
+ "</p>\n" +
38
+ "<ul>" +
39
+ "<li>" +
40
+ sReasonDraft +
41
+ "</li>" +
42
+ "<li>" +
43
+ sReasonNonEditable +
44
+ "</li>" +
45
+ "</ul>"
46
+ );
47
+ }
48
+
49
+ _openConfirmDialog(oTable: Table, aContexts: Context[], iSelectedContexts: number) {
50
+ const iUpdatableContexts = (aContexts || []).length;
51
+
52
+ return new Promise(resolve => {
53
+ ((this.getView().getModel("sap.fe.i18n") as ResourceModel).getResourceBundle() as Promise<ResourceBundle>)
54
+ .then(oResourceBundle => {
55
+ const sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
56
+ sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
57
+ iNonEditable = iSelectedContexts - iUpdatableContexts,
58
+ sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
59
+ iNonEditable,
60
+ iSelectedContexts,
61
+ iUpdatableContexts
62
+ ]),
63
+ sPath = oTable.data("targetCollectionPath"),
64
+ oMetaModel = oTable.getModel().getMetaModel(),
65
+ bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
66
+ bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
67
+ sMessageDetail = bIsDraft && bDisplayMode && this.getMessageDetailForNonEditable(oResourceBundle);
68
+
69
+ MessageBox.warning(sMessage, {
70
+ details: sMessageDetail,
71
+ actions: [sEditButton, sCancelButton],
72
+ emphasizedAction: sEditButton,
73
+ contentWidth: "100px",
74
+ onClose: function(sSelection: string) {
75
+ let aContextsForEdit: any[] = [];
76
+ if (sSelection === sEditButton) {
77
+ Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts.toString(), " selections.");
78
+ aContextsForEdit = aContexts;
79
+ } else if (sSelection === sCancelButton) {
80
+ Log.info("Mass Edit: Cancelled.");
81
+ }
82
+ resolve(aContextsForEdit);
83
+ }
84
+ } as any);
85
+ })
86
+ .catch(function(error) {
87
+ Log.error(error);
88
+ });
89
+ });
90
+ }
91
+
92
+ _confirmContexts(oTable: Table, aContexts: Context[]) {
93
+ const oInternalModelContext = oTable.getBindingContext("internal") as InternalModelContext,
94
+ iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
95
+
96
+ aContexts = aContexts || [];
97
+
98
+ if (aContexts.length && aContexts.length !== iSelectedContexts) {
99
+ return this._openConfirmDialog(oTable, aContexts, iSelectedContexts);
100
+ }
101
+ return Promise.resolve(aContexts);
102
+ }
103
+
104
+ /**
105
+ * The following operations are performed by method openMassEditDialog:
106
+ * => Opens the mass edit dialog.
107
+ * => Implements the save and cancel functionality.
108
+ * => Sets the runtime model to the dialog.
109
+ * => Sets the static model's context to the dialog.
110
+ *
111
+ * @param {sap.ui.mdc.Table} oTable Instance of the table
112
+ * @returns {Promise} A promise that resolves on open of the mass edit dialog.
113
+ * @private
114
+ */
115
+ @publicExtension()
116
+ @finalExtension()
117
+ openMassEditDialog(oTable: Table) {
118
+ const oController = this.getView().getController() as PageController,
119
+ pContextsForEdit = this.fetchContextsForEdit(oTable);
120
+
121
+ return pContextsForEdit
122
+ .then(this._confirmContexts.bind(this, oTable))
123
+ .then(function(aContexts: any) {
124
+ return aContexts && aContexts.length > 0 ? MassEditHelper.createDialog(oTable, aContexts, oController) : Promise.resolve();
125
+ })
126
+ .then(function(oDialog?: any) {
127
+ if (oDialog) {
128
+ oDialog.open();
129
+ }
130
+ })
131
+ .catch(function(oError: any) {
132
+ Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Returns a promise that resolves to the contexts for mass edit.
138
+ * @function
139
+ * @param {sap.ui.mdc.Table} oTable Table for mass edit.
140
+ * @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
141
+ * @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
142
+ * @private
143
+ **/
144
+ @privateExtension()
145
+ @extensible(OverrideExecution.After)
146
+ fetchContextsForEdit(oTable: Table) {
147
+ //To be overridden by the application
148
+ const oInternalModelContext = oTable.getBindingContext("internal") as InternalModelContext,
149
+ aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
150
+
151
+ return Promise.resolve(aSelectedContexts);
152
+ }
153
+ }
154
+
155
+ export default MassEdit;