@sapui5/sap.fe.core 1.100.0 → 1.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/package.json +4 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +43 -24
  4. package/src/sap/fe/core/AnnotationHelper.ts +43 -37
  5. package/src/sap/fe/core/AppComponent.js +20 -27
  6. package/src/sap/fe/core/AppComponent.ts +19 -25
  7. package/src/sap/fe/core/AppStateHandler.js +5 -5
  8. package/src/sap/fe/core/AppStateHandler.ts +2 -2
  9. package/src/sap/fe/core/BaseController.js +9 -9
  10. package/src/sap/fe/core/BaseController.ts +3 -4
  11. package/src/sap/fe/core/CommonUtils.js +74 -17
  12. package/src/sap/fe/core/CommonUtils.ts +181 -110
  13. package/src/sap/fe/core/ExtensionAPI.js +11 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +22 -30
  15. package/src/sap/fe/core/PageController.js +12 -11
  16. package/src/sap/fe/core/PageController.ts +34 -34
  17. package/src/sap/fe/core/RouterProxy.js +36 -24
  18. package/src/sap/fe/core/RouterProxy.ts +36 -22
  19. package/src/sap/fe/core/TemplateComponent.js +193 -118
  20. package/src/sap/fe/core/TemplateComponent.ts +105 -117
  21. package/src/sap/fe/core/TemplateModel.js +6 -8
  22. package/src/sap/fe/core/TemplateModel.ts +2 -2
  23. package/src/sap/fe/core/TransactionHelper.js +33 -18
  24. package/src/sap/fe/core/TransactionHelper.ts +172 -153
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +31 -17
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +52 -45
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +16 -6
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +13 -3
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +9 -7
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +33 -31
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +53 -56
  32. package/src/sap/fe/core/actions/draft.js +308 -166
  33. package/src/sap/fe/core/actions/draft.ts +177 -74
  34. package/src/sap/fe/core/actions/messageHandling.js +25 -13
  35. package/src/sap/fe/core/actions/messageHandling.ts +49 -39
  36. package/src/sap/fe/core/actions/operations.js +4 -4
  37. package/src/sap/fe/core/actions/operations.ts +3 -2
  38. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  39. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  40. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  41. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  42. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  43. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  44. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  45. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  46. package/src/sap/fe/core/controllerextensions/EditFlow.js +506 -245
  47. package/src/sap/fe/core/controllerextensions/EditFlow.ts +395 -275
  48. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +11 -11
  49. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -7
  50. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +15 -17
  51. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +98 -96
  52. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +15 -15
  53. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +60 -53
  54. package/src/sap/fe/core/controllerextensions/InternalRouting.js +94 -42
  55. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +114 -91
  56. package/src/sap/fe/core/controllerextensions/KPIManagement.js +14 -14
  57. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -11
  58. package/src/sap/fe/core/controllerextensions/MassEdit.js +12 -12
  59. package/src/sap/fe/core/controllerextensions/MassEdit.ts +8 -9
  60. package/src/sap/fe/core/controllerextensions/MessageHandler.js +13 -25
  61. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +18 -28
  62. package/src/sap/fe/core/controllerextensions/PageReady.js +25 -23
  63. package/src/sap/fe/core/controllerextensions/PageReady.ts +49 -47
  64. package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
  65. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -18
  66. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -10
  67. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  68. package/src/sap/fe/core/controllerextensions/Routing.js +11 -11
  69. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  70. package/src/sap/fe/core/controllerextensions/Share.js +16 -16
  71. package/src/sap/fe/core/controllerextensions/Share.ts +32 -32
  72. package/src/sap/fe/core/controllerextensions/SideEffects.js +14 -14
  73. package/src/sap/fe/core/controllerextensions/SideEffects.ts +62 -63
  74. package/src/sap/fe/core/controllerextensions/ViewState.js +17 -31
  75. package/src/sap/fe/core/controllerextensions/ViewState.ts +93 -102
  76. package/src/sap/fe/core/controls/Any.js +28 -0
  77. package/src/sap/fe/core/controls/Any.ts +30 -0
  78. package/src/sap/fe/core/controls/CommandExecution.js +38 -15
  79. package/src/sap/fe/core/controls/CommandExecution.ts +20 -20
  80. package/src/sap/fe/core/controls/ConditionalWrapper.js +136 -65
  81. package/src/sap/fe/core/controls/ConditionalWrapper.ts +49 -58
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.js +73 -36
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +22 -32
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +116 -66
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +121 -67
  89. package/src/sap/fe/core/controls/FieldWrapper.js +171 -87
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +69 -80
  91. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  92. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +154 -119
  94. package/src/sap/fe/core/controls/FilterBar.ts +128 -123
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +92 -37
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +32 -35
  97. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +111 -89
  98. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +86 -82
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -193
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +211 -204
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +152 -116
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +105 -105
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +7 -6
  107. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +15 -14
  108. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  109. package/src/sap/fe/core/converters/ManifestSettings.ts +5 -1
  110. package/src/sap/fe/core/converters/annotations/DataField.js +1 -2
  111. package/src/sap/fe/core/converters/annotations/DataField.ts +3 -4
  112. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
  113. package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
  114. package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
  115. package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
  116. package/src/sap/fe/core/converters/controls/Common/Form.js +5 -5
  117. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  119. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -3
  120. package/src/sap/fe/core/converters/controls/Common/Table.js +245 -112
  121. package/src/sap/fe/core/converters/controls/Common/Table.ts +305 -193
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -5
  123. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -7
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +72 -43
  125. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +134 -100
  126. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  127. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  128. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  129. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  130. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  131. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +27 -24
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +49 -40
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +33 -22
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +77 -62
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +3 -7
  138. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  139. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  140. package/src/sap/fe/core/formatters/TableFormatter.js +2 -2
  141. package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
  142. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  143. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  144. package/src/sap/fe/core/fpm/Component.js +46 -17
  145. package/src/sap/fe/core/fpm/Component.ts +11 -16
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +4 -4
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +3 -3
  148. package/src/sap/fe/core/helpers/ClassSupport.js +273 -256
  149. package/src/sap/fe/core/helpers/ClassSupport.ts +314 -237
  150. package/src/sap/fe/core/helpers/MassEditHelper.js +173 -39
  151. package/src/sap/fe/core/helpers/MassEditHelper.ts +236 -132
  152. package/src/sap/fe/core/helpers/ModelHelper.js +29 -1
  153. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  154. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  155. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  156. package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -3
  157. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +3 -1
  158. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  159. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  160. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
  161. package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
  162. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  163. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  164. package/src/sap/fe/core/library.js +4 -5
  165. package/src/sap/fe/core/library.ts +17 -17
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -3
  168. package/src/sap/fe/core/messagebundle.properties +23 -8
  169. package/src/sap/fe/core/messagebundle_ar.properties +2 -0
  170. package/src/sap/fe/core/messagebundle_bg.properties +2 -0
  171. package/src/sap/fe/core/messagebundle_ca.properties +2 -0
  172. package/src/sap/fe/core/messagebundle_cs.properties +2 -0
  173. package/src/sap/fe/core/messagebundle_cy.properties +5 -3
  174. package/src/sap/fe/core/messagebundle_da.properties +2 -0
  175. package/src/sap/fe/core/messagebundle_de.properties +2 -0
  176. package/src/sap/fe/core/messagebundle_el.properties +2 -0
  177. package/src/sap/fe/core/messagebundle_en.properties +2 -0
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -0
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +2 -0
  182. package/src/sap/fe/core/messagebundle_es.properties +2 -0
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
  184. package/src/sap/fe/core/messagebundle_et.properties +2 -0
  185. package/src/sap/fe/core/messagebundle_fi.properties +2 -0
  186. package/src/sap/fe/core/messagebundle_fr.properties +4 -2
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +5 -3
  188. package/src/sap/fe/core/messagebundle_hi.properties +2 -0
  189. package/src/sap/fe/core/messagebundle_hr.properties +5 -3
  190. package/src/sap/fe/core/messagebundle_hu.properties +2 -0
  191. package/src/sap/fe/core/messagebundle_id.properties +2 -0
  192. package/src/sap/fe/core/messagebundle_it.properties +2 -0
  193. package/src/sap/fe/core/messagebundle_iw.properties +2 -0
  194. package/src/sap/fe/core/messagebundle_ja.properties +2 -0
  195. package/src/sap/fe/core/messagebundle_kk.properties +2 -0
  196. package/src/sap/fe/core/messagebundle_ko.properties +2 -0
  197. package/src/sap/fe/core/messagebundle_lt.properties +2 -0
  198. package/src/sap/fe/core/messagebundle_lv.properties +5 -3
  199. package/src/sap/fe/core/messagebundle_ms.properties +2 -0
  200. package/src/sap/fe/core/messagebundle_nl.properties +2 -0
  201. package/src/sap/fe/core/messagebundle_no.properties +2 -0
  202. package/src/sap/fe/core/messagebundle_pl.properties +5 -3
  203. package/src/sap/fe/core/messagebundle_pt.properties +2 -0
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
  205. package/src/sap/fe/core/messagebundle_ro.properties +5 -3
  206. package/src/sap/fe/core/messagebundle_ru.properties +5 -3
  207. package/src/sap/fe/core/messagebundle_sh.properties +2 -0
  208. package/src/sap/fe/core/messagebundle_sk.properties +2 -0
  209. package/src/sap/fe/core/messagebundle_sl.properties +2 -0
  210. package/src/sap/fe/core/messagebundle_sv.properties +3 -1
  211. package/src/sap/fe/core/messagebundle_th.properties +2 -0
  212. package/src/sap/fe/core/messagebundle_tr.properties +2 -0
  213. package/src/sap/fe/core/messagebundle_uk.properties +2 -0
  214. package/src/sap/fe/core/messagebundle_vi.properties +2 -0
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +5 -3
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +5 -3
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +4 -4
  218. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +5 -5
  220. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -2
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -7
  222. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -5
  223. package/src/sap/fe/core/services/NavigationServiceFactory.js +4 -4
  224. package/src/sap/fe/core/services/NavigationServiceFactory.ts +1 -1
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +4 -4
  226. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +1 -1
  227. package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -62
  228. package/src/sap/fe/core/services/RoutingServiceFactory.ts +51 -42
  229. package/src/sap/fe/core/services/ShellServicesFactory.js +69 -29
  230. package/src/sap/fe/core/services/ShellServicesFactory.ts +26 -29
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  232. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +8 -8
  234. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +6 -17
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  236. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +6 -3
  237. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  238. package/src/sap/fe/core/support/CommonHelper.ts +0 -3
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -9
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +32 -38
  241. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  242. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  243. package/src/sap/fe/core/templating/PropertyHelper.js +15 -1
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +30 -23
  245. package/src/sap/fe/core/templating/UIFormatters.js +121 -21
  246. package/src/sap/fe/core/templating/UIFormatters.ts +134 -49
  247. package/src/sap/fe/core/type/Email.js +26 -8
  248. package/src/sap/fe/core/type/Email.ts +8 -7
  249. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -78
  250. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +0 -65
