@sapui5/sap.fe.core 1.100.0 → 1.102.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 (295) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AppComponent.js +23 -30
  4. package/src/sap/fe/core/AppComponent.ts +35 -40
  5. package/src/sap/fe/core/AppStateHandler.js +8 -8
  6. package/src/sap/fe/core/AppStateHandler.ts +11 -11
  7. package/src/sap/fe/core/BaseController.js +9 -9
  8. package/src/sap/fe/core/BaseController.ts +3 -4
  9. package/src/sap/fe/core/CommonUtils.js +122 -101
  10. package/src/sap/fe/core/CommonUtils.ts +239 -193
  11. package/src/sap/fe/core/ExtensionAPI.js +12 -13
  12. package/src/sap/fe/core/ExtensionAPI.ts +21 -31
  13. package/src/sap/fe/core/PageController.js +19 -13
  14. package/src/sap/fe/core/PageController.ts +40 -34
  15. package/src/sap/fe/core/TemplateComponent.js +198 -123
  16. package/src/sap/fe/core/TemplateComponent.ts +109 -121
  17. package/src/sap/fe/core/TemplateModel.js +7 -9
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +935 -0
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +837 -0
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  27. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  28. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  29. package/src/sap/fe/core/controllerextensions/EditFlow.js +660 -288
  30. package/src/sap/fe/core/controllerextensions/EditFlow.ts +513 -331
  31. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  32. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  33. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +43 -25
  34. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +132 -103
  35. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +16 -16
  36. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +64 -55
  37. package/src/sap/fe/core/controllerextensions/InternalRouting.js +166 -99
  38. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +187 -149
  39. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  40. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  41. package/src/sap/fe/core/controllerextensions/MassEdit.js +13 -12
  42. package/src/sap/fe/core/controllerextensions/MassEdit.ts +22 -22
  43. package/src/sap/fe/core/controllerextensions/MessageHandler.js +14 -26
  44. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +20 -30
  45. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  46. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  47. package/src/sap/fe/core/controllerextensions/Paginator.js +24 -15
  48. package/src/sap/fe/core/controllerextensions/Paginator.ts +35 -20
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  50. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  51. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  52. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  53. package/src/sap/fe/core/controllerextensions/Share.js +34 -16
  54. package/src/sap/fe/core/controllerextensions/Share.ts +50 -32
  55. package/src/sap/fe/core/controllerextensions/SideEffects.js +15 -15
  56. package/src/sap/fe/core/controllerextensions/SideEffects.ts +64 -65
  57. package/src/sap/fe/core/controllerextensions/ViewState.js +27 -31
  58. package/src/sap/fe/core/controllerextensions/ViewState.ts +103 -102
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
  61. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +90 -132
  63. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +18 -8
  65. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +264 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +35 -33
  67. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +100 -0
  68. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  69. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1584 -0
  70. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +190 -159
  71. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +780 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +329 -76
  73. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1149 -0
  74. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +169 -97
  75. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
  77. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +592 -0
  78. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +83 -60
  79. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
  80. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +52 -36
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  82. package/src/sap/fe/core/controls/Any.js +28 -0
  83. package/src/sap/fe/core/controls/Any.ts +30 -0
  84. package/src/sap/fe/core/controls/CommandExecution.js +50 -16
  85. package/src/sap/fe/core/controls/CommandExecution.ts +31 -22
  86. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  87. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  88. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +371 -0
  89. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +282 -0
  90. package/src/sap/fe/core/controls/CustomQuickViewPage.js +74 -36
  91. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +23 -32
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +52 -5
  93. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +127 -67
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +127 -67
  95. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  96. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  97. package/src/sap/fe/core/controls/FileWrapper.js +360 -0
  98. package/src/sap/fe/core/controls/FileWrapper.ts +202 -0
  99. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  100. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  101. package/src/sap/fe/core/controls/FormElementWrapper.js +102 -37
  102. package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -35
  103. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  104. package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
  105. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  106. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  107. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  108. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  109. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  110. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  111. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
  112. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
  113. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +41 -81
  114. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -35
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -35
  117. package/src/sap/fe/core/converters/ManifestSettings.js +3 -1
  118. package/src/sap/fe/core/converters/ManifestSettings.ts +9 -2
  119. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
  120. package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
  121. package/src/sap/fe/core/converters/annotations/DataField.js +20 -5
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +27 -6
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +14 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +23 -28
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +17 -10
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -14
  127. package/src/sap/fe/core/converters/controls/Common/Form.js +16 -18
  128. package/src/sap/fe/core/converters/controls/Common/Form.ts +20 -20
  129. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  130. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  131. package/src/sap/fe/core/converters/controls/Common/Table.js +389 -173
  132. package/src/sap/fe/core/converters/controls/Common/Table.ts +440 -244
  133. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +26 -16
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -19
  135. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +78 -47
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +146 -107
  137. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  138. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  139. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +30 -25
  140. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +39 -34
  141. package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
  142. package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
  143. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  144. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
  145. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  147. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  149. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  151. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -28
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +38 -45
  153. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
  154. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
  155. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  156. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  157. package/src/sap/fe/core/formatters/TableFormatter.js +74 -13
  158. package/src/sap/fe/core/formatters/TableFormatter.ts +71 -16
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  161. package/src/sap/fe/core/fpm/Component.js +46 -17
  162. package/src/sap/fe/core/fpm/Component.ts +11 -16
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  165. package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
  166. package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
  167. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  168. package/src/sap/fe/core/helpers/ClassSupport.ts +315 -237
  169. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  170. package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
  171. package/src/sap/fe/core/helpers/MassEditHelper.js +522 -147
  172. package/src/sap/fe/core/helpers/MassEditHelper.ts +563 -236
  173. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  174. package/src/sap/fe/core/helpers/ModelHelper.ts +39 -26
  175. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  176. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  177. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  178. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  179. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  181. package/src/sap/fe/core/helpers/StableIdHelper.js +5 -7
  182. package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -8
  183. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  184. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  185. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  186. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  187. package/src/sap/fe/core/library.js +13 -5
  188. package/src/sap/fe/core/library.ts +26 -17
  189. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  190. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  191. package/src/sap/fe/core/messagebundle.properties +135 -180
  192. package/src/sap/fe/core/messagebundle_ar.properties +31 -64
  193. package/src/sap/fe/core/messagebundle_bg.properties +31 -64
  194. package/src/sap/fe/core/messagebundle_ca.properties +31 -64
  195. package/src/sap/fe/core/messagebundle_cs.properties +31 -64
  196. package/src/sap/fe/core/messagebundle_cy.properties +32 -65
  197. package/src/sap/fe/core/messagebundle_da.properties +31 -64
  198. package/src/sap/fe/core/messagebundle_de.properties +29 -62
  199. package/src/sap/fe/core/messagebundle_el.properties +32 -65
  200. package/src/sap/fe/core/messagebundle_en.properties +32 -65
  201. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -62
  202. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -74
  203. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +32 -65
  204. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +20 -6
  205. package/src/sap/fe/core/messagebundle_es.properties +31 -64
  206. package/src/sap/fe/core/messagebundle_es_MX.properties +31 -64
  207. package/src/sap/fe/core/messagebundle_et.properties +31 -64
  208. package/src/sap/fe/core/messagebundle_fi.properties +29 -62
  209. package/src/sap/fe/core/messagebundle_fr.properties +36 -69
  210. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -66
  211. package/src/sap/fe/core/messagebundle_hi.properties +29 -62
  212. package/src/sap/fe/core/messagebundle_hr.properties +32 -65
  213. package/src/sap/fe/core/messagebundle_hu.properties +30 -63
  214. package/src/sap/fe/core/messagebundle_id.properties +32 -65
  215. package/src/sap/fe/core/messagebundle_it.properties +31 -64
  216. package/src/sap/fe/core/messagebundle_iw.properties +31 -64
  217. package/src/sap/fe/core/messagebundle_ja.properties +29 -62
  218. package/src/sap/fe/core/messagebundle_kk.properties +31 -64
  219. package/src/sap/fe/core/messagebundle_ko.properties +31 -64
  220. package/src/sap/fe/core/messagebundle_lt.properties +31 -64
  221. package/src/sap/fe/core/messagebundle_lv.properties +32 -65
  222. package/src/sap/fe/core/messagebundle_ms.properties +31 -64
  223. package/src/sap/fe/core/messagebundle_nl.properties +31 -64
  224. package/src/sap/fe/core/messagebundle_no.properties +31 -64
  225. package/src/sap/fe/core/messagebundle_pl.properties +34 -67
  226. package/src/sap/fe/core/messagebundle_pt.properties +32 -65
  227. package/src/sap/fe/core/messagebundle_pt_PT.properties +31 -64
  228. package/src/sap/fe/core/messagebundle_ro.properties +33 -66
  229. package/src/sap/fe/core/messagebundle_ru.properties +33 -66
  230. package/src/sap/fe/core/messagebundle_sh.properties +31 -64
  231. package/src/sap/fe/core/messagebundle_sk.properties +31 -64
  232. package/src/sap/fe/core/messagebundle_sl.properties +29 -62
  233. package/src/sap/fe/core/messagebundle_sv.properties +30 -63
  234. package/src/sap/fe/core/messagebundle_th.properties +31 -64
  235. package/src/sap/fe/core/messagebundle_tr.properties +31 -64
  236. package/src/sap/fe/core/messagebundle_uk.properties +32 -65
  237. package/src/sap/fe/core/messagebundle_vi.properties +31 -64
  238. package/src/sap/fe/core/messagebundle_zh_CN.properties +32 -65
  239. package/src/sap/fe/core/messagebundle_zh_TW.properties +34 -67
  240. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  241. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  242. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  243. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  244. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +11 -8
  245. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -13
  246. package/src/sap/fe/core/services/NavigationServiceFactory.js +5 -5
  247. package/src/sap/fe/core/services/NavigationServiceFactory.ts +9 -5
  248. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  249. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  250. package/src/sap/fe/core/services/RoutingServiceFactory.js +105 -66
  251. package/src/sap/fe/core/services/RoutingServiceFactory.ts +59 -49
  252. package/src/sap/fe/core/services/ShellServicesFactory.js +104 -29
  253. package/src/sap/fe/core/services/ShellServicesFactory.ts +64 -30
  254. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  255. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -10
  257. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +38 -51
  258. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  259. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  260. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  261. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  262. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  263. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  264. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  265. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +27 -6
  266. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
  267. package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
  268. package/src/sap/fe/core/templating/FilterHelper.js +4 -4
  269. package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
  270. package/src/sap/fe/core/templating/PropertyHelper.js +70 -33
  271. package/src/sap/fe/core/templating/PropertyHelper.ts +49 -27
  272. package/src/sap/fe/core/templating/UIFormatters.js +133 -22
  273. package/src/sap/fe/core/templating/UIFormatters.ts +144 -50
  274. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  275. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  276. package/src/sap/fe/core/type/Email.js +26 -8
  277. package/src/sap/fe/core/type/Email.ts +8 -7
  278. package/src/sap/fe/core/AnnotationHelper.js +0 -312
  279. package/src/sap/fe/core/AnnotationHelper.ts +0 -315
  280. package/src/sap/fe/core/RouterProxy.js +0 -926
  281. package/src/sap/fe/core/TransactionHelper.js +0 -1562
  282. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -392
  283. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -136
  284. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -262
  285. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +0 -103
  286. package/src/sap/fe/core/actions/draft.js +0 -523
  287. package/src/sap/fe/core/actions/messageHandling.js +0 -567
  288. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  289. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  290. package/src/sap/fe/core/actions/operations.js +0 -1096
  291. package/src/sap/fe/core/actions/sticky.js +0 -130
  292. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  293. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
  294. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  295. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
