@sapui5/sap.fe.core 1.98.0 → 1.99.2

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 (231) hide show
  1. package/package.json +3 -2
  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 +3 -2
  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 -2399
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -2
  14. package/src/sap/fe/core/PageController.js +84 -125
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -823
  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 -164
  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 -1664
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +561 -608
  27. package/src/sap/fe/core/actions/draft.ts +595 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -514
  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 -1215
  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 +170 -392
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +52 -47
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
  50. package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  57. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  58. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  59. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
  60. package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
  61. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  62. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  64. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  65. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  66. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  67. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  68. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  69. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
  70. package/src/sap/fe/core/converters/ConverterContext.js +2 -2
  71. package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
  72. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  73. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
  74. package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
  75. package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
  76. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
  77. package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
  78. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  79. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  80. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  81. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  82. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
  83. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  84. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  85. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  86. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  87. package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
  88. package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
  89. package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
  90. package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
  91. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
  92. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
  93. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
  94. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
  95. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  96. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  97. package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
  98. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  99. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  100. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  101. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  102. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  103. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  104. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  105. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  106. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  107. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  108. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  109. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  110. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  111. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  112. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  113. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  114. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
  116. package/src/sap/fe/core/fpm/Component.js +3 -2
  117. package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
  118. package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
  119. package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
  120. package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
  121. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  122. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  123. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  124. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  125. package/src/sap/fe/core/helpers/EditState.js +81 -84
  126. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  127. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  128. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  129. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  130. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  131. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  132. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  133. package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
  134. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  135. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  136. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  137. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  138. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  139. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  140. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  141. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  142. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  143. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  144. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  145. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  146. package/src/sap/fe/core/library.js +4 -3
  147. package/src/sap/fe/core/library.support.js +3 -2
  148. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  149. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
  150. package/src/sap/fe/core/messagebundle.properties +23 -10
  151. package/src/sap/fe/core/messagebundle_ar.properties +9 -0
  152. package/src/sap/fe/core/messagebundle_bg.properties +9 -0
  153. package/src/sap/fe/core/messagebundle_ca.properties +9 -0
  154. package/src/sap/fe/core/messagebundle_cs.properties +10 -1
  155. package/src/sap/fe/core/messagebundle_cy.properties +9 -0
  156. package/src/sap/fe/core/messagebundle_da.properties +9 -0
  157. package/src/sap/fe/core/messagebundle_de.properties +9 -0
  158. package/src/sap/fe/core/messagebundle_el.properties +9 -0
  159. package/src/sap/fe/core/messagebundle_en.properties +9 -0
  160. package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
  161. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
  162. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
  163. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
  164. package/src/sap/fe/core/messagebundle_es.properties +9 -0
  165. package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
  166. package/src/sap/fe/core/messagebundle_et.properties +9 -0
  167. package/src/sap/fe/core/messagebundle_fi.properties +9 -0
  168. package/src/sap/fe/core/messagebundle_fr.properties +13 -4
  169. package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
  170. package/src/sap/fe/core/messagebundle_hi.properties +15 -6
  171. package/src/sap/fe/core/messagebundle_hr.properties +15 -6
  172. package/src/sap/fe/core/messagebundle_hu.properties +9 -0
  173. package/src/sap/fe/core/messagebundle_id.properties +10 -1
  174. package/src/sap/fe/core/messagebundle_it.properties +9 -0
  175. package/src/sap/fe/core/messagebundle_iw.properties +9 -0
  176. package/src/sap/fe/core/messagebundle_ja.properties +9 -0
  177. package/src/sap/fe/core/messagebundle_kk.properties +15 -6
  178. package/src/sap/fe/core/messagebundle_ko.properties +9 -0
  179. package/src/sap/fe/core/messagebundle_lt.properties +9 -0
  180. package/src/sap/fe/core/messagebundle_lv.properties +15 -6
  181. package/src/sap/fe/core/messagebundle_ms.properties +14 -5
  182. package/src/sap/fe/core/messagebundle_nl.properties +9 -0
  183. package/src/sap/fe/core/messagebundle_no.properties +9 -0
  184. package/src/sap/fe/core/messagebundle_pl.properties +9 -0
  185. package/src/sap/fe/core/messagebundle_pt.properties +9 -0
  186. package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
  187. package/src/sap/fe/core/messagebundle_ro.properties +9 -0
  188. package/src/sap/fe/core/messagebundle_ru.properties +9 -0
  189. package/src/sap/fe/core/messagebundle_sh.properties +11 -2
  190. package/src/sap/fe/core/messagebundle_sk.properties +9 -0
  191. package/src/sap/fe/core/messagebundle_sl.properties +15 -6
  192. package/src/sap/fe/core/messagebundle_sv.properties +9 -0
  193. package/src/sap/fe/core/messagebundle_th.properties +9 -0
  194. package/src/sap/fe/core/messagebundle_tr.properties +9 -0
  195. package/src/sap/fe/core/messagebundle_uk.properties +9 -0
  196. package/src/sap/fe/core/messagebundle_vi.properties +9 -0
  197. package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
  198. package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
  199. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  200. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  201. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  202. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  205. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  206. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  207. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  208. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  209. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
  210. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  211. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  212. package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
  213. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
  214. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
  215. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
  216. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  217. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  218. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  219. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  220. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  221. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  222. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  223. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  224. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  225. package/src/sap/fe/core/templating/FilterHelper.js +138 -72
  226. package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
  227. package/src/sap/fe/core/templating/UIFormatters.js +31 -1
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +4 -6
  231. package/ui5.yaml +0 -3
