@sapui5/sap.fe.core 1.99.0 → 1.101.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/package.json +6 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +43 -92
  4. package/src/sap/fe/core/AnnotationHelper.ts +43 -107
  5. package/src/sap/fe/core/AppComponent.js +381 -399
  6. package/src/sap/fe/core/AppComponent.ts +397 -0
  7. package/src/sap/fe/core/AppStateHandler.js +131 -162
  8. package/src/sap/fe/core/AppStateHandler.ts +2 -2
  9. package/src/sap/fe/core/BaseController.js +82 -58
  10. package/src/sap/fe/core/BaseController.ts +67 -0
  11. package/src/sap/fe/core/CommonUtils.js +179 -31
  12. package/src/sap/fe/core/CommonUtils.ts +295 -125
  13. package/src/sap/fe/core/ExtensionAPI.js +279 -274
  14. package/src/sap/fe/core/ExtensionAPI.ts +242 -0
  15. package/src/sap/fe/core/PageController.js +158 -29
  16. package/src/sap/fe/core/PageController.ts +65 -37
  17. package/src/sap/fe/core/RouterProxy.js +700 -750
  18. package/src/sap/fe/core/RouterProxy.ts +47 -31
  19. package/src/sap/fe/core/Synchronization.js +21 -31
  20. package/src/sap/fe/core/TemplateComponent.js +193 -118
  21. package/src/sap/fe/core/TemplateComponent.ts +104 -109
  22. package/src/sap/fe/core/TemplateModel.js +24 -44
  23. package/src/sap/fe/core/TemplateModel.ts +3 -3
  24. package/src/sap/fe/core/TransactionHelper.js +1368 -1369
  25. package/src/sap/fe/core/TransactionHelper.ts +201 -171
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +406 -0
  27. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +362 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +146 -0
  29. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +129 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.js +264 -0
  31. package/src/sap/fe/core/actions/collaboration/Manage.ts +246 -0
  32. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +100 -0
  33. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  34. package/src/sap/fe/core/actions/draft.js +324 -220
  35. package/src/sap/fe/core/actions/draft.ts +209 -133
  36. package/src/sap/fe/core/actions/messageHandling.js +79 -48
  37. package/src/sap/fe/core/actions/messageHandling.ts +113 -83
  38. package/src/sap/fe/core/actions/operations.js +37 -18
  39. package/src/sap/fe/core/actions/operations.ts +51 -20
  40. package/src/sap/fe/core/actions/sticky.js +17 -4
  41. package/src/sap/fe/core/actions/sticky.ts +21 -4
  42. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  43. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  44. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  45. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  46. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  47. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  48. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  49. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  50. package/src/sap/fe/core/controllerextensions/EditFlow.js +1854 -1669
  51. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1792 -0
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  53. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +60 -0
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +716 -779
  55. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +785 -0
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  57. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +810 -0
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1056 -1005
  59. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1001 -0
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.js +498 -532
  61. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +13 -12
  62. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  63. package/src/sap/fe/core/controllerextensions/MassEdit.ts +155 -0
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.js +221 -244
  65. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +215 -0
  66. package/src/sap/fe/core/controllerextensions/PageReady.js +312 -345
  67. package/src/sap/fe/core/controllerextensions/PageReady.ts +57 -53
  68. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  69. package/src/sap/fe/core/controllerextensions/Paginator.ts +169 -0
  70. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  71. package/src/sap/fe/core/controllerextensions/Placeholder.ts +149 -0
  72. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  73. package/src/sap/fe/core/controllerextensions/Routing.ts +131 -0
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  75. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  76. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  77. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  78. package/src/sap/fe/core/controllerextensions/SideEffects.js +603 -644
  79. package/src/sap/fe/core/controllerextensions/SideEffects.ts +68 -68
  80. package/src/sap/fe/core/controllerextensions/ViewState.js +774 -806
  81. package/src/sap/fe/core/controllerextensions/ViewState.ts +796 -0
  82. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  84. package/src/sap/fe/core/controls/Any.js +28 -0
  85. package/src/sap/fe/core/controls/Any.ts +30 -0
  86. package/src/sap/fe/core/controls/CommandExecution.js +92 -68
  87. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  88. package/src/sap/fe/core/controls/ConditionalWrapper.js +165 -79
  89. package/src/sap/fe/core/controls/ConditionalWrapper.ts +74 -0
  90. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  91. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  92. package/src/sap/fe/core/controls/CustomQuickViewPage.js +167 -125
  93. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +116 -0
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  95. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +163 -122
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +155 -0
  97. package/src/sap/fe/core/controls/FieldWrapper.js +212 -141
  98. package/src/sap/fe/core/controls/FieldWrapper.ts +104 -0
  99. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  100. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  101. package/src/sap/fe/core/controls/FilterBar.js +197 -159
  102. package/src/sap/fe/core/controls/FilterBar.ts +148 -0
  103. package/src/sap/fe/core/controls/FormElementWrapper.js +100 -39
  104. package/src/sap/fe/core/controls/FormElementWrapper.ts +37 -0
  105. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  106. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  107. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +147 -115
  108. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +102 -0
  109. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +300 -265
  110. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +252 -0
  111. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +185 -140
  112. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  113. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  114. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +75 -74
  117. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +71 -0
  118. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  119. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  120. package/src/sap/fe/core/converters/ManifestSettings.js +13 -1
  121. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -2
  122. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  123. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  124. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  125. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  126. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  127. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  128. package/src/sap/fe/core/converters/annotations/DataField.js +26 -13
  129. package/src/sap/fe/core/converters/annotations/DataField.ts +40 -17
  130. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
  131. package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
  132. package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
  133. package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
  134. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -6
  135. package/src/sap/fe/core/converters/controls/Common/Form.ts +7 -3
  136. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  137. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -2
  138. package/src/sap/fe/core/converters/controls/Common/Table.js +326 -86
  139. package/src/sap/fe/core/converters/controls/Common/Table.ts +384 -167
  140. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +120 -55
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +158 -98
  142. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +206 -223
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +263 -287
  144. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  146. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  148. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  150. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  152. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  153. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  154. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  155. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  156. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  157. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +51 -27
  158. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +69 -43
  159. package/src/sap/fe/core/converters/templates/ListReportConverter.js +42 -25
  160. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +91 -65
  161. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +11 -9
  162. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -8
  163. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  164. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  165. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  166. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  167. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  168. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  169. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  170. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  171. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  172. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  173. package/src/sap/fe/core/fpm/Component.js +80 -55
  174. package/src/sap/fe/core/fpm/Component.ts +43 -0
  175. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  176. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  177. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  178. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  179. package/src/sap/fe/core/helpers/ClassSupport.js +307 -166
  180. package/src/sap/fe/core/helpers/ClassSupport.ts +348 -155
  181. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  183. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  184. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  185. package/src/sap/fe/core/helpers/MassEditHelper.js +735 -684
  186. package/src/sap/fe/core/helpers/MassEditHelper.ts +803 -0
  187. package/src/sap/fe/core/helpers/ModelHelper.js +53 -1
  188. package/src/sap/fe/core/helpers/ModelHelper.ts +46 -0
  189. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  190. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  191. package/src/sap/fe/core/helpers/SemanticDateOperators.js +7 -3
  192. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +7 -1
  193. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  194. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  195. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
  196. package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
  197. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  198. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  199. package/src/sap/fe/core/library.js +425 -451
  200. package/src/sap/fe/core/library.support.js +22 -33
  201. package/src/sap/fe/core/library.support.ts +23 -0
  202. package/src/sap/fe/core/library.ts +420 -0
  203. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  204. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -4
  205. package/src/sap/fe/core/messagebundle.properties +45 -13
  206. package/src/sap/fe/core/messagebundle_ar.properties +29 -7
  207. package/src/sap/fe/core/messagebundle_bg.properties +29 -7
  208. package/src/sap/fe/core/messagebundle_ca.properties +29 -7
  209. package/src/sap/fe/core/messagebundle_cs.properties +29 -7
  210. package/src/sap/fe/core/messagebundle_cy.properties +29 -7
  211. package/src/sap/fe/core/messagebundle_da.properties +29 -7
  212. package/src/sap/fe/core/messagebundle_de.properties +29 -7
  213. package/src/sap/fe/core/messagebundle_el.properties +29 -7
  214. package/src/sap/fe/core/messagebundle_en.properties +29 -7
  215. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -7
  216. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +29 -7
  217. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +29 -7
  218. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +29 -7
  219. package/src/sap/fe/core/messagebundle_es.properties +29 -7
  220. package/src/sap/fe/core/messagebundle_es_MX.properties +29 -7
  221. package/src/sap/fe/core/messagebundle_et.properties +29 -7
  222. package/src/sap/fe/core/messagebundle_fi.properties +30 -8
  223. package/src/sap/fe/core/messagebundle_fr.properties +31 -9
  224. package/src/sap/fe/core/messagebundle_fr_CA.properties +31 -9
  225. package/src/sap/fe/core/messagebundle_hi.properties +29 -7
  226. package/src/sap/fe/core/messagebundle_hr.properties +29 -7
  227. package/src/sap/fe/core/messagebundle_hu.properties +29 -7
  228. package/src/sap/fe/core/messagebundle_id.properties +29 -7
  229. package/src/sap/fe/core/messagebundle_it.properties +29 -7
  230. package/src/sap/fe/core/messagebundle_iw.properties +29 -7
  231. package/src/sap/fe/core/messagebundle_ja.properties +28 -6
  232. package/src/sap/fe/core/messagebundle_kk.properties +29 -7
  233. package/src/sap/fe/core/messagebundle_ko.properties +29 -7
  234. package/src/sap/fe/core/messagebundle_lt.properties +29 -7
  235. package/src/sap/fe/core/messagebundle_lv.properties +30 -8
  236. package/src/sap/fe/core/messagebundle_ms.properties +29 -7
  237. package/src/sap/fe/core/messagebundle_nl.properties +29 -7
  238. package/src/sap/fe/core/messagebundle_no.properties +29 -7
  239. package/src/sap/fe/core/messagebundle_pl.properties +29 -7
  240. package/src/sap/fe/core/messagebundle_pt.properties +30 -8
  241. package/src/sap/fe/core/messagebundle_pt_PT.properties +29 -7
  242. package/src/sap/fe/core/messagebundle_ro.properties +29 -7
  243. package/src/sap/fe/core/messagebundle_ru.properties +29 -7
  244. package/src/sap/fe/core/messagebundle_sh.properties +29 -7
  245. package/src/sap/fe/core/messagebundle_sk.properties +29 -7
  246. package/src/sap/fe/core/messagebundle_sl.properties +29 -7
  247. package/src/sap/fe/core/messagebundle_sv.properties +30 -8
  248. package/src/sap/fe/core/messagebundle_th.properties +28 -6
  249. package/src/sap/fe/core/messagebundle_tr.properties +32 -10
  250. package/src/sap/fe/core/messagebundle_uk.properties +29 -7
  251. package/src/sap/fe/core/messagebundle_vi.properties +29 -7
  252. package/src/sap/fe/core/messagebundle_zh_CN.properties +29 -7
  253. package/src/sap/fe/core/messagebundle_zh_TW.properties +29 -7
  254. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +47 -73
  255. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +158 -196
  257. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +5 -6
  258. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +70 -96
  259. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  260. package/src/sap/fe/core/services/NavigationServiceFactory.js +287 -342
  261. package/src/sap/fe/core/services/NavigationServiceFactory.ts +11 -14
  262. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +70 -105
  263. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +6 -3
  264. package/src/sap/fe/core/services/RoutingServiceFactory.js +796 -820
  265. package/src/sap/fe/core/services/RoutingServiceFactory.ts +62 -53
  266. package/src/sap/fe/core/services/ShellServicesFactory.js +694 -741
  267. package/src/sap/fe/core/services/ShellServicesFactory.ts +33 -33
  268. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +570 -595
  269. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +23 -4
  270. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +357 -389
  271. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +25 -29
  272. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  273. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +7 -4
  274. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  275. package/src/sap/fe/core/support/CommonHelper.ts +1 -4
  276. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  277. package/src/sap/fe/core/templating/DataModelPathHelper.js +91 -90
  278. package/src/sap/fe/core/templating/DataModelPathHelper.ts +126 -123
  279. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  280. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  281. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  282. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  283. package/src/sap/fe/core/templating/PropertyHelper.js +16 -2
  284. package/src/sap/fe/core/templating/PropertyHelper.ts +31 -24
  285. package/src/sap/fe/core/templating/UIFormatters.js +150 -44
  286. package/src/sap/fe/core/templating/UIFormatters.ts +165 -67
  287. package/src/sap/fe/core/type/Email.js +26 -8
  288. package/src/sap/fe/core/type/Email.ts +8 -7
  289. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -75