@@ -0,0 +1,282 @@
1
+ /*!
2
+ * ${copyright}
3
+ */
4
+ import { aggregation, defineUI5Class, event, implementInterface, property } from "sap/fe/core/helpers/ClassSupport";
5
+ import SemanticDateOperators from "sap/fe/core/helpers/SemanticDateOperators";
6
+ import ManagedObjectObserver from "sap/ui/base/ManagedObjectObserver";
7
+ import Control from "sap/ui/core/Control"; //import Control from "sap/ui/mdc/field/FieldBase";
8
+ import { IFormContent } from "sap/ui/core/library";
9
+ import RenderManager from "sap/ui/core/RenderManager";
10
+ import Condition, { ConditionObject } from "sap/ui/mdc/condition/Condition";
11
+ import ConditionValidated from "sap/ui/mdc/enum/ConditionValidated";
12
+ import ConditionsType from "sap/ui/mdc/field/ConditionsType";
13
+ import JSONModel from "sap/ui/model/json/JSONModel";
14
+
15
+ /**
16
+ * Type used for format options
17
+ *
18
+ * @typedef FormatOptionsType
19
+ */
20
+ type FormatOptionsType = {
21
+ operators: string[];
22
+ };
23
+
24
+ /**
25
+ * @class
26
+ * Creates an <code>sap.fe.core.controls.CustomFilterFieldContentWrapper</code> object.
27
+ * This is used in the {@link sap.ui.mdc.FilterField FilterField} as a filter content.
28
+ * @extends sap.ui.core.Control
29
+ * @private
30
+ * @alias sap.fe.core.controls.CustomFilterFieldContentWrapper
31
+ */
32
+ @defineUI5Class("sap.fe.core.controls.CustomFilterFieldContentWrapper")
33
+ export default class CustomFilterFieldContentWrapper extends Control implements IFormContent {
34
+ @implementInterface("sap.ui.core.IFormContent")
35
+ // eslint-disable-next-line camelcase
36
+ __implements__sap_ui_core_IFormContent = true;
37
+
38
+ @property({ type: "sap.ui.core.CSSSize", defaultValue: null })
39
+ width!: string;
40
+
41
+ @property({ type: "boolean", defaultValue: false })
42
+ formDoNotAdjustWidth!: boolean;
43
+
44
+ @property({ type: "object[]", defaultValue: [] })
45
+ conditions!: ConditionObject[];
46
+
47
+ @aggregation({ type: "sap.ui.core.Control", multiple: false, isDefault: true })
48
+ content!: Control;
49
+
50
+ @event()
51
+ conditionsChange!: Function;
52
+
53
+ // Note: FieldBase might be used as base control (instead of Control) in a later version;
54
+ // in that case, you should add a 'change' event and bubble it to the corresponding handlers
55
+
56
+ private _filterModel: any;
57
+ private _conditionsObserver: any;
58
+ private static readonly FILTER_MODEL_ALIAS = "filterValues";
59
+
60
+ static render(renderManager: RenderManager, control: CustomFilterFieldContentWrapper): void {
61
+ renderManager.openStart("div", control);
62
+ renderManager.style("min-height", "1rem");
63
+ renderManager.style("width", control.width);
64
+ renderManager.openEnd();
65
+ renderManager.renderControl(control.getContent()); // render the child Control
66
+ renderManager.close("div"); // end of the complete Control
67
+ }
68
+
69
+ /**
70
+ * Maps an array of filter values to an array of conditions.
71
+ *
72
+ * @param {Array | string} filterValues Array of filter value bindings or a filter value string
73
+ * @param {string} [operator] The operator to be used (optional) - if not set, the default operator (EQ) will be used
74
+ * @private
75
+ * @returns {Array} Array of filter conditions
76
+ */
77
+ static _filterValuesToConditions(filterValues: any | any[], operator?: string): ConditionObject[] {
78
+ let formatOptions: FormatOptionsType = { operators: [] },
79
+ conditions = [];
80
+
81
+ if (operator) {
82
+ formatOptions = { operators: [operator] };
83
+ }
84
+ if (filterValues === "") {
85
+ filterValues = [];
86
+ } else if (typeof filterValues === "object" && filterValues.hasOwnProperty("operator") && filterValues.hasOwnProperty("values")) {
87
+ formatOptions = { operators: [filterValues.operator] };
88
+ filterValues = filterValues.values;
89
+ } else if (filterValues !== undefined && typeof filterValues !== "object" && typeof filterValues !== "string") {
90
+ throw new Error("FilterUtils.js#_filterValuesToConditions: Unexpected type of input parameter vValues: " + typeof filterValues);
91
+ }
92
+
93
+ const conditionsType: any = new ConditionsType(formatOptions);
94
+ const conditionValues = Array.isArray(filterValues) ? filterValues : [filterValues];
95
+
96
+ // Shortcut for operator without values and semantic date operations
97
+ if (
98
+ typeof operator === "string" &&
99
+ (conditionValues.length === 0 || SemanticDateOperators.getSemanticDateOperations().includes(operator))
100
+ ) {
101
+ conditions = [Condition.createCondition(operator, conditionValues, null, null, ConditionValidated.NotValidated)];
102
+ } else {
103
+ conditions = conditionValues
104
+ .map((conditionValue) => {
105
+ const stringValue = conditionValue?.toString(),
106
+ parsedConditions = conditionsType.parseValue(stringValue, "any");
107
+ return parsedConditions?.[0];
108
+ })
109
+ .filter((conditionValue) => conditionValue !== undefined);
110
+ }
111
+
112
+ return conditions;
113
+ }
114
+
115
+ /**
116
+ * Maps an array of conditions to a comma separated list of filter values.
117
+ *
118
+ * @param {object[]} conditions Array of filter conditions
119
+ * @param {object} formatOptions Format options that specifies a condition type
120
+ * @private
121
+ * @returns {string} Concatenated string of filter values
122
+ */
123
+ static _conditionsToFilterModelString(conditions: object[], formatOptions: FormatOptionsType): string {
124
+ const conditionsType = new ConditionsType(formatOptions);
125
+
126
+ return conditions
127
+ .map((condition) => {
128
+ return conditionsType.formatValue([condition], "any") || "";
129
+ })
130
+ .filter((stringValue) => {
131
+ return stringValue !== "";
132
+ })
133
+ .join(",");
134
+ }
135
+
136
+ /**
137
+ * Listens to filter model changes and updates wrapper property "conditions".
138
+ *
139
+ * @param {object} changeEvent Event triggered by a filter model change
140
+ * @private
141
+ */
142
+ _handleFilterModelChange(changeEvent: any): void {
143
+ const propertyPath = this.getObjectBinding("filterValues").getPath(),
144
+ values = changeEvent.getSource().getProperty(propertyPath);
145
+ this.updateConditionsByFilterValues(values, "");
146
+ }
147
+
148
+ /**
149
+ * Listens to "conditions" changes and updates the filter model.
150
+ *
151
+ * @param {object} conditions Event triggered by a "conditions" change
152
+ * @private
153
+ */
154
+ _handleConditionsChange(conditions: any): void {
155
+ this.updateFilterModelByConditions(conditions);
156
+ }
157
+
158
+ /**
159
+ * Initialize CustomFilterFieldContentWrapper control and register observer.
160
+ */
161
+ init(): void {
162
+ super.init();
163
+ this._conditionsObserver = new ManagedObjectObserver(this._observeChanges.bind(this));
164
+ this._conditionsObserver.observe(this, {
165
+ properties: ["conditions"]
166
+ });
167
+ this._filterModel = new JSONModel();
168
+ this._filterModel.attachPropertyChange(this._handleFilterModelChange, this);
169
+ this.setModel(this._filterModel, CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS);
170
+ }
171
+
172
+ /**
173
+ * Overrides {@link sap.ui.core.Control#clone Control.clone} to clone additional
174
+ * internal states.
175
+ *
176
+ * @param {string} [sIdSuffix] A suffix to be appended to the cloned control id
177
+ * @param {string[]} [aLocalIds] An array of local IDs within the cloned hierarchy (internally used)
178
+ * @returns {CustomFilterFieldContentWrapper} Reference to the newly created clone
179
+ * @protected
180
+ */
181
+ clone(sIdSuffix: string | undefined, aLocalIds: string[] | undefined): this {
182
+ const clone = super.clone(sIdSuffix, aLocalIds);
183
+ // During cloning, the old model will be copied and overwrites any new model (same alias) that
184
+ // you introduce during init(); hence you need to overwrite it again by the new one that you've
185
+ // created during init() (i.e. clone._filterModel); that standard behaviour of super.clone()
186
+ // can't even be suppressed in an own constructor; for a detailed investigation of the cloning,
187
+ // please overwrite the setModel() method and check the list of callers and steps induced by them.
188
+ clone.setModel(clone._filterModel, CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS);
189
+ return clone;
190
+ }
191
+
192
+ /**
193
+ * Listens to property changes.
194
+ *
195
+ * @param {any} changes Property changes
196
+ * @private
197
+ */
198
+ _observeChanges(changes: any): void {
199
+ if (changes.name === "conditions") {
200
+ this._handleConditionsChange(changes.current);
201
+ }
202
+ }
203
+
204
+ /**
205
+ * Gets the content of this wrapper control.
206
+ *
207
+ * @returns {sap.ui.core.Control} The wrapper content
208
+ * @private
209
+ */
210
+ getContent(): Control {
211
+ return this.getAggregation("content") as Control;
212
+ }
213
+
214
+ /**
215
+ * Gets the value for control property 'conditions'.
216
+ *
217
+ * @returns {object[]} Array of filter conditions
218
+ * @private
219
+ */
220
+ getConditions(): object[] {
221
+ return this.getProperty("conditions");
222
+ }
223
+
224
+ /**
225
+ * Sets the value for control property 'conditions'.
226
+ *
227
+ * @param {object[]} [conditions] Array of filter conditions
228
+ * @returns {CustomFilterFieldContentWrapper} Reference to this wrapper
229
+ * @private
230
+ */
231
+ setConditions(conditions: object[]): this {
232
+ this.setProperty("conditions", conditions || []);
233
+ return this;
234
+ }
235
+
236
+ /**
237
+ * Gets the filter model alias 'filterValues'.
238
+ *
239
+ * @returns {string} The filter model
240
+ * @private
241
+ */
242
+ getFilterModelAlias(): string {
243
+ return CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS;
244
+ }
245
+
246
+ /**
247
+ * Updates the property "conditions" with filter values
248
+ * sent by ExtensionAPI#setFilterValues().
249
+ *
250
+ * @param {any} values The filter values
251
+ * @param {string} [operator] The operator name
252
+ * @private
253
+ */
254
+ updateConditionsByFilterValues(values: any, operator?: string): void {
255
+ const conditions = CustomFilterFieldContentWrapper._filterValuesToConditions(values, operator);
256
+ this.setConditions(conditions);
257
+ }
258
+
259
+ /**
260
+ * Updates filter model with conditions
261
+ * sent by the {@link sap.ui.mdc.FilterField FilterField}.
262
+ *
263
+ * @param {Array} conditions Array of filter conditions
264
+ * @private
265
+ */
266
+ updateFilterModelByConditions(conditions: any[]): void {
267
+ const operator = conditions[0]?.operator || "";
268
+ const formatOptions: FormatOptionsType = operator !== "" ? { operators: [operator] } : { operators: [] };
269
+ if (this.getBindingContext(CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS)) {
270
+ const stringValue = CustomFilterFieldContentWrapper._conditionsToFilterModelString(conditions, formatOptions);
271
+ this._filterModel.setProperty(
272
+ this.getBindingContext(CustomFilterFieldContentWrapper.FILTER_MODEL_ALIAS)?.getPath(),
273
+ stringValue
274
+ );
275
+ }
276
+ }
277
+
278
+ getAccessibilityInfo(): any {
279
+ const content = this.getContent();
280
+ return content?.getAccessibilityInfo?.() || {};
281
+ }
282
+ }
@@ -2,38 +2,62 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/m/QuickViewPage", "sap/fe/core/CommonUtils", "sap/fe/macros/DelegateUtil", "sap/fe/core/helpers/KeepAliveHelper", "sap/ui/fl/Utils"], function (QuickViewPage, CommonUtils, DelegateUtil, KeepAliveHelper, Utils) {
5
+ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/macros/DelegateUtil", "sap/m/QuickViewPage"], function (CommonUtils, ClassSupport, KeepAliveHelper, DelegateUtil, QuickViewPage) {
6
6
  "use strict";