@@ -2,115 +2,165 @@
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/base/Log", "sap/ui/model/json/JSONModel", "sap/ui/core/XMLTemplateProcessor", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/Fragment"], function (Log, JSONModel, XMLTemplateProcessor, XMLPreprocessor, Fragment) {
5
+ sap.ui.define(["sap/base/Log", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/model/json/JSONModel"], function (Log, Fragment, XMLPreprocessor, XMLTemplateProcessor, JSONModel) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
 
10
+ var DraftDataLossOptions;
11
+
12
+ (function (DraftDataLossOptions) {
13
+ DraftDataLossOptions["Save"] = "draftDataLossOptionSave";
14
+ DraftDataLossOptions["Keep"] = "draftDataLossOptionKeep";
15
+ DraftDataLossOptions["Discard"] = "draftDataLossOptionDiscard";
16
+ })(DraftDataLossOptions || (DraftDataLossOptions = {}));
17
+
10
18
  var fnOnDataLossConfirmed;
11
19
  var fnOnDataLossCancel;
12
20
 
13
- function fnDataLossConfirmation(onDataLossConfirmed, onDataLossCancel, oController, bSkipBindingToView) {
14
- var oDataLossPopup;
15
- fnOnDataLossConfirmed = onDataLossConfirmed;
21
+ function fnDataLossConfirmation(onDataLossOk, onDataLossCancel, controller, skipBindingToView) {
22
+ // Open the data loss popup and after processing the selected function finally call
23
+ // onDataLossConfirmed which resolves the promise and leads to processing of the originally
24
+ // triggered action like e.g. a back navigation
25
+ var dataLossPopup;
26
+ fnOnDataLossConfirmed = onDataLossOk;
16
27
  fnOnDataLossCancel = onDataLossCancel;
17
- var sFragmentname = "sap.fe.core.controls.DataLossOrDraftDiscard.DataLossDraft";
18
- var oView = oController.getView();
28
+ var fragmentName = "sap.fe.core.controls.DataLossOrDraftDiscard.DataLossDraft";
29
+ var view = controller.getView();
19
30
  var fragmentController = {
20
- onDataLossKeepDraft: function () {
21
- oDataLossPopup.close();
22
- fnOnDataLossConfirmed();
23
- },
24
- onDataLossDiscardDraft: function () {
25
- oDataLossPopup.close();
26
- discardDraft(oController, bSkipBindingToView).then(fnOnDataLossConfirmed).catch(function (oError) {
27
- Log.error("Error while discarding draft", oError);
28
- });
31
+ onDataLossOk: function () {
32
+ var selectedKey = getSelectedKey(dataLossPopup);
33
+
34
+ if (selectedKey === DraftDataLossOptions.Save) {
35
+ saveDocument(controller).then(fnOnDataLossConfirmed).catch(function (error) {
36
+ Log.error("Error while saving document", error);
37
+ });
38
+ dataLossPopup.close();
39
+ } else if (selectedKey === DraftDataLossOptions.Keep) {
40
+ fnOnDataLossConfirmed();
41
+ dataLossPopup.close();
42
+ } else if (selectedKey === DraftDataLossOptions.Discard) {
43
+ discardDraft(controller, skipBindingToView).then(fnOnDataLossConfirmed).catch(function (error) {
44
+ Log.error("Error while discarding draft", error);
45
+ });
46
+ dataLossPopup.close();
47
+ }
29
48
  },
30
49
  onDataLossCancel: function () {
31
- oDataLossPopup.close();
32
50
  fnOnDataLossCancel();
51
+ dataLossPopup.close();
52
+ },
53
+ setDataLossPopup: function (dataLossPopup) {
54
+ controller.dataLossPopup = dataLossPopup;
33
55
  }
34
56
  };
35
-
36
- fragmentController.setDataLossPopup = function (oDataLossPopup) {
37
- oController.dataLossPopup = oDataLossPopup;
38
- };
39
-
40
- var oThis = new JSONModel({
41
- id: oView.getId()
42
- }),
43
- oPreprocessorSettings = {
57
+ var i18nModel = view.getModel("sap.fe.i18n");
58
+ var localThisModel = new JSONModel({}),
59
+ preprocessorSettings = {
44
60
  bindingContexts: {
45
- "this": oThis.createBindingContext("/")
61
+ "this": localThisModel.createBindingContext("/")
46
62
  },
47
63
  models: {
48
- "this": oThis,
49
- "this.i18n": oView.getModel("sap.fe.i18n")
64
+ "this": localThisModel,
65
+ "i18n": i18nModel
50
66
  }
51
67
  };
52
- var oPopoverFragment = XMLTemplateProcessor.loadTemplate(sFragmentname, "fragment");
53
68
 
54
- if (oController.dataLossPopup) {
55
- oDataLossPopup = oController.dataLossPopup;
56
- oDataLossPopup.open();
69
+ if (controller.dataLossPopup) {
70
+ dataLossPopup = controller.dataLossPopup;
71
+ dataLossPopup.open();
72
+ selectAndFocusFirstEntry(dataLossPopup);
57
73
  } else {
58
- Promise.resolve(XMLPreprocessor.process(oPopoverFragment, {
59
- name: sFragmentname
60
- }, oPreprocessorSettings)).then(function (oFragment) {
74
+ var dialogFragment = XMLTemplateProcessor.loadTemplate(fragmentName, "fragment");
75
+ Promise.resolve(XMLPreprocessor.process(dialogFragment, {
76
+ name: fragmentName
77
+ }, preprocessorSettings)).then(function (fragment) {
61
78
  return Fragment.load({
62
- definition: oFragment,
79
+ definition: fragment,
63
80
  controller: fragmentController
64
81
  });
65
- }).then(function (oPopup) {
66
- oDataLossPopup = oPopup;
67
- oView.addDependent(oDataLossPopup);
68
- var oModel = new JSONModel();
69
- oDataLossPopup.setModel(oModel, "dataLoss");
70
- var oi18nModel = oController.getView().getModel("sap.fe.i18n");
71
- oDataLossPopup.setModel(oi18nModel, "i18n");
72
- oDataLossPopup.open();
73
- fragmentController.setDataLossPopup(oDataLossPopup);
74
- }).catch(function (oError) {
75
- Log.error("Error while opening the Discard Dialog fragment", oError);
82
+ }).then(function (popup) {
83
+ dataLossPopup = popup;
84
+ view.addDependent(dataLossPopup);
85
+ dataLossPopup.open();
86
+ selectAndFocusFirstEntry(dataLossPopup);
87
+ fragmentController.setDataLossPopup(dataLossPopup);
88
+ }).catch(function (error) {
89
+ Log.error("Error while opening the Discard Dialog fragment", error);
76
90
  });
77
91
  }
78
92
  }
79
93
 
80
- function fnPerformAfterDiscardorKeepDraftImpl(fnPositive, fnNegative, oController, bSkipBindingToView) {
81
- fnDataLossConfirmation(fnPositive, fnNegative, oController, bSkipBindingToView);
82
- }
83
-
84
- function performAfterDiscardorKeepDraft(fnProcessFunction, fnCancelFunction, oController, bSkipBindingToView) {
85
- var oRet = new Promise(function (resolve, reject) {
86
- var fnPositive = function (oContext) {
87
- var oRet = fnProcessFunction(oContext);
88
- resolve(oRet);
94
+ function performAfterDiscardorKeepDraft(processFunctionOnDatalossOk, processFunctionOnDatalossCancel, controller, skipBindingToView) {
95
+ // Depending on if the user closed the data loss popup with Ok or Cancel,
96
+ // execute the provided follow-up function and resolve or reject the promise
97
+ return new Promise(function (resolve, reject) {
98
+ var dataLossPopupOk = function (context) {
99
+ var returnValue = processFunctionOnDatalossOk(context);
100
+ resolve(returnValue);
89
101
  };
90
102
 
91
- var fnNegative = function () {
92
- fnCancelFunction();
103
+ var dataLossPopupCancel = function () {
104
+ processFunctionOnDatalossCancel();
93
105
  reject();
94
106
  };
95
107
 
96
- fnPerformAfterDiscardorKeepDraftImpl(fnPositive, fnNegative, oController, bSkipBindingToView);
108
+ fnDataLossConfirmation(dataLossPopupOk, dataLossPopupCancel, controller, skipBindingToView);
97
109
  });
98
- return oRet;
99
110
  }
100
111
 
101
112
  _exports.performAfterDiscardorKeepDraft = performAfterDiscardorKeepDraft;
102
113
 
103
- function discardDraft(oController, bSkipBindingToView) {
104
- var oParamsContext = oController.getView().getBindingContext();
105
- var mParams = {
114
+ function discardDraft(controller, skipBindingToView) {
115
+ var context = controller.getView().getBindingContext();
116
+ var params = {
106
117
  skipBackNavigation: true,
107
118
  skipDiscardPopover: true,
108
- skipBindingToView: bSkipBindingToView !== undefined ? bSkipBindingToView : true
119
+ skipBindingToView: skipBindingToView !== undefined ? skipBindingToView : true
109
120
  };
110
- return oController.editFlow.cancelDocument(oParamsContext, mParams);
121
+ return controller.editFlow.cancelDocument(context, params);
111
122
  }
112
123
 
113
124
  _exports.discardDraft = discardDraft;
125
+
126
+ function saveDocument(controller) {
127
+ var context = controller.getView().getBindingContext(); // We check if we are on the OP and then call the internal _saveDocument from the OP controller
128
+ // since here some special handling is done for creationRow before editFlow.saveDocument is called.
129
+ // In case of a custom controller we directly call saveDocument from the editFlow
130
+
131
+ if (controller.isA("sap.fe.templates.ObjectPage.ObjectPageController")) {
132
+ return controller._saveDocument(context);
133
+ } else {
134
+ controller.editFlow.saveDocument(context);
135
+ }
136
+ }
137
+
138
+ _exports.saveDocument = saveDocument;
139
+
140
+ function getSelectedKey(dataLossPopup) {
141
+ // For not using control IDs we introduced customData in the fragment and
142
+ // use it here for finding the correct list in the dialog and for
143
+ // determining the selected option from the list
144
+ var dataLossOptionsList = dataLossPopup.getContent().find(function (element) {
145
+ return element.data("listIdentifier") === "draftDataLossOptionsList";
146
+ });
147
+ return dataLossOptionsList.getSelectedItem().data("itemKey");
148
+ }
149
+
150
+ _exports.getSelectedKey = getSelectedKey;
151
+
152
+ function selectAndFocusFirstEntry(dataLossPopup) {
153
+ // For not using control IDs we introduced customData in the fragment and
154
+ // use it here for finding the correct list in the dialog.
155
+ var dataLossOptionsList = dataLossPopup.getContent().find(function (element) {
156
+ return element.data("listIdentifier") === "draftDataLossOptionsList";
157
+ });
158
+ var firstListItemOption = dataLossOptionsList.getItems()[0];
159
+ dataLossOptionsList.setSelectedItem(firstListItemOption);
160
+ firstListItemOption.focus();
161
+ }
162
+
163
+ _exports.selectAndFocusFirstEntry = selectAndFocusFirstEntry;
114
164
  return _exports;
115
165
  }, false);
116
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFMb3NzT3JEcmFmdERpc2NhcmRIYW5kbGVyLnRzIl0sIm5hbWVzIjpbImZuT25EYXRhTG9zc0NvbmZpcm1lZCIsImZuT25EYXRhTG9zc0NhbmNlbCIsImZuRGF0YUxvc3NDb25maXJtYXRpb24iLCJvbkRhdGFMb3NzQ29uZmlybWVkIiwib25EYXRhTG9zc0NhbmNlbCIsIm9Db250cm9sbGVyIiwiYlNraXBCaW5kaW5nVG9WaWV3Iiwib0RhdGFMb3NzUG9wdXAiLCJzRnJhZ21lbnRuYW1lIiwib1ZpZXciLCJnZXRWaWV3IiwiZnJhZ21lbnRDb250cm9sbGVyIiwib25EYXRhTG9zc0tlZXBEcmFmdCIsImNsb3NlIiwib25EYXRhTG9zc0Rpc2NhcmREcmFmdCIsImRpc2NhcmREcmFmdCIsInRoZW4iLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwic2V0RGF0YUxvc3NQb3B1cCIsImRhdGFMb3NzUG9wdXAiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiZ2V0SWQiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm1vZGVscyIsImdldE1vZGVsIiwib1BvcG92ZXJGcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib3BlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIm5hbWUiLCJvRnJhZ21lbnQiLCJGcmFnbWVudCIsImxvYWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsIm9Qb3B1cCIsImFkZERlcGVuZGVudCIsIm9Nb2RlbCIsInNldE1vZGVsIiwib2kxOG5Nb2RlbCIsImZuUGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0SW1wbCIsImZuUG9zaXRpdmUiLCJmbk5lZ2F0aXZlIiwicGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IiwiZm5Qcm9jZXNzRnVuY3Rpb24iLCJmbkNhbmNlbEZ1bmN0aW9uIiwib1JldCIsInJlamVjdCIsIm9Db250ZXh0Iiwib1BhcmFtc0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm1QYXJhbXMiLCJza2lwQmFja05hdmlnYXRpb24iLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJza2lwQmluZGluZ1RvVmlldyIsInVuZGVmaW5lZCIsImVkaXRGbG93IiwiY2FuY2VsRG9jdW1lbnQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUtBLE1BQUlBLHFCQUFKO0FBQ0EsTUFBSUMsa0JBQUo7O0FBQ0EsV0FBU0Msc0JBQVQsQ0FBZ0NDLG1CQUFoQyxFQUEwREMsZ0JBQTFELEVBQWlGQyxXQUFqRixFQUFtR0Msa0JBQW5HLEVBQTRIO0FBQzNILFFBQUlDLGNBQUo7QUFDQVAsSUFBQUEscUJBQXFCLEdBQUdHLG1CQUF4QjtBQUNBRixJQUFBQSxrQkFBa0IsR0FBR0csZ0JBQXJCO0FBQ0EsUUFBTUksYUFBYSxHQUFHLDJEQUF0QjtBQUNBLFFBQU1DLEtBQUssR0FBR0osV0FBVyxDQUFDSyxPQUFaLEVBQWQ7QUFDQSxRQUFNQyxrQkFBdUIsR0FBRztBQUMvQkMsTUFBQUEsbUJBQW1CLEVBQUUsWUFBVztBQUMvQkwsUUFBQUEsY0FBYyxDQUFDTSxLQUFmO0FBQ0FiLFFBQUFBLHFCQUFxQjtBQUNyQixPQUo4QjtBQUsvQmMsTUFBQUEsc0JBQXNCLEVBQUUsWUFBVztBQUNsQ1AsUUFBQUEsY0FBYyxDQUFDTSxLQUFmO0FBQ0FFLFFBQUFBLFlBQVksQ0FBQ1YsV0FBRCxFQUFjQyxrQkFBZCxDQUFaLENBQ0VVLElBREYsQ0FDT2hCLHFCQURQLEVBRUVpQixLQUZGLENBRVEsVUFBU0MsTUFBVCxFQUFzQjtBQUM1QkMsVUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVUsOEJBQVYsRUFBMENGLE1BQTFDO0FBQ0EsU0FKRjtBQUtBLE9BWjhCO0FBYS9CZCxNQUFBQSxnQkFBZ0IsRUFBRSxZQUFXO0FBQzVCRyxRQUFBQSxjQUFjLENBQUNNLEtBQWY7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SSxHQUFHRixpQkFBaUIsQ0FBQ0ksUUFBRCxDQUE5QjtBQUNBdEIsUUFBQUEsT0FBTyxDQUFDb0IsSUFBRCxDQUFQO0FBQ0EsT0FIRDs7QUFJQSxVQUFNSixVQUFVLEdBQUcsWUFBVztBQUM3QkcsUUFBQUEsZ0JBQWdCO0FBQ2hCRSxRQUFBQSxNQUFNO0FBQ04sT0FIRDs7QUFJQVAsTUFBQUEsb0NBQW9DLENBQUNDLFVBQUQsRUFBYUMsVUFBYixFQUF5QmhELFdBQXpCLEVBQXNDQyxrQkFBdEMsQ0FBcEM7QUFDQSxLQVZZLENBQWI7QUFXQSxXQUFPbUQsSUFBUDtBQUNBOzs7O0FBQ00sV0FBUzFDLFlBQVQsQ0FBc0JWLFdBQXRCLEVBQXdDQyxrQkFBeEMsRUFBaUU7QUFDdkUsUUFBTXNELGNBQWMsR0FBR3ZELFdBQVcsQ0FBQ0ssT0FBWixHQUFzQm1ELGlCQUF0QixFQUF2QjtBQUNBLFFBQU1DLE9BQU8sR0FBRztBQUNmQyxNQUFBQSxrQkFBa0IsRUFBRSxJQURMO0FBRWZDLE1BQUFBLGtCQUFrQixFQUFFLElBRkw7QUFHZkMsTUFBQUEsaUJBQWlCLEVBQUUzRCxrQkFBa0IsS0FBSzRELFNBQXZCLEdBQW1DNUQsa0JBQW5DLEdBQXdEO0FBSDVELEtBQWhCO0FBTUEsV0FBT0QsV0FBVyxDQUFDOEQsUUFBWixDQUFxQkMsY0FBckIsQ0FBb0NSLGNBQXBDLEVBQW9ERSxPQUFwRCxDQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuXG5sZXQgZm5PbkRhdGFMb3NzQ29uZmlybWVkOiBGdW5jdGlvbjtcbmxldCBmbk9uRGF0YUxvc3NDYW5jZWw6IEZ1bmN0aW9uO1xuZnVuY3Rpb24gZm5EYXRhTG9zc0NvbmZpcm1hdGlvbihvbkRhdGFMb3NzQ29uZmlybWVkOiBhbnksIG9uRGF0YUxvc3NDYW5jZWw6IGFueSwgb0NvbnRyb2xsZXI6IGFueSwgYlNraXBCaW5kaW5nVG9WaWV3OiBhbnkpIHtcblx0bGV0IG9EYXRhTG9zc1BvcHVwOiBQb3B1cDtcblx0Zm5PbkRhdGFMb3NzQ29uZmlybWVkID0gb25EYXRhTG9zc0NvbmZpcm1lZDtcblx0Zm5PbkRhdGFMb3NzQ2FuY2VsID0gb25EYXRhTG9zc0NhbmNlbDtcblx0Y29uc3Qgc0ZyYWdtZW50bmFtZSA9IFwic2FwLmZlLmNvcmUuY29udHJvbHMuRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC5EYXRhTG9zc0RyYWZ0XCI7XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBmcmFnbWVudENvbnRyb2xsZXI6IGFueSA9IHtcblx0XHRvbkRhdGFMb3NzS2VlcERyYWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdG9EYXRhTG9zc1BvcHVwLmNsb3NlKCk7XG5cdFx0XHRmbk9uRGF0YUxvc3NDb25maXJtZWQoKTtcblx0XHR9LFxuXHRcdG9uRGF0YUxvc3NEaXNjYXJkRHJhZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0b0RhdGFMb3NzUG9wdXAuY2xvc2UoKTtcblx0XHRcdGRpc2NhcmREcmFmdChvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3KVxuXHRcdFx0XHQudGhlbihmbk9uRGF0YUxvc3NDb25maXJtZWQpXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbihvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGRpc2NhcmRpbmcgZHJhZnRcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblx0XHRvbkRhdGFMb3NzQ2FuY2VsOiBmdW5jdGlvbigpIHtcblx0XHRcdG9EYXRhTG9zc1BvcHVwLmNsb3NlKCk7XG5cdFx0XHRmbk9uRGF0YUxvc3NDYW5jZWwoKTtcblx0XHR9XG5cdH07XG5cdGZyYWdtZW50Q29udHJvbGxlci5zZXREYXRhTG9zc1BvcHVwID0gZnVuY3Rpb24ob0RhdGFMb3NzUG9wdXA6IFBvcHVwKSB7XG5cdFx0b0NvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cCA9IG9EYXRhTG9zc1BvcHVwO1xuXHR9O1xuXG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpZDogb1ZpZXcuZ2V0SWQoKVxuXHRcdH0pLFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcInRoaXNcIjogb1RoaXMuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFwidGhpc1wiOiBvVGhpcyxcblx0XHRcdFx0XCJ0aGlzLmkxOG5cIjogb1ZpZXcuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKVxuXHRcdFx0fVxuXHRcdH07XG5cdGNvbnN0IG9Qb3BvdmVyRnJhZ21lbnQgPSBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50bmFtZSwgXCJmcmFnbWVudFwiKTtcblxuXHRpZiAob0NvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cCkge1xuXHRcdG9EYXRhTG9zc1BvcHVwID0gb0NvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cDtcblx0XHRvRGF0YUxvc3NQb3B1cC5vcGVuKCk7XG5cdH0gZWxzZSB7XG5cdFx0UHJvbWlzZS5yZXNvbHZlKFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9Qb3BvdmVyRnJhZ21lbnQsIHsgbmFtZTogc0ZyYWdtZW50bmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24ob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoeyBkZWZpbml0aW9uOiBvRnJhZ21lbnQsIGNvbnRyb2xsZXI6IGZyYWdtZW50Q29udHJvbGxlciB9KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbihvUG9wdXA6IGFueSkge1xuXHRcdFx0XHRvRGF0YUxvc3NQb3B1cCA9IG9Qb3B1cDtcblx0XHRcdFx0b1ZpZXcuYWRkRGVwZW5kZW50KG9EYXRhTG9zc1BvcHVwKTtcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdFx0XHRvRGF0YUxvc3NQb3B1cC5zZXRNb2RlbChvTW9kZWwsIFwiZGF0YUxvc3NcIik7XG5cdFx0XHRcdGNvbnN0IG9pMThuTW9kZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKTtcblx0XHRcdFx0b0RhdGFMb3NzUG9wdXAuc2V0TW9kZWwob2kxOG5Nb2RlbCwgXCJpMThuXCIpO1xuXHRcdFx0XHRvRGF0YUxvc3NQb3B1cC5vcGVuKCk7XG5cdFx0XHRcdGZyYWdtZW50Q29udHJvbGxlci5zZXREYXRhTG9zc1BvcHVwKG9EYXRhTG9zc1BvcHVwKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgb3BlbmluZyB0aGUgRGlzY2FyZCBEaWFsb2cgZnJhZ21lbnRcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG59XG5mdW5jdGlvbiBmblBlcmZvcm1BZnRlckRpc2NhcmRvcktlZXBEcmFmdEltcGwoZm5Qb3NpdGl2ZTogYW55LCBmbk5lZ2F0aXZlOiBhbnksIG9Db250cm9sbGVyOiBhbnksIGJTa2lwQmluZGluZ1RvVmlldzogYW55KSB7XG5cdGZuRGF0YUxvc3NDb25maXJtYXRpb24oZm5Qb3NpdGl2ZSwgZm5OZWdhdGl2ZSwgb0NvbnRyb2xsZXIsIGJTa2lwQmluZGluZ1RvVmlldyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0KGZuUHJvY2Vzc0Z1bmN0aW9uOiBhbnksIGZuQ2FuY2VsRnVuY3Rpb246IGFueSwgb0NvbnRyb2xsZXI6IGFueSwgYlNraXBCaW5kaW5nVG9WaWV3OiBhbnkpIHtcblx0Y29uc3Qgb1JldCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBmblBvc2l0aXZlID0gZnVuY3Rpb24ob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1JldCA9IGZuUHJvY2Vzc0Z1bmN0aW9uKG9Db250ZXh0KTtcblx0XHRcdHJlc29sdmUob1JldCk7XG5cdFx0fTtcblx0XHRjb25zdCBmbk5lZ2F0aXZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRmbkNhbmNlbEZ1bmN0aW9uKCk7XG5cdFx0XHRyZWplY3QoKTtcblx0XHR9O1xuXHRcdGZuUGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0SW1wbChmblBvc2l0aXZlLCBmbk5lZ2F0aXZlLCBvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3KTtcblx0fSk7XG5cdHJldHVybiBvUmV0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpc2NhcmREcmFmdChvQ29udHJvbGxlcjogYW55LCBiU2tpcEJpbmRpbmdUb1ZpZXc6IGFueSkge1xuXHRjb25zdCBvUGFyYW1zQ29udGV4dCA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRjb25zdCBtUGFyYW1zID0ge1xuXHRcdHNraXBCYWNrTmF2aWdhdGlvbjogdHJ1ZSxcblx0XHRza2lwRGlzY2FyZFBvcG92ZXI6IHRydWUsXG5cdFx0c2tpcEJpbmRpbmdUb1ZpZXc6IGJTa2lwQmluZGluZ1RvVmlldyAhPT0gdW5kZWZpbmVkID8gYlNraXBCaW5kaW5nVG9WaWV3IDogdHJ1ZVxuXHR9O1xuXG5cdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvUGFyYW1zQ29udGV4dCwgbVBhcmFtcyk7XG59XG4iXX0=
166
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFMb3NzT3JEcmFmdERpc2NhcmRIYW5kbGVyLnRzIl0sIm5hbWVzIjpbIkRyYWZ0RGF0YUxvc3NPcHRpb25zIiwiZm5PbkRhdGFMb3NzQ29uZmlybWVkIiwiZm5PbkRhdGFMb3NzQ2FuY2VsIiwiZm5EYXRhTG9zc0NvbmZpcm1hdGlvbiIsIm9uRGF0YUxvc3NPayIsIm9uRGF0YUxvc3NDYW5jZWwiLCJjb250cm9sbGVyIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJkYXRhTG9zc1BvcHVwIiwiZnJhZ21lbnROYW1lIiwidmlldyIsImdldFZpZXciLCJmcmFnbWVudENvbnRyb2xsZXIiLCJzZWxlY3RlZEtleSIsImdldFNlbGVjdGVkS2V5IiwiU2F2ZSIsInNhdmVEb2N1bWVudCIsInRoZW4iLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiY2xvc2UiLCJLZWVwIiwiRGlzY2FyZCIsImRpc2NhcmREcmFmdCIsInNldERhdGFMb3NzUG9wdXAiLCJpMThuTW9kZWwiLCJnZXRNb2RlbCIsImxvY2FsVGhpc01vZGVsIiwiSlNPTk1vZGVsIiwicHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm1vZGVscyIsIm9wZW4iLCJzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkiLCJkaWFsb2dGcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJYTUxQcmVwcm9jZXNzb3IiLCJwcm9jZXNzIiwibmFtZSIsImZyYWdtZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsInBvcHVwIiwiYWRkRGVwZW5kZW50IiwicGVyZm9ybUFmdGVyRGlzY2FyZG9yS2VlcERyYWZ0IiwicHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc09rIiwicHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc0NhbmNlbCIsInJlamVjdCIsImRhdGFMb3NzUG9wdXBPayIsImNvbnRleHQiLCJyZXR1cm5WYWx1ZSIsImRhdGFMb3NzUG9wdXBDYW5jZWwiLCJnZXRCaW5kaW5nQ29udGV4dCIsInBhcmFtcyIsInNraXBCYWNrTmF2aWdhdGlvbiIsInNraXBEaXNjYXJkUG9wb3ZlciIsInVuZGVmaW5lZCIsImVkaXRGbG93IiwiY2FuY2VsRG9jdW1lbnQiLCJpc0EiLCJfc2F2ZURvY3VtZW50IiwiZGF0YUxvc3NPcHRpb25zTGlzdCIsImdldENvbnRlbnQiLCJmaW5kIiwiZWxlbWVudCIsImRhdGEiLCJnZXRTZWxlY3RlZEl0ZW0iLCJmaXJzdExpc3RJdGVtT3B0aW9uIiwiZ2V0SXRlbXMiLCJzZXRTZWxlY3RlZEl0ZW0iLCJmb2N1cyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O01BT0tBLG9COzthQUFBQSxvQjtBQUFBQSxJQUFBQSxvQjtBQUFBQSxJQUFBQSxvQjtBQUFBQSxJQUFBQSxvQjtLQUFBQSxvQixLQUFBQSxvQjs7QUFNTCxNQUFJQyxxQkFBSjtBQUNBLE1BQUlDLGtCQUFKOztBQUNBLFdBQVNDLHNCQUFULENBQWdDQyxZQUFoQyxFQUFtREMsZ0JBQW5ELEVBQTBFQyxVQUExRSxFQUEyRkMsaUJBQTNGLEVBQW1IO0FBQ2xIO0FBQ0E7QUFDQTtBQUNBLFFBQUlDLGFBQUo7QUFDQVAsSUFBQUEscUJBQXFCLEdBQUdHLFlBQXhCO0FBQ0FGLElBQUFBLGtCQUFrQixHQUFHRyxnQkFBckI7QUFDQSxRQUFNSSxZQUFZLEdBQUcsMkRBQXJCO0FBQ0EsUUFBTUMsSUFBSSxHQUFHSixVQUFVLENBQUNLLE9BQVgsRUFBYjtBQUNBLFFBQU1DLGtCQUF1QixHQUFHO0FBQy9CUixNQUFBQSxZQUFZLEVBQUUsWUFBWTtBQUN6QixZQUFNUyxXQUFXLEdBQUdDLGNBQWMsQ0FBQ04sYUFBRCxDQUFsQzs7QUFDQSxZQUFJSyxXQUFXLEtBQUtiLG9CQUFvQixDQUFDZSxJQUF6QyxFQUErQztBQUM5Q0MsVUFBQUEsWUFBWSxDQUFDVixVQUFELENBQVosQ0FDRVcsSUFERixDQUNP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bXBvcnQgQ3VzdG9tTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0N1c3RvbUxpc3RJdGVtXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbmVudW0gRHJhZnREYXRhTG9zc09wdGlvbnMge1xuXHRTYXZlID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uU2F2ZVwiLFxuXHRLZWVwID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uS2VlcFwiLFxuXHREaXNjYXJkID0gXCJkcmFmdERhdGFMb3NzT3B0aW9uRGlzY2FyZFwiXG59XG5cbmxldCBmbk9uRGF0YUxvc3NDb25maXJtZWQ6IEZ1bmN0aW9uO1xubGV0IGZuT25EYXRhTG9zc0NhbmNlbDogRnVuY3Rpb247XG5mdW5jdGlvbiBmbkRhdGFMb3NzQ29uZmlybWF0aW9uKG9uRGF0YUxvc3NPazogYW55LCBvbkRhdGFMb3NzQ2FuY2VsOiBhbnksIGNvbnRyb2xsZXI6IGFueSwgc2tpcEJpbmRpbmdUb1ZpZXc6IGFueSkge1xuXHQvLyBPcGVuIHRoZSBkYXRhIGxvc3MgcG9wdXAgYW5kIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHNlbGVjdGVkIGZ1bmN0aW9uIGZpbmFsbHkgY2FsbFxuXHQvLyBvbkRhdGFMb3NzQ29uZmlybWVkIHdoaWNoIHJlc29sdmVzIHRoZSBwcm9taXNlIGFuZCBsZWFkcyB0byBwcm9jZXNzaW5nIG9mIHRoZSBvcmlnaW5hbGx5XG5cdC8vIHRyaWdnZXJlZCBhY3Rpb24gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uXG5cdGxldCBkYXRhTG9zc1BvcHVwOiBEaWFsb2c7XG5cdGZuT25EYXRhTG9zc0NvbmZpcm1lZCA9IG9uRGF0YUxvc3NPaztcblx0Zm5PbkRhdGFMb3NzQ2FuY2VsID0gb25EYXRhTG9zc0NhbmNlbDtcblx0Y29uc3QgZnJhZ21lbnROYW1lID0gXCJzYXAuZmUuY29yZS5jb250cm9scy5EYXRhTG9zc09yRHJhZnREaXNjYXJkLkRhdGFMb3NzRHJhZnRcIjtcblx0Y29uc3QgdmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBmcmFnbWVudENvbnRyb2xsZXI6IGFueSA9IHtcblx0XHRvbkRhdGFMb3NzT2s6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkS2V5ID0gZ2V0U2VsZWN0ZWRLZXkoZGF0YUxvc3NQb3B1cCk7XG5cdFx0XHRpZiAoc2VsZWN0ZWRLZXkgPT09IERyYWZ0RGF0YUxvc3NPcHRpb25zLlNhdmUpIHtcblx0XHRcdFx0c2F2ZURvY3VtZW50KGNvbnRyb2xsZXIpXG5cdFx0XHRcdFx0LnRoZW4oZm5PbkRhdGFMb3NzQ29uZmlybWVkKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2F2aW5nIGRvY3VtZW50XCIsIGVycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0ZGF0YUxvc3NQb3B1cC5jbG9zZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChzZWxlY3RlZEtleSA9PT0gRHJhZnREYXRhTG9zc09wdGlvbnMuS2VlcCkge1xuXHRcdFx0XHRmbk9uRGF0YUxvc3NDb25maXJtZWQoKTtcblx0XHRcdFx0ZGF0YUxvc3NQb3B1cC5jbG9zZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChzZWxlY3RlZEtleSA9PT0gRHJhZnREYXRhTG9zc09wdGlvbnMuRGlzY2FyZCkge1xuXHRcdFx0XHRkaXNjYXJkRHJhZnQoY29udHJvbGxlciwgc2tpcEJpbmRpbmdUb1ZpZXcpXG5cdFx0XHRcdFx0LnRoZW4oZm5PbkRhdGFMb3NzQ29uZmlybWVkKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZGlzY2FyZGluZyBkcmFmdFwiLCBlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGRhdGFMb3NzUG9wdXAuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uRGF0YUxvc3NDYW5jZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdGZuT25EYXRhTG9zc0NhbmNlbCgpO1xuXHRcdFx0ZGF0YUxvc3NQb3B1cC5jbG9zZSgpO1xuXHRcdH0sXG5cdFx0c2V0RGF0YUxvc3NQb3B1cDogZnVuY3Rpb24gKGRhdGFMb3NzUG9wdXA6IERpYWxvZykge1xuXHRcdFx0Y29udHJvbGxlci5kYXRhTG9zc1BvcHVwID0gZGF0YUxvc3NQb3B1cDtcblx0XHR9XG5cdH07XG5cblx0Y29uc3QgaTE4bk1vZGVsID0gdmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpO1xuXHRjb25zdCBsb2NhbFRoaXNNb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pLFxuXHRcdHByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFwidGhpc1wiOiBsb2NhbFRoaXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XCJ0aGlzXCI6IGxvY2FsVGhpc01vZGVsLFxuXHRcdFx0XHRcImkxOG5cIjogaTE4bk1vZGVsXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRpZiAoY29udHJvbGxlci5kYXRhTG9zc1BvcHVwKSB7XG5cdFx0ZGF0YUxvc3NQb3B1cCA9IGNvbnRyb2xsZXIuZGF0YUxvc3NQb3B1cDtcblx0XHRkYXRhTG9zc1BvcHVwLm9wZW4oKTtcblx0XHRzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoZGF0YUxvc3NQb3B1cCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZGlhbG9nRnJhZ21lbnQgPSBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoZnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdFByb21pc2UucmVzb2x2ZShYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhkaWFsb2dGcmFnbWVudCwgeyBuYW1lOiBmcmFnbWVudE5hbWUgfSwgcHJlcHJvY2Vzc29yU2V0dGluZ3MpKVxuXHRcdFx0LnRoZW4oKGZyYWdtZW50KSA9PiB7XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHsgZGVmaW5pdGlvbjogZnJhZ21lbnQsIGNvbnRyb2xsZXI6IGZyYWdtZW50Q29udHJvbGxlciB9KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigocG9wdXA6IGFueSkgPT4ge1xuXHRcdFx0XHRkYXRhTG9zc1BvcHVwID0gcG9wdXA7XG5cdFx0XHRcdHZpZXcuYWRkRGVwZW5kZW50KGRhdGFMb3NzUG9wdXApO1xuXHRcdFx0XHRkYXRhTG9zc1BvcHVwLm9wZW4oKTtcblx0XHRcdFx0c2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KGRhdGFMb3NzUG9wdXApO1xuXHRcdFx0XHRmcmFnbWVudENvbnRyb2xsZXIuc2V0RGF0YUxvc3NQb3B1cChkYXRhTG9zc1BvcHVwKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgb3BlbmluZyB0aGUgRGlzY2FyZCBEaWFsb2cgZnJhZ21lbnRcIiwgZXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1BZnRlckRpc2NhcmRvcktlZXBEcmFmdChcblx0cHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc09rOiBhbnksXG5cdHByb2Nlc3NGdW5jdGlvbk9uRGF0YWxvc3NDYW5jZWw6IGFueSxcblx0Y29udHJvbGxlcjogYW55LFxuXHRza2lwQmluZGluZ1RvVmlldzogYW55XG4pIHtcblx0Ly8gRGVwZW5kaW5nIG9uIGlmIHRoZSB1c2VyIGNsb3NlZCB0aGUgZGF0YSBsb3NzIHBvcHVwIHdpdGggT2sgb3IgQ2FuY2VsLFxuXHQvLyBleGVjdXRlIHRoZSBwcm92aWRlZCBmb2xsb3ctdXAgZnVuY3Rpb24gYW5kIHJlc29sdmUgb3IgcmVqZWN0IHRoZSBwcm9taXNlXG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IGRhdGFMb3NzUG9wdXBPayA9IGZ1bmN0aW9uIChjb250ZXh0OiBhbnkpIHtcblx0XHRcdGNvbnN0IHJldHVyblZhbHVlID0gcHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc09rKGNvbnRleHQpO1xuXHRcdFx0cmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG5cdFx0fTtcblx0XHRjb25zdCBkYXRhTG9zc1BvcHVwQ2FuY2VsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJvY2Vzc0Z1bmN0aW9uT25EYXRhbG9zc0NhbmNlbCgpO1xuXHRcdFx0cmVqZWN0KCk7XG5cdFx0fTtcblx0XHRmbkRhdGFMb3NzQ29uZmlybWF0aW9uKGRhdGFMb3NzUG9wdXBPaywgZGF0YUxvc3NQb3B1cENhbmNlbCwgY29udHJvbGxlciwgc2tpcEJpbmRpbmdUb1ZpZXcpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2NhcmREcmFmdChjb250cm9sbGVyOiBhbnksIHNraXBCaW5kaW5nVG9WaWV3OiBhbnkpIHtcblx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRza2lwQmFja05hdmlnYXRpb246IHRydWUsXG5cdFx0c2tpcERpc2NhcmRQb3BvdmVyOiB0cnVlLFxuXHRcdHNraXBCaW5kaW5nVG9WaWV3OiBza2lwQmluZGluZ1RvVmlldyAhPT0gdW5kZWZpbmVkID8gc2tpcEJpbmRpbmdUb1ZpZXcgOiB0cnVlXG5cdH07XG5cdHJldHVybiBjb250cm9sbGVyLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KGNvbnRleHQsIHBhcmFtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRG9jdW1lbnQoY29udHJvbGxlcjogYW55KSB7XG5cdGNvbnN0IGNvbnRleHQgPSBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHQvLyBXZSBjaGVjayBpZiB3ZSBhcmUgb24gdGhlIE9QIGFuZCB0aGVuIGNhbGwgdGhlIGludGVybmFsIF9zYXZlRG9jdW1lbnQgZnJvbSB0aGUgT1AgY29udHJvbGxlclxuXHQvLyBzaW5jZSBoZXJlIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBpcyBkb25lIGZvciBjcmVhdGlvblJvdyBiZWZvcmUgZWRpdEZsb3cuc2F2ZURvY3VtZW50IGlzIGNhbGxlZC5cblx0Ly8gSW4gY2FzZSBvZiBhIGN1c3RvbSBjb250cm9sbGVyIHdlIGRpcmVjdGx5IGNhbGwgc2F2ZURvY3VtZW50IGZyb20gdGhlIGVkaXRGbG93XG5cdGlmIChjb250cm9sbGVyLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKSkge1xuXHRcdHJldHVybiBjb250cm9sbGVyLl9zYXZlRG9jdW1lbnQoY29udGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29udHJvbGxlci5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkS2V5KGRhdGFMb3NzUG9wdXA6IERpYWxvZykge1xuXHQvLyBGb3Igbm90IHVzaW5nIGNvbnRyb2wgSURzIHdlIGludHJvZHVjZWQgY3VzdG9tRGF0YSBpbiB0aGUgZnJhZ21lbnQgYW5kXG5cdC8vIHVzZSBpdCBoZXJlIGZvciBmaW5kaW5nIHRoZSBjb3JyZWN0IGxpc3QgaW4gdGhlIGRpYWxvZyBhbmQgZm9yXG5cdC8vIGRldGVybWluaW5nIHRoZSBzZWxlY3RlZCBvcHRpb24gZnJvbSB0aGUgbGlzdFxuXHRjb25zdCBkYXRhTG9zc09wdGlvbnNMaXN0OiBMaXN0ID0gZGF0YUxvc3NQb3B1cFxuXHRcdC5nZXRDb250ZW50KClcblx0XHQuZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5kYXRhKFwibGlzdElkZW50aWZpZXJcIikgPT09IFwiZHJhZnREYXRhTG9zc09wdGlvbnNMaXN0XCIpIGFzIExpc3Q7XG5cdHJldHVybiBkYXRhTG9zc09wdGlvbnNMaXN0LmdldFNlbGVjdGVkSXRlbSgpLmRhdGEoXCJpdGVtS2V5XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KGRhdGFMb3NzUG9wdXA6IERpYWxvZykge1xuXHQvLyBGb3Igbm90IHVzaW5nIGNvbnRyb2wgSURzIHdlIGludHJvZHVjZWQgY3VzdG9tRGF0YSBpbiB0aGUgZnJhZ21lbnQgYW5kXG5cdC8vIHVzZSBpdCBoZXJlIGZvciBmaW5kaW5nIHRoZSBjb3JyZWN0IGxpc3QgaW4gdGhlIGRpYWxvZy5cblx0Y29uc3QgZGF0YUxvc3NPcHRpb25zTGlzdDogTGlzdCA9IGRhdGFMb3NzUG9wdXBcblx0XHQuZ2V0Q29udGVudCgpXG5cdFx0LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQuZGF0YShcImxpc3RJZGVudGlmaWVyXCIpID09PSBcImRyYWZ0RGF0YUxvc3NPcHRpb25zTGlzdFwiKSBhcyBMaXN0O1xuXHRjb25zdCBmaXJzdExpc3RJdGVtT3B0aW9uOiBDdXN0b21MaXN0SXRlbSA9IGRhdGFMb3NzT3B0aW9uc0xpc3QuZ2V0SXRlbXMoKVswXSBhcyBDdXN0b21MaXN0SXRlbTtcblx0ZGF0YUxvc3NPcHRpb25zTGlzdC5zZXRTZWxlY3RlZEl0ZW0oZmlyc3RMaXN0SXRlbU9wdGlvbik7XG5cdGZpcnN0TGlzdEl0ZW1PcHRpb24uZm9jdXMoKTtcbn1cbiJdfQ==
@@ -1,101 +1,155 @@
1
1
  import Log from "sap/base/Log";
2
- import JSONModel from "sap/ui/model/json/JSONModel";
3
- import XMLTemplateProcessor from "sap/ui/core/XMLTemplateProcessor";
4
- import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
2
+ import CustomListItem from "sap/m/CustomListItem";
3
+ import Dialog from "sap/m/Dialog";
4
+ import List from "sap/m/List";
5
5
  import Fragment from "sap/ui/core/Fragment";
6
- import Popup from "sap/ui/core/Popup";
6
+ import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
7
+ import XMLTemplateProcessor from "sap/ui/core/XMLTemplateProcessor";
8
+ import JSONModel from "sap/ui/model/json/JSONModel";
9
+
10
+ enum DraftDataLossOptions {
11
+ Save = "draftDataLossOptionSave",
12
+ Keep = "draftDataLossOptionKeep",
13
+ Discard = "draftDataLossOptionDiscard"
14
+ }
7
15
 
8
16
  let fnOnDataLossConfirmed: Function;
9
17
  let fnOnDataLossCancel: Function;
10
- function fnDataLossConfirmation(onDataLossConfirmed: any, onDataLossCancel: any, oController: any, bSkipBindingToView: any) {
11
- let oDataLossPopup: Popup;
12
- fnOnDataLossConfirmed = onDataLossConfirmed;
18
+ function fnDataLossConfirmation(onDataLossOk: any, onDataLossCancel: any, controller: any, skipBindingToView: any) {
19
+ // Open the data loss popup and after processing the selected function finally call
20
+ // onDataLossConfirmed which resolves the promise and leads to processing of the originally
21
+ // triggered action like e.g. a back navigation
22
+ let dataLossPopup: Dialog;
23
+ fnOnDataLossConfirmed = onDataLossOk;
13
24
  fnOnDataLossCancel = onDataLossCancel;
14
- const sFragmentname = "sap.fe.core.controls.DataLossOrDraftDiscard.DataLossDraft";
15
- const oView = oController.getView();
25
+ const fragmentName = "sap.fe.core.controls.DataLossOrDraftDiscard.DataLossDraft";
26
+ const view = controller.getView();
16
27
  const fragmentController: any = {
17
- onDataLossKeepDraft: function() {
18
- oDataLossPopup.close();
19
- fnOnDataLossConfirmed();
20
- },
21
- onDataLossDiscardDraft: function() {
22
- oDataLossPopup.close();
23
- discardDraft(oController, bSkipBindingToView)
24
- .then(fnOnDataLossConfirmed)
25
- .catch(function(oError: any) {
26
- Log.error("Error while discarding draft", oError);
27
- });
28
+ onDataLossOk: function () {
29
+ const selectedKey = getSelectedKey(dataLossPopup);
30
+ if (selectedKey === DraftDataLossOptions.Save) {
31
+ saveDocument(controller)
32
+ .then(fnOnDataLossConfirmed)
33
+ .catch(function (error: any) {
34
+ Log.error("Error while saving document", error);
35
+ });
36
+ dataLossPopup.close();
37
+ } else if (selectedKey === DraftDataLossOptions.Keep) {
38
+ fnOnDataLossConfirmed();
39
+ dataLossPopup.close();
40
+ } else if (selectedKey === DraftDataLossOptions.Discard) {
41
+ discardDraft(controller, skipBindingToView)
42
+ .then(fnOnDataLossConfirmed)
43
+ .catch(function (error: any) {
44
+ Log.error("Error while discarding draft", error);
45
+ });
46
+ dataLossPopup.close();
47
+ }
28
48
  },
29
- onDataLossCancel: function() {
30
- oDataLossPopup.close();
49
+ onDataLossCancel: function () {
31
50
  fnOnDataLossCancel();
51
+ dataLossPopup.close();
52
+ },
53
+ setDataLossPopup: function (dataLossPopup: Dialog) {
54
+ controller.dataLossPopup = dataLossPopup;
32
55
  }
33
56
  };
34
- fragmentController.setDataLossPopup = function(oDataLossPopup: Popup) {
35
- oController.dataLossPopup = oDataLossPopup;
36
- };
37
57
 
38
- const oThis = new JSONModel({
39
- id: oView.getId()
40
- }),
41
- oPreprocessorSettings = {
58
+ const i18nModel = view.getModel("sap.fe.i18n");
59
+ const localThisModel = new JSONModel({}),
60
+ preprocessorSettings = {
42
61
  bindingContexts: {
43
- "this": oThis.createBindingContext("/")
62
+ "this": localThisModel.createBindingContext("/")
44
63
  },
45
64
  models: {
46
- "this": oThis,
47
- "this.i18n": oView.getModel("sap.fe.i18n")
65
+ "this": localThisModel,
66
+ "i18n": i18nModel
48
67
  }
49
68
  };
50
- const oPopoverFragment = XMLTemplateProcessor.loadTemplate(sFragmentname, "fragment");
51
69
 
52
- if (oController.dataLossPopup) {
53
- oDataLossPopup = oController.dataLossPopup;
54
- oDataLossPopup.open();
70
+ if (controller.dataLossPopup) {
71
+ dataLossPopup = controller.dataLossPopup;
72
+ dataLossPopup.open();
73
+ selectAndFocusFirstEntry(dataLossPopup);
55
74
  } else {
56
- Promise.resolve(XMLPreprocessor.process(oPopoverFragment, { name: sFragmentname }, oPreprocessorSettings))
57
- .then(function(oFragment: any) {
58
- return Fragment.load({ definition: oFragment, controller: fragmentController });
75
+ const dialogFragment = XMLTemplateProcessor.loadTemplate(fragmentName, "fragment");
76
+ Promise.resolve(XMLPreprocessor.process(dialogFragment, { name: fragmentName }, preprocessorSettings))
77
+ .then((fragment) => {
78
+ return Fragment.load({ definition: fragment, controller: fragmentController });
59
79
  })
60
- .then(function(oPopup: any) {
61
- oDataLossPopup = oPopup;
62
- oView.addDependent(oDataLossPopup);
63
- const oModel = new JSONModel();
64
- oDataLossPopup.setModel(oModel, "dataLoss");
65
- const oi18nModel = oController.getView().getModel("sap.fe.i18n");
66
- oDataLossPopup.setModel(oi18nModel, "i18n");
67
- oDataLossPopup.open();
68
- fragmentController.setDataLossPopup(oDataLossPopup);
80
+ .then((popup: any) => {
81
+ dataLossPopup = popup;
82
+ view.addDependent(dataLossPopup);
83
+ dataLossPopup.open();
84
+ selectAndFocusFirstEntry(dataLossPopup);
85
+ fragmentController.setDataLossPopup(dataLossPopup);
69
86
  })
70
- .catch(function(oError: any) {
71
- Log.error("Error while opening the Discard Dialog fragment", oError);
87
+ .catch(function (error: any) {
88
+ Log.error("Error while opening the Discard Dialog fragment", error);
72
89
  });
73
90
  }
74
91
  }
75
- function fnPerformAfterDiscardorKeepDraftImpl(fnPositive: any, fnNegative: any, oController: any, bSkipBindingToView: any) {
76
- fnDataLossConfirmation(fnPositive, fnNegative, oController, bSkipBindingToView);
77
- }
78
- export function performAfterDiscardorKeepDraft(fnProcessFunction: any, fnCancelFunction: any, oController: any, bSkipBindingToView: any) {
79
- const oRet = new Promise(function(resolve: (value: any) => void, reject: (reason?: any) => void) {
80
- const fnPositive = function(oContext: any) {
81
- const oRet = fnProcessFunction(oContext);
82
- resolve(oRet);
92
+
93
+ export function performAfterDiscardorKeepDraft(
94
+ processFunctionOnDatalossOk: any,
95
+ processFunctionOnDatalossCancel: any,
96
+ controller: any,
97
+ skipBindingToView: any
98
+ ) {
99
+ // Depending on if the user closed the data loss popup with Ok or Cancel,
100
+ // execute the provided follow-up function and resolve or reject the promise
101
+ return new Promise(function (resolve: (value: any) => void, reject: (reason?: any) => void) {
102
+ const dataLossPopupOk = function (context: any) {
103
+ const returnValue = processFunctionOnDatalossOk(context);
104
+ resolve(returnValue);
83
105
  };
84
- const fnNegative = function() {
85
- fnCancelFunction();
106
+ const dataLossPopupCancel = function () {
107
+ processFunctionOnDatalossCancel();
86
108
  reject();
87
109
  };
88
- fnPerformAfterDiscardorKeepDraftImpl(fnPositive, fnNegative, oController, bSkipBindingToView);
110
+ fnDataLossConfirmation(dataLossPopupOk, dataLossPopupCancel, controller, skipBindingToView);
89
111
  });
90
- return oRet;
91
112
  }
92
- export function discardDraft(oController: any, bSkipBindingToView: any) {
93
- const oParamsContext = oController.getView().getBindingContext();
94
- const mParams = {
113
+
114
+ export function discardDraft(controller: any, skipBindingToView: any) {
115
+ const context = controller.getView().getBindingContext();
116
+ const params = {
95
117
  skipBackNavigation: true,
96
118
  skipDiscardPopover: true,
97
- skipBindingToView: bSkipBindingToView !== undefined ? bSkipBindingToView : true
119
+ skipBindingToView: skipBindingToView !== undefined ? skipBindingToView : true
98
120
  };
121
+ return controller.editFlow.cancelDocument(context, params);
122
+ }
123
+
124
+ export function saveDocument(controller: any) {
125
+ const context = controller.getView().getBindingContext();
126
+ // We check if we are on the OP and then call the internal _saveDocument from the OP controller
127
+ // since here some special handling is done for creationRow before editFlow.saveDocument is called.
128
+ // In case of a custom controller we directly call saveDocument from the editFlow
129
+ if (controller.isA("sap.fe.templates.ObjectPage.ObjectPageController")) {
130
+ return controller._saveDocument(context);
131
+ } else {
132
+ controller.editFlow.saveDocument(context);
133
+ }
134
+ }
135
+
136
+ export function getSelectedKey(dataLossPopup: Dialog) {
137
+ // For not using control IDs we introduced customData in the fragment and
138
+ // use it here for finding the correct list in the dialog and for
139
+ // determining the selected option from the list
140
+ const dataLossOptionsList: List = dataLossPopup
141
+ .getContent()
142
+ .find((element) => element.data("listIdentifier") === "draftDataLossOptionsList") as List;
143
+ return dataLossOptionsList.getSelectedItem().data("itemKey");
144
+ }
99
145
 
100
- return oController.editFlow.cancelDocument(oParamsContext, mParams);
146
+ export function selectAndFocusFirstEntry(dataLossPopup: Dialog) {
147
+ // For not using control IDs we introduced customData in the fragment and
148
+ // use it here for finding the correct list in the dialog.
149
+ const dataLossOptionsList: List = dataLossPopup
150
+ .getContent()
151
+ .find((element) => element.data("listIdentifier") === "draftDataLossOptionsList") as List;
152
+ const firstListItemOption: CustomListItem = dataLossOptionsList.getItems()[0] as CustomListItem;
153
+ dataLossOptionsList.setSelectedItem(firstListItemOption);
154
+ firstListItemOption.focus();
101
155
  }