@sapui5/sap.fe.core 1.96.4 → 1.99.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 (253) hide show
  1. package/package.json +6 -5
  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 +5 -3
  6. package/src/sap/fe/core/AppStateHandler.js +229 -195
  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 -2606
  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 -809
  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 +63 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1627
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +559 -581
  27. package/src/sap/fe/core/actions/draft.ts +593 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -435
  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 -1192
  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 +235 -264
  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 +35 -25
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +79 -46
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +86 -10
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +109 -31
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +237 -104
  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 +3 -2
  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 +36 -8
  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 +112 -113
  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 +2 -1
  75. package/src/sap/fe/core/converters/ManifestSettings.ts +8 -1
  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 +76 -6
  79. package/src/sap/fe/core/converters/MetaModelConverter.ts +79 -15
  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 +85 -46
  85. package/src/sap/fe/core/converters/controls/Common/Action.js +16 -4
  86. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -5
  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 +60 -19
  92. package/src/sap/fe/core/converters/controls/Common/Form.ts +66 -14
  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 +503 -399
  96. package/src/sap/fe/core/converters/controls/Common/Table.ts +615 -480
  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 +6 -6
  104. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  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/ID.js +9 -1
  108. package/src/sap/fe/core/converters/helpers/ID.ts +4 -0
  109. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  110. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  111. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  112. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  113. package/src/sap/fe/core/converters/templates/ListReportConverter.js +29 -11
  114. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -20
  115. package/src/sap/fe/core/designtime/AppComponent.designtime.js +13 -3
  116. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  117. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  118. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  119. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  120. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  121. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  122. package/src/sap/fe/core/formatters/TableFormatter.js +65 -31
  123. package/src/sap/fe/core/formatters/TableFormatter.ts +62 -30
  124. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  125. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  126. package/src/sap/fe/core/fpm/Component.js +3 -2
  127. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  128. package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
  129. package/src/sap/fe/core/helpers/BindingExpression.js +479 -464
  130. package/src/sap/fe/core/helpers/BindingExpression.ts +477 -483
  131. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  132. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  133. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  134. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  135. package/src/sap/fe/core/helpers/EditState.js +81 -84
  136. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  137. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  138. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  139. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  140. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  141. package/src/sap/fe/core/helpers/KeepAliveHelper.js +210 -0
  142. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
  143. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
  144. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
  145. package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
  146. package/src/sap/fe/core/helpers/ModelHelper.js +229 -174
  147. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  148. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  149. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  150. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  151. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  152. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  153. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  154. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  155. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  156. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  157. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  158. package/src/sap/fe/core/library.js +30 -3
  159. package/src/sap/fe/core/library.support.js +12 -5
  160. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  161. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  162. package/src/sap/fe/core/messagebundle.properties +72 -10
  163. package/src/sap/fe/core/messagebundle_ar.properties +41 -0
  164. package/src/sap/fe/core/messagebundle_bg.properties +41 -0
  165. package/src/sap/fe/core/messagebundle_ca.properties +41 -0
  166. package/src/sap/fe/core/messagebundle_cs.properties +42 -1
  167. package/src/sap/fe/core/messagebundle_cy.properties +41 -0
  168. package/src/sap/fe/core/messagebundle_da.properties +41 -0
  169. package/src/sap/fe/core/messagebundle_de.properties +41 -0
  170. package/src/sap/fe/core/messagebundle_el.properties +41 -0
  171. package/src/sap/fe/core/messagebundle_en.properties +41 -0
  172. package/src/sap/fe/core/messagebundle_en_GB.properties +41 -0
  173. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -0
  174. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +35 -0
  175. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +41 -0
  176. package/src/sap/fe/core/messagebundle_es.properties +41 -0
  177. package/src/sap/fe/core/messagebundle_es_MX.properties +41 -0
  178. package/src/sap/fe/core/messagebundle_et.properties +41 -0
  179. package/src/sap/fe/core/messagebundle_fi.properties +41 -0
  180. package/src/sap/fe/core/messagebundle_fr.properties +46 -5
  181. package/src/sap/fe/core/messagebundle_fr_CA.properties +41 -0
  182. package/src/sap/fe/core/messagebundle_hi.properties +41 -0
  183. package/src/sap/fe/core/messagebundle_hr.properties +41 -0
  184. package/src/sap/fe/core/messagebundle_hu.properties +42 -1
  185. package/src/sap/fe/core/messagebundle_id.properties +45 -4
  186. package/src/sap/fe/core/messagebundle_it.properties +41 -0
  187. package/src/sap/fe/core/messagebundle_iw.properties +41 -0
  188. package/src/sap/fe/core/messagebundle_ja.properties +50 -9
  189. package/src/sap/fe/core/messagebundle_kk.properties +41 -0
  190. package/src/sap/fe/core/messagebundle_ko.properties +41 -0
  191. package/src/sap/fe/core/messagebundle_lt.properties +41 -0
  192. package/src/sap/fe/core/messagebundle_lv.properties +41 -0
  193. package/src/sap/fe/core/messagebundle_ms.properties +41 -0
  194. package/src/sap/fe/core/messagebundle_nl.properties +41 -0
  195. package/src/sap/fe/core/messagebundle_no.properties +41 -0
  196. package/src/sap/fe/core/messagebundle_pl.properties +41 -0
  197. package/src/sap/fe/core/messagebundle_pt.properties +43 -2
  198. package/src/sap/fe/core/messagebundle_pt_PT.properties +41 -0
  199. package/src/sap/fe/core/messagebundle_ro.properties +41 -0
  200. package/src/sap/fe/core/messagebundle_ru.properties +41 -0
  201. package/src/sap/fe/core/messagebundle_sh.properties +41 -0
  202. package/src/sap/fe/core/messagebundle_sk.properties +41 -0
  203. package/src/sap/fe/core/messagebundle_sl.properties +41 -0
  204. package/src/sap/fe/core/messagebundle_sv.properties +42 -1
  205. package/src/sap/fe/core/messagebundle_th.properties +41 -0
  206. package/src/sap/fe/core/messagebundle_tr.properties +41 -0
  207. package/src/sap/fe/core/messagebundle_uk.properties +41 -0
  208. package/src/sap/fe/core/messagebundle_vi.properties +41 -0
  209. package/src/sap/fe/core/messagebundle_zh_CN.properties +41 -0
  210. package/src/sap/fe/core/messagebundle_zh_TW.properties +41 -0
  211. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  212. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  213. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  214. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  215. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  216. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
  217. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  218. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  219. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  220. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  221. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1166
  222. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  223. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  224. package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
  225. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +41 -84
  226. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +56 -99
  227. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
  228. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  229. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  230. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  231. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  232. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  233. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  234. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  235. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  236. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  237. package/src/sap/fe/core/templating/DataModelPathHelper.js +6 -24
  238. package/src/sap/fe/core/templating/DataModelPathHelper.ts +10 -23
  239. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  240. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  241. package/src/sap/fe/core/templating/EntitySetHelper.js +80 -7
  242. package/src/sap/fe/core/templating/EntitySetHelper.ts +42 -2
  243. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  244. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  245. package/src/sap/fe/core/templating/FilterHelper.js +139 -70
  246. package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
  247. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  248. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  249. package/src/sap/fe/core/templating/UIFormatters.js +45 -113
  250. package/src/sap/fe/core/templating/UIFormatters.ts +39 -76
  251. package/src/sap/fe/core/type/Email.js +1 -1
  252. package/src/sap/fe/core/type/Email.ts +4 -6
  253. package/ui5.yaml +0 -3