@@ -1,6 +1,7 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 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/ControllerExtension", "sap/ui/core/mvc/OverrideExecution"], function(
6
7
  ControllerExtension,
@@ -1,6 +1,7 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 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(
6
7
  [
@@ -12,7 +13,10 @@ sap.ui.define(
12
13
  "sap/fe/core/CommonUtils",
13
14
  "sap/fe/core/BusyLocker",
14
15
  "sap/fe/core/library",
15
- "sap/fe/core/helpers/EditState"
16
+ "sap/fe/core/helpers/EditState",
17
+ "sap/m/Button",
18
+ "sap/m/Dialog",
19
+ "sap/fe/core/actions/sticky"
16
20
  ],
17
21
  function(
18
22
  ControllerExtension,
@@ -23,7 +27,10 @@ sap.ui.define(
23
27
  CommonUtils,
24
28
  BusyLocker,
25
29
  FELibrary,
26
- EditState
30
+ EditState,
31
+ Button,
32
+ Dialog,
33
+ sticky
27
34
  ) {
28
35
  "use strict";
29
36
 
@@ -32,7 +39,105 @@ sap.ui.define(
32
39
  EditMode = FELibrary.EditMode,
33
40
  CreationMode = FELibrary.CreationMode;
34
41
 
35
- var Extension = ControllerExtension.extend("sap.fe.core.controllerextensions.InternalEditFlow", {
42
+ function _registerDirtyStateProvider(oContext, oAppComponent, oInternalModel, sHashTracker) {
43
+ function fnDirtyStateProvider(oNavigationContext) {
44
+ var sTargetHash = oNavigationContext.innerAppRoute,
45
+ oRouterProxy = oAppComponent.getRouterProxy(),
46
+ bDirty,
47
+ bSessionON = oInternalModel.getProperty("/sessionOn");
48
+
49
+ if (!bSessionON) {
50
+ // If the sticky session was terminated before hand.
51
+ // Eexample in case of navigating away from application using IBN.
52
+ return undefined;
53
+ }
54
+
55
+ if (!oRouterProxy.isNavigationFinalized()) {
56
+ // If navigation is currently happening in RouterProxy, it's a transient state
57
+ // (not dirty)
58
+ bDirty = false;
59
+ sHashTracker = sTargetHash;
60
+ } else if (sHashTracker === sTargetHash) {
61
+ // the hash didn't change so either the user attempts to refresh or to leave the app
62
+ bDirty = true;
63
+ } else if (oRouterProxy.checkHashWithGuard(sTargetHash) || oRouterProxy.isGuardCrossAllowedByUser()) {
64
+ // the user attempts to navigate within the root object
65
+ // or crossing the guard has already been allowed by the RouterProxy
66
+ sHashTracker = sTargetHash;
67
+ bDirty = false;
68
+ } else {
69
+ // the user attempts to navigate within the app, for example back to the list report
70
+ bDirty = true;
71
+ }
72
+
73
+ if (bDirty) {
74
+ // the FLP doesn't call the dirty state provider anymore once it's dirty, as they can't
75
+ // change this due to compatibility reasons we set it back to not-dirty
76
+ setTimeout(function() {
77
+ oAppComponent.getShellServices().setDirtyFlag(false);
78
+ }, 0);
79
+ }
80
+
81
+ return bDirty;
82
+ }
83
+
84
+ oContext.fnDirtyStateProvider = fnDirtyStateProvider;
85
+ oAppComponent.getShellServices().registerDirtyStateProvider(oContext.fnDirtyStateProvider);
86
+ }
87
+
88
+ function _attachSessionTimeout(oContext, i18nModel) {
89
+ var that = oContext;
90
+
91
+ function fnHandleSessionTimeout() {
92
+ // remove transient messages since we will showing our own message
93
+ that.getMessageHandler().removeTransitionMessages();
94
+
95
+ var oDialog = new Dialog({
96
+ title: "{sap.fe.i18n>C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_TITLE}",
97
+ state: "Warning",
98
+ content: new Text({ text: "{sap.fe.i18n>C_EDITFLOW_OBJECT_PAGE_SESSION_EXPIRED_DIALOG_MESSAGE}" }),
99
+ beginButton: new Button({
100
+ text: "{sap.fe.i18n>C_COMMON_DIALOG_OK}",
101
+ type: "Emphasized",
102
+ press: function() {
103
+ // remove sticky handling after navigation since session has already been terminated
104
+ that.handleStickyOff();
105
+ that.getRoutingListener().navigateBackFromContext(oContext);
106
+ }
107
+ }),
108
+ afterClose: function() {
109
+ oDialog.destroy();
110
+ }
111
+ });
112
+ oDialog.addStyleClass("sapUiContentPadding");
113
+ oDialog.setModel(i18nModel, "sap.fe.i18n");
114
+ that.getView().addDependent(oDialog);
115
+ oDialog.open();
116
+ }
117
+
118
+ // handle session timeout
119
+ that.fnHandleSessionTimeout = fnHandleSessionTimeout;
120
+ that.getView()
121
+ .getModel()
122
+ .attachSessionTimeout(that.fnHandleSessionTimeout);
123
+ }
124
+
125
+ function _attachRouteMatched(oFnContext, oContext, oAppComponent) {
126
+ var that = oFnContext;
127
+
128
+ function fnStickyDiscardAfterNavigation() {
129
+ var sCurrentHash = oAppComponent.getRouterProxy().getHash();
130
+ // either current hash is empty so the user left the app or he navigated away from the object
131
+ if (!sCurrentHash || !oAppComponent.getRouterProxy().checkHashWithGuard(sCurrentHash)) {
132
+ that.discardStickySession(oContext);
133
+ }
134
+ }
135
+
136
+ that.fnStickyDiscardAfterNavigation = fnStickyDiscardAfterNavigation;
137
+ oAppComponent.getRoutingService().attachRouteMatched(that.fnStickyDiscardAfterNavigation);
138
+ }
139
+
140
+ return ControllerExtension.extend("sap.fe.core.controllerextensions.InternalEditFlow", {
36
141
  metadata: {
37
142
  methods: {
38
143
  createMultipleDocuments: { "public": true, "final": true },
@@ -53,7 +158,9 @@ sap.ui.define(
53
158
  deleteCurrentActionPromise: { "public": true, "final": true },
54
159
  getActionResponseDataAndKeys: { "public": true, "final": true },
55
160
  setCreationMode: { "public": false, "final": false, "overrideExecution": OverrideExecution.After },
56
- getMessageHandler: { "public": true, "final": true }
161
+ getMessageHandler: { "public": true, "final": true },
162
+ handleStickyOn: { "public": true, "final": true },
163
+ handleStickyOff: { "public": true, "final": true }
57
164
  }
58
165
  },
59
166
 
@@ -68,7 +175,7 @@ sap.ui.define(
68
175
  // to be overridden
69
176
  },
70
177
 
71
- createMultipleDocuments: function(oListBinding, aData, bCreateAtEnd, bFromCopyPaste) {
178
+ createMultipleDocuments: function(oListBinding, aData, bCreateAtEnd, bFromCopyPaste, beforeCreateCallBack) {
72
179
  var that = this,
73
180
  transactionHelper = this.getTransactionHelper(),
74
181
  oLockObject = this.getGlobalUIModel(),
@@ -76,6 +183,12 @@ sap.ui.define(
76
183
 
77
184
  BusyLocker.lock(oLockObject);
78
185
  return this.syncTask()
186
+ .then(function() {
187
+ var onBeforeCreatePromise = beforeCreateCallBack
188
+ ? beforeCreateCallBack({ contextPath: oListBinding && oListBinding.getPath() })
189
+ : Promise.resolve();
190
+ return onBeforeCreatePromise;
191
+ })
79
192
  .then(function() {
80
193
  var oModel = oListBinding.getModel(),
81
194
  oMetaModel = oModel.getMetaModel(),
@@ -112,7 +225,8 @@ sap.ui.define(
112
225
  mParameters,
113
226
  oResourceBundle,
114
227
  that.getMessageHandler(),
115
- bFromCopyPaste
228
+ bFromCopyPaste,
229
+ that.getView()
116
230
  );
117
231
  });
118
232
 
@@ -220,7 +334,8 @@ sap.ui.define(
220
334
  */
221
335
 
222
336
  computeEditMode: function(oContext) {
223
- var that = this;
337
+ var that = this,
338
+ sCustomAction = that.getInternalModel().getProperty("/sCustomAction");
224
339
 
225
340
  return Promise.resolve(
226
341
  (function() {
@@ -247,6 +362,19 @@ sap.ui.define(
247
362
  Log.error("Error while determining the editMode for draft", oError);
248
363
  throw oError;
249
364
  });
365
+ } else if (sProgrammingModel === ProgrammingModel.Sticky) {
366
+ if (
367
+ sCustomAction &&
368
+ sCustomAction !== "" &&
369
+ that._hasNewActionForSticky(oContext, that.getView(), sCustomAction)
370
+ ) {
371
+ that.getTransactionHelper()._bCreateMode = true;
372
+ that.getTransactionHelper().handleDocumentModifications();
373
+ that.setEditMode(EditMode.Editable, true);
374
+ EditState.setEditStateDirty();
375
+ that.handleStickyOn(oContext);
376
+ that.getInternalModel().setProperty("/sCustomAction", "");
377
+ }
250
378
  }
251
379
  })()
252
380
  );
@@ -506,9 +634,149 @@ sap.ui.define(
506
634
  onInit: function() {
507
635
  this._oAppComponent = this.base.getAppComponent();
508
636
  }
637
+ },
638
+
639
+ handleStickyOn: function(oContext) {
640
+ var that = this,
641
+ oAppComponent = CommonUtils.getAppComponent(this.getView());
642
+
643
+ try {
644
+ if (oAppComponent === undefined || oContext === undefined) {
645
+ throw new Error("undefined AppComponent or Context for function handleStickyOn");
646
+ }
647
+
648
+ if (!oAppComponent.getRouterProxy().hasNavigationGuard()) {
649
+ var sHashTracker = oAppComponent.getRouterProxy().getHash(),
650
+ oInternalModel = this.getInternalModel();
651
+
652
+ // Set a guard in the RouterProxy
653
+ // A timeout is necessary, as with deferred creation the hashChanger is not updated yet with
654
+ // the new hash, and the guard cannot be found in the managed history of the router proxy
655
+ setTimeout(function() {
656
+ oAppComponent.getRouterProxy().setNavigationGuard();
657
+ }, 0);
658
+
659
+ // Setting back navigation on shell service, to get the dicard message box in case of sticky
660
+ oAppComponent.getShellServices().setBackNavigation(that.onBackNavigationInSession.bind(that));
661
+
662
+ _registerDirtyStateProvider(that, oAppComponent, oInternalModel, sHashTracker);
663
+
664
+ var i18nModel = this.getView().getModel("sap.fe.i18n");
665
+ _attachSessionTimeout(that, i18nModel);
666
+
667
+ _attachRouteMatched(that, oContext, oAppComponent);
668
+ }
669
+ } catch (error) {
670
+ Log.info(error);
671
+ return undefined;
672
+ }
673
+ return true;
674
+ },
675
+
676
+ handleStickyOff: function() {
677
+ var oAppComponent = CommonUtils.getAppComponent(this.getView());
678
+ try {
679
+ if (oAppComponent === undefined) {
680
+ throw new Error("undefined AppComponent for function handleStickyOff");
681
+ }
682
+
683
+ if (oAppComponent && oAppComponent.getRouterProxy) {
684
+ // If we have exited from the app, CommonUtils.getAppComponent doesn't return a
685
+ // sap.fe.core.AppComponent, hence the 'if' above
686
+ oAppComponent.getRouterProxy().discardNavigationGuard();
687
+ }
688
+
689
+ if (this.fnDirtyStateProvider) {
690
+ oAppComponent.getShellServices().deregisterDirtyStateProvider(this.fnDirtyStateProvider);
691
+ this.fnDirtyStateProvider = null;
692
+ }
693
+
694
+ if (this.getView().getModel() && this.fnHandleSessionTimeout) {
695
+ this.getView()
696
+ .getModel()
697
+ .detachSessionTimeout(this.fnHandleSessionTimeout);
698
+ }
699
+
700
+ oAppComponent.getRoutingService().detachRouteMatched(this.fnStickyDiscardAfterNavigation);
701
+ this.fnStickyDiscardAfterNavigation = null;
702
+
703
+ this.getTransactionHelper()._bCreateMode = false;
704
+ this.setEditMode(EditMode.Display, false);
705
+
706
+ if (oAppComponent) {
707
+ // If we have exited from the app, CommonUtils.getAppComponent doesn't return a
708
+ // sap.fe.core.AppComponent, hence the 'if' above
709
+ oAppComponent.getShellServices().setBackNavigation();
710
+ }
711
+ } catch (error) {
712
+ Log.info(error);
713
+ return undefined;
714
+ }
715
+ return true;
716
+ },
717
+
718
+ /**
719
+ * @description Method to display a 'discard' popover when exiting a sticky session.
720
+ *
721
+ * @function
722
+ * @name onBackNavigationInSession
723
+ * @memberof sap.fe.core.controllerextensions.InternalEditFlow
724
+ */
725
+ onBackNavigationInSession: function() {
726
+ var that = this,
727
+ oView = that.getView(),
728
+ oAppComponent = CommonUtils.getAppComponent(oView),
729
+ oRouterProxy = oAppComponent.getRouterProxy();
730
+
731
+ if (oRouterProxy.checkIfBackIsOutOfGuard()) {
732
+ var oBindingContext = oView && oView.getBindingContext();
733
+
734
+ CommonUtils.processDataLossConfirmation(
735
+ function() {
736
+ that.discardStickySession(oBindingContext);
737
+ history.back();
738
+ },
739
+ oView,
740
+ that.getProgrammingModel(oBindingContext)
741
+ );
742
+
743
+ return;
744
+ }
745
+ history.back();
746
+ },
747
+
748
+ discardStickySession: function(oContext) {
749
+ sticky.discardDocument(oContext);
750
+ this.handleStickyOff();
751
+ },
752
+
753
+ _hasNewActionForSticky: function(oContext, oView, sCustomAction) {
754
+ try {
755
+ if (oContext === undefined || oView === undefined) {
756
+ throw new Error("Invalid input parameters for function _hasNewActionForSticky");
757
+ }
758
+
759
+ var oMetaModel = oView.getModel().getMetaModel(),
760
+ sMetaPath = oContext.getPath().substring(0, oContext.getPath().indexOf("(")),
761
+ oStickySession = oMetaModel.getObject(sMetaPath + "@com.sap.vocabularies.Session.v1.StickySessionSupported");
762
+
763
+ if (oStickySession && oStickySession.NewAction && oStickySession.NewAction === sCustomAction) {
764
+ return true;
765
+ } else if (oStickySession && oStickySession.AdditionalNewActions) {
766
+ return sCustomAction ===
767
+ oStickySession.AdditionalNewActions.find(function(sAdditionalAction) {
768
+ return sAdditionalAction === sCustomAction;
769
+ })
770
+ ? true
771
+ : false;
772
+ } else {
773
+ return false;
774
+ }
775
+ } catch (error) {
776
+ Log.info(error);
777
+ return undefined;
778
+ }
509
779
  }
510
780
  });
511
-
512
- return Extension;
513
781
  }
514
782
  );
@@ -1,6 +1,7 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 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(
6
7
  [
@@ -374,7 +375,10 @@ sap.ui.define(
374
375
  */
375
376
  prepareFiltersForExternalNavigation: function(oFilterBarConditions, sRootPath, aParameters) {
376
377
  var oDistinctKeys = {};
377
- function _findDistinctKeysInObject(LookUpObject, sLookUpObjectMetaPath) {
378
+ var oFilterConditionsWithoutConflict = {};
379
+ var sMainEntityValuePath, sCurrentValuePath, sFullContextPath, sWinnerValuePath, sPathInContext;
380
+ function _findDistinctKeysInObject(LookUpObject) {
381
+ var sLookUpObjectMetaPath;
378
382
  for (var sKey in LookUpObject) {
379
383
  if (LookUpObject[sKey]) {
380
384
  if (sKey.includes("/")) {
@@ -395,9 +399,7 @@ sap.ui.define(
395
399
  }
396
400
  }
397
401
 
398
- _findDistinctKeysInObject(oFilterBarConditions, sRootPath);
399
- var oFilterConditionsWithoutConflict = {};
400
- var sMainEntityValuePath, sCurrentValuePath, sFullContextPath, sWinnerValuePath, sPathInContext;
402
+ _findDistinctKeysInObject(oFilterBarConditions);
401
403
  for (var sDistinctKey in oDistinctKeys) {
402
404
  var aConflictingPaths = oDistinctKeys[sDistinctKey];
403
405
 
@@ -1,6 +1,7 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2022 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(
6
7
  [
@@ -154,15 +155,6 @@ sap.ui.define(
154
155
  var oContextInfo = {};
155
156
  mParameters = mParameters || {};
156
157
 
157
- //Setting shell back navigation to undefined only for draft applications
158
- if (oContext.getModel() && oContext.getModel().getMetaModel) {
159
- var bIsStickyMode = ModelHelper.isStickySessionSupported(oContext.getModel().getMetaModel());
160
- if (!bIsStickyMode) {
161
- CommonUtils.getAppComponent(that.getView())
162
- .getShellServices()
163
- .setBackNavigation();
164
- }
165
- }
166
158
  if (oContext.isA("sap.ui.model.odata.v4.ODataListBinding")) {
167
159
  if (mParameters.asyncContext) {
168
160
  // the context is either created async (Promise)
@@ -446,7 +438,14 @@ sap.ui.define(
446
438
  * @ui5-restricted
447
439
  */
448
440
  _createFilterFromSemanticPath: function(sSemanticPath, aSemanticKeys, oMetaModel) {
449
- var aKeyValues = sSemanticPath.substring(sSemanticPath.indexOf("(") + 1, sSemanticPath.length - 1).split(","),
441
+ var fnUnquoteAndDecode = function(sValue) {
442
+ if (sValue.indexOf("'") === 0 && sValue.lastIndexOf("'") === sValue.length - 1) {
443
+ // Remove the quotes from the value and decode special chars
444
+ sValue = decodeURIComponent(sValue.substring(1, sValue.length - 1));
445
+ }
446
+ return sValue;
447
+ },
448
+ aKeyValues = sSemanticPath.substring(sSemanticPath.indexOf("(") + 1, sSemanticPath.length - 1).split(","),
450
449
  aFilters;
451
450
 
452
451
  if (aSemanticKeys.length != aKeyValues.length) {
@@ -457,11 +456,7 @@ sap.ui.define(
457
456
 
458
457
  if (aSemanticKeys.length === 1) {
459
458
  // Take the first key value
460
- var sKeyValue = aKeyValues[0];
461
- if (sKeyValue.indexOf("'") === 0 && sKeyValue.lastIndexOf("'") === sKeyValue.length - 1) {
462
- // Remove the quotes from the value and decode special chars
463
- sKeyValue = decodeURIComponent(sKeyValue.substring(1, sKeyValue.length - 1));
464
- }
459
+ var sKeyValue = fnUnquoteAndDecode(aKeyValues[0]);
465
460
  aFilters = [
466
461
  new Filter({
467
462
  path: aSemanticKeys[0].$PropertyPath,
@@ -475,12 +470,7 @@ sap.ui.define(
475
470
  // Create a map of all key values
476
471
  aKeyValues.forEach(function(sKeyAssignment) {
477
472
  var aParts = sKeyAssignment.split("="),
478
- sKeyValue = aParts[1];
479
-
480
- if (sKeyValue.indexOf("'") === 0 && sKeyValue.lastIndexOf("'") === sKeyValue.length - 1) {
481
- // Remove the quotes from the value and decode special chars
482
- sKeyValue = decodeURIComponent(sKeyValue.substring(1, sKeyValue.length - 1));
483
- }
473
+ sKeyValue = fnUnquoteAndDecode(aParts[1]);
484
474
 
485
475
  mKeyValues[aParts[0]] = sKeyValue;
486
476
  });
@@ -532,7 +522,7 @@ sap.ui.define(
532
522
  */
533
523
  _getTechnicalPathFromSemanticPath: function(sSemanticPath, oModel, aSemanticKeys) {
534
524
  var oMetaModel = oModel.getMetaModel(),
535
- sEntitySetName = oMetaModel.getMetaContext(sSemanticPath).getPath();
525
+ sEntitySetPath = oMetaModel.getMetaContext(sSemanticPath).getPath();
536
526
 
537
527
  if (!aSemanticKeys || aSemanticKeys.length === 0) {
538
528
  // No semantic keys
@@ -547,7 +537,10 @@ sap.ui.define(
547
537
  }
548
538
 
549
539
  // Load the corresponding object
550
- var oListBinding = oModel.bindList("/" + sEntitySetName, undefined, undefined, oFilter, {
540
+ if (sEntitySetPath && sEntitySetPath[0] !== "/") {
541
+ sEntitySetPath = "/" + sEntitySetPath;
542
+ }
543
+ var oListBinding = oModel.bindList(sEntitySetPath, undefined, undefined, oFilter, {
551
544
  "$$groupId": "$auto.Heroes"
552
545
  });
553
546
 
@@ -759,31 +752,43 @@ sap.ui.define(
759
752
  oHiddenBinding.attachEventOnce("dataRequested", function() {
760
753
  BusyLocker.lock(that._oView);
761
754
  });
762
- oHiddenBinding.attachEventOnce("dataReceived", function(oEvent) {
763
- var sErrorDescription = oEvent && oEvent.getParameter("error");
764
- BusyLocker.unlock(that._oView);
765
- if (sErrorDescription) {
766
- // TODO: in case of 404 the text shall be different
767
- sap.ui
768
- .getCore()
769
- .getLibraryResourceBundle("sap.fe.core", true)
770
- .then(function(oResourceBundle) {
771
- var messageHandler = new MessageHandler();
772
- messageHandler.removeTransitionMessages();
773
- that.navigateToMessagePage(oResourceBundle.getText("C_COMMON_SAPFE_DATA_RECEIVED_ERROR"), {
774
- title: oResourceBundle.getText("SAPFE_ERROR"),
775
- description: sErrorDescription
776
- });
777
- })
778
- .catch(function(oError) {
779
- Log.error("Error while getting the core resource bundle", oError);
780
- });
781
- }
782
- });
783
-
755
+ oHiddenBinding.attachEventOnce("dataReceived", this._dataReceivedEventHandler.bind(this));
784
756
  return oHiddenBinding.getBoundContext();
785
757
  },
786
758
 
759
+ _dataReceivedEventHandler: function(oEvent) {
760
+ var that = this;
761
+ var sErrorDescription = oEvent && oEvent.getParameter("error");
762
+ BusyLocker.unlock(that._oView);
763
+ if (sErrorDescription) {
764
+ // TODO: in case of 404 the text shall be different
765
+ sap.ui
766
+ .getCore()
767
+ .getLibraryResourceBundle("sap.fe.core", true)
768
+ .then(function(oResourceBundle) {
769
+ var messageHandler = that.base.messageHandler;
770
+ var mParams = {};
771
+ if (sErrorDescription && sErrorDescription.status === 503) {
772
+ mParams = {
773
+ isInitialLoad503Error: true,
774
+ shellBack: true
775
+ };
776
+ } else {
777
+ mParams = {
778
+ title: oResourceBundle.getText("SAPFE_ERROR"),
779
+ description: sErrorDescription,
780
+ isDataReceivedError: true,
781
+ shellBack: true
782
+ };
783
+ }
784
+ messageHandler.showMessages(mParams);
785
+ })
786
+ .catch(function(oError) {
787
+ Log.error("Error while getting the core resource bundle", oError);
788
+ });
789
+ }
790
+ },
791
+
787
792
  /**
788
793
  * Requests side effects on a binding context to "refresh" it.
789
794
  * TODO: get rid of this once provided by the model