@sapui5/sap.fe.core 1.97.0 → 1.100.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 (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -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 +68 -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 +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -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 +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -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 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -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/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -1,18 +1,23 @@
1
- import { ControllerExtension } from "sap/ui/core/mvc";
2
- import { ControllerExtensionMetadata } from "sap/fe/core/controllerextensions";
1
+ import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
2
+ import ControllerExtensionMetadata from "sap/fe/core/controllerextensions/ControllerExtensionMetadata";
3
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";
7
- import { KPIChartDefinition, KPIDefinition } from "sap/fe/core/converters/controls/Common/KPI";
8
- import { BaseController } from "sap/fe/core";
4
+ import JSONModel from "sap/ui/model/json/JSONModel";
5
+ import ODataModel from "sap/ui/model/odata/v4/ODataModel";
6
+ import Context from "sap/ui/model/odata/v4/Context";
7
+ import Log from "sap/base/Log";
8
+ import { KPIChartDefinition, KPIDefinition, NavigationInfo } from "sap/fe/core/converters/controls/Common/KPI";
9
+ import BaseController from "sap/fe/core/BaseController";
9
10
  import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
10
11
  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";
15
- import { Card } from "sap/ui/integration/widgets";
12
+ import NumberFormat from "sap/ui/core/format/NumberFormat";
13
+ import DateFormat from "sap/ui/core/format/DateFormat";
14
+ import Locale from "sap/ui/core/Locale";
15
+ import Filter from "sap/ui/model/Filter";
16
+ import FilterOperator from "sap/ui/model/FilterOperator";
17
+ import Sorter from "sap/ui/model/Sorter";
18
+ import GenericTag from "sap/m/GenericTag";
19
+ import Popover from "sap/m/Popover";
20
+ import ResourceBundle from "sap/base/i18n/ResourceBundle";
16
21
 
17
22
  const MessageTypeFromCriticality: Record<string, MessageType> = {
18
23
  "1": MessageType.Error,
@@ -212,7 +217,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
212
217
  .getConfiguration()
213
218
  .getLanguage()
214
219
  );
215
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
220
+ const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
216
221
  const dateFormat = DateFormat.getDateInstance({ style: "medium" }, currentLocale);
217
222
 
218
223
  function formatRange(range: RangeDefinition): string {
@@ -264,7 +269,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
264
269
  }
265
270
 
266
271
  function formatChartTitle(kpiDef: KPIDefinition): string {
267
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
272
+ const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
268
273
 
269
274
  function formatList(items: { name: string; label: string }[]) {
270
275
  if (items.length === 0) {
@@ -523,6 +528,37 @@ function getChartFeeds(chartDefinition: KPIChartDefinition): { uid: string; type
523
528
  return res;
524
529
  }
525
530
 
531
+ function getNavigationParameters(
532
+ navInfo: NavigationInfo,
533
+ oShellService: any
534
+ ): Promise<{ semanticObject?: string; action?: string; outbound?: string } | undefined> {
535
+ if (navInfo.semanticObject) {
536
+ if (navInfo.action) {
537
+ // Action is already specified: check if it's available in the shell
538
+ return oShellService.getLinks({ semanticObject: navInfo.semanticObject, action: navInfo.action }).then((aLinks: any[]) => {
539
+ return aLinks.length ? { semanticObject: navInfo.semanticObject, action: navInfo.action } : undefined;
540
+ });
541
+ } else {
542
+ // We get the primary intent from the shell
543
+ return oShellService.getPrimaryIntent(navInfo.semanticObject).then((oLink: any) => {
544
+ if (!oLink) {
545
+ // No primary intent...
546
+ return undefined;
547
+ }
548
+
549
+ // Check that the primary intent is not part of the unavailable actions
550
+ const oInfo = oShellService.parseShellHash(oLink.intent);
551
+ return navInfo.unavailableActions && navInfo.unavailableActions.indexOf(oInfo.action) >= 0
552
+ ? undefined
553
+ : { semanticObject: oInfo.semanticObject, action: oInfo.action };
554
+ });
555
+ }
556
+ } else {
557
+ // Outbound navigation specified in the manifest
558
+ return navInfo.outboundNavigation ? Promise.resolve({ outbound: navInfo.outboundNavigation }) : Promise.resolve(undefined);
559
+ }
560
+ }
561
+
526
562
  /**
527
563
  * @class A controller extension for managing the KPIs in an analytical list page
528
564
  *
@@ -535,7 +571,7 @@ function getChartFeeds(chartDefinition: KPIChartDefinition): { uid: string; type
535
571
  @UI5Class("sap.fe.core.controllerextensions.KPIManagement", ControllerExtensionMetadata)
536
572
  class KPIManagementControllerExtension extends ControllerExtension {
537
573
  protected aKPIDefinitions?: KPIDefinition[];
538
- protected oCard!: Card;
574
+ protected oCard: any;
539
575
  protected oPopover!: Popover;
540
576
 
541
577
  /**
@@ -544,7 +580,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
544
580
  * @param kpiDefinition The KPI definition
545
581
  * @param oKPIModel The JSON model in which the manifest will be stored
546
582
  */
547
- protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel<any>): void {
583
+ protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel): void {
548
584
  const oCardManifest: any = {
549
585
  "sap.app": {
550
586
  id: "sap.fe",
@@ -588,7 +624,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
588
624
 
589
625
  // Add side indicators in the card header if a target is defined for the KPI
590
626
  if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
591
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
627
+ const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
592
628
  oCardManifest["sap.card"].header.sideIndicators = [
593
629
  {
594
630
  title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
@@ -635,6 +671,24 @@ class KPIManagementControllerExtension extends ControllerExtension {
635
671
  });
636
672
  }
637
673
 
674
+ protected initNavigationInfo(kpiDefinition: KPIDefinition, oKPIModel: JSONModel, oShellService: any): Promise<void> {
675
+ // Add navigation
676
+ if (kpiDefinition.navigation) {
677
+ return getNavigationParameters(kpiDefinition.navigation, oShellService).then(oNavInfo => {
678
+ if (oNavInfo) {
679
+ oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/header/actions", [
680
+ {
681
+ type: "Navigation",
682
+ parameters: oNavInfo
683
+ }
684
+ ]);
685
+ }
686
+ });
687
+ } else {
688
+ return Promise.resolve();
689
+ }
690
+ }
691
+
638
692
  @Override()
639
693
  public onInit(): void {
640
694
  this.aKPIDefinitions = this.getKPIData();
@@ -651,6 +705,11 @@ class KPIManagementControllerExtension extends ControllerExtension {
651
705
  // Create the manifest for the KPI card and store it in the KPI model
652
706
  this.initCardManifest(kpiDefinition, oKPIModel);
653
707
 
708
+ // Set the navigation information in the manifest
709
+ this.initNavigationInfo(kpiDefinition, oKPIModel, oAppComponent.getShellServices()).catch(function(err: any) {
710
+ Log.error(err);
711
+ });
712
+
654
713
  // Load tag data for the KPI
655
714
  this.loadKPITagData(kpiDefinition, oAppComponent.getModel() as ODataModel, oKPIModel).catch(function(err: any) {
656
715
  Log.error(err);
@@ -661,7 +720,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
661
720
 
662
721
  @Override()
663
722
  public onExit(): void {
664
- const oKPIModel = this.getView().getModel("kpiModel") as JSONModel<any>;
723
+ const oKPIModel = this.getView().getModel("kpiModel") as JSONModel;
665
724
 
666
725
  if (oKPIModel) {
667
726
  oKPIModel.destroy();
@@ -684,7 +743,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
684
743
  }
685
744
  }
686
745
 
687
- private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
746
+ private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
688
747
  const currentLocale = new Locale(
689
748
  sap.ui
690
749
  .getCore()
@@ -761,7 +820,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
761
820
  }
762
821
  }
763
822
 
764
- private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
823
+ private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
765
824
  const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
766
825
 
767
826
  let criticalityValue = MessageType.None;
@@ -803,7 +862,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
803
862
  );
804
863
  }
805
864
 
806
- private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
865
+ private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
807
866
  const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
808
867
 
809
868
  let trendValue = "None";
@@ -838,7 +897,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
838
897
  oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", trendValue);
839
898
  }
840
899
 
841
- private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
900
+ private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
842
901
  if (kpiDefinition.datapoint.targetValue === undefined && kpiDefinition.datapoint.targetPath === undefined) {
843
902
  return; // No target set for the KPI
844
903
  }
@@ -905,7 +964,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
905
964
  * @param loadFull If not true, loads only data for the KPI tag
906
965
  * @returns {Promise} Returns the promise that is resolved when data is loaded.
907
966
  */
908
- protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel<any>, loadFull?: boolean): any {
967
+ protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel, loadFull?: boolean): any {
909
968
  // If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
910
969
  // If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
911
970
  const oListBinding = loadFull
@@ -988,7 +1047,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
988
1047
  * @param {JSONModel} oKPIModel The JSON model where the data will be stored
989
1048
  * @returns {Promise} Returns the promise that is resolved when data is loaded.
990
1049
  */
991
- protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel<any>): any {
1050
+ protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel): any {
992
1051
  const oListBinding = oMainModel.bindList("/" + kpiDefinition.entitySet);
993
1052
  const oGroup: Record<string, Object> = {};
994
1053
  const oAggregate: Record<string, Object> = {};
@@ -1041,34 +1100,64 @@ class KPIManagementControllerExtension extends ControllerExtension {
1041
1100
  /**
1042
1101
  * Gets the popover to display the KPI card
1043
1102
  * The popover and the contained card for the KPIs are created if necessary.
1044
- * The popover is shared between all KPIs, so we create it only once.
1103
+ * The popover is shared between all KPIs, so it's created only once.
1045
1104
  *
1046
- * @param oKPITag The Tag that triggered the popover opening.
1047
- * @returns The shared popover.
1105
+ * @param oKPITag The tag that triggered the popover opening.
1106
+ * @returns The shared popover as a promise.
1048
1107
  */
1049
- protected getPopover(oKPITag: GenericTag): Popover {
1108
+ protected getPopover(oKPITag: GenericTag): Promise<Popover> {
1050
1109
  if (!this.oPopover) {
1051
- this.oCard = new Card({
1052
- width: "25rem",
1053
- height: "auto"
1054
- });
1055
-
1056
- this.oPopover = new Popover({
1057
- id: "kpi-Popover",
1058
- showHeader: false,
1059
- placement: "Auto",
1060
- content: [this.oCard]
1110
+ return new Promise((resolve, reject) => {
1111
+ (sap.ui.getCore().loadLibrary("sap/ui/integration", { async: true }) as Promise<object>)
1112
+ .then(() => {
1113
+ sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], (Card: any, Host: any) => {
1114
+ const oHost = new Host();
1115
+
1116
+ oHost.attachAction((oEvent: any) => {
1117
+ const sType = oEvent.getParameter("type");
1118
+ const oParams = oEvent.getParameter("parameters");
1119
+
1120
+ if (sType === "Navigation") {
1121
+ if (oParams.semanticObject) {
1122
+ (this.getView().getController() as any)._intentBasedNavigation.navigate(
1123
+ oParams.semanticObject,
1124
+ oParams.action
1125
+ );
1126
+ } else {
1127
+ (this.getView().getController() as any)._intentBasedNavigation.navigateOutbound(oParams.outbound);
1128
+ }
1129
+ }
1130
+ });
1131
+
1132
+ this.oCard = new Card({
1133
+ width: "25rem",
1134
+ height: "auto"
1135
+ });
1136
+ this.oCard.setHost(oHost as any);
1137
+
1138
+ this.oPopover = new Popover("kpi-Popover", {
1139
+ showHeader: false,
1140
+ placement: "Auto",
1141
+ content: [this.oCard]
1142
+ });
1143
+
1144
+ oKPITag.addDependent(this.oPopover); // The first clicked tag gets the popover as dependent
1145
+
1146
+ resolve(this.oPopover);
1147
+ });
1148
+ })
1149
+ .catch(function() {
1150
+ reject();
1151
+ });
1061
1152
  });
1062
-
1063
- oKPITag.addDependent(this.oPopover); // The first clicked tag gets the popover as dependent
1153
+ } else {
1154
+ return Promise.resolve(this.oPopover);
1064
1155
  }
1065
-
1066
- return this.oPopover;
1067
1156
  }
1068
1157
 
1069
1158
  @Public
1070
1159
  public onKPIPressed(oKPITag: any, kpiID: string): void {
1071
- const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel<any>;
1160
+ const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel;
1072
1161
 
1073
1162
  if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
1074
1163
  const kpiDefinition = this.aKPIDefinitions.find(function(oDef) {
@@ -1079,14 +1168,16 @@ class KPIManagementControllerExtension extends ControllerExtension {
1079
1168
  const oModel = oKPITag.getModel();
1080
1169
  const aPromises = [
1081
1170
  this.loadKPITagData(kpiDefinition, oModel, oKPIModel, true),
1082
- this.loadKPICardData(kpiDefinition, oModel, oKPIModel)
1171
+ this.loadKPICardData(kpiDefinition, oModel, oKPIModel),
1172
+ this.getPopover(oKPITag)
1083
1173
  ];
1084
- const oPopover = this.getPopover(oKPITag);
1085
1174
 
1086
1175
  Promise.all(aPromises)
1087
- .then(() => {
1176
+ .then(aResults => {
1088
1177
  this.oCard.setManifest(oKPIModel.getProperty("/" + kpiID + "/manifest"));
1089
1178
  this.oCard.refresh();
1179
+
1180
+ const oPopover = aResults[2];
1090
1181
  oPopover.openBy(oKPITag, false);
1091
1182
  })
1092
1183
  .catch(err => {
@@ -0,0 +1,144 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
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/controllerextensions/ControllerExtensionMetadata", "sap/fe/core/helpers/ModelHelper", "sap/m/MessageBox"], function (ControllerExtension, OverrideExecution, MassEditHelper, Log, ClassSupport, ControllerExtensionMetadata, ModelHelper, MessageBox) {
6
+ "use strict";
7
+
8
+ var _dec, _dec2, _class, _class2;
9
+
10
+ var UI5Class = ClassSupport.UI5Class;
11
+ var Public = ClassSupport.Public;
12
+ var Private = ClassSupport.Private;
13
+ var Final = ClassSupport.Final;
14
+ var Extensible = ClassSupport.Extensible;
15
+
16
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _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 = UI5Class("sap.fe.core.controllerextensions.MassEdit", ControllerExtensionMetadata), _dec2 = Extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
30
+ _inherits(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", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getMessageDetailForNonEditable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "openMassEditDialog", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "openMassEditDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "fetchContextsForEdit", [Private, _dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "fetchContextsForEdit"), _class2.prototype)), _class2)) || _class);
142
+ return MassEdit;
143
+ }, false);
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0LnRzIl0sIm5hbWVzIjpbIk1hc3NFZGl0IiwiVUk1Q2xhc3MiLCJDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEiLCJFeHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNIZWFkZXIiLCJnZXRUZXh0Iiwic1JlYXNvbkdyb3VwIiwic1JlYXNvbkRyYWZ0Iiwic1JlYXNvbk5vbkVkaXRhYmxlIiwiX29wZW5Db25maXJtRGlhbG9nIiwib1RhYmxlIiwiYUNvbnRleHRzIiwiaVNlbGVjdGVkQ29udGV4dHMiLCJpVXBkYXRhYmxlQ29udGV4dHMiLCJsZW5ndGgiLCJQcm9taXNlIiwicmVzb2x2ZSIsImdldFZpZXciLCJnZXRNb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwidGhlbiIsInNFZGl0QnV0dG9uIiwic0NhbmNlbEJ1dHRvbiIsImlOb25FZGl0YWJsZSIsInNNZXNzYWdlIiwic1BhdGgiLCJkYXRhIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImJJc0RyYWZ0IiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiYkRpc3BsYXlNb2RlIiwic01lc3NhZ2VEZXRhaWwiLCJNZXNzYWdlQm94Iiwid2FybmluZyIsImRldGFpbHMiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsImNvbnRlbnRXaWR0aCIsIm9uQ2xvc2UiLCJzU2VsZWN0aW9uIiwiYUNvbnRleHRzRm9yRWRpdCIsIkxvZyIsImluZm8iLCJ0b1N0cmluZyIsImNhdGNoIiwiZXJyb3IiLCJfY29uZmlybUNvbnRleHRzIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsIm9wZW5NYXNzRWRpdERpYWxvZyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInBDb250ZXh0c0ZvckVkaXQiLCJmZXRjaENvbnRleHRzRm9yRWRpdCIsImJpbmQiLCJNYXNzRWRpdEhlbHBlciIsImNyZWF0ZURpYWxvZyIsIm9EaWFsb2ciLCJvcGVuIiwib0Vycm9yIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiUHVibGljIiwiRmluYWwiLCJQcml2YXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUVNQSxRLFdBRExDLFFBQVEsQ0FBQywyQ0FBRCxFQUE4Q0MsMkJBQTlDLEMsVUE0SFBDLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEM7Ozs7Ozs7OztXQXhIWEMsOEIsR0FGQSx3Q0FFK0JDLGVBRi9CLEVBRWdFO0FBQy9ELFVBQU1DLE9BQU8sR0FBR0QsZUFBZSxDQUFDRSxPQUFoQixDQUF3QiwyQ0FBeEIsQ0FBaEI7QUFBQSxVQUNDQyxZQUFZLEdBQUdILGVBQWUsQ0FBQ0UsT0FBaEIsQ0FBd0IsMkNBQXhCLENBRGhCO0FBQUEsVUFFQ0UsWUFBWSxHQUFHSixlQUFlLENBQUNFLE9BQWhCLENBQXdCLGlEQUF4QixDQUZoQjtBQUFBLFVBR0NHLGtCQUFrQixHQUFHTCxlQUFlLENBQUNFLE9BQWhCLENBQXdCLHdEQUF4QixDQUh0QjtBQUtBLGFBQ0MsZ0JBQ0FELE9BREEsR0FFQSxpQkFGQSxHQUdBLEtBSEEsR0FJQUUsWUFKQSxHQUtBLFFBTEEsR0FNQSxNQU5BLEdBT0EsTUFQQSxHQVFBQyxZQVJBLEdBU0EsT0FUQSxHQVVBLE1BVkEsR0FXQUMsa0JBWEEsR0FZQSxPQVpBLEdBYUEsT0FkRDtBQWdCQSxLOztXQUVEQyxrQixHQUFBLDRCQUFtQkMsTUFBbkIsRUFBa0NDLFNBQWxDLEVBQXdEQyxpQkFBeEQsRUFBbUY7QUFBQTs7QUFDbEYsVUFBTUMsa0JBQWtCLEdBQUcsQ0FBQ0YsU0FBUyxJQUFJLEVBQWQsRUFBa0JHLE1BQTdDO0FBRUEsYUFBTyxJQUFJ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QUFBLFVBQ0NhLGlCQUFpQixHQUFHZCxxQkFBcUIsQ0FBQ0UsV0FBdEIsQ0FBa0MsbUJBQWxDLEtBQTBELEVBRC9FO0FBR0EsYUFBT3BDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQitDLGlCQUFoQixDQUFQO0FBQ0EsSzs7O0lBbElxQkMsbUIsb0ZBQ3JCQyxNLEVBQ0FDLEssaUxBMkZBRCxNLEVBQ0FDLEssdUtBNEJBQyxPO1NBV2F2RSxRIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgTWFzc0VkaXRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFzc0VkaXRIZWxwZXJcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgeyBFeHRlbnNpYmxlLCBGaW5hbCwgUHJpdmF0ZSwgUHVibGljLCBVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIsIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcblxuLyoqXG4gKiBAY2xhc3MgQ29udHJvbGxlciBleHRlbnNpb24gcHJvdmlkaW5nIGhvb2tzIGZvciB0aGUgbWFzcyBlZGl0IGluIGEgdGFibGVcbiAqXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5NYXNzRWRpdFxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHByaXZhdGVcbiAqL1xuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuTWFzc0VkaXRcIiwgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhKVxuY2xhc3MgTWFzc0VkaXQgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0QFB1YmxpY1xuXHRARmluYWxcblx0Z2V0TWVzc2FnZURldGFpbEZvck5vbkVkaXRhYmxlKG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRjb25zdCBzSGVhZGVyID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX0hFQURFUlwiKSxcblx0XHRcdHNSZWFzb25Hcm91cCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9NRVNTQUdFX0RFVEFJTF9SRUFTT05cIiksXG5cdFx0XHRzUmVhc29uRHJhZnQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRV9ERVRBSUxfUkVBU09OX0RSQUZUXCIpLFxuXHRcdFx0c1JlYXNvbk5vbkVkaXRhYmxlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9DT05GSVJNX01FU1NBR0VfREVUQUlMX1JFQVNPTl9OT05fRURJVEFCTEVcIik7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0XCI8cD48c3Ryb25nPlwiICtcblx0XHRcdHNIZWFkZXIgK1xuXHRcdFx0XCI8L3N0cm9uZz48L3A+XFxuXCIgK1xuXHRcdFx0XCI8cD5cIiArXG5cdFx0XHRzUmVhc29uR3JvdXAgK1xuXHRcdFx0XCI8L3A+XFxuXCIgK1xuXHRcdFx0XCI8dWw+XCIgK1xuXHRcdFx0XCI8bGk+XCIgK1xuXHRcdFx0c1JlYXNvbkRyYWZ0ICtcblx0XHRcdFwiPC9saT5cIiArXG5cdFx0XHRcIjxsaT5cIiArXG5cdFx0XHRzUmVhc29uTm9uRWRpdGFibGUgK1xuXHRcdFx0XCI8L2xpPlwiICtcblx0XHRcdFwiPC91bD5cIlxuXHRcdCk7XG5cdH1cblxuXHRfb3BlbkNvbmZpcm1EaWFsb2cob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIGlTZWxlY3RlZENvbnRleHRzOiBudW1iZXIpIHtcblx0XHRjb25zdCBpVXBkYXRhYmxlQ29udGV4dHMgPSAoYUNvbnRleHRzIHx8IFtdKS5sZW5ndGg7XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdFx0LnRoZW4ob1Jlc291cmNlQnVuZGxlID0+IHtcblx0XHRcdFx0XHRjb25zdCBzRWRpdEJ1dHRvbiA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQ09ORklSTV9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFx0XHRcdHNDYW5jZWxCdXR0b24gPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NBTkNFTF9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFx0XHRcdGlOb25FZGl0YWJsZSA9IGlTZWxlY3RlZENvbnRleHRzIC0gaVVwZGF0YWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0c01lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NPTkZJUk1fTUVTU0FHRVwiLCBbXG5cdFx0XHRcdFx0XHRcdGlOb25FZGl0YWJsZSxcblx0XHRcdFx0XHRcdFx0aVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRcdGlVcGRhdGFibGVDb250ZXh0c1xuXHRcdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0XHRzUGF0aCA9IG9UYWJsZS5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsID0gb1RhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRiSXNEcmFmdCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob01ldGFNb2RlbCwgc1BhdGgpLFxuXHRcdFx0XHRcdFx0YkRpc3BsYXlNb2RlID0gb1RhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHRzTWVzc2FnZURldGFpbCA9IGJJc0RyYWZ0ICYmIGJEaXNwbGF5TW9kZSAmJiB0aGlzLmdldE1lc3NhZ2VEZXRhaWxGb3JOb25FZGl0YWJsZShvUmVzb3VyY2VCdW5kbGUpO1xuXG5cdFx0XHRcdFx0TWVzc2FnZUJveC53YXJuaW5nKHNNZXNzYWdlLCB7XG5cdFx0XHRcdFx0XHRkZXRhaWxzOiBzTWVzc2FnZURldGFpbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IFtzRWRpdEJ1dHRvbiwgc0NhbmNlbEJ1dHRvbl0sXG5cdFx0XHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiBzRWRpdEJ1dHRvbixcblx0XHRcdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIxMDBweFwiLFxuXHRcdFx0XHRcdFx0b25DbG9zZTogZnVuY3Rpb24oc1NlbGVjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBhQ29udGV4dHNGb3JFZGl0OiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRpZiAoc1NlbGVjdGlvbiA9PT0gc0VkaXRCdXR0b24pIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuaW5mbyhcIk1hc3MgRWRpdDogQ29uZmlybWVkIHRvIGVkaXQgXCIsIGlVcGRhdGFibGVDb250ZXh0cy50b1N0cmluZygpLCBcIiBzZWxlY3Rpb25zLlwiKTtcblx0XHRcdFx0XHRcdFx0XHRhQ29udGV4dHNGb3JFZGl0ID0gYUNvbnRleHRzO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHNTZWxlY3Rpb24gPT09IHNDYW5jZWxCdXR0b24pIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cuaW5mbyhcIk1hc3MgRWRpdDogQ2FuY2VsbGVkLlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGFDb250ZXh0c0ZvckVkaXQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gYXMgYW55KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRfY29uZmlybUNvbnRleHRzKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogQ29udGV4dFtdKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRpU2VsZWN0ZWRDb250ZXh0cyA9ICtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgfHwgMDtcblxuXHRcdGFDb250ZXh0cyA9IGFDb250ZXh0cyB8fCBbXTtcblxuXHRcdGlmIChhQ29udGV4dHMubGVuZ3RoICYmIGFDb250ZXh0cy5sZW5ndGggIT09IGlTZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb3BlbkNvbmZpcm1EaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIGlTZWxlY3RlZENvbnRleHRzKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhQ29udGV4dHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkIGJ5IG1ldGhvZCBvcGVuTWFzc0VkaXREaWFsb2c6XG5cdCAqID0+IE9wZW5zIHRoZSBtYXNzIGVkaXQgZGlhbG9nLlxuXHQgKiA9PiBJbXBsZW1lbnRzIHRoZSBzYXZlIGFuZCBjYW5jZWwgZnVuY3Rpb25hbGl0eS5cblx0ICogPT4gU2V0cyB0aGUgcnVudGltZSBtb2RlbCB0byB0aGUgZGlhbG9nLlxuXHQgKiA9PiBTZXRzIHRoZSBzdGF0aWMgbW9kZWwncyBjb250ZXh0IHRvIHRoZSBkaWFsb2cuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5UYWJsZX0gb1RhYmxlIEluc3RhbmNlIG9mIHRoZSB0YWJsZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb24gb3BlbiBvZiB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdG9wZW5NYXNzRWRpdERpYWxvZyhvVGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRwQ29udGV4dHNGb3JFZGl0ID0gdGhpcy5mZXRjaENvbnRleHRzRm9yRWRpdChvVGFibGUpO1xuXG5cdFx0cmV0dXJuIHBDb250ZXh0c0ZvckVkaXRcblx0XHRcdC50aGVuKHRoaXMuX2NvbmZpcm1Db250ZXh0cy5iaW5kKHRoaXMsIG9UYWJsZSkpXG5cdFx0XHQudGhlbihmdW5jdGlvbihhQ29udGV4dHM6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gYUNvbnRleHRzICYmIGFDb250ZXh0cy5sZW5ndGggPiAwID8gTWFzc0VkaXRIZWxwZXIuY3JlYXRlRGlhbG9nKG9UYWJsZSwgYUNvbnRleHRzLCBvQ29udHJvbGxlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihvRGlhbG9nPzogYW55KSB7XG5cdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiBtYXNzIGVkaXQgZGlhbG9nIGNyZWF0aW9uLlwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGV4dHMgZm9yIG1hc3MgZWRpdC5cblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5UYWJsZX0gb1RhYmxlIFRhYmxlIGZvciBtYXNzIGVkaXQuXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cmxsZXJleHRlbnNpb25zLk1hc3NFZGl0I2ZldGNoQ29udGV4dHNGb3JFZGl0XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2l0aCBhbiBhcnJheSBvZiBjb250ZXh0KHMpIHdoaWNoIHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBtYXNzIGVkaXQuXG5cdCAqIEBwcml2YXRlXG5cdCAqKi9cblx0QFByaXZhdGVcblx0QEV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGZldGNoQ29udGV4dHNGb3JFZGl0KG9UYWJsZTogVGFibGUpIHtcblx0XHQvL1RvIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInVwZGF0YWJsZUNvbnRleHRzXCIpIHx8IFtdO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFzc0VkaXQ7XG4iXX0=
@@ -0,0 +1,156 @@
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, Final, Private, Public, UI5Class } from "sap/fe/core/helpers/ClassSupport";
7
+ import ControllerExtensionMetadata from "sap/fe/core/controllerextensions/ControllerExtensionMetadata";
8
+ import ModelHelper, { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
9
+ import MessageBox from "sap/m/MessageBox";
10
+ import ResourceBundle from "sap/base/i18n/ResourceBundle";
11
+ import Context from "sap/ui/model/Context";
12
+ import ResourceModel from "sap/ui/model/resource/ResourceModel";
13
+ import PageController from "sap/fe/core/PageController";
14
+
15
+ /**
16
+ * @class Controller extension providing hooks for the mass edit in a table
17
+ *
18
+ * @name sap.fe.core.controllerextensions.MassEdit
19
+ * @hideconstructor
20
+ * @private
21
+ */
22
+ @UI5Class("sap.fe.core.controllerextensions.MassEdit", ControllerExtensionMetadata)
23
+ class MassEdit extends ControllerExtension {
24
+ @Public
25
+ @Final
26
+ getMessageDetailForNonEditable(oResourceBundle: ResourceBundle) {
27
+ const sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
28
+ sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
29
+ sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
30
+ sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
31
+
32
+ return (
33
+ "<p><strong>" +
34
+ sHeader +
35
+ "</strong></p>\n" +
36
+ "<p>" +
37
+ sReasonGroup +
38
+ "</p>\n" +
39
+ "<ul>" +
40
+ "<li>" +
41
+ sReasonDraft +
42
+ "</li>" +
43
+ "<li>" +
44
+ sReasonNonEditable +
45
+ "</li>" +
46
+ "</ul>"
47
+ );
48
+ }
49
+
50
+ _openConfirmDialog(oTable: Table, aContexts: Context[], iSelectedContexts: number) {
51
+ const iUpdatableContexts = (aContexts || []).length;
52
+
53
+ return new Promise(resolve => {
54
+ ((this.getView().getModel("sap.fe.i18n") as ResourceModel).getResourceBundle() as Promise<ResourceBundle>)
55
+ .then(oResourceBundle => {
56
+ const sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
57
+ sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
58
+ iNonEditable = iSelectedContexts - iUpdatableContexts,
59
+ sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
60
+ iNonEditable,
61
+ iSelectedContexts,
62
+ iUpdatableContexts
63
+ ]),
64
+ sPath = oTable.data("targetCollectionPath"),
65
+ oMetaModel = oTable.getModel().getMetaModel(),
66
+ bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
67
+ bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
68
+ sMessageDetail = bIsDraft && bDisplayMode && this.getMessageDetailForNonEditable(oResourceBundle);
69
+
70
+ MessageBox.warning(sMessage, {
71
+ details: sMessageDetail,
72
+ actions: [sEditButton, sCancelButton],
73
+ emphasizedAction: sEditButton,
74
+ contentWidth: "100px",
75
+ onClose: function(sSelection: string) {
76
+ let aContextsForEdit: any[] = [];
77
+ if (sSelection === sEditButton) {
78
+ Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts.toString(), " selections.");
79
+ aContextsForEdit = aContexts;
80
+ } else if (sSelection === sCancelButton) {
81
+ Log.info("Mass Edit: Cancelled.");
82
+ }
83
+ resolve(aContextsForEdit);
84
+ }
85
+ } as any);
86
+ })
87
+ .catch(function(error) {
88
+ Log.error(error);
89
+ });
90
+ });
91
+ }
92
+
93
+ _confirmContexts(oTable: Table, aContexts: Context[]) {
94
+ const oInternalModelContext = oTable.getBindingContext("internal") as InternalModelContext,
95
+ iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
96
+
97
+ aContexts = aContexts || [];
98
+
99
+ if (aContexts.length && aContexts.length !== iSelectedContexts) {
100
+ return this._openConfirmDialog(oTable, aContexts, iSelectedContexts);
101
+ }
102
+ return Promise.resolve(aContexts);
103
+ }
104
+
105
+ /**
106
+ * The following operations are performed by method openMassEditDialog:
107
+ * => Opens the mass edit dialog.
108
+ * => Implements the save and cancel functionality.
109
+ * => Sets the runtime model to the dialog.
110
+ * => Sets the static model's context to the dialog.
111
+ *
112
+ * @param {sap.ui.mdc.Table} oTable Instance of the table
113
+ * @returns {Promise} A promise that resolves on open of the mass edit dialog.
114
+ * @private
115
+ */
116
+ @Public
117
+ @Final
118
+ openMassEditDialog(oTable: Table) {
119
+ const oController = this.getView().getController() as PageController,
120
+ pContextsForEdit = this.fetchContextsForEdit(oTable);
121
+
122
+ return pContextsForEdit
123
+ .then(this._confirmContexts.bind(this, oTable))
124
+ .then(function(aContexts: any) {
125
+ return aContexts && aContexts.length > 0 ? MassEditHelper.createDialog(oTable, aContexts, oController) : Promise.resolve();
126
+ })
127
+ .then(function(oDialog?: any) {
128
+ if (oDialog) {
129
+ oDialog.open();
130
+ }
131
+ })
132
+ .catch(function(oError: any) {
133
+ Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
134
+ });
135
+ }
136
+
137
+ /**
138
+ * Returns a promise that resolves to the contexts for mass edit.
139
+ * @function
140
+ * @param {sap.ui.mdc.Table} oTable Table for mass edit.
141
+ * @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
142
+ * @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
143
+ * @private
144
+ **/
145
+ @Private
146
+ @Extensible(OverrideExecution.After)
147
+ fetchContextsForEdit(oTable: Table) {
148
+ //To be overridden by the application
149
+ const oInternalModelContext = oTable.getBindingContext("internal") as InternalModelContext,
150
+ aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
151
+
152
+ return Promise.resolve(aSelectedContexts);
153
+ }
154
+ }
155
+
156
+ export default MassEdit;