@@ -0,0 +1,212 @@
1
+ import Service from "sap/ui/core/service/Service";
2
+ import ServiceFactory from "sap/ui/core/service/ServiceFactory";
3
+ import CacheManager from "sap/ui/core/cache/CacheManager";
4
+ import hash from "sap/base/strings/hash";
5
+ import { ServiceContext } from "sap/ui/core/service";
6
+ import jQuery from "sap/ui/thirdparty/jquery";
7
+ import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
8
+ import { AppComponent } from "sap/fe/core";
9
+ import UIComponent from "sap/ui/core/UIComponent";
10
+
11
+ function getMetadataETag(sUrl: any, sETag: any, mUpdatedMetaModelETags: any) {
12
+ return new Promise(function(resolve) {
13
+ // There is an Url in the FE cache, that's not in the MetaModel yet -> we need to check the ETag
14
+ (jQuery as any)
15
+ .ajax(sUrl, { method: "GET" })
16
+ .done(function(oResponse: any, sTextStatus: any, jqXHR: any) {
17
+ // ETag is not the same -> invalid
18
+ // ETag is the same -> valid
19
+ // If ETag is available use it, otherwise use Last-Modified
20
+ mUpdatedMetaModelETags[sUrl] = jqXHR.getResponseHeader("ETag") || jqXHR.getResponseHeader("Last-Modified");
21
+ resolve(sETag === mUpdatedMetaModelETags[sUrl]);
22
+ })
23
+ .fail(function() {
24
+ // Case 2z - Make sure we update the map so that we invalidate the cache
25
+ mUpdatedMetaModelETags[sUrl] = "";
26
+ resolve(false);
27
+ });
28
+ });
29
+ }
30
+ type CacheHandlerServiceSettings = {
31
+ metaModel: ODataMetaModel;
32
+ };
33
+
34
+ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
35
+ resolveFn: any;
36
+ rejectFn: any;
37
+ initPromise!: Promise<any>;
38
+
39
+ oFactory!: CacheHandlerServiceFactory;
40
+ oMetaModel!: ODataMetaModel;
41
+ oAppComponent: AppComponent;
42
+ oComponent!: UIComponent;
43
+ mCacheNeedsInvalidate: any;
44
+
45
+ init() {
46
+ const oContext = this.getContext();
47
+ this.oFactory = oContext.factory;
48
+ const mSettings = oContext.settings;
49
+ if (!mSettings.metaModel) {
50
+ throw new Error("a `metaModel` property is expected when instantiating the CacheHandlerService");
51
+ }
52
+ this.oMetaModel = mSettings.metaModel;
53
+ this.oAppComponent = mSettings.appComponent;
54
+ this.oComponent = mSettings.component;
55
+ this.initPromise = this.oMetaModel.fetchEntityContainer().then(() => {
56
+ return this;
57
+ });
58
+ this.mCacheNeedsInvalidate = {};
59
+ }
60
+ exit() {
61
+ // Deregister global instance
62
+ this.oFactory.removeGlobalInstance(this.oMetaModel);
63
+ }
64
+ validateCacheKey(sCacheIdentifier: any): Promise<string> {
65
+ // Keep track if the cache will anyway need to be updated
66
+ let bCacheNeedUpdate = true;
67
+ return CacheManager.get(sCacheIdentifier)
68
+ .then((mCacheOutput: any) => {
69
+ // We provide a default key so that an xml view cache is written
70
+ const mMetaModelETags = this.getETags();
71
+ let sUpdatedCacheKey: string | null = JSON.stringify(mMetaModelETags);
72
+ // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
73
+ if (mCacheOutput) {
74
+ // Case #2 - Cache entry found, check if it's still valid
75
+ const mUpdatedMetaModelETags: any = {};
76
+ const mCachedETags = JSON.parse(mCacheOutput.cachedETags);
77
+ return Promise.all(
78
+ Object.keys(mCachedETags).map(function(sUrl: string) {
79
+ // Check validity of every single Url that's in the FE Cache object
80
+ if (mCachedETags[sUrl]) {
81
+ if (mMetaModelETags[sUrl]) {
82
+ // Case #2a - Same number of ETags in the cache and in the metadata
83
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
84
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
85
+ } else {
86
+ // Case #2b - No ETag in the cache for that URL, cachedETags was enhanced
87
+ return getMetadataETag(sUrl, mCachedETags[sUrl], mUpdatedMetaModelETags);
88
+ }
89
+ } else {
90
+ // Case #2z - Last Templating added an URL without ETag
91
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
92
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
93
+ }
94
+ })
95
+ ).then(function(aValidETags: any[]) {
96
+ bCacheNeedUpdate = aValidETags.indexOf(false) >= 0;
97
+ // Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
98
+ // Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
99
+ // Case #2c - Same number of ETags but different values, main service Etag has changed, use that as cache key
100
+ // Case #2d - Different number of ETags but different value, main service Etag or linked service Etag has changed, new ETags should be used as cacheKey
101
+ // Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
102
+ if (
103
+ Object.keys(mUpdatedMetaModelETags).some(function(sUrl: string) {
104
+ return !mUpdatedMetaModelETags[sUrl];
105
+ })
106
+ ) {
107
+ // At least one of the MetaModel URLs doesn't provide an ETag, so no caching
108
+ return null;
109
+ } else {
110
+ return bCacheNeedUpdate ? JSON.stringify(mUpdatedMetaModelETags) : mCacheOutput.viewCacheKey;
111
+ }
112
+ });
113
+ } else if (
114
+ Object.keys(mMetaModelETags).some(function(sUrl: string) {
115
+ return !mMetaModelETags[sUrl];
116
+ })
117
+ ) {
118
+ // Check if cache can be used (all the metadata and annotations have to provide at least a ETag or a Last-Modified header)
119
+ // Case #1-b - No Cache, mCacheOuput is empty, but metamodel etags cannot be used, so no caching
120
+ bCacheNeedUpdate = true;
121
+ sUpdatedCacheKey = null;
122
+ }
123
+ return sUpdatedCacheKey;
124
+ })
125
+ .catch(() => {
126
+ // Don't use view cache in case of issues with the LRU cache
127
+ bCacheNeedUpdate = true;
128
+ return null;
129
+ })
130
+ .then((sCacheKey: any) => {
131
+ this.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
132
+ return sCacheKey;
133
+ });
134
+ }
135
+ invalidateIfNeeded(sCacheKeys: string, sCacheIdentifier: string) {
136
+ // Check FE cache after XML view is processed completely
137
+ const sDataSourceETags = JSON.stringify(this.getETags());
138
+ if (this.mCacheNeedsInvalidate[sCacheIdentifier] || (sCacheKeys && sCacheKeys !== sDataSourceETags)) {
139
+ // Something in the sources and/or its ETags changed -> update the FE cache
140
+ const mCacheKeys: any = {};
141
+ // New ETags that need to be verified, may differ from the one used to generate the view
142
+ mCacheKeys.cachedETags = sDataSourceETags;
143
+ // Old ETags that are used for the xml view cache as key
144
+ mCacheKeys.viewCacheKey = sCacheKeys;
145
+ return CacheManager.set(sCacheIdentifier, mCacheKeys);
146
+ } else {
147
+ return Promise.resolve();
148
+ }
149
+ }
150
+ getETags() {
151
+ const mMetaModelETags = (this.oMetaModel as any).getETags();
152
+ // ETags from UI5 are either a Date or a string, let's rationalize that
153
+ Object.keys(mMetaModelETags).forEach(function(sMetaModelKey: string) {
154
+ if (mMetaModelETags[sMetaModelKey] instanceof Date) {
155
+ // MetaModel contains a Last-Modified timestamp for the URL
156
+ mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
157
+ }
158
+ });
159
+
160
+ // add also the manifest hash as UI5 only considers the root component hash
161
+ const oManifestContent = this.oAppComponent.getManifest();
162
+ const sManifestHash = hash(
163
+ JSON.stringify({
164
+ sapApp: oManifestContent["sap.app"],
165
+ viewData: (this.oComponent as any).getViewData()
166
+ })
167
+ );
168
+ mMetaModelETags["manifest"] = sManifestHash;
169
+ return mMetaModelETags;
170
+ }
171
+ getInterface(): any {
172
+ return this;
173
+ }
174
+ }
175
+
176
+ class CacheHandlerServiceFactory extends ServiceFactory<CacheHandlerServiceSettings> {
177
+ _oInstanceRegistry: Record<string, CacheHandlerService | null> = {};
178
+ createInstance(oServiceContext: ServiceContext<CacheHandlerServiceSettings>) {
179
+ const sMetaModelId = oServiceContext.settings.metaModel.getId();
180
+ let cacheHandlerInstance = this._oInstanceRegistry[sMetaModelId];
181
+ if (!cacheHandlerInstance) {
182
+ this._oInstanceRegistry[sMetaModelId] = cacheHandlerInstance = new CacheHandlerService(
183
+ Object.assign(
184
+ {
185
+ factory: this,
186
+ scopeObject: null,
187
+ scopeType: "service"
188
+ },
189
+ oServiceContext
190
+ )
191
+ );
192
+ }
193
+
194
+ return cacheHandlerInstance.initPromise
195
+ .then(() => {
196
+ return this._oInstanceRegistry[sMetaModelId] as CacheHandlerService;
197
+ })
198
+ .catch((e: any) => {
199
+ // In case of error delete the global instance;
200
+ this._oInstanceRegistry[sMetaModelId] = null;
201
+ throw e;
202
+ });
203
+ }
204
+ getInstance(oMetaModel: ODataMetaModel) {
205
+ return this._oInstanceRegistry[oMetaModel.getId()];
206
+ }
207
+ removeGlobalInstance(oMetaModel: ODataMetaModel) {
208
+ this._oInstanceRegistry[oMetaModel.getId()] = null;
209
+ }
210
+ }
211
+
212
+ export default CacheHandlerServiceFactory;
@@ -2,7 +2,7 @@
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/ui/core/service/ServiceFactory", "sap/ui/core/service/Service", "../converters/MetaModelConverter", "sap/ui/VersionInfo"], function (ServiceFactory, Service, MetaModelConverter, VersionInfo) {
5
+ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Service", "../converters/MetaModelConverter", "sap/ui/VersionInfo", "sap/base/util/UriParameters"], function (ServiceFactory, Service, MetaModelConverter, VersionInfo, UriParameters) {
6
6
  "use strict";