7
7
 
8
- var CustomQuickViewPage = QuickViewPage.extend("sap.fe.core.controls.CustomQuickViewPage", {
9
- metadata: {
10
- defaultAggregation: "groups",
11
- aggregations: {
12
- customContent: {
13
- type: "sap.ui.core.Control",
14
- multiple: true,
15
- bindable: "bindable"
16
- },
17
- groups: {
18
- type: "sap.m.QuickViewGroup",
19
- multiple: true,
20
- singularName: "group",
21
- bindable: "bindable"
22
- }
23
- },
24
- publicMethods: []
25
- },
26
- renderer: {},
27
- onAfterRendering: function (oEvent) {
28
- QuickViewPage.prototype.onAfterRendering.apply(this, [oEvent]);
29
- },
30
- onBeforeRendering: function (oEvent) {
31
- var _this = this;
8
+ var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
9
+
10
+ var defineUI5Class = ClassSupport.defineUI5Class;
11
+ var aggregation = ClassSupport.aggregation;
12
+
13
+ function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
14
+
15
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
16
+
17
+ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
18
+
19
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
20
+
21
+ 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; }
22
+
23
+ function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
24
+
25
+ var CustomQuickViewPage = (_dec = defineUI5Class("sap.fe.core.controls.CustomQuickViewPage"), _dec2 = aggregation({
26
+ type: "sap.ui.core.Control",
27
+ multiple: true
28
+ }), _dec3 = aggregation({
29
+ type: "sap.m.QuickViewGroup",
30
+ multiple: true,
31
+ singularName: "group",
32
+ isDefault: true
33
+ }), _dec(_class = (_class2 = /*#__PURE__*/function (_QuickViewPage) {
34
+ _inheritsLoose(CustomQuickViewPage, _QuickViewPage);
35
+
36
+ function CustomQuickViewPage() {
37
+ var _this;
38
+
39
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
40
+ args[_key] = arguments[_key];
41
+ }
42
+
43
+ _this = _QuickViewPage.call.apply(_QuickViewPage, [this].concat(args)) || this;
44
+
45
+ _initializerDefineProperty(_this, "customContent", _descriptor, _assertThisInitialized(_this));
46
+
47
+ _initializerDefineProperty(_this, "groups", _descriptor2, _assertThisInitialized(_this));
48
+
49
+ return _this;
50
+ }
51
+
52
+ var _proto = CustomQuickViewPage.prototype;
53
+
54
+ _proto.onBeforeRendering = function onBeforeRendering(oEvent) {
55
+ var _this2 = this;
32
56
 
33
57
  if (this.getParent() && this.getParent().isA("sap.fe.core.controls.ConditionalWrapper") && this.getParent().getProperty("condition") === true) {
34
58
  this.setCrossAppNavCallback(function () {
35
- var sQuickViewPageTitleLinkHref = DelegateUtil.getCustomData(_this, "titleLink");
36
- var oView = Utils.getViewForControl(_this);
59
+ var sQuickViewPageTitleLinkHref = DelegateUtil.getCustomData(_this2, "titleLink");
60
+ var oView = CommonUtils.getTargetView(_this2);
37
61
  var oAppComponent = CommonUtils.getAppComponent(oView);
38
62
  var oShellServiceHelper = oAppComponent.getShellServices();
39
63
  var oShellHash = oShellServiceHelper.parseShellHash(sQuickViewPageTitleLinkHref);
@@ -46,12 +70,12 @@ sap.ui.define(["sap/m/QuickViewPage", "sap/fe/core/CommonUtils", "sap/fe/macros/
46
70
  };
47
71
  var sQuickViewPageTitleLinkIntent = oNavArgs.target.semanticObject + "-" + oNavArgs.target.action;
48
72
 
49
- if (sQuickViewPageTitleLinkIntent && _this.oCrossAppNavigator && _this.oCrossAppNavigator.isNavigationSupported([sQuickViewPageTitleLinkIntent])) {
73
+ if (sQuickViewPageTitleLinkIntent && _this2.oCrossAppNavigator && _this2.oCrossAppNavigator.isNavigationSupported([sQuickViewPageTitleLinkIntent])) {
50
74
  if (sQuickViewPageTitleLinkIntent && sQuickViewPageTitleLinkIntent !== "") {
51
75
  if (typeof sQuickViewPageTitleLinkIntent === "string" && sQuickViewPageTitleLinkIntent !== "") {
52
76
  var sTargetHref;
53
77
 
54
- var oLinkControl = _this.getParent();
78
+ var oLinkControl = _this2.getParent();
55
79
 
56
80
  while (oLinkControl && !oLinkControl.isA("sap.ui.mdc.Link")) {
57
81
  oLinkControl = oLinkControl.getParent();
@@ -72,6 +96,7 @@ sap.ui.define(["sap/m/QuickViewPage", "sap/fe/core/CommonUtils", "sap/fe/macros/
72
96
  oShellHash = oShellServiceHelper.parseShellHash(sTargetHref);
73
97
  } else {
74
98
  oShellHash = oShellServiceHelper.parseShellHash(sQuickViewPageTitleLinkIntent);
99
+ oShellHash.params = oNavArgs.params;
75
100
  }
76
101
  }
77
102
  } else {
@@ -103,20 +128,21 @@ sap.ui.define(["sap/m/QuickViewPage", "sap/fe/core/CommonUtils", "sap/fe/macros/
103
128
  });
104
129
  }
105
130
 
106
- QuickViewPage.prototype.onBeforeRendering.apply(this, [oEvent]);
131
+ _QuickViewPage.prototype.onBeforeRendering.call(this, oEvent);
132
+
107
133
  var oPageContent = this.getPageContent();
108
134
  var oForm = oPageContent.form;
109
135
 
110
136
  if (oForm) {
111
- var _aContent = this.getCustomContent();
137
+ var _aContent = this.customContent;
112
138
 
113
139
  if (_aContent && _aContent.length > 0) {
114
140
  _aContent.forEach(function (_oContent) {
115
141
  var _oContentClone = _oContent.clone();
116
142
 
117
- _oContentClone.setModel(_this.getModel());
143
+ _oContentClone.setModel(_this2.getModel());
118
144
 
119
- _oContentClone.setBindingContext(_this.getBindingContext());
145
+ _oContentClone.setBindingContext(_this2.getBindingContext());
120
146
 
121
147
  oForm.addContent(_oContentClone);
122
148
  });
@@ -126,8 +152,20 @@ sap.ui.define(["sap/m/QuickViewPage", "sap/fe/core/CommonUtils", "sap/fe/macros/
126
152
  }, 0);
127
153
  }
128
154
  }
129
- }
130
- });
155
+ };
156
+
157
+ return CustomQuickViewPage;
158
+ }(QuickViewPage), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "customContent", [_dec2], {
159
+ configurable: true,
160
+ enumerable: true,
161
+ writable: true,
162
+ initializer: null
163
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "groups", [_dec3], {
164
+ configurable: true,
165
+ enumerable: true,
166
+ writable: true,
167
+ initializer: null
168
+ })), _class2)) || _class);
131
169
  return CustomQuickViewPage;
132
170
  }, false);
133
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkN1c3RvbVF1aWNrVmlld1BhZ2UudHMiXSwibmFtZXMiOlsiQ3VzdG9tUXVpY2tWaWV3UGFnZSIsIlF1aWNrVmlld1BhZ2UiLCJleHRlbmQiLCJtZXRhZGF0YSIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9ucyIsImN1c3RvbUNvbnRlbnQiLCJ0eXBlIiwibXVsdGlwbGUiLCJiaW5kYWJsZSIsImdyb3VwcyIsInNpbmd1bGFyTmFtZSIsInB1YmxpY01ldGhvZHMiLCJyZW5kZXJlciIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJvRXZlbnQiLCJwcm90b3R5cGUiLCJhcHBseSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiZ2V0UGFyZW50IiwiaXNBIiwiZ2V0UHJvcGVydHkiLCJzZXRDcm9zc0FwcE5hdkNhbGxiYWNrIiwic1F1aWNrVmlld1BhZ2VUaXRsZUxpbmtIcmVmIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsIm9WaWV3IiwiVXRpbHMiLCJnZXRWaWV3Rm9yQ29udHJvbCIsIm9BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJnZXRTaGVsbFNlcnZpY2VzIiwib1NoZWxsSGFzaCIsInBhcnNlU2hlbGxIYXNoIiwib05hdkFyZ3MiLCJ0YXJnZXQiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInBhcmFtcyIsInNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50Iiwib0Nyb3NzQXBwTmF2aWdhdG9yIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwic1RhcmdldEhyZWYiLCJvTGlua0NvbnRyb2wiLCJfYUxpbmtzIiwiZ2V0TW9kZWwiLCJsZW5ndGgiLCJpIiwia2V5IiwiaHJlZiIsIktlZXBBbGl2ZUhlbHBlciIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJvQ3VycmVudFNoZWxsSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsImFwcFNwZWNpZmljUm91dGUiLCJvUGFnZUNvbnRlbnQiLCJnZXRQYWdlQ29udGVudCIsIm9Gb3JtIiwiZm9ybSIsIl9hQ29udGVudCIsImdldEN1c3RvbUNvbnRlbnQiLCJmb3JFYWNoIiwiX29Db250ZW50IiwiX29Db250ZW50Q2xvbmUiLCJjbG9uZSIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImFkZENvbnRlbnQiLCJzZXRUaW1lb3V0IiwicmVyZW5kZXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFVQSxNQUFNQSxtQkFBbUIsR0FBR0MsYUFBYSxDQUFDQyxNQUFkLENBQXFCLDBDQUFyQixFQUFpRTtBQUM1RkMsSUFBQUEsUUFBUSxFQUFFO0FBQ1RDLE1BQUFBLGtCQUFrQixFQUFFLFFBRFg7QUFFVEMsTUFBQUEsWUFBWSxFQUFFO0FBQ2JDLFFBQUFBLGFBQWEsRUFBRTtBQUNkQyxVQUFBQSxJQUFJLEVBQUUscUJBRFE7QUFFZEMsVUFBQUEsUUFBUSxFQUFFLElBRkk7QUFHZEMsVUFBQUEsUUFBUSxFQUFFO0FBSEksU0FERjtBQU1iQyxRQUFBQSxNQUFNLEVBQUU7QUFBRUgsVUFBQUEsSUFBSSxFQUFFLHNCQUFSO0FBQWdDQyxVQUFBQSxRQUFRLEVBQUUsSUFBMUM7QUFBZ0RHLFVBQUFBLFlBQVksRUFBRSxPQUE5RDtBQUF1RUYsVUFBQUEsUUFBUSxFQUFFO0FBQWpGO0FBTkssT0FGTDtBQVVURyxNQUFBQSxhQUFhLEVBQUU7QUFWTixLQURrRjtBQWE1RkMsSUFBQUEsUUFBUSxFQUFFLEVBYmtGO0FBYzVGQyxJQUFBQSxnQkFBZ0IsRUFBRSxVQUFTQyxNQUFULEVBQXNCO0FBQ3ZDZCxNQUFBQSxhQUFhLENBQUNlLFNBQWQsQ0FBd0JGLGdCQUF4QixDQUF5Q0csS0FBekMsQ0FBK0MsSUFBL0MsRUFBcUQsQ0FBQ0YsTUFBRCxDQUFyRDtBQUNBLEtBaEIyRjtBQWlCNUZHLElBQUFBLGlCQUFpQixFQUFFLFVBQXdDSCxNQUF4QyxF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TUFBVixHQUFtQixDQUFwQyxFQUF1QztBQUN0Q2UsVUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCLFVBQUNDLFNBQUQsRUFBb0I7QUFDckMsZ0JBQU1DLGNBQWMsR0FBR0QsU0FBUyxDQUFDRSxLQUFWLEVBQXZCOztBQUNBRCxZQUFBQSxjQUFjLENBQUNFLFFBQWYsQ0FBd0IsS0FBSSxDQUFDdEIsUUFBTCxFQUF4Qjs7QUFDQW9CLFlBQUFBLGNBQWMsQ0FBQ0csaUJBQWYsQ0FBaUMsS0FBSSxDQUFDQyxpQkFBTCxFQUFqQzs7QUFDQVYsWUFBQUEsS0FBSyxDQUFDVyxVQUFOLENBQWlCTCxjQUFqQjtBQUNBLFdBTEQ7O0FBTUFNLFVBQUFBLFVBQVUsQ0FBQyxZQUFXO0FBQ3JCWixZQUFBQSxLQUFLLENBQUNhLFFBQU47QUFDQSxXQUZTLEVBRVAsQ0FGTyxDQUFWO0FBR0E7QUFDRDtBQUNEO0FBOUcyRixHQUFqRSxDQUE1QjtTQWlIZTFFLG1CIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUXVpY2tWaWV3UGFnZSBmcm9tIFwic2FwL20vUXVpY2tWaWV3UGFnZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgRGVsZWdhdGVVdGlsIH0gZnJvbSBcInNhcC9mZS9tYWNyb3NcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcblxudHlwZSBDdXN0b21RdWlja1ZpZXdQYWdlVHlwZSA9IFF1aWNrVmlld1BhZ2UgJiB7XG5cdG9Dcm9zc0FwcE5hdmlnYXRvcjogYW55O1xuXHRnZXRDdXN0b21Db250ZW50KCk6IENvbnRyb2xbXTtcblx0Z2V0UGFnZUNvbnRlbnQoKTogYW55O1xufTtcbmNvbnN0IEN1c3RvbVF1aWNrVmlld1BhZ2UgPSBRdWlja1ZpZXdQYWdlLmV4dGVuZChcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkN1c3RvbVF1aWNrVmlld1BhZ2VcIiwge1xuXHRtZXRhZGF0YToge1xuXHRcdGRlZmF1bHRBZ2dyZWdhdGlvbjogXCJncm91cHNcIixcblx0XHRhZ2dyZWdhdGlvbnM6IHtcblx0XHRcdGN1c3RvbUNvbnRlbnQ6IHtcblx0XHRcdFx0dHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsXG5cdFx0XHRcdG11bHRpcGxlOiB0cnVlLFxuXHRcdFx0XHRiaW5kYWJsZTogXCJiaW5kYWJsZVwiXG5cdFx0XHR9LFxuXHRcdFx0Z3JvdXBzOiB7IHR5cGU6IFwic2FwLm0uUXVpY2tWaWV3R3JvdXBcIiwgbXVsdGlwbGU6IHRydWUsIHNpbmd1bGFyTmFtZTogXCJncm91cFwiLCBiaW5kYWJsZTogXCJiaW5kYWJsZVwiIH1cblx0XHR9LFxuXHRcdHB1YmxpY01ldGhvZHM6IFtdXG5cdH0sXG5cdHJlbmRlcmVyOiB7fSxcblx0b25BZnRlclJlbmRlcmluZzogZnVuY3Rpb24ob0V2ZW50OiBhbnkpIHtcblx0XHRRdWlja1ZpZXdQYWdlLnByb3RvdHlwZS5vbkFmdGVyUmVuZGVyaW5nLmFwcGx5KHRoaXMsIFtvRXZlbnRdKTtcblx0fSxcblx0b25CZWZvcmVSZW5kZXJpbmc6IGZ1bmN0aW9uKHRoaXM6IEN1c3RvbVF1aWNrVmlld1BhZ2VUeXBlLCBvRXZlbnQ6IGFueSkge1xuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0UGFyZW50KCkgJiZcblx0XHRcdHRoaXMuZ2V0UGFyZW50KCkuaXNBKFwic2FwLmZlLmNvcmUuY29udHJvbHMuQ29uZGl0aW9uYWxXcmFwcGVyXCIpICYmXG5cdFx0XHR0aGlzLmdldFBhcmVudCgpLmdldFByb3BlcnR5KFwiY29uZGl0aW9uXCIpID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldENyb3NzQXBwTmF2Q2FsbGJhY2soKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0hyZWYgPSAoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEgYXMgYW55KSh0aGlzLCBcInRpdGxlTGlua1wiKTtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBVdGlscy5nZXRWaWV3Rm9yQ29udHJvbCh0aGlzKTtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdFx0bGV0IG9TaGVsbEhhc2ggPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSHJlZik7XG5cdFx0XHRcdGNvbnN0IG9OYXZBcmdzID0ge1xuXHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IG9TaGVsbEhhc2guYWN0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRwYXJhbXM6IG9TaGVsbEhhc2gucGFyYW1zXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50ID0gb05hdkFyZ3MudGFyZ2V0LnNlbWFudGljT2JqZWN0ICsgXCItXCIgKyBvTmF2QXJncy50YXJnZXQuYWN0aW9uO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCAmJlxuXHRcdFx0XHRcdHRoaXMub0Nyb3NzQXBwTmF2aWdhdG9yICYmXG5cdFx0XHRcdFx0dGhpcy5vQ3Jvc3NBcHBOYXZpZ2F0b3IuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKFtzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudF0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlmIChzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCAmJiBzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCA9PT0gXCJzdHJpbmdcIiAmJiBzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCAhPT0gXCJcIikge1xuXHRcdFx0XHRcdFx0XHRsZXQgc1RhcmdldEhyZWY7XG5cdFx0XHRcdFx0XHRcdGxldCBvTGlua0NvbnRyb2wgPSB0aGlzLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAob0xpbmtDb250cm9sICYmICFvTGlua0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5MaW5rXCIpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b0xpbmtDb250cm9sID0gb0xpbmtDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IF9hTGlua3MgPSBvTGlua0NvbnRyb2wuZ2V0TW9kZWwoXCIkc2FwdWltZGNMaW5rXCIpLmdldFByb3BlcnR5KFwiL2xpbmtJdGVtc1wiKTtcblx0XHRcdFx0XHRcdFx0aWYgKF9hTGlua3MpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoX2FMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IF9hTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKF9hTGlua3NbaV0ua2V5ID09PSBzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNUYXJnZXRIcmVmID0gX2FMaW5rc1tpXS5ocmVmO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoc1RhcmdldEhyZWYpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1NoZWxsSGFzaCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goc1RhcmdldEhyZWYpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b1NoZWxsSGFzaCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goc1F1aWNrVmlld1BhZ2VUaXRsZUxpbmtJbnRlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRvU2hlbGxIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gob1ZpZXcsIG9TaGVsbEhhc2gpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9TaGVsbEhhc2guYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9TaGVsbEhhc2gucGFyYW1zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9DdXJyZW50U2hlbGxIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaCh3aW5kb3cubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdFx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gob1ZpZXcsIG9DdXJyZW50U2hlbGxIYXNoKTtcblxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9DdXJyZW50U2hlbGxIYXNoLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IG9DdXJyZW50U2hlbGxIYXNoLmFjdGlvbixcblx0XHRcdFx0XHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogb0N1cnJlbnRTaGVsbEhhc2guYXBwU3BlY2lmaWNSb3V0ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHBhcmFtczogb0N1cnJlbnRTaGVsbEhhc2gucGFyYW1zXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdFF1aWNrVmlld1BhZ2UucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMsIFtvRXZlbnRdKTtcblx0XHRjb25zdCBvUGFnZUNvbnRlbnQgPSB0aGlzLmdldFBhZ2VDb250ZW50KCk7XG5cdFx0Y29uc3Qgb0Zvcm0gPSBvUGFnZUNvbnRlbnQuZm9ybTtcblx0XHRpZiAob0Zvcm0pIHtcblx0XHRcdGNvbnN0IF9hQ29udGVudCA9IHRoaXMuZ2V0Q3VzdG9tQ29udGVudCgpO1xuXHRcdFx0aWYgKF9hQ29udGVudCAmJiBfYUNvbnRlbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRfYUNvbnRlbnQuZm9yRWFjaCgoX29Db250ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBfb0NvbnRlbnRDbG9uZSA9IF9vQ29udGVudC5jbG9uZSgpO1xuXHRcdFx0XHRcdF9vQ29udGVudENsb25lLnNldE1vZGVsKHRoaXMuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdFx0X29Db250ZW50Q2xvbmUuc2V0QmluZGluZ0NvbnRleHQodGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpKTtcblx0XHRcdFx0XHRvRm9ybS5hZGRDb250ZW50KF9vQ29udGVudENsb25lKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0b0Zvcm0ucmVyZW5kZXIoKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tUXVpY2tWaWV3UGFnZTtcbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkN1c3RvbVF1aWNrVmlld1BhZ2UudHMiXSwibmFtZXMiOlsiQ3VzdG9tUXVpY2tWaWV3UGFnZSIsImRlZmluZVVJNUNsYXNzIiwiYWdncmVnYXRpb24iLCJ0eXBlIiwibXVsdGlwbGUiLCJzaW5ndWxhck5hbWUiLCJpc0RlZmF1bHQiLCJvbkJlZm9yZVJlbmRlcmluZyIsIm9FdmVudCIsImdldFBhcmVudCIsImlzQSIsImdldFByb3BlcnR5Iiwic2V0Q3Jvc3NBcHBOYXZDYWxsYmFjayIsInNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSHJlZiIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJvU2hlbGxTZXJ2aWNlSGVscGVyIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsIm9TaGVsbEhhc2giLCJwYXJzZVNoZWxsSGFzaCIsIm9OYXZBcmdzIiwidGFyZ2V0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbXMiLCJzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCIsIm9Dcm9zc0FwcE5hdmlnYXRvciIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInNUYXJnZXRIcmVmIiwib0xpbmtDb250cm9sIiwiX2FMaW5rcyIsImdldE1vZGVsIiwibGVuZ3RoIiwiaSIsImtleSIsImhyZWYiLCJLZWVwQWxpdmVIZWxwZXIiLCJzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoIiwib0N1cnJlbnRTaGVsbEhhc2giLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJhcHBTcGVjaWZpY1JvdXRlIiwib1BhZ2VDb250ZW50IiwiZ2V0UGFnZUNvbnRlbnQiLCJvRm9ybSIsImZvcm0iLCJfYUNvbnRlbnQiLCJjdXN0b21Db250ZW50IiwiZm9yRWFjaCIsIl9vQ29udGVudCIsIl9vQ29udGVudENsb25lIiwiY2xvbmUiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJhZGRDb250ZW50Iiwic2V0VGltZW91dCIsInJlcmVuZGVyIiwiUXVpY2tWaWV3UGFnZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BTU1BLG1CLFdBRExDLGNBQWMsQ0FBQywwQ0FBRCxDLFVBRWJDLFdBQVcsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUUscUJBQVI7QUFBK0JDLElBQUFBLFFBQVEsRUFBRTtBQUF6QyxHQUFELEMsVUFFWEYsV0FBVyxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRSxzQkFBUjtBQUFnQ0MsSUFBQUEsUUFBUSxFQUFFLElBQTFDO0FBQWdEQyxJQUFBQSxZQUFZLEVBQUUsT0FBOUQ7QUFBdUVDLElBQUFBLFNBQVMsRUFBRTtBQUFsRixHQUFELEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztXQUdaQyxpQixHQUFBLDJCQUFrQkMsTUFBbEIsRUFBK0I7QUFBQTs7QUFDOUIsVUFDQyxLQUFLQyxTQUFMLE1BQ0EsS0FBS0EsU0FBTCxHQUFpQkMsR0FBakIsQ0FBcUIseUNBQXJCLENBREEsSUFFQSxLQUFLRCxTQUFMLEdBQWlCRSxXQUFqQixDQUE2QixXQUE3QixNQUE4QyxJQUgvQyxFQUlFO0FBQ0QsYUFBS0Msc0JBQUwsQ0FBNEIsWUFBTTtBQUNqQyxjQUFNQywyQkFBMkIsR0FBSUMsWUFBWSxDQUFDQyxhQUFkLENBQW9DLE1BQXBDLEVBQTBDLFdBQTFDLENBQXBDO0FBQ0EsY0FBTUMsS0FBSyxHQUFHQyxXQUFXLENBQUNDLGFBQVosQ0FBMEIsTUFBMUIsQ0FBZDtBQUNBLGNBQU1DLGFBQWEsR0FBR0YsV0FBVyxDQUFDRyxlQUFaLENBQTRCSixLQUE1QixDQUF0QjtBQUNBLGNBQU1LLG1CQUFtQixHQUFHRixhQUFhLENBQUNHLGdCQUFkLEVBQTVCO0FBQ0EsY0FBSUMsVUFBVSxHQUFHRixtQkFBbUIsQ0FBQ0csY0FBcEIsQ0FBbUNYLDJCQUFu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aW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBRdWlja1ZpZXdQYWdlIGZyb20gXCJzYXAvbS9RdWlja1ZpZXdQYWdlXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5DdXN0b21RdWlja1ZpZXdQYWdlXCIpXG5jbGFzcyBDdXN0b21RdWlja1ZpZXdQYWdlIGV4dGVuZHMgUXVpY2tWaWV3UGFnZSB7XG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiLCBtdWx0aXBsZTogdHJ1ZSB9KVxuXHRjdXN0b21Db250ZW50ITogQ29udHJvbFtdO1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLlF1aWNrVmlld0dyb3VwXCIsIG11bHRpcGxlOiB0cnVlLCBzaW5ndWxhck5hbWU6IFwiZ3JvdXBcIiwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdGdyb3VwcyE6IENvbnRyb2xbXTtcblxuXHRvbkJlZm9yZVJlbmRlcmluZyhvRXZlbnQ6IGFueSkge1xuXHRcdGlmIChcblx0XHRcdHRoaXMuZ2V0UGFyZW50KCkgJiZcblx0XHRcdHRoaXMuZ2V0UGFyZW50KCkuaXNBKFwic2FwLmZlLmNvcmUuY29udHJvbHMuQ29uZGl0aW9uYWxXcmFwcGVyXCIpICYmXG5cdFx0XHR0aGlzLmdldFBhcmVudCgpLmdldFByb3BlcnR5KFwiY29uZGl0aW9uXCIpID09PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHR0aGlzLnNldENyb3NzQXBwTmF2Q2FsbGJhY2soKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0hyZWYgPSAoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEgYXMgYW55KSh0aGlzLCBcInRpdGxlTGlua1wiKTtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpO1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRsZXQgb1NoZWxsSGFzaCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goc1F1aWNrVmlld1BhZ2VUaXRsZUxpbmtIcmVmKTtcblx0XHRcdFx0Y29uc3Qgb05hdkFyZ3MgPSB7XG5cdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb1NoZWxsSGFzaC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb1NoZWxsSGFzaC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogb1NoZWxsSGFzaC5wYXJhbXNcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3Qgc1F1aWNrVmlld1BhZ2VUaXRsZUxpbmtJbnRlbnQgPSBvTmF2QXJncy50YXJnZXQuc2VtYW50aWNPYmplY3QgKyBcIi1cIiArIG9OYXZBcmdzLnRhcmdldC5hY3Rpb247XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50ICYmXG5cdFx0XHRcdFx0dGhpcy5vQ3Jvc3NBcHBOYXZpZ2F0b3IgJiZcblx0XHRcdFx0XHR0aGlzLm9Dcm9zc0FwcE5hdmlnYXRvci5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW3NRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aWYgKHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50ICYmIHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50ICE9PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50ID09PSBcInN0cmluZ1wiICYmIHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50ICE9PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBzVGFyZ2V0SHJlZjtcblx0XHRcdFx0XHRcdFx0bGV0IG9MaW5rQ29udHJvbCA9IHRoaXMuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0XHRcdHdoaWxlIChvTGlua0NvbnRyb2wgJiYgIW9MaW5rQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkxpbmtcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRvTGlua0NvbnRyb2wgPSBvTGlua0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgX2FMaW5rcyA9IG9MaW5rQ29udHJvbC5nZXRNb2RlbChcIiRzYXB1aW1kY0xpbmtcIikuZ2V0UHJvcGVydHkoXCIvbGlua0l0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRpZiAoX2FMaW5rcykge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChfYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgX2FMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoX2FMaW5rc1tpXS5rZXkgPT09IHNRdWlja1ZpZXdQYWdlVGl0bGVMaW5rSW50ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c1RhcmdldEhyZWYgPSBfYUxpbmtzW2ldLmhyZWY7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzVGFyZ2V0SHJlZikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvU2hlbGxIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChzVGFyZ2V0SHJlZik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvU2hlbGxIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9TaGVsbEhhc2gucGFyYW1zID0gb05hdkFyZ3MucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRvU2hlbGxIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChzUXVpY2tWaWV3UGFnZVRpdGxlTGlua0ludGVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gob1ZpZXcsIG9TaGVsbEhhc2gpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TaGVsbEhhc2guc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9TaGVsbEhhc2guYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9TaGVsbEhhc2gucGFyYW1zXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IG9DdXJyZW50U2hlbGxIYXNoID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaCh3aW5kb3cubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdFx0S2VlcEFsaXZlSGVscGVyLnN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gob1ZpZXcsIG9DdXJyZW50U2hlbGxIYXNoKTtcblxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9DdXJyZW50U2hlbGxIYXNoLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IG9DdXJyZW50U2hlbGxIYXNoLmFjdGlvbixcblx0XHRcdFx0XHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogb0N1cnJlbnRTaGVsbEhhc2guYXBwU3BlY2lmaWNSb3V0ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHBhcmFtczogb0N1cnJlbnRTaGVsbEhhc2gucGFyYW1zXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHN1cGVyLm9uQmVmb3JlUmVuZGVyaW5nKG9FdmVudCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZW50ID0gdGhpcy5nZXRQYWdlQ29udGVudCgpO1xuXHRcdGNvbnN0IG9Gb3JtID0gb1BhZ2VDb250ZW50LmZvcm07XG5cdFx0aWYgKG9Gb3JtKSB7XG5cdFx0XHRjb25zdCBfYUNvbnRlbnQgPSB0aGlzLmN1c3RvbUNvbnRlbnQ7XG5cdFx0XHRpZiAoX2FDb250ZW50ICYmIF9hQ29udGVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdF9hQ29udGVudC5mb3JFYWNoKChfb0NvbnRlbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IF9vQ29udGVudENsb25lID0gX29Db250ZW50LmNsb25lKCk7XG5cdFx0XHRcdFx0X29Db250ZW50Q2xvbmUuc2V0TW9kZWwodGhpcy5nZXRNb2RlbCgpKTtcblx0XHRcdFx0XHRfb0NvbnRlbnRDbG9uZS5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLmdldEJpbmRpbmdDb250ZXh0KCkpO1xuXHRcdFx0XHRcdG9Gb3JtLmFkZENvbnRlbnQoX29Db250ZW50Q2xvbmUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b0Zvcm0ucmVyZW5kZXIoKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5pbnRlcmZhY2UgQ3VzdG9tUXVpY2tWaWV3UGFnZSB7XG5cdC8vIFByaXZhdGUgaW4gVUk1XG5cdG9Dcm9zc0FwcE5hdmlnYXRvcjogYW55O1xuXHQvLyBQcml2YXRlIGluIFVJNVxuXHRnZXRQYWdlQ29udGVudCgpOiBhbnk7XG59XG5leHBvcnQgZGVmYXVsdCBDdXN0b21RdWlja1ZpZXdQYWdlO1xuIl19
@@ -1,33 +1,18 @@
1
- import QuickViewPage from "sap/m/QuickViewPage";
2
1
  import CommonUtils from "sap/fe/core/CommonUtils";
3
- import { DelegateUtil } from "sap/fe/macros";
2
+ import { aggregation, defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
4
3
  import KeepAliveHelper from "sap/fe/core/helpers/KeepAliveHelper";
5
- import Utils from "sap/ui/fl/Utils";
4
+ import DelegateUtil from "sap/fe/macros/DelegateUtil";
5
+ import QuickViewPage from "sap/m/QuickViewPage";
6
6
  import Control from "sap/ui/core/Control";
7
7
 
8
- type CustomQuickViewPageType = QuickViewPage & {
9
- oCrossAppNavigator: any;
10
- getCustomContent(): Control[];
11
- getPageContent(): any;
12
- };
13
- const CustomQuickViewPage = QuickViewPage.extend("sap.fe.core.controls.CustomQuickViewPage", {
14
- metadata: {
15
- defaultAggregation: "groups",
16
- aggregations: {
17
- customContent: {
18
- type: "sap.ui.core.Control",
19
- multiple: true,
20
- bindable: "bindable"
21
- },
22
- groups: { type: "sap.m.QuickViewGroup", multiple: true, singularName: "group", bindable: "bindable" }
23
- },
24
- publicMethods: []
25
- },
26
- renderer: {},
27
- onAfterRendering: function(oEvent: any) {
28
- QuickViewPage.prototype.onAfterRendering.apply(this, [oEvent]);
29
- },
30
- onBeforeRendering: function(this: CustomQuickViewPageType, oEvent: any) {
8
+ @defineUI5Class("sap.fe.core.controls.CustomQuickViewPage")
9
+ class CustomQuickViewPage extends QuickViewPage {
10
+ @aggregation({ type: "sap.ui.core.Control", multiple: true })
11
+ customContent!: Control[];
12
+ @aggregation({ type: "sap.m.QuickViewGroup", multiple: true, singularName: "group", isDefault: true })
13
+ groups!: Control[];
14
+
15
+ onBeforeRendering(oEvent: any) {
31
16
  if (
32
17
  this.getParent() &&
33
18
  this.getParent().isA("sap.fe.core.controls.ConditionalWrapper") &&
@@ -35,7 +20,7 @@ const CustomQuickViewPage = QuickViewPage.extend("sap.fe.core.controls.CustomQui
35
20
  ) {
36
21
  this.setCrossAppNavCallback(() => {
37
22
  const sQuickViewPageTitleLinkHref = (DelegateUtil.getCustomData as any)(this, "titleLink");
38
- const oView = Utils.getViewForControl(this);
23
+ const oView = CommonUtils.getTargetView(this);
39
24
  const oAppComponent = CommonUtils.getAppComponent(oView);
40
25
  const oShellServiceHelper = oAppComponent.getShellServices();
41
26
  let oShellHash = oShellServiceHelper.parseShellHash(sQuickViewPageTitleLinkHref);
@@ -73,6 +58,7 @@ const CustomQuickViewPage = QuickViewPage.extend("sap.fe.core.controls.CustomQui
73
58
  oShellHash = oShellServiceHelper.parseShellHash(sTargetHref);
74
59
  } else {
75
60
  oShellHash = oShellServiceHelper.parseShellHash(sQuickViewPageTitleLinkIntent);
61
+ oShellHash.params = oNavArgs.params;
76
62
  }
77
63
  }
78
64
  } else {
@@ -103,11 +89,11 @@ const CustomQuickViewPage = QuickViewPage.extend("sap.fe.core.controls.CustomQui
103
89
  }
104
90
  });
105
91
  }
106
- QuickViewPage.prototype.onBeforeRendering.apply(this, [oEvent]);
92
+ super.onBeforeRendering(oEvent);
107
93
  const oPageContent = this.getPageContent();
108
94
  const oForm = oPageContent.form;
109
95
  if (oForm) {
110
- const _aContent = this.getCustomContent();
96
+ const _aContent = this.customContent;
111
97
  if (_aContent && _aContent.length > 0) {
112
98
  _aContent.forEach((_oContent: any) => {
113
99
  const _oContentClone = _oContent.clone();
@@ -115,12 +101,17 @@ const CustomQuickViewPage = QuickViewPage.extend("sap.fe.core.controls.CustomQui
115
101
  _oContentClone.setBindingContext(this.getBindingContext());
116
102
  oForm.addContent(_oContentClone);
117
103
  });
118
- setTimeout(function() {
104
+ setTimeout(function () {
119
105
  oForm.rerender();
120
106
  }, 0);
121
107
  }
122
108
  }
123
109
  }
124
- });
125
-
110
+ }
111
+ interface CustomQuickViewPage {
112
+ // Private in UI5
113
+ oCrossAppNavigator: any;
114
+ // Private in UI5
115
+ getPageContent(): any;
116
+ }
126
117
  export default CustomQuickViewPage;
@@ -1,12 +1,59 @@
1
1
  <core:FragmentDefinition xmlns="sap.m" xmlns:core="sap.ui.core">
2
- <Dialog title="{i18n>WARNING}" state="Warning" type="Message">
2
+ <Dialog title="{i18n>WARNING}" state="Warning" type="Message" contentWidth="22rem">
3
3
  <content>
4
- <Text text="{i18n>ST_DRAFT_DATALOSS_MESSAGE_DRAFT}" />
4
+ <Text
5
+ text="{= !%{HasActiveEntity} ? ${sap.fe.i18n>ST_DRAFT_DATALOSS_POPUP_MESSAGE_CREATE} : ${sap.fe.i18n>ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE} }"
6
+ wrapping="true"
7
+ />
8
+ <List
9
+ mode="SingleSelectLeft"
10
+ showSeparators="None"
11
+ includeItemInSelection="true"
12
+ backgroundDesign="Transparent"
13
+ class="sapUiNoContentPadding"
14
+ >
15
+ <customData>
16
+ <core:CustomData key="listIdentifier" value="draftDataLossOptionsList" />
17
+ </customData>
18
+ <items>
19
+ <CustomListItem>
20
+ <customData>
21
+ <core:CustomData key="itemKey" value="draftDataLossOptionSave" />
22
+ </customData>
23
+ <VBox class="sapUiTinyMargin">
24
+ <Label
25
+ text="{= !%{HasActiveEntity} ? ${sap.fe.i18n>ST_DRAFT_DATALOSS_CREATE_ENTITY_RBL} : ${sap.fe.i18n>ST_DRAFT_DATALOSS_SAVE_DRAFT_RBL} }"
26
+ design="Bold"
27
+ />
28
+ <Text
29
+ text="{= !%{HasActiveEntity} ? ${sap.fe.i18n>ST_DRAFT_DATALOSS_CREATE_ENTITY_TOL} : ${sap.fe.i18n>ST_DRAFT_DATALOSS_SAVE_DRAFT_TOL} }"
30
+ />
31
+ </VBox>
32
+ </CustomListItem>
33
+ <CustomListItem>
34
+ <customData>
35
+ <core:CustomData key="itemKey" value="draftDataLossOptionKeep" />
36
+ </customData>
37
+ <VBox class="sapUiTinyMargin">
38
+ <Label text="{i18n>ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL}" design="Bold" />
39
+ <Text text="{i18n>ST_DRAFT_DATALOSS_KEEP_DRAFT_TOL}" />
40
+ </VBox>
41
+ </CustomListItem>
42
+ <CustomListItem>
43
+ <customData>
44
+ <core:CustomData key="itemKey" value="draftDataLossOptionDiscard" />
45
+ </customData>
46
+ <VBox class="sapUiTinyMargin">
47
+ <Label text="{i18n>ST_DRAFT_DATALOSS_DISCARD_DRAFT_RBL}" design="Bold" />
48
+ <Text text="{i18n>ST_DRAFT_DATALOSS_DISCARD_DRAFT_TOL}" />
49
+ </VBox>
50
+ </CustomListItem>
51
+ </items>
52
+ </List>
5
53
  </content>
6
54
  <buttons>
7
- <Button text="{i18n>ST_DRAFT_DATALOSS_KEEP_DRAFT_BTN}" press="onDataLossKeepDraft" type="Emphasized" />
8
- <Button text="{i18n>ST_DRAFT_DATALOSS_DISCARD_DRAFT_BTN}" press="onDataLossDiscardDraft" />
9
- <Button text="{i18n>CANCEL}" press="onDataLossCancel" />
55
+ <Button text="{i18n>C_COMMON_DIALOG_OK}" type="Emphasized" press="onDataLossOk" />
56
+ <Button text="{i18n>C_COMMON_DIALOG_CANCEL}" press="onDataLossCancel" />
10
57
  </buttons>
11
58
  </Dialog>
12
59
  </core:FragmentDefinition>