@@ -1,12 +1,11 @@
1
1
  import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
2
- import { ControllerExtensionMetadata } from "sap/fe/core/controllerextensions";
3
- import { UI5Class, Override, Public } from "../helpers/ClassSupport";
2
+ import { defineUI5Class, methodOverride, publicExtension } from "../helpers/ClassSupport";
4
3
  import JSONModel from "sap/ui/model/json/JSONModel";
5
4
  import ODataModel from "sap/ui/model/odata/v4/ODataModel";
6
5
  import Context from "sap/ui/model/odata/v4/Context";
7
6
  import Log from "sap/base/Log";
8
7
  import { KPIChartDefinition, KPIDefinition, NavigationInfo } from "sap/fe/core/converters/controls/Common/KPI";
9
- import { BaseController } from "sap/fe/core";
8
+ import BaseController from "sap/fe/core/BaseController";
10
9
  import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
11
10
  import { FilterDefinition, RangeDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
12
11
  import NumberFormat from "sap/ui/core/format/NumberFormat";
@@ -17,7 +16,8 @@ import FilterOperator from "sap/ui/model/FilterOperator";
17
16
  import Sorter from "sap/ui/model/Sorter";
18
17
  import GenericTag from "sap/m/GenericTag";
19
18
  import Popover from "sap/m/Popover";
20
- import ResourceBundle from "sap/base/i18n/ResourceBundle";
19
+ import { CoreEx } from "types/extension_types";
20
+ import Core from "sap/ui/core/Core";
21
21
 
22
22
  const MessageTypeFromCriticality: Record<string, MessageType> = {
23
23
  "1": MessageType.Error,
@@ -217,7 +217,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
217
217
  .getConfiguration()
218
218
  .getLanguage()
219
219
  );
220
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
220
+ const resBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
221
221
  const dateFormat = DateFormat.getDateInstance({ style: "medium" }, currentLocale);
222
222
 
223
223
  function formatRange(range: RangeDefinition): string {
@@ -269,7 +269,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
269
269
  }
270
270
 
271
271
  function formatChartTitle(kpiDef: KPIDefinition): string {
272
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
272
+ const resBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
273
273
 
274
274
  function formatList(items: { name: string; label: string }[]) {
275
275
  if (items.length === 0) {
@@ -568,7 +568,7 @@ function getNavigationParameters(
568
568
  * @private
569
569
  * @since 1.93.0
570
570
  */
571
- @UI5Class("sap.fe.core.controllerextensions.KPIManagement", ControllerExtensionMetadata)
571
+ @defineUI5Class("sap.fe.core.controllerextensions.KPIManagement")
572
572
  class KPIManagementControllerExtension extends ControllerExtension {
573
573
  protected aKPIDefinitions?: KPIDefinition[];
574
574
  protected oCard: any;
@@ -624,7 +624,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
624
624
 
625
625
  // Add side indicators in the card header if a target is defined for the KPI
626
626
  if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
627
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
627
+ const resBundle = (Core as CoreEx).getLibraryResourceBundle("sap.fe.core");
628
628
  oCardManifest["sap.card"].header.sideIndicators = [
629
629
  {
630
630
  title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
@@ -689,7 +689,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
689
689
  }
690
690
  }
691
691
 
692
- @Override()
692
+ @methodOverride()
693
693
  public onInit(): void {
694
694
  this.aKPIDefinitions = this.getKPIData();
695
695
 
@@ -718,7 +718,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
718
718
  }
719
719
  }
720
720
 
721
- @Override()
721
+ @methodOverride()
722
722
  public onExit(): void {
723
723
  const oKPIModel = this.getView().getModel("kpiModel") as JSONModel;
724
724
 
@@ -1108,7 +1108,8 @@ class KPIManagementControllerExtension extends ControllerExtension {
1108
1108
  protected getPopover(oKPITag: GenericTag): Promise<Popover> {
1109
1109
  if (!this.oPopover) {
1110
1110
  return new Promise((resolve, reject) => {
1111
- (sap.ui.getCore().loadLibrary("sap/ui/integration", { async: true }) as Promise<object>)
1111
+ (Core as CoreEx)
1112
+ .loadLibrary("sap/ui/integration", { async: true })
1112
1113
  .then(() => {
1113
1114
  sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], (Card: any, Host: any) => {
1114
1115
  const oHost = new Host();
@@ -1155,7 +1156,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
1155
1156
  }
1156
1157
  }
1157
1158
 
1158
- @Public
1159
+ @publicExtension()
1159
1160
  public onKPIPressed(oKPITag: any, kpiID: string): void {
1160
1161
  const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel;
1161
1162
 
@@ -1,172 +1,144 @@
1
1
  /*!
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
5
4
  */
6
- sap.ui.define(
7
- [
8
- "sap/ui/core/mvc/ControllerExtension",
9
- "sap/ui/core/mvc/OverrideExecution",
10
- "sap/fe/core/helpers/MassEditHelper",
11
- "sap/fe/core/helpers/ModelHelper",
12
- "sap/base/Log",
13
- "sap/m/MessageBox"
14
- ],
15
- function(ControllerExtension, OverrideExecution, MassEditHelper, ModelHelper, Log, MessageBox) {
16
- "use strict";
17
- /**
18
- * @class Controller extension providing hooks for the mass edit in a table
19
- *
20
- * @name sap.fe.core.controllerextensions.MassEdit
21
- * @hideconstructor
22
- * @private
23
- */
24
- return ControllerExtension.extend("sap.fe.core.controllerextensions.MassEdit", {
25
- metadata: {
26
- methods: {
27
- openMassEditDialog: {
28
- "final": true,
29
- "public": true
30
- },
31
- fetchContextsForEdit: {
32
- "final": false,
33
- "public": false,
34
- overrideExecution: OverrideExecution.After
35
- }
36
- }
37
- },
38
-
39
- _getMessageDetailForNonEditable: function(oResourceBundle) {
40
- var sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
41
- sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
42
- sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
43
- sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
44
-
45
- return (
46
- "<p><strong>" +
47
- sHeader +
48
- "</strong></p>\n" +
49
- "<p>" +
50
- sReasonGroup +
51
- "</p>\n" +
52
- "<ul>" +
53
- "<li>" +
54
- sReasonDraft +
55
- "</li>" +
56
- "<li>" +
57
- sReasonNonEditable +
58
- "</li>" +
59
- "</ul>"
60
- );
61
- },
62
-
63
- _openConfirmDialog: function(oTable, aContexts, iSelectedContexts) {
64
- var that = this,
65
- iUpdatableContexts = (aContexts || []).length;
66
-
67
- return new Promise(function(resolve, reject) {
68
- that.getView()
69
- .getModel("sap.fe.i18n")
70
- .getResourceBundle()
71
- .then(function(oResourceBundle) {
72
- var sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
73
- sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
74
- iNonEditable = iSelectedContexts - iUpdatableContexts,
75
- sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
76
- iNonEditable,
77
- iSelectedContexts,
78
- iUpdatableContexts
79
- ]),
80
- sPath = oTable.data("targetCollectionPath"),
81
- oMetaModel = oTable.getModel().getMetaModel(),
82
- bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
83
- bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
84
- sMessageDetail = bIsDraft && bDisplayMode && that._getMessageDetailForNonEditable(oResourceBundle);
85
-
86
- MessageBox.warning(sMessage, {
87
- details: sMessageDetail,
88
- actions: [sEditButton, sCancelButton],
89
- emphasizedAction: sEditButton,
90
- contentWidth: "100px",
91
- onClose: function(sSelection) {
92
- var aContextsForEdit = [];
93
- if (sSelection === sEditButton) {
94
- Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts, " selections.");
95
- aContextsForEdit = aContexts;
96
- } else if (sSelection === sCancelButton) {
97
- Log.info("Mass Edit: Cancelled.");
98
- }
99
- resolve(aContextsForEdit);
100
- }
101
- });
102
- })
103
- .catch(function(error) {
104
- Log.error(error);
105
- });
106
- });
107
- },
108
-
109
- _confirmContexts: function(oTable, aContexts) {
110
- var that = this,
111
- oInternalModelContext = oTable.getBindingContext("internal"),
112
- iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
113
-
114
- aContexts = aContexts || [];
115
-
116
- if (aContexts.length && aContexts.length !== iSelectedContexts) {
117
- return that._openConfirmDialog(oTable, aContexts, iSelectedContexts);
118
- }
119
- return Promise.resolve(aContexts);
120
- },
121
-
122
- /**
123
- * The following operations are performed by method openMassEditDialog:
124
- * => Opens the mass edit dialog.
125
- * => Implements the save and cancel functionality.
126
- * => Sets the runtime model to the dialog.
127
- * => Sets the static model's context to the dialog.
128
- *
129
- * @param {object} oTable Instance of the table
130
- * @returns {Promise} A promise that resolves on open of the mass edit dialog.
131
- * @private
132
- */
133
- openMassEditDialog: function(oTable) {
134
- var that = this,
135
- oController = that.getView().getController(),
136
- pContextsForEdit = that.fetchContextsForEdit(oTable);
137
-
138
- return pContextsForEdit
139
- .then(that._confirmContexts.bind(that, oTable))
140
- .then(function(aContexts) {
141
- return aContexts && aContexts.length > 0
142
- ? MassEditHelper.createDialog(oTable, aContexts, oController)
143
- : Promise.resolve();
144
- })
145
- .then(function(oDialog) {
146
- if (oDialog) {
147
- oDialog.open();
148
- }
149
- })
150
- .catch(function(oError) {
151
- Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
152
- });
153
- },
154
-
155
- /**
156
- * Returns a promise that resolves to the contexts for mass edit.
157
- * @function
158
- * @param {string} oTable Table for mass edit.
159
- * @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
160
- * @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
161
- * @private
162
- **/
163
- fetchContextsForEdit: function(oTable) {
164
- //To be overridden by the application
165
- var oInternalModelContext = oTable.getBindingContext("internal"),
166
- aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
167
-
168
- return Promise.resolve(aSelectedContexts);
169
- }
170
- });
171
- }
172
- );
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;