7
7
 
8
8
  var DefaultEnvironmentCapabilities = MetaModelConverter.DefaultEnvironmentCapabilities;
@@ -19,7 +19,7 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
19
19
 
20
20
  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); }; }
21
21
 
22
- function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
22
+ 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); }
23
23
 
24
24
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
25
25
 
@@ -59,6 +59,7 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
59
59
  });
60
60
  _this.environmentCapabilities.UShell = !!(sap && sap.ushell && sap.ushell.Container);
61
61
  _this.environmentCapabilities.IntentBasedNavigation = !!(sap && sap.ushell && sap.ushell.Container);
62
+ _this.environmentCapabilities.Situations = UriParameters.fromQuery(window.location.search).get("sap-fe-xx-situations") === "true";
62
63
  _this.environmentCapabilities = Object.assign(_this.environmentCapabilities, oContext.settings);
63
64
 
64
65
  _this.resolveFn(_this);
@@ -125,4 +126,4 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
125
126
 
126
127
  return EnvironmentServiceFactory;
127
128
  }, false);
128
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJWZXJzaW9uSW5mbyIsImxvYWQiLCJ1bmRlZmluZWQiLCJ0aGVuIiwidmVyc2lvbkluZm8iLCJDaGFydCIsImxpYnJhcmllcyIsImZpbmQiLCJsaWIiLCJuYW1lIiwiTWljcm9DaGFydCIsIlVTaGVsbCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsInNldHRpbmdzIiwiY2F0Y2giLCJsaWJyYXJ5TmFtZSIsInVpIiwiZ2V0Q29yZSIsImxvYWRMaWJyYXJ5IiwicmVwbGFjZSIsImFzeW5jIiwiZSIsIm9DYXBhYmlsaXRpZXMiLCJTZXJ2aWNlIiwiRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeSIsIm9TZXJ2aWNlQ29udGV4dCIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQUVNQSw4Qjs7Ozs7Ozs7Ozs7OzthQUtMO0FBRUEsc0JBQU87QUFBQTs7QUFDTixhQUFLQyxXQUFMLEdBQW1CLElBQUlDLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFBcUI7QUFDbkQsVUFBQSxLQUFJLENBQUNDLFNBQUwsR0FBaUJGLE9BQWpCO0FBQ0EsVUFBQSxLQUFJLENBQUNHLFFBQUwsR0FBZ0JGLE1BQWhCO0FBQ0EsU0FIa0IsQ0FBbkI7QUFJQSxZQUFNRyxRQUFRLEdBQUcsS0FBS0MsVUFBTCxFQUFqQjtBQUNBLGFBQUtDLHVCQUFMLEdBQStCQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCQyw4QkFBbEIsQ0FBL0I7QUFDQUMsUUFBQUEsV0FBVyxDQUFDQyxJQUFaLENBQWlCQyxTQUFqQixFQUNFQyxJQURGLENBQ08sVUFBQUMsV0FBVyxFQUFJO0FBQ3BCLFVBQUEsS0FBSSxDQUFDUix1QkFBTCxDQUE2QlMsS0FBN0IsR0FBcUMsQ0FBQyxDQUFDRCxXQUFXLENBQUNFLFNBQVosQ0FBc0JDLElBQXRCLENBQTJCLFVBQUNDLEdBQUQ7QUFBQSxtQkFBY0EsR0FBRyxDQUFDQyxJQUFKLEtBQWEsU0FBM0I7QUFBQSxXQUEzQixDQUF2QztBQUNBLFVBQUEsS0FBSSxDQUFDYix1QkFBTCxDQUE2QmMsVUFBN0IsR0FBMEMsQ0FBQyxDQUFDTixXQUFXLENBQUNFLFNBQVosQ0FBc0JDLElBQXRCLENBQzNDLFVBQUNDLEdBQUQ7QUFBQSxtQkFBY0EsR0FBRyxDQUFDQyxJQUFKLEtBQWEseUJBQTNCO0FBQUEsV0FEMkMsQ0FBNUM7QUFHQSxVQUFBLEtBQUksQ0FBQ2IsdUJBQUwsQ0FBNkJlLE1BQTdCLEdBQXNDLENBQUMsRUFBRUMsR0FBRyxJQUFJQSxHQUFHLENBQUNDLE1BQVgsSUFBcUJELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFsQyxDQUF2QztBQUNBLFVBQUEsS0FBSSxDQUFDbEIsdUJBQUwsQ0FBNkJtQixxQkFBN0IsR0FBcUQsQ0FBQyxFQUFFSCxHQUFHLElBQUlBLEdBQUcsQ0FBQ0MsTUFBWCxJQUFxQkQsR0FBRyxDQUFDQyxNQUFKLENBQVdDLFNBQWxDLENBQXREO0FBQ0EsVUFBQSxLQUFJLENBQUNsQix1QkFBTCxHQUErQkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsS0FBSSxDQUFDRix1QkFBbkIsRUFBNENGLFFBQVEsQ0FBQ3NCLFFBQXJELENBQS9COztBQUNBLFVBQUEsS0FBSSxDQUFDeEIsU0FBTCxDQUFlLEtBQWY7QUFDQSxTQVZGLEVBV0V5QixLQVhGLENBV1EsS0FBS3hCLFFBWGI7QUFZQTs7O2FBRUQsd0JBQWV5QixXQUFmLEVBQXNEO0FBQ3JELGVBQU8sSUFBSTdCLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCO0FBQ3BDLGNBQUk7QUFDSHNCLFlBQUFBLEdBQUcsQ0FBQ08sRUFBSixDQUNFQyxPQURGLEdBRUVDLFdBRkYsV0FFaUJILFdBQVcsQ0FBQ0ksT0FBWixDQUFvQixLQUFwQixFQUEyQixHQUEzQixDQUZqQixHQUVvRDtBQUFFQyxjQUFBQSxLQUFLLEVBQUU7QUFBVCxhQUZwRCxFQUdFcEIsSUFIRixDQUdPLFlBQVc7QUFDaEJiLGNBQUFBLE9BQU8sQ0FBQyxJQUFELENBQVA7QUFDQSxhQUxGLEVBTUUyQixLQU5GLENBTVEsWUFBVztBQUNqQjNCLGNBQUFBLE9BQU8sQ0FBQyxLQUFELENBQVA7QUFDQSxhQVJGO0FBU0EsV0FWRCxDQVVFLE9BQU9rQyxDQUFQLEVBQVU7QUFDWGxDLFlBQUFBLE9BQU8sQ0FBQyxLQUFELENBQVA7QUFDQTtBQUNELFNBZE0sQ0FBUDtBQWVBOzs7YUFFRCx5QkFBdUJtQyxhQUF2QixFQUErRDtBQUM5RCxhQUFLN0IsdUJBQUwsR0FBK0I2QixhQUEvQjtBQUNBOzs7YUFFRCwyQkFBeUI7QUFDeEIsZUFBTyxLQUFLN0IsdUJBQVo7QUFDQTs7O2FBRUQsd0JBQW9CO0FBQ25CLGVBQU8sSUFBUDtBQUNBOzs7O0lBeEQyQzhCLE87O01BMkR2Q0MseUI7Ozs7Ozs7Ozs7Ozs7YUFDTCx3QkFBZUMsZUFBZixFQUF5RTtBQUN4RSxZQUFNQyw4QkFBOEIsR0FBRyxJQUFJMUMsOEJBQUosQ0FBbUN5QyxlQUFuQyxDQUF2QztBQUNBLGVBQU9DLDhCQUE4QixDQUFDekMsV0FBdEM7QUFDQTs7OztJQUpzQzBDLGM7O1NBT3pCSCx5QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VydmljZUZhY3RvcnksIFNlcnZpY2UsIFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2VcIjtcbmltcG9ydCB7IERlZmF1bHRFbnZpcm9ubWVudENhcGFiaWxpdGllcywgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFZlcnNpb25JbmZvIH0gZnJvbSBcInNhcC91aVwiO1xuXG5jbGFzcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPEVudmlyb25tZW50Q2FwYWJpbGl0aWVzPiB7XG5cdHJlc29sdmVGbjogYW55O1xuXHRyZWplY3RGbjogYW55O1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMhOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcztcblx0Ly8gITogbWVhbnMgdGhhdCB3ZSBrbm93IGl0IHdpbGwgYmUgYXNzaWduZWQgYmVmb3JlIHVzYWdlXG5cblx0aW5pdCgpIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpO1xuXHRcdFZlcnNpb25JbmZvLmxvYWQodW5kZWZpbmVkIGFzIGFueSlcblx0XHRcdC50aGVuKHZlcnNpb25JbmZvID0+IHtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5DaGFydCA9ICEhdmVyc2lvbkluZm8ubGlicmFyaWVzLmZpbmQoKGxpYjogYW55KSA9PiBsaWIubmFtZSA9PT0gXCJzYXAudml6XCIpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQgPSAhIXZlcnNpb25JbmZvLmxpYnJhcmllcy5maW5kKFxuXHRcdFx0XHRcdChsaWI6IGFueSkgPT4gbGliLm5hbWUgPT09IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlVTaGVsbCA9ICEhKHNhcCAmJiBzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyKTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24gPSAhIShzYXAgJiYgc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lcik7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIG9Db250ZXh0LnNldHRpbmdzKTtcblx0XHRcdFx0dGhpcy5yZXNvbHZlRm4odGhpcyk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKHRoaXMucmVqZWN0Rm4pO1xuXHR9XG5cblx0cmVzb2x2ZUxpYnJhcnkobGlicmFyeU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzYXAudWlcblx0XHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdFx0LmxvYWRMaWJyYXJ5KGAke2xpYnJhcnlOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIil9YCwgeyBhc3luYzogdHJ1ZSB9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDYXBhYmlsaXRpZXMob0NhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpIHtcblx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gb0NhcGFiaWxpdGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRDYXBhYmlsaXRpZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8RW52aXJvbm1lbnRDYXBhYmlsaXRpZXM+IHtcblx0Y3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxFbnZpcm9ubWVudENhcGFiaWxpdGllcz4pIHtcblx0XHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgPSBuZXcgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIGVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5O1xuIl19
129
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJWZXJzaW9uSW5mbyIsImxvYWQiLCJ1bmRlZmluZWQiLCJ0aGVuIiwidmVyc2lvbkluZm8iLCJDaGFydCIsImxpYnJhcmllcyIsImZpbmQiLCJsaWIiLCJuYW1lIiwiTWljcm9DaGFydCIsIlVTaGVsbCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIlNpdHVhdGlvbnMiLCJVcmlQYXJhbWV0ZXJzIiwiZnJvbVF1ZXJ5Iiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJzZXR0aW5ncyIsImNhdGNoIiwibGlicmFyeU5hbWUiLCJ1aSIsImdldENvcmUiLCJsb2FkTGlicmFyeSIsInJlcGxhY2UiLCJhc3luYyIsImUiLCJvQ2FwYWJpbGl0aWVzIiwiU2VydmljZSIsIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFNTUEsOEI7Ozs7Ozs7Ozs7Ozs7YUFLTDtBQUVBLHNCQUFPO0FBQUE7O0FBQ04sYUFBS0MsV0FBTCxHQUFtQixJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ25ELFVBQUEsS0FBSSxDQUFDQyxTQUFMLEdBQWlCRixPQUFqQjtBQUNBLFVBQUEsS0FBSSxDQUFDRyxRQUFMLEdBQWdCRixNQUFoQjtBQUNBLFNBSGtCLENBQW5CO0FBSUEsWUFBTUcsUUFBUSxHQUFHLEtBQUtDLFVBQUwsRUFBakI7QUFDQSxhQUFLQyx1QkFBTCxHQUErQkMsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQkMsOEJBQWxCLENBQS9CO0FBQ0FDLFFBQUFBLFdBQVcsQ0FBQ0MsSUFBWixDQUFpQkMsU0FBakIsRUFDRUMsSUFERixDQUNPLFVBQUFDLFdBQVcsRUFBSTtBQUNwQixVQUFBLEtBQUksQ0FBQ1IsdUJBQUwsQ0FBNkJTLEtBQTdCLEdBQXFDLENBQUMsQ0FBQ0QsV0FBVyxDQUFDRSxTQUFaLENBQXNCQyxJQUF0QixDQUEyQixVQUFDQyxHQUFEO0FBQUEsbUJBQWNBLEdBQUcsQ0FBQ0MsSUFBSixLQUFhLFNBQTNCO0FBQUEsV0FBM0IsQ0FBdkM7QUFDQSxVQUFBLEtBQUksQ0FBQ2IsdUJBQUwsQ0FBNkJjLFVBQTdCLEdBQTBDLENBQUMsQ0FBQ04sV0FBVyxDQUFDRSxTQUFaLENBQXNCQyxJQUF0QixDQUMzQyxVQUFDQyxHQUFEO0FBQUEsbUJBQWNBLEdBQUcsQ0FBQ0MsSUFBSixLQUFhLHlCQUEzQjtBQUFBLFdBRDJDLENBQTVDO0FBR0EsVUFBQSxLQUFJLENBQUNiLHVCQUFMLENBQTZCZSxNQUE3QixHQUFzQyxDQUFDLEVBQUVDLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxNQUFYLElBQXFCRCxHQUFHLENBQUNDLE1BQUosQ0FBV0MsU0FBbEMsQ0FBdkM7QUFDQSxVQUFBLEtBQUksQ0FBQ2xCLHVCQUFMLENBQTZCbUIscUJBQTdCLEdBQXFELENBQUMsRUFBRUgsR0FBRyxJQUFJQSxHQUFHLENBQUNDLE1BQVgsSUFBcUJELEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFsQyxDQUF0RDtBQUNBLFVBQUEsS0FBSSxDQUFDbEIsdUJBQUwsQ0FBNkJvQixVQUE3QixHQUNDQyxhQUFhLENBQUNDLFNBQWQsQ0FBd0JDLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBeEMsRUFBZ0RDLEdBQWhELENBQW9ELHNCQUFwRCxNQUFnRixNQURqRjtBQUVBLFVBQUEsS0FBSSxDQUFDMUIsdUJBQUwsR0FBK0JDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEtBQUksQ0FBQ0YsdUJBQW5CLEVBQTRDRixRQUFRLENBQUM2QixRQUFyRCxDQUEvQjs7QUFDQSxVQUFBLEtBQUksQ0FBQy9CLFNBQUwsQ0FBZSxLQUFmO0FBQ0EsU0FaRixFQWFFZ0MsS0FiRixDQWFRLEtBQUsvQixRQWJiO0FBY0E7OzthQUVELHdCQUFlZ0MsV0FBZixFQUFzRDtBQUNyRCxlQUFPLElBQUlwQyxPQUFKLENBQVksVUFBU0MsT0FBVCxFQUFrQjtBQUNwQyxjQUFJO0FBQ0ZzQixZQUFBQSxHQUFHLENBQUNjLEVBQUosQ0FBT0MsT0FBUCxHQUFpQkMsV0FBakIsV0FBZ0NILFdBQVcsQ0FBQ0ksT0FBWixDQUFvQixLQUFwQixFQUEyQixHQUEzQixDQUFoQyxHQUFtRTtBQUFFQyxjQUFBQSxLQUFLLEVBQUU7QUFBVCxhQUFuRSxDQUFELENBQ0UzQixJQURGLENBQ08sWUFBVztBQUNoQmIsY0FBQUEsT0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNBLGFBSEYsRUFJRWtDLEtBSkYsQ0FJUSxZQUFXO0FBQ2pCbEMsY0FBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNBLGFBTkY7QUFPQSxXQVJELENBUUUsT0FBT3lDLENBQVAsRUFBVTtBQUNYekMsWUFBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNBO0FBQ0QsU0FaTSxDQUFQO0FBYUE7OzthQUVELHlCQUF1QjBDLGFBQXZCLEVBQStEO0FBQzlELGFBQUtwQyx1QkFBTCxHQUErQm9DLGFBQS9CO0FBQ0E7OzthQUVELDJCQUF5QjtBQUN4QixlQUFPLEtBQUtwQyx1QkFBWjtBQUNBOzs7YUFFRCx3QkFBb0I7QUFDbkIsZUFBTyxJQUFQO0FBQ0E7Ozs7SUF4RDJDcUMsTzs7TUEyRHZDQyx5Qjs7Ozs7Ozs7Ozs7OzthQUNMLHdCQUFlQyxlQUFmLEVBQXlFO0FBQ3hFLFlBQU1DLDhCQUE4QixHQUFHLElBQUlqRCw4QkFBSixDQUFtQ2dELGVBQW5DLENBQXZDO0FBQ0EsZUFBT0MsOEJBQThCLENBQUNoRCxXQUF0QztBQUNBOzs7O0lBSnNDaUQsYzs7U0FPekJILHlCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2VcIjtcblxuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzLCBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFZlcnNpb25JbmZvIGZyb20gXCJzYXAvdWkvVmVyc2lvbkluZm9cIjtcbmltcG9ydCBVcmlQYXJhbWV0ZXJzIGZyb20gXCJzYXAvYmFzZS91dGlsL1VyaVBhcmFtZXRlcnNcIjtcblxuY2xhc3MgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxFbnZpcm9ubWVudENhcGFiaWxpdGllcz4ge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzITogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXM7XG5cdC8vICE6IG1lYW5zIHRoYXQgd2Uga25vdyBpdCB3aWxsIGJlIGFzc2lnbmVkIGJlZm9yZSB1c2FnZVxuXG5cdGluaXQoKSB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTtcblx0XHRWZXJzaW9uSW5mby5sb2FkKHVuZGVmaW5lZCBhcyBhbnkpXG5cdFx0XHQudGhlbih2ZXJzaW9uSW5mbyA9PiB7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMuQ2hhcnQgPSAhIXZlcnNpb25JbmZvLmxpYnJhcmllcy5maW5kKChsaWI6IGFueSkgPT4gbGliLm5hbWUgPT09IFwic2FwLnZpelwiKTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5NaWNyb0NoYXJ0ID0gISF2ZXJzaW9uSW5mby5saWJyYXJpZXMuZmluZChcblx0XHRcdFx0XHQobGliOiBhbnkpID0+IGxpYi5uYW1lID09PSBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCJcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5VU2hlbGwgPSAhIShzYXAgJiYgc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lcik7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uID0gISEoc2FwICYmIHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXIpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNpdHVhdGlvbnMgPVxuXHRcdFx0XHRcdFVyaVBhcmFtZXRlcnMuZnJvbVF1ZXJ5KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcInNhcC1mZS14eC1zaXR1YXRpb25zXCIpID09PSBcInRydWVcIjtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IE9iamVjdC5hc3NpZ24odGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcywgb0NvbnRleHQuc2V0dGluZ3MpO1xuXHRcdFx0XHR0aGlzLnJlc29sdmVGbih0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHRyZXNvbHZlTGlicmFyeShsaWJyYXJ5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdChzYXAudWkuZ2V0Q29yZSgpLmxvYWRMaWJyYXJ5KGAke2xpYnJhcnlOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIil9YCwgeyBhc3luYzogdHJ1ZSB9KSBhcyBQcm9taXNlPG9iamVjdD4pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHNldENhcGFiaWxpdGllcyhvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcykge1xuXHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBvQ2FwYWJpbGl0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldENhcGFiaWxpdGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcztcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIEVudmlyb25tZW50U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxFbnZpcm9ubWVudENhcGFiaWxpdGllcz4ge1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PEVudmlyb25tZW50Q2FwYWJpbGl0aWVzPikge1xuXHRcdGNvbnN0IGVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSA9IG5ldyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVudmlyb25tZW50U2VydmljZUZhY3Rvcnk7XG4iXX0=
@@ -1,6 +1,10 @@
1
- import { ServiceFactory, Service, ServiceContext } from "sap/ui/core/service";
1
+ import ServiceFactory from "sap/ui/core/service/ServiceFactory";
2
+ import Service from "sap/ui/core/service/Service";
3
+ import { ServiceContext } from "sap/ui/core/service";
4
+
2
5
  import { DefaultEnvironmentCapabilities, EnvironmentCapabilities } from "../converters/MetaModelConverter";
3
- import { VersionInfo } from "sap/ui";
6
+ import VersionInfo from "sap/ui/VersionInfo";
7
+ import UriParameters from "sap/base/util/UriParameters";
4
8
 
5
9
  class EnvironmentCapabilitiesService extends Service<EnvironmentCapabilities> {
6
10
  resolveFn: any;
@@ -24,6 +28,8 @@ class EnvironmentCapabilitiesService extends Service<EnvironmentCapabilities> {
24
28
  );
25
29
  this.environmentCapabilities.UShell = !!(sap && sap.ushell && sap.ushell.Container);
26
30
  this.environmentCapabilities.IntentBasedNavigation = !!(sap && sap.ushell && sap.ushell.Container);
31
+ this.environmentCapabilities.Situations =
32
+ UriParameters.fromQuery(window.location.search).get("sap-fe-xx-situations") === "true";
27
33
  this.environmentCapabilities = Object.assign(this.environmentCapabilities, oContext.settings);
28
34
  this.resolveFn(this);
29
35
  })
@@ -33,9 +39,7 @@ class EnvironmentCapabilitiesService extends Service<EnvironmentCapabilities> {
33
39
  resolveLibrary(libraryName: string): Promise<boolean> {
34
40
  return new Promise(function(resolve) {
35
41
  try {
36
- sap.ui
37
- .getCore()
38
- .loadLibrary(`${libraryName.replace(/\./g, "/")}`, { async: true })
42
+ (sap.ui.getCore().loadLibrary(`${libraryName.replace(/\./g, "/")}`, { async: true }) as Promise<object>)
39
43
  .then(function() {
40
44
  resolve(true);
41
45
  })