@sapui5/sap.fe.core 1.97.0 → 1.99.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/package.json +5 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +6 -3
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2379
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +16 -7
  14. package/src/sap/fe/core/PageController.js +84 -119
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -807
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -155
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +64 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1579
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +560 -581
  27. package/src/sap/fe/core/actions/draft.ts +594 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -511
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1211
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +229 -260
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -23
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +82 -46
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +113 -25
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +135 -44
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +22 -9
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
  50. package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +22 -8
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
  57. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  58. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  59. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  60. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
  61. package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
  62. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  63. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
  64. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  65. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  66. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  67. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  68. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  69. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  70. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  71. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  72. package/src/sap/fe/core/converters/ConverterContext.js +14 -2
  73. package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
  74. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  75. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
  76. package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
  77. package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
  78. package/src/sap/fe/core/converters/MetaModelConverter.js +67 -6
  79. package/src/sap/fe/core/converters/MetaModelConverter.ts +70 -14
  80. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  81. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  82. package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
  83. package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
  84. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  85. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  86. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  87. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  88. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  89. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  90. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  91. package/src/sap/fe/core/converters/controls/Common/Form.js +20 -10
  92. package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -4
  93. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  94. package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
  95. package/src/sap/fe/core/converters/controls/Common/Table.js +390 -398
  96. package/src/sap/fe/core/converters/controls/Common/Table.ts +497 -484
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
  101. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  102. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  104. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  105. package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
  106. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  107. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  108. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  110. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  112. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  113. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
  114. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  118. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  119. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  120. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  121. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  122. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  123. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  124. package/src/sap/fe/core/fpm/Component.js +3 -2
  125. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  126. package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
  127. package/src/sap/fe/core/helpers/BindingExpression.js +484 -437
  128. package/src/sap/fe/core/helpers/BindingExpression.ts +480 -463
  129. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  130. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  131. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  132. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  133. package/src/sap/fe/core/helpers/EditState.js +81 -84
  134. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  135. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  136. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  137. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  138. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  139. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  140. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  141. package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
  142. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  143. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  144. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  145. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  146. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  147. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  148. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  149. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  150. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  151. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  152. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  153. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  154. package/src/sap/fe/core/library.js +30 -3
  155. package/src/sap/fe/core/library.support.js +12 -5
  156. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  157. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  158. package/src/sap/fe/core/messagebundle.properties +61 -13
  159. package/src/sap/fe/core/messagebundle_ar.properties +33 -2
  160. package/src/sap/fe/core/messagebundle_bg.properties +33 -2
  161. package/src/sap/fe/core/messagebundle_ca.properties +33 -2
  162. package/src/sap/fe/core/messagebundle_cs.properties +34 -3
  163. package/src/sap/fe/core/messagebundle_cy.properties +33 -2
  164. package/src/sap/fe/core/messagebundle_da.properties +33 -2
  165. package/src/sap/fe/core/messagebundle_de.properties +33 -2
  166. package/src/sap/fe/core/messagebundle_el.properties +33 -2
  167. package/src/sap/fe/core/messagebundle_en.properties +32 -1
  168. package/src/sap/fe/core/messagebundle_en_GB.properties +32 -1
  169. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +36 -1
  170. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +33 -2
  171. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +33 -2
  172. package/src/sap/fe/core/messagebundle_es.properties +33 -2
  173. package/src/sap/fe/core/messagebundle_es_MX.properties +33 -2
  174. package/src/sap/fe/core/messagebundle_et.properties +33 -2
  175. package/src/sap/fe/core/messagebundle_fi.properties +34 -3
  176. package/src/sap/fe/core/messagebundle_fr.properties +38 -7
  177. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -2
  178. package/src/sap/fe/core/messagebundle_hi.properties +33 -2
  179. package/src/sap/fe/core/messagebundle_hr.properties +33 -2
  180. package/src/sap/fe/core/messagebundle_hu.properties +34 -3
  181. package/src/sap/fe/core/messagebundle_id.properties +36 -5
  182. package/src/sap/fe/core/messagebundle_it.properties +33 -2
  183. package/src/sap/fe/core/messagebundle_iw.properties +33 -2
  184. package/src/sap/fe/core/messagebundle_ja.properties +33 -2
  185. package/src/sap/fe/core/messagebundle_kk.properties +33 -2
  186. package/src/sap/fe/core/messagebundle_ko.properties +33 -2
  187. package/src/sap/fe/core/messagebundle_lt.properties +33 -2
  188. package/src/sap/fe/core/messagebundle_lv.properties +33 -2
  189. package/src/sap/fe/core/messagebundle_ms.properties +33 -2
  190. package/src/sap/fe/core/messagebundle_nl.properties +33 -2
  191. package/src/sap/fe/core/messagebundle_no.properties +33 -2
  192. package/src/sap/fe/core/messagebundle_pl.properties +33 -2
  193. package/src/sap/fe/core/messagebundle_pt.properties +34 -3
  194. package/src/sap/fe/core/messagebundle_pt_PT.properties +33 -2
  195. package/src/sap/fe/core/messagebundle_ro.properties +33 -2
  196. package/src/sap/fe/core/messagebundle_ru.properties +33 -2
  197. package/src/sap/fe/core/messagebundle_sh.properties +33 -2
  198. package/src/sap/fe/core/messagebundle_sk.properties +33 -2
  199. package/src/sap/fe/core/messagebundle_sl.properties +33 -2
  200. package/src/sap/fe/core/messagebundle_sv.properties +34 -3
  201. package/src/sap/fe/core/messagebundle_th.properties +33 -2
  202. package/src/sap/fe/core/messagebundle_tr.properties +33 -2
  203. package/src/sap/fe/core/messagebundle_uk.properties +33 -2
  204. package/src/sap/fe/core/messagebundle_vi.properties +33 -2
  205. package/src/sap/fe/core/messagebundle_zh_CN.properties +33 -2
  206. package/src/sap/fe/core/messagebundle_zh_TW.properties +33 -2
  207. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  208. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  209. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  210. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  211. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  212. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
  213. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  214. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  215. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  216. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  217. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1152
  218. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  219. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  220. package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
  221. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +42 -85
  222. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +57 -100
  223. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
  224. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  225. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  226. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  227. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  228. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  229. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  230. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  231. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  232. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  233. package/src/sap/fe/core/templating/DataModelPathHelper.js +10 -48
  234. package/src/sap/fe/core/templating/DataModelPathHelper.ts +14 -46
  235. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  236. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  237. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  238. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  239. package/src/sap/fe/core/templating/FilterHelper.js +139 -70
  240. package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
  241. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  242. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  243. package/src/sap/fe/core/templating/UIFormatters.js +45 -110
  244. package/src/sap/fe/core/templating/UIFormatters.ts +39 -75
  245. package/src/sap/fe/core/type/Email.js +1 -1
  246. package/src/sap/fe/core/type/Email.ts +4 -6
  247. package/ui5.yaml +0 -3
  248. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  249. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -1,183 +1,231 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(
6
- [
7
- "sap/ui/mdc/p13n/StateUtil",
8
- "sap/ui/base/Object",
9
- "sap/fe/core/library",
10
- "sap/fe/navigation/library",
11
- "sap/fe/core/CommonUtils",
12
- "sap/ui/fl/apply/api/ControlVariantApplyAPI",
13
- "sap/base/Log",
14
- "sap/base/util/merge",
15
- "sap/base/util/deepEqual",
16
- "sap/fe/core/BusyLocker"
17
- ],
18
- function(StateUtil, BaseObject, CoreLibrary, NavLibrary, CommonUtils, ControlVariantApplyAPI, Log, merge, deepEqual, BusyLocker) {
19
- "use strict";
20
-
21
- var NavType = NavLibrary.NavType;
22
-
23
- function _toES6Promise(oThenable) {
24
- return Promise.resolve(
25
- oThenable
26
- .then(function() {
27
- return Array.prototype.slice.call(arguments);
28
- })
29
- .catch(function() {
30
- return Array.prototype.slice.call(arguments);
31
- })
32
- );
33
- }
34
-
35
- var AppStateHandler = BaseObject.extend("sap.fe.core.AppStateHandler", {
36
- constructor: function(oAppComponent) {
37
- this.oAppComponent = oAppComponent;
38
- this.sId = oAppComponent.getId() + "/AppStateHandler";
39
-
40
- this.bNoRouteChange = false;
41
- Log.info("APPSTATE : Appstate handler initialized");
42
- return BaseObject.apply(this, arguments);
43
- },
44
- getId: function() {
45
- return this.sId;
46
- },
47
- /**
48
- * Creates/updates the appstate.
49
- *
50
- * @returns {Promise} A promise resolving the stored data
51
- * @ui5-restricted
52
- */
53
- createAppState: function() {
54
- if (BusyLocker.isLocked(this)) {
55
- return Promise.resolve();
56
- }
57
-
58
- var oNavigationService = this.oAppComponent.getNavigationService(),
59
- oRouterProxy = this.oAppComponent.getRouterProxy(),
60
- sHash = oRouterProxy.getHash(),
61
- oController = this.oAppComponent.getRootControl().getController(),
62
- that = this;
63
-
64
- if (!oController.viewState) {
65
- return Promise.reject(
66
- "viewState controller extension not available for controller: " + oController.getMetadata().getName()
67
- );
68
- }
69
-
70
- return oController.viewState.retrieveViewState().then(function(mInnerAppState) {
71
- var oStoreData = { appState: mInnerAppState };
72
- if (mInnerAppState && !deepEqual(that._mCurrentAppState, mInnerAppState)) {
73
- that._mCurrentAppState = mInnerAppState;
74
- var oAppState = oNavigationService.storeInnerAppStateWithImmediateReturn(oStoreData, true);
75
- Log.info("APPSTATE: Appstate stored");
76
- var sAppStateKey = oAppState.appStateKey;
77
- var sNewHash = oNavigationService.replaceInnerAppStateKey(sHash, sAppStateKey);
78
- if (sNewHash !== sHash) {
79
- oRouterProxy.navToHash(sNewHash);
80
- that.bNoRouteChange = true;
81
- }
82
- Log.info("APPSTATE: navToHash");
83
- }
84
- return oStoreData;
85
- });
86
- },
87
-
88
- _createNavigationParameters: function(oAppData, sNavType) {
89
- return Object.assign({}, oAppData, {
90
- selectionVariantDefaults: oAppData.oDefaultedSelectionVariant,
91
- selectionVariant: oAppData.oSelectionVariant,
92
- requiresStandardVariant: !oAppData.bNavSelVarHasDefaultsOnly,
93
- navigationType: sNavType
94
- });
95
- },
96
-
97
- /**
98
- * Applies an appstate by fetching appdata and passing it to _applyAppstateToPage.
99
- *
100
- * @function
101
- * @static
102
- * @memberof sap.fe.core.AppStateHandler
103
- * @returns {Promise} A promise for async handling
104
- * @private
105
- * @ui5-restricted
106
- **/
107
- applyAppState: function() {
108
- if (BusyLocker.isLocked(this)) {
109
- return Promise.resolve();
110
- }
111
- BusyLocker.lock(this);
112
- // Done for busy indicator
113
- BusyLocker.lock(this.oAppComponent.getRootControl());
114
-
115
- var that = this,
116
- oNavigationService = this.oAppComponent.getNavigationService();
117
- // TODO oNavigationService.parseNavigation() should return ES6 promise instead jQuery.promise
118
- return _toES6Promise(oNavigationService.parseNavigation())
119
- .catch(function(aErrorData) {
120
- if (!aErrorData) {
121
- aErrorData = [];
122
- }
123
- Log.warning("APPSTATE: Parse Navigation failed", aErrorData[0]);
124
- return [
125
- {
126
- /* app data */
127
- },
128
- aErrorData[1],
129
- aErrorData[2]
130
- ];
131
- })
132
- .then(function(aResults) {
133
- Log.info("APPSTATE: Parse Navigation done");
134
-
135
- // aResults[1] => oStartupParameters (not evaluated)
136
- var oAppData = aResults[0] || {},
137
- sNavType = aResults[2] || NavType.initial,
138
- oRootController = that.oAppComponent.getRootControl().getController();
139
-
140
- that._mCurrentAppState = sNavType === NavType.iAppState ? oAppData && oAppData.appState : undefined;
141
-
142
- if (!oRootController.viewState) {
143
- throw new Error("viewState extension required for controller " + oRootController.getMetadata().getName());
144
- }
145
-
146
- return oRootController.viewState
147
- .applyViewState(that._mCurrentAppState, that._createNavigationParameters(oAppData, sNavType))
148
- .catch(function(oError) {
149
- Log.error("appState could not be applied", oError);
150
- throw oError;
151
- });
152
- })
153
- .finally(function() {
154
- BusyLocker.unlock(that);
155
- BusyLocker.unlock(that.oAppComponent.getRootControl());
156
- });
157
- },
158
- /**
159
- * To check is route is changed by change in the iAPPState.
160
- *
161
- * @returns {boolean}
162
- **/
163
- checkIfRouteChangedByIApp: function() {
164
- return this.bNoRouteChange;
165
- },
166
- /**
167
- * Reset the route changed by iAPPState.
168
- **/
169
- resetRouteChangedByIApp: function() {
170
- if (this.bNoRouteChange) {
171
- this.bNoRouteChange = false;
172
- }
173
- },
174
- _isListBasedComponent: function(oComponent) {
175
- return oComponent.isA("sap.fe.templates.ListComponent");
176
- }
177
- });
178
-
179
- return AppStateHandler;
180
- },
181
- /* bExport= */
182
- true
183
- );
5
+ sap.ui.define(["sap/ui/base/Object", "sap/fe/navigation/library", "sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/ClassSupport", "./BusyLocker", "./helpers/ModelHelper"], function (BaseObject, library, Log, deepEqual, ClassSupport, BusyLocker, ModelHelper) {
6
+ "use strict";
7
+
8
+ var _dec, _class;
9
+
10
+ var UI5Class = ClassSupport.UI5Class;
11
+
12
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
+
14
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
15
+
16
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
17
+
18
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
19
+
20
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
21
+
22
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
23
+
24
+ function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
25
+
26
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
27
+
28
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
29
+
30
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
31
+
32
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
+
34
+ var NavType = library.NavType;
35
+
36
+ function _toES6Promise(oThenable) {
37
+ return Promise.resolve(oThenable.then(function () {
38
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
39
+ args[_key] = arguments[_key];
40
+ }
41
+
42
+ return Array.prototype.slice.call(args);
43
+ }).catch(function () {
44
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
45
+ args[_key2] = arguments[_key2];
46
+ }
47
+
48
+ return Array.prototype.slice.call(args);
49
+ }));
50
+ }
51
+
52
+ var AppStateHandler = (_dec = UI5Class("sap.fe.core.AppStateHandler"), _dec(_class = /*#__PURE__*/function (_BaseObject) {
53
+ _inherits(AppStateHandler, _BaseObject);
54
+
55
+ var _super = _createSuper(AppStateHandler);
56
+
57
+ // AppComponent
58
+ function AppStateHandler(oAppComponent) {
59
+ var _this;
60
+
61
+ _classCallCheck(this, AppStateHandler);
62
+
63
+ _this = _super.call(this);
64
+
65
+ _defineProperty(_assertThisInitialized(_this), "_mCurrentAppState", {});
66
+
67
+ _this.oAppComponent = oAppComponent;
68
+ _this.sId = oAppComponent.getId() + "/AppStateHandler";
69
+ _this.bNoRouteChange = false;
70
+ Log.info("APPSTATE : Appstate handler initialized");
71
+ return _this;
72
+ }
73
+
74
+ _createClass(AppStateHandler, [{
75
+ key: "getId",
76
+ value: function getId() {
77
+ return this.sId;
78
+ }
79
+ /**
80
+ * Creates/updates the appstate.
81
+ *
82
+ * @returns {Promise} A promise resolving the stored data
83
+ * @ui5-restricted
84
+ */
85
+
86
+ }, {
87
+ key: "createAppState",
88
+ value: function createAppState() {
89
+ var _this2 = this;
90
+
91
+ if (BusyLocker.isLocked(this)) {
92
+ return Promise.resolve();
93
+ }
94
+
95
+ var oNavigationService = this.oAppComponent.getNavigationService(),
96
+ oRouterProxy = this.oAppComponent.getRouterProxy(),
97
+ sHash = oRouterProxy.getHash(),
98
+ oController = this.oAppComponent.getRootControl().getController(),
99
+ bIsStickyMode = ModelHelper.isStickySessionSupported(this.oAppComponent.getMetaModel());
100
+
101
+ if (!oController.viewState) {
102
+ return Promise.reject("viewState controller extension not available for controller: " + oController.getMetadata().getName());
103
+ }
104
+
105
+ return oController.viewState.retrieveViewState().then(function (mInnerAppState) {
106
+ var oStoreData = {
107
+ appState: mInnerAppState
108
+ };
109
+
110
+ if (mInnerAppState && !deepEqual(_this2._mCurrentAppState, mInnerAppState)) {
111
+ _this2._mCurrentAppState = mInnerAppState;
112
+ var oAppState = oNavigationService.storeInnerAppStateWithImmediateReturn(oStoreData, true);
113
+ Log.info("APPSTATE: Appstate stored");
114
+ var sAppStateKey = oAppState.appStateKey;
115
+ var sNewHash = oNavigationService.replaceInnerAppStateKey(sHash, sAppStateKey);
116
+
117
+ if (sNewHash !== sHash) {
118
+ oRouterProxy.navToHash(sNewHash, null, null, null, !bIsStickyMode);
119
+ _this2.bNoRouteChange = true;
120
+ }
121
+
122
+ Log.info("APPSTATE: navToHash");
123
+ }
124
+
125
+ return oStoreData;
126
+ });
127
+ }
128
+ }, {
129
+ key: "_createNavigationParameters",
130
+ value: function _createNavigationParameters(oAppData, sNavType) {
131
+ return Object.assign({}, oAppData, {
132
+ selectionVariantDefaults: oAppData.oDefaultedSelectionVariant,
133
+ selectionVariant: oAppData.oSelectionVariant,
134
+ requiresStandardVariant: !oAppData.bNavSelVarHasDefaultsOnly,
135
+ navigationType: sNavType
136
+ });
137
+ }
138
+ /**
139
+ * Applies an appstate by fetching appdata and passing it to _applyAppstateToPage.
140
+ *
141
+ * @function
142
+ * @static
143
+ * @memberof sap.fe.core.AppStateHandler
144
+ * @returns {Promise} A promise for async handling
145
+ * @private
146
+ * @ui5-restricted
147
+ **/
148
+
149
+ }, {
150
+ key: "applyAppState",
151
+ value: function applyAppState() {
152
+ var _this3 = this;
153
+
154
+ if (this.oAppComponent.getModel("internal").getProperty("/uiAdaptation") || BusyLocker.isLocked(this)) {
155
+ return Promise.resolve();
156
+ }
157
+
158
+ BusyLocker.lock(this); // Done for busy indicator
159
+
160
+ BusyLocker.lock(this.oAppComponent.getRootControl());
161
+ var oNavigationService = this.oAppComponent.getNavigationService(); // TODO oNavigationService.parseNavigation() should return ES6 promise instead jQuery.promise
162
+
163
+ return _toES6Promise(oNavigationService.parseNavigation()).catch(function (aErrorData) {
164
+ if (!aErrorData) {
165
+ aErrorData = [];
166
+ }
167
+
168
+ Log.warning("APPSTATE: Parse Navigation failed", aErrorData[0]);
169
+ return [{
170
+ /* app data */
171
+ }, aErrorData[1], aErrorData[2]];
172
+ }).then(function (aResults) {
173
+ Log.info("APPSTATE: Parse Navigation done"); // aResults[1] => oStartupParameters (not evaluated)
174
+
175
+ var oAppData = aResults[0] || {},
176
+ sNavType = aResults[2] || NavType.initial,
177
+ oRootController = _this3.oAppComponent.getRootControl().getController();
178
+
179
+ _this3._mCurrentAppState = sNavType === NavType.iAppState ? oAppData && oAppData.appState : undefined;
180
+
181
+ if (!oRootController.viewState) {
182
+ throw new Error("viewState extension required for controller " + oRootController.getMetadata().getName());
183
+ }
184
+
185
+ return oRootController.viewState.applyViewState(_this3._mCurrentAppState, _this3._createNavigationParameters(oAppData, sNavType)).catch(function (oError) {
186
+ Log.error("appState could not be applied", oError);
187
+ throw oError;
188
+ });
189
+ }).finally(function () {
190
+ BusyLocker.unlock(_this3);
191
+ BusyLocker.unlock(_this3.oAppComponent.getRootControl());
192
+ });
193
+ }
194
+ /**
195
+ * To check is route is changed by change in the iAPPState.
196
+ *
197
+ * @returns {boolean}
198
+ **/
199
+
200
+ }, {
201
+ key: "checkIfRouteChangedByIApp",
202
+ value: function checkIfRouteChangedByIApp() {
203
+ return this.bNoRouteChange;
204
+ }
205
+ /**
206
+ * Reset the route changed by iAPPState.
207
+ **/
208
+
209
+ }, {
210
+ key: "resetRouteChangedByIApp",
211
+ value: function resetRouteChangedByIApp() {
212
+ if (this.bNoRouteChange) {
213
+ this.bNoRouteChange = false;
214
+ }
215
+ }
216
+ }, {
217
+ key: "_isListBasedComponent",
218
+ value: function _isListBasedComponent(oComponent) {
219
+ return oComponent.isA("sap.fe.templates.ListComponent");
220
+ }
221
+ }]);
222
+
223
+ return AppStateHandler;
224
+ }(BaseObject)) || _class);
225
+ /**
226
+ * @global
227
+ */
228
+
229
+ return AppStateHandler;
230
+ }, true);
231
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcFN0YXRlSGFuZGxlci50cyJdLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIl90b0VTNlByb21pc2UiLCJvVGhlbmFibGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJjYXRjaCIsIkFwcFN0YXRlSGFuZGxlciIsIlVJNUNsYXNzIiwib0FwcENvbXBvbmVudCIsInNJZCIsImdldElkIiwiYk5vUm91dGVDaGFuZ2UiLCJMb2ciLCJpbmZvIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsInNIYXNoIiwiZ2V0SGFzaCIsIm9Db250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwidmlld1N0YXRlIiwicmVqZWN0IiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwicmV0cmlldmVWaWV3U3RhdGUiLCJtSW5uZXJBcHBTdGF0ZSIsIm9TdG9yZURhdGEiLCJhcHBTdGF0ZSIsImRlZXBFcXVhbCIsIl9tQ3VycmVudEFwcFN0YXRlIiwib0FwcFN0YXRlIiwic3RvcmVJbm5lckFwcFN0YXRlV2l0aEltbWVkaWF0ZVJldHVybiIsInNBcHBTdGF0ZUtleSIsImFwcFN0YXRlS2V5Iiwic05ld0hhc2giLCJyZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsIm5hdlRvSGFzaCIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsImxvY2siLCJwYXJzZU5hdmlnYXRpb24iLCJhRXJyb3JEYXRhIiwid2FybmluZyIsImFSZXN1bHRzIiwiaW5pdGlhbCIsIm9Sb290Q29udHJvbGxlciIsImlBcHBTdGF0ZSIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXBwbHlWaWV3U3RhdGUiLCJfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvRXJyb3IiLCJlcnJvciIsImZpbmFsbHkiLCJ1bmxvY2siLCJvQ29tcG9uZW50IiwiaXNBIiwiQmFzZU9iamVjdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUNELE9BQXhCOztBQUNBLFdBQVNFLGFBQVQsQ0FBdUJDLFNBQXZCLEVBQXVDO0FBQ3RDLFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUNORixTQUFTLENBQ1BHLElBREYsQ0FDTyxZQUF5QjtBQUFBLHdDQUFiQyxJQUFhO0FBQWJBLFFBQUFBLElBQWE7QUFBQTs7QUFDOUIsYUFBT0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxLQUFoQixDQUFzQkMsSUFBdEIsQ0FBMkJKLElBQTNCLENBQVA7QUFDQSxLQUhGLEVBSUVLLEtBSkYsQ0FJUSxZQUF5QjtBQUFBLHlDQUFiTCxJQUFhO0FBQWJBLFFBQUFBLElBQWE7QUFBQTs7QUFDL0IsYUFBT0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxLQUFoQixDQUFzQkMsSUFBdEIsQ0FBMkJKLElBQTNCLENBQVA7QUFDQSxLQU5GLENBRE0sQ0FBUDtBQVNBOztNQUdLTSxlLFdBRExDLFFBQVEsQ0FBQyw2QkFBRCxDOzs7OztBQUdtQjtBQUczQiw2QkFBWUMsYUFBWixFQUFnQztBQUFBOztBQUFBOztBQUMvQjs7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QUFJLEtBQUtBLGNBQVQsRUFBeUI7QUFDeEIsZUFBS0EsY0FBTCxHQUFzQixLQUF0QjtBQUNBO0FBQ0Q7OzthQUNELCtCQUFzQmdFLFVBQXRCLEVBQXVDO0FBQ3RDLGVBQU9BLFVBQVUsQ0FBQ0MsR0FBWCxDQUFlLGdDQUFmLENBQVA7QUFDQTs7OztJQTlJNEJDLFU7QUFpSjlCO0FBQ0E7QUFDQTs7U0FDZXZFLGUiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9saWJyYXJ5XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgeyBVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcIi4vQnVzeUxvY2tlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcblxuY29uc3QgTmF2VHlwZSA9IGxpYnJhcnkuTmF2VHlwZTtcbmZ1bmN0aW9uIF90b0VTNlByb21pc2Uob1RoZW5hYmxlOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcblx0XHRvVGhlbmFibGVcblx0XHRcdC50aGVuKGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuXHRcdFx0fSlcblx0KTtcbn1cblxuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwU3RhdGVIYW5kbGVyXCIpXG5jbGFzcyBBcHBTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0cHVibGljIHNJZDogc3RyaW5nO1xuXHRwdWJsaWMgb0FwcENvbXBvbmVudDogYW55OyAvLyBBcHBDb21wb25lbnRcblx0cHVibGljIGJOb1JvdXRlQ2hhbmdlOiBib29sZWFuO1xuXHRwcml2YXRlIF9tQ3VycmVudEFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cdGNvbnN0cnVjdG9yKG9BcHBDb21wb25lbnQ6IGFueSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLnNJZCA9IG9BcHBDb21wb25lbnQuZ2V0SWQoKSArIFwiL0FwcFN0YXRlSGFuZGxlclwiO1xuXG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cdGdldElkKCkge1xuXHRcdHJldHVybiB0aGlzLnNJZDtcblx0fVxuXHQvKipcblx0ICogQ3JlYXRlcy91cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Y3JlYXRlQXBwU3RhdGUoKSB7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdG9Sb3V0ZXJQcm94eSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0c0hhc2ggPSBvUm91dGVyUHJveHkuZ2V0SGFzaCgpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSk7XG5cblx0XHRpZiAoIW9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwidmlld1N0YXRlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG5vdCBhdmFpbGFibGUgZm9yIGNvbnRyb2xsZXI6IFwiICsgb0NvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKS50aGVuKChtSW5uZXJBcHBTdGF0ZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvU3RvcmVEYXRhID0geyBhcHBTdGF0ZTogbUlubmVyQXBwU3RhdGUgfTtcblx0XHRcdGlmIChtSW5uZXJBcHBTdGF0ZSAmJiAhZGVlcEVxdWFsKHRoaXMuX21DdXJyZW50QXBwU3RhdGUsIG1Jbm5lckFwcFN0YXRlKSkge1xuXHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID0gbUlubmVyQXBwU3RhdGU7XG5cdFx0XHRcdGNvbnN0IG9BcHBTdGF0ZSA9IG9OYXZpZ2F0aW9uU2VydmljZS5zdG9yZUlubmVyQXBwU3RhdGVXaXRoSW1tZWRpYXRlUmV0dXJuKG9TdG9yZURhdGEsIHRydWUpO1xuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBBcHBzdGF0ZSBzdG9yZWRcIik7XG5cdFx0XHRcdGNvbnN0IHNBcHBTdGF0ZUtleSA9IG9BcHBTdGF0ZS5hcHBTdGF0ZUtleTtcblx0XHRcdFx0Y29uc3Qgc05ld0hhc2ggPSBvTmF2aWdhdGlvblNlcnZpY2UucmVwbGFjZUlubmVyQXBwU3RhdGVLZXkoc0hhc2gsIHNBcHBTdGF0ZUtleSk7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCAhPT0gc0hhc2gpIHtcblx0XHRcdFx0XHRvUm91dGVyUHJveHkubmF2VG9IYXNoKHNOZXdIYXNoLCBudWxsLCBudWxsLCBudWxsLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0XHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLmluZm8oXCJBUFBTVEFURTogbmF2VG9IYXNoXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG9TdG9yZURhdGE7XG5cdFx0fSk7XG5cdH1cblxuXHRfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGE6IGFueSwgc05hdlR5cGU6IGFueSkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvQXBwRGF0YSwge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzOiBvQXBwRGF0YS5vRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9BcHBEYXRhLm9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ6ICFvQXBwRGF0YS5iTmF2U2VsVmFySGFzRGVmYXVsdHNPbmx5LFxuXHRcdFx0bmF2aWdhdGlvblR5cGU6IHNOYXZUeXBlXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhcHBzdGF0ZSBieSBmZXRjaGluZyBhcHBkYXRhIGFuZCBwYXNzaW5nIGl0IHRvIF9hcHBseUFwcHN0YXRlVG9QYWdlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQHN0YXRpY1xuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwU3RhdGVIYW5kbGVyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBBIHByb21pc2UgZm9yIGFzeW5jIGhhbmRsaW5nXG5cdCAqIEBwcml2YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiovXG5cdGFwcGx5QXBwU3RhdGUoKSB7XG5cdFx0aWYgKHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbChcImludGVybmFsXCIpLmdldFByb3BlcnR5KFwiL3VpQWRhcHRhdGlvblwiKSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzKTtcblx0XHQvLyBEb25lIGZvciBidXN5IGluZGljYXRvclxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cblx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHQvLyBUT0RPIG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSBzaG91bGQgcmV0dXJuIEVTNiBwcm9taXNlIGluc3RlYWQgalF1ZXJ5LnByb21pc2Vcblx0XHRyZXR1cm4gX3RvRVM2UHJvbWlzZShvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24oYUVycm9yRGF0YTogYW55KSB7XG5cdFx0XHRcdGlmICghYUVycm9yRGF0YSkge1xuXHRcdFx0XHRcdGFFcnJvckRhdGEgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRMb2cud2FybmluZyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGZhaWxlZFwiLCBhRXJyb3JEYXRhWzBdKTtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQvKiBhcHAgZGF0YSAqL1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YUVycm9yRGF0YVsxXSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzJdXG5cdFx0XHRcdF07XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFSZXN1bHRzOiBhbnkpID0+IHtcblx0XHRcdFx0TG9nLmluZm8oXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBkb25lXCIpO1xuXG5cdFx0XHRcdC8vIGFSZXN1bHRzWzFdID0+IG9TdGFydHVwUGFyYW1ldGVycyAobm90IGV2YWx1YXRlZClcblx0XHRcdFx0Y29uc3Qgb0FwcERhdGEgPSBhUmVzdWx0c1swXSB8fCB7fSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IGFSZXN1bHRzWzJdIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHNOYXZUeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSA/IG9BcHBEYXRhICYmIG9BcHBEYXRhLmFwcFN0YXRlIDogdW5kZWZpbmVkO1xuXG5cdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInZpZXdTdGF0ZSBleHRlbnNpb24gcmVxdWlyZWQgZm9yIGNvbnRyb2xsZXIgXCIgKyBvUm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG9Sb290Q29udHJvbGxlci52aWV3U3RhdGVcblx0XHRcdFx0XHQuYXBwbHlWaWV3U3RhdGUodGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgdGhpcy5fY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGEsIHNOYXZUeXBlKSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcImFwcFN0YXRlIGNvdWxkIG5vdCBiZSBhcHBsaWVkXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzKTtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIFRvIGNoZWNrIGlzIHJvdXRlIGlzIGNoYW5nZWQgYnkgY2hhbmdlIGluIHRoZSBpQVBQU3RhdGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKiovXG5cdGNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYk5vUm91dGVDaGFuZ2U7XG5cdH1cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSByb3V0ZSBjaGFuZ2VkIGJ5IGlBUFBTdGF0ZS5cblx0ICoqL1xuXHRyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpIHtcblx0XHRpZiAodGhpcy5iTm9Sb3V0ZUNoYW5nZSkge1xuXHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRfaXNMaXN0QmFzZWRDb21wb25lbnQob0NvbXBvbmVudDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db21wb25lbnQuaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0Q29tcG9uZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogQGdsb2JhbFxuICovXG5leHBvcnQgZGVmYXVsdCBBcHBTdGF0ZUhhbmRsZXI7XG4iXX0=
@@ -0,0 +1,171 @@
1
+ import BaseObject from "sap/ui/base/Object";
2
+ import library from "sap/fe/navigation/library";
3
+ import Log from "sap/base/Log";
4
+ import deepEqual from "sap/base/util/deepEqual";
5
+ import { UI5Class } from "sap/fe/core/helpers/ClassSupport";
6
+ import BusyLocker from "./BusyLocker";
7
+ import ModelHelper from "./helpers/ModelHelper";
8
+
9
+ const NavType = library.NavType;
10
+ function _toES6Promise(oThenable: any) {
11
+ return Promise.resolve(
12
+ oThenable
13
+ .then(function(...args: any[]) {
14
+ return Array.prototype.slice.call(args);
15
+ })
16
+ .catch(function(...args: any[]) {
17
+ return Array.prototype.slice.call(args);
18
+ })
19
+ );
20
+ }
21
+
22
+ @UI5Class("sap.fe.core.AppStateHandler")
23
+ class AppStateHandler extends BaseObject {
24
+ public sId: string;
25
+ public oAppComponent: any; // AppComponent
26
+ public bNoRouteChange: boolean;
27
+ private _mCurrentAppState: Record<string, any> = {};
28
+ constructor(oAppComponent: any) {
29
+ super();
30
+ this.oAppComponent = oAppComponent;
31
+ this.sId = oAppComponent.getId() + "/AppStateHandler";
32
+
33
+ this.bNoRouteChange = false;
34
+ Log.info("APPSTATE : Appstate handler initialized");
35
+ }
36
+ getId() {
37
+ return this.sId;
38
+ }
39
+ /**
40
+ * Creates/updates the appstate.
41
+ *
42
+ * @returns {Promise} A promise resolving the stored data
43
+ * @ui5-restricted
44
+ */
45
+ createAppState() {
46
+ if (BusyLocker.isLocked(this)) {
47
+ return Promise.resolve();
48
+ }
49
+
50
+ const oNavigationService = this.oAppComponent.getNavigationService(),
51
+ oRouterProxy = this.oAppComponent.getRouterProxy(),
52
+ sHash = oRouterProxy.getHash(),
53
+ oController = this.oAppComponent.getRootControl().getController(),
54
+ bIsStickyMode = ModelHelper.isStickySessionSupported(this.oAppComponent.getMetaModel());
55
+
56
+ if (!oController.viewState) {
57
+ return Promise.reject("viewState controller extension not available for controller: " + oController.getMetadata().getName());
58
+ }
59
+
60
+ return oController.viewState.retrieveViewState().then((mInnerAppState: any) => {
61
+ const oStoreData = { appState: mInnerAppState };
62
+ if (mInnerAppState && !deepEqual(this._mCurrentAppState, mInnerAppState)) {
63
+ this._mCurrentAppState = mInnerAppState;
64
+ const oAppState = oNavigationService.storeInnerAppStateWithImmediateReturn(oStoreData, true);
65
+ Log.info("APPSTATE: Appstate stored");
66
+ const sAppStateKey = oAppState.appStateKey;
67
+ const sNewHash = oNavigationService.replaceInnerAppStateKey(sHash, sAppStateKey);
68
+ if (sNewHash !== sHash) {
69
+ oRouterProxy.navToHash(sNewHash, null, null, null, !bIsStickyMode);
70
+ this.bNoRouteChange = true;
71
+ }
72
+ Log.info("APPSTATE: navToHash");
73
+ }
74
+ return oStoreData;
75
+ });
76
+ }
77
+
78
+ _createNavigationParameters(oAppData: any, sNavType: any) {
79
+ return Object.assign({}, oAppData, {
80
+ selectionVariantDefaults: oAppData.oDefaultedSelectionVariant,
81
+ selectionVariant: oAppData.oSelectionVariant,
82
+ requiresStandardVariant: !oAppData.bNavSelVarHasDefaultsOnly,
83
+ navigationType: sNavType
84
+ });
85
+ }
86
+
87
+ /**
88
+ * Applies an appstate by fetching appdata and passing it to _applyAppstateToPage.
89
+ *
90
+ * @function
91
+ * @static
92
+ * @memberof sap.fe.core.AppStateHandler
93
+ * @returns {Promise} A promise for async handling
94
+ * @private
95
+ * @ui5-restricted
96
+ **/
97
+ applyAppState() {
98
+ if (this.oAppComponent.getModel("internal").getProperty("/uiAdaptation") || BusyLocker.isLocked(this)) {
99
+ return Promise.resolve();
100
+ }
101
+ BusyLocker.lock(this);
102
+ // Done for busy indicator
103
+ BusyLocker.lock(this.oAppComponent.getRootControl());
104
+
105
+ const oNavigationService = this.oAppComponent.getNavigationService();
106
+ // TODO oNavigationService.parseNavigation() should return ES6 promise instead jQuery.promise
107
+ return _toES6Promise(oNavigationService.parseNavigation())
108
+ .catch(function(aErrorData: any) {
109
+ if (!aErrorData) {
110
+ aErrorData = [];
111
+ }
112
+ Log.warning("APPSTATE: Parse Navigation failed", aErrorData[0]);
113
+ return [
114
+ {
115
+ /* app data */
116
+ },
117
+ aErrorData[1],
118
+ aErrorData[2]
119
+ ];
120
+ })
121
+ .then((aResults: any) => {
122
+ Log.info("APPSTATE: Parse Navigation done");
123
+
124
+ // aResults[1] => oStartupParameters (not evaluated)
125
+ const oAppData = aResults[0] || {},
126
+ sNavType = aResults[2] || NavType.initial,
127
+ oRootController = this.oAppComponent.getRootControl().getController();
128
+
129
+ this._mCurrentAppState = sNavType === NavType.iAppState ? oAppData && oAppData.appState : undefined;
130
+
131
+ if (!oRootController.viewState) {
132
+ throw new Error("viewState extension required for controller " + oRootController.getMetadata().getName());
133
+ }
134
+
135
+ return oRootController.viewState
136
+ .applyViewState(this._mCurrentAppState, this._createNavigationParameters(oAppData, sNavType))
137
+ .catch(function(oError: any) {
138
+ Log.error("appState could not be applied", oError);
139
+ throw oError;
140
+ });
141
+ })
142
+ .finally(() => {
143
+ BusyLocker.unlock(this);
144
+ BusyLocker.unlock(this.oAppComponent.getRootControl());
145
+ });
146
+ }
147
+ /**
148
+ * To check is route is changed by change in the iAPPState.
149
+ *
150
+ * @returns {boolean}
151
+ **/
152
+ checkIfRouteChangedByIApp() {
153
+ return this.bNoRouteChange;
154
+ }
155
+ /**
156
+ * Reset the route changed by iAPPState.
157
+ **/
158
+ resetRouteChangedByIApp() {
159
+ if (this.bNoRouteChange) {
160
+ this.bNoRouteChange = false;
161
+ }
162
+ }
163
+ _isListBasedComponent(oComponent: any) {
164
+ return oComponent.isA("sap.fe.templates.ListComponent");
165
+ }
166
+ }
167
+
168
+ /**
169
+ * @global
170
+ */
171
+ export default AppStateHandler;
@@ -1,6 +1,7 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+
4
5
  */
5
6
  sap.ui.define(["sap/ui/core/mvc/Controller", "sap/fe/core/CommonUtils"], function(Controller, CommonUtils) {
6
7
  "use strict";