@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,123 +1,107 @@
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
-
6
- sap.ui.define(["sap/base/Log"], function(Log) {
7
- "use strict";
8
-
9
- var _iTimeoutInSeconds = 30,
10
- _mLockCounters = {},
11
- _oReferenceDummy = {
12
- getId: function() {
13
- return "BusyLocker.ReferenceDummy";
14
- },
15
- setBusy: function(bBusy) {
16
- Log.info("setBusy(" + bBusy + ") triggered on dummy reference");
17
- }
18
- };
19
-
20
- function getLockCountId(oReference, sPath) {
21
- return oReference.getId() + (sPath || "/busy");
22
- }
23
-
24
- function isLocked(oReference, sPath) {
25
- return getLockCountId(oReference, sPath) in _mLockCounters;
26
- }
27
-
28
- function getLockCountEntry(oReference, sPath) {
29
- if (!oReference || !oReference.getId) {
30
- Log.warning("No reference for BusyLocker, using dummy reference");
31
- oReference = _oReferenceDummy;
32
- }
33
-
34
- var sPath = sPath || "/busy",
35
- sId = getLockCountId(oReference, sPath);
36
-
37
- if (!(sId in _mLockCounters)) {
38
- _mLockCounters[sId] = {
39
- id: sId,
40
- path: sPath,
41
- reference: oReference,
42
- count: 0
43
- };
44
- }
45
- return _mLockCounters[sId];
46
- }
47
-
48
- function deleteLockCountEntry(mLockCountEntry) {
49
- delete _mLockCounters[mLockCountEntry.id];
50
- }
51
-
52
- function applyLockState(mLockCountEntry) {
53
- var bIsModel = mLockCountEntry.reference.isA && mLockCountEntry.reference.isA("sap.ui.model.Model"),
54
- bBusy = mLockCountEntry.count !== 0;
55
-
56
- if (bIsModel) {
57
- mLockCountEntry.reference.setProperty(mLockCountEntry.path, bBusy, undefined, true);
58
- } else if (mLockCountEntry.reference.setBusy) {
59
- mLockCountEntry.reference.setBusy(bBusy);
60
- }
61
-
62
- clearTimeout(mLockCountEntry.timeout);
63
- if (bBusy) {
64
- mLockCountEntry.timeout = setTimeout(function() {
65
- Log.error(
66
- "busy lock for " +
67
- mLockCountEntry.id +
68
- " with value " +
69
- mLockCountEntry.count +
70
- " timed out after " +
71
- _iTimeoutInSeconds +
72
- " seconds!"
73
- );
74
- }, _iTimeoutInSeconds * 1000);
75
- } else {
76
- deleteLockCountEntry(mLockCountEntry);
77
- }
78
-
79
- return bBusy;
80
- }
81
-
82
- function changeLockCount(mLockCountEntry, iDelta) {
83
- if (iDelta === 0) {
84
- mLockCountEntry.count = 0;
85
- Log.info("busy lock count '" + mLockCountEntry.id + "' was reset to 0");
86
- } else {
87
- mLockCountEntry.count += iDelta;
88
- Log.info("busy lock count '" + mLockCountEntry.id + "' is " + mLockCountEntry.count);
89
- }
90
- }
91
-
92
- return {
93
- /**
94
- *
95
- * @param oModelOrControl
96
- * @param [sPath]
97
- * @returns {boolean}
98
- */
99
- lock: function(oModelOrControl, sPath) {
100
- return this._updateLock(oModelOrControl, sPath, 1);
101
- },
102
-
103
- /**
104
- *
105
- * @param oModelOrControl
106
- * @param [sPath]
107
- * @returns {boolean}
108
- */
109
- unlock: function(oModelOrControl, sPath) {
110
- return this._updateLock(oModelOrControl, sPath, -1);
111
- },
112
-
113
- isLocked: function(oModelOrControl, sPath) {
114
- return isLocked(oModelOrControl, sPath);
115
- },
116
-
117
- _updateLock: function(oReference, sPath, iDelta) {
118
- var mLockCountEntry = getLockCountEntry(oReference, sPath);
119
- changeLockCount(mLockCountEntry, iDelta);
120
- return applyLockState(mLockCountEntry);
121
- }
122
- };
123
- });
5
+ sap.ui.define(["sap/base/Log"], function (Log) {
6
+ "use strict";
7
+
8
+ var _iTimeoutInSeconds = 30,
9
+ _mLockCounters = {},
10
+ _oReferenceDummy = {
11
+ getId: function () {
12
+ return "BusyLocker.ReferenceDummy";
13
+ },
14
+ setBusy: function (bBusy) {
15
+ Log.info("setBusy(".concat(bBusy, ") triggered on dummy reference"));
16
+ }
17
+ };
18
+
19
+ function getLockCountId(oReference, sPath) {
20
+ return oReference.getId() + (sPath || "/busy");
21
+ }
22
+
23
+ function isLocked(oReference, sPath) {
24
+ return getLockCountId(oReference, sPath) in _mLockCounters;
25
+ }
26
+
27
+ function getLockCountEntry(oReference, sPath) {
28
+ if (!oReference || !oReference.getId) {
29
+ Log.warning("No reference for BusyLocker, using dummy reference");
30
+ oReference = _oReferenceDummy;
31
+ }
32
+
33
+ sPath = sPath || "/busy";
34
+ var sId = getLockCountId(oReference, sPath);
35
+
36
+ if (!(sId in _mLockCounters)) {
37
+ _mLockCounters[sId] = {
38
+ id: sId,
39
+ path: sPath,
40
+ reference: oReference,
41
+ count: 0
42
+ };
43
+ }
44
+
45
+ return _mLockCounters[sId];
46
+ }
47
+ /**
48
+ * @param mLockCountEntry
49
+ */
50
+
51
+
52
+ function deleteLockCountEntry(mLockCountEntry) {
53
+ delete _mLockCounters[mLockCountEntry.id];
54
+ }
55
+
56
+ function applyLockState(mLockCountEntry) {
57
+ var bIsModel = mLockCountEntry.reference.isA && mLockCountEntry.reference.isA("sap.ui.model.Model"),
58
+ bBusy = mLockCountEntry.count !== 0;
59
+
60
+ if (bIsModel) {
61
+ mLockCountEntry.reference.setProperty(mLockCountEntry.path, bBusy, undefined, true);
62
+ } else if (mLockCountEntry.reference.setBusy) {
63
+ mLockCountEntry.reference.setBusy(bBusy);
64
+ }
65
+
66
+ clearTimeout(mLockCountEntry.timeout);
67
+
68
+ if (bBusy) {
69
+ mLockCountEntry.timeout = setTimeout(function () {
70
+ Log.error("busy lock for ".concat(mLockCountEntry.id, " with value ").concat(mLockCountEntry.count, " timed out after ").concat(_iTimeoutInSeconds, " seconds!"));
71
+ }, _iTimeoutInSeconds * 1000);
72
+ } else {
73
+ deleteLockCountEntry(mLockCountEntry);
74
+ }
75
+
76
+ return bBusy;
77
+ }
78
+
79
+ function changeLockCount(mLockCountEntry, iDelta) {
80
+ if (iDelta === 0) {
81
+ mLockCountEntry.count = 0;
82
+ Log.info("busy lock count '".concat(mLockCountEntry.id, "' was reset to 0"));
83
+ } else {
84
+ mLockCountEntry.count += iDelta;
85
+ Log.info("busy lock count '".concat(mLockCountEntry.id, "' is ").concat(mLockCountEntry.count));
86
+ }
87
+ }
88
+
89
+ var BusyLocker = {
90
+ lock: function (oModelOrControl, sPath) {
91
+ return this._updateLock(oModelOrControl, sPath, 1);
92
+ },
93
+ unlock: function (oModelOrControl, sPath) {
94
+ return this._updateLock(oModelOrControl, sPath, -1);
95
+ },
96
+ isLocked: function (oModelOrControl, sPath) {
97
+ return isLocked(oModelOrControl, sPath);
98
+ },
99
+ _updateLock: function (oReference, sPath, iDelta) {
100
+ var mLockCountEntry = getLockCountEntry(oReference, sPath);
101
+ changeLockCount(mLockCountEntry, iDelta);
102
+ return applyLockState(mLockCountEntry);
103
+ }
104
+ };
105
+ return BusyLocker;
106
+ }, false);
107
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1c3lMb2NrZXIudHMiXSwibmFtZXMiOlsiX2lUaW1lb3V0SW5TZWNvbmRzIiwiX21Mb2NrQ291bnRlcnMiLCJfb1JlZmVyZW5jZUR1bW15IiwiZ2V0SWQiLCJzZXRCdXN5IiwiYkJ1c3kiLCJMb2ciLCJpbmZvIiwiZ2V0TG9ja0NvdW50SWQiLCJvUmVmZXJlbmNlIiwic1BhdGgiLCJpc0xvY2tlZCIsImdldExvY2tDb3VudEVudHJ5Iiwid2FybmluZyIsInNJZCIsImlkIiwicGF0aCIsInJlZmVyZW5jZSIsImNvdW50IiwiZGVsZXRlTG9ja0NvdW50RW50cnkiLCJtTG9ja0NvdW50RW50cnkiLCJhcHBseUxvY2tTdGF0ZSIsImJJc01vZGVsIiwiaXNBIiwic2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJjbGVhclRpbWVvdXQiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImVycm9yIiwiY2hhbmdlTG9ja0NvdW50IiwiaURlbHRhIiwiQnVzeUxvY2tlciIsImxvY2siLCJvTW9kZWxPckNvbnRyb2wiLCJfdXBkYXRlTG9jayIsInVubG9jayJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQURBLE1BQU1BLGtCQUFrQixHQUFHLEVBQTNCO0FBQUEsTUFDQ0MsY0FBbUIsR0FBRyxFQUR2QjtBQUFBLE1BRUNDLGdCQUFnQixHQUFHO0FBQ2xCQyxJQUFBQSxLQUFLLEVBQUUsWUFBVztBQUNqQixhQUFPLDJCQUFQO0FBQ0EsS0FIaUI7QUFJbEJDLElBQUFBLE9BQU8sRUFBRSxVQUFTQyxLQUFULEVBQXFCO0FBQzdCQyxNQUFBQSxHQUFHLENBQUNDLElBQUosbUJBQW9CRixLQUFwQjtBQUNBO0FBTmlCLEdBRnBCOztBQVVBLFdBQVNHLGNBQVQsQ0FBd0JDLFVBQXhCLEVBQXlDQyxLQUF6QyxFQUFxRDtBQUNwRCxXQUFPRCxVQUFVLENBQUNOLEtBQVgsTUFBc0JPLEtBQUssSUFBSSxPQUEvQixDQUFQO0FBQ0E7O0FBQ0QsV0FBU0MsUUFBVCxDQUFrQkYs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ZSxDQUFDRixLQUF2RTtBQUNBO0FBQ0Q7O0FBRUQsTUFBTWMsVUFBVSxHQUFHO0FBQ2xCQyxJQUFBQSxJQUFJLEVBQUUsVUFBU0MsZUFBVCxFQUErQnhCLEtBQS9CLEVBQStDO0FBQ3BELGFBQU8sS0FBS3lCLFdBQUwsQ0FBaUJELGVBQWpCLEVBQWtDeEIsS0FBbEMsRUFBeUMsQ0FBekMsQ0FBUDtBQUNBLEtBSGlCO0FBS2xCMEIsSUFBQUEsTUFBTSxFQUFFLFVBQVNGLGVBQVQsRUFBK0J4QixLQUEvQixFQUErQztBQUN0RCxhQUFPLEtBQUt5QixXQUFMLENBQWlCRCxlQUFqQixFQUFrQ3hCLEtBQWxDLEVBQXlDLENBQUMsQ0FBMUMsQ0FBUDtBQUNBLEtBUGlCO0FBU2xCQyxJQUFBQSxRQUFRLEVBQUUsVUFBU3VCLGVBQVQsRUFBK0J4QixLQUEvQixFQUErQztBQUN4RCxhQUFPQyxRQUFRLENBQUN1QixlQUFELEVBQWtCeEIsS0FBbEIsQ0FBZjtBQUNBLEtBWGlCO0FBYWxCeUIsSUFBQUEsV0FBVyxFQUFFLFVBQVMxQixVQUFULEVBQTBCQyxLQUExQixFQUFzQ3FCLE1BQXRDLEVBQW1EO0FBQy9ELFVBQU1YLGVBQWUsR0FBR1IsaUJBQWlCLENBQUNILFVBQUQsRUFBYUMsS0FBYixDQUF6QztBQUNBb0IsTUFBQUEsZUFBZSxDQUFDVixlQUFELEVBQWtCVyxNQUFsQixDQUFmO0FBQ0EsYUFBT1YsY0FBYyxDQUFDRCxlQUFELENBQXJCO0FBQ0E7QUFqQmlCLEdBQW5CO1NBb0JlWSxVIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmNvbnN0IF9pVGltZW91dEluU2Vjb25kcyA9IDMwLFxuXHRfbUxvY2tDb3VudGVyczogYW55ID0ge30sXG5cdF9vUmVmZXJlbmNlRHVtbXkgPSB7XG5cdFx0Z2V0SWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFwiQnVzeUxvY2tlci5SZWZlcmVuY2VEdW1teVwiO1xuXHRcdH0sXG5cdFx0c2V0QnVzeTogZnVuY3Rpb24oYkJ1c3k6IGFueSkge1xuXHRcdFx0TG9nLmluZm8oYHNldEJ1c3koJHtiQnVzeX0pIHRyaWdnZXJlZCBvbiBkdW1teSByZWZlcmVuY2VgKTtcblx0XHR9XG5cdH07XG5mdW5jdGlvbiBnZXRMb2NrQ291bnRJZChvUmVmZXJlbmNlOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIG9SZWZlcmVuY2UuZ2V0SWQoKSArIChzUGF0aCB8fCBcIi9idXN5XCIpO1xufVxuZnVuY3Rpb24gaXNMb2NrZWQob1JlZmVyZW5jZTogYW55LCBzUGF0aDogYW55KSB7XG5cdHJldHVybiBnZXRMb2NrQ291bnRJZChvUmVmZXJlbmNlLCBzUGF0aCkgaW4gX21Mb2NrQ291bnRlcnM7XG59XG5mdW5jdGlvbiBnZXRMb2NrQ291bnRFbnRyeShvUmVmZXJlbmNlOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0aWYgKCFvUmVmZXJlbmNlIHx8ICFvUmVmZXJlbmNlLmdldElkKSB7XG5cdFx0TG9nLndhcm5pbmcoXCJObyByZWZlcmVuY2UgZm9yIEJ1c3lMb2NrZXIsIHVzaW5nIGR1bW15IHJlZmVyZW5jZVwiKTtcblx0XHRvUmVmZXJlbmNlID0gX29SZWZlcmVuY2VEdW1teTtcblx0fVxuXG5cdHNQYXRoID0gc1BhdGggfHwgXCIvYnVzeVwiO1xuXHRjb25zdCBzSWQgPSBnZXRMb2NrQ291bnRJZChvUmVmZXJlbmNlLCBzUGF0aCk7XG5cblx0aWYgKCEoc0lkIGluIF9tTG9ja0NvdW50ZXJzKSkge1xuXHRcdF9tTG9ja0NvdW50ZXJzW3NJZF0gPSB7XG5cdFx0XHRpZDogc0lkLFxuXHRcdFx0cGF0aDogc1BhdGgsXG5cdFx0XHRyZWZlcmVuY2U6IG9SZWZlcmVuY2UsXG5cdFx0XHRjb3VudDogMFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIF9tTG9ja0NvdW50ZXJzW3NJZF07XG59XG4vKipcbiAqIEBwYXJhbSBtTG9ja0NvdW50RW50cnlcbiAqL1xuZnVuY3Rpb24gZGVsZXRlTG9ja0NvdW50RW50cnkobUxvY2tDb3VudEVudHJ5OiBhbnkpIHtcblx0ZGVsZXRlIF9tTG9ja0NvdW50ZXJzW21Mb2NrQ291bnRFbnRyeS5pZF07XG59XG5cbmZ1bmN0aW9uIGFwcGx5TG9ja1N0YXRlKG1Mb2NrQ291bnRFbnRyeTogYW55KSB7XG5cdGNvbnN0IGJJc01vZGVsID0gbUxvY2tDb3VudEVudHJ5LnJlZmVyZW5jZS5pc0EgJiYgbUxvY2tDb3VudEVudHJ5LnJlZmVyZW5jZS5pc0EoXCJzYXAudWkubW9kZWwuTW9kZWxcIiksXG5cdFx0YkJ1c3kgPSBtTG9ja0NvdW50RW50cnkuY291bnQgIT09IDA7XG5cblx0aWYgKGJJc01vZGVsKSB7XG5cdFx0bUxvY2tDb3VudEVudHJ5LnJlZmVyZW5jZS5zZXRQcm9wZXJ0eShtTG9ja0NvdW50RW50cnkucGF0aCwgYkJ1c3ksIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH0gZWxzZSBpZiAobUxvY2tDb3VudEVudHJ5LnJlZmVyZW5jZS5zZXRCdXN5KSB7XG5cdFx0bUxvY2tDb3VudEVudHJ5LnJlZmVyZW5jZS5zZXRCdXN5KGJCdXN5KTtcblx0fVxuXG5cdGNsZWFyVGltZW91dChtTG9ja0NvdW50RW50cnkudGltZW91dCk7XG5cdGlmIChiQnVzeSkge1xuXHRcdG1Mb2NrQ291bnRFbnRyeS50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0YGJ1c3kgbG9jayBmb3IgJHttTG9ja0NvdW50RW50cnkuaWR9IHdpdGggdmFsdWUgJHttTG9ja0NvdW50RW50cnkuY291bnR9IHRpbWVkIG91dCBhZnRlciAke19pVGltZW91dEluU2Vjb25kc30gc2Vjb25kcyFgXG5cdFx0XHQpO1xuXHRcdH0sIF9pVGltZW91dEluU2Vjb25kcyAqIDEwMDApO1xuXHR9IGVsc2Uge1xuXHRcdGRlbGV0ZUxvY2tDb3VudEVudHJ5KG1Mb2NrQ291bnRFbnRyeSk7XG5cdH1cblxuXHRyZXR1cm4gYkJ1c3k7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUxvY2tDb3VudChtTG9ja0NvdW50RW50cnk6IGFueSwgaURlbHRhOiBhbnkpIHtcblx0aWYgKGlEZWx0YSA9PT0gMCkge1xuXHRcdG1Mb2NrQ291bnRFbnRyeS5jb3VudCA9IDA7XG5cdFx0TG9nLmluZm8oYGJ1c3kgbG9jayBjb3VudCAnJHttTG9ja0NvdW50RW50cnkuaWR9JyB3YXMgcmVzZXQgdG8gMGApO1xuXHR9IGVsc2Uge1xuXHRcdG1Mb2NrQ291bnRFbnRyeS5jb3VudCArPSBpRGVsdGE7XG5cdFx0TG9nLmluZm8oYGJ1c3kgbG9jayBjb3VudCAnJHttTG9ja0NvdW50RW50cnkuaWR9JyBpcyAke21Mb2NrQ291bnRFbnRyeS5jb3VudH1gKTtcblx0fVxufVxuXG5jb25zdCBCdXN5TG9ja2VyID0ge1xuXHRsb2NrOiBmdW5jdGlvbihvTW9kZWxPckNvbnRyb2w6IGFueSwgc1BhdGg/OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5fdXBkYXRlTG9jayhvTW9kZWxPckNvbnRyb2wsIHNQYXRoLCAxKTtcblx0fSxcblxuXHR1bmxvY2s6IGZ1bmN0aW9uKG9Nb2RlbE9yQ29udHJvbDogYW55LCBzUGF0aD86IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLl91cGRhdGVMb2NrKG9Nb2RlbE9yQ29udHJvbCwgc1BhdGgsIC0xKTtcblx0fSxcblxuXHRpc0xvY2tlZDogZnVuY3Rpb24ob01vZGVsT3JDb250cm9sOiBhbnksIHNQYXRoPzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGlzTG9ja2VkKG9Nb2RlbE9yQ29udHJvbCwgc1BhdGgpO1xuXHR9LFxuXG5cdF91cGRhdGVMb2NrOiBmdW5jdGlvbihvUmVmZXJlbmNlOiBhbnksIHNQYXRoOiBhbnksIGlEZWx0YTogYW55KSB7XG5cdFx0Y29uc3QgbUxvY2tDb3VudEVudHJ5ID0gZ2V0TG9ja0NvdW50RW50cnkob1JlZmVyZW5jZSwgc1BhdGgpO1xuXHRcdGNoYW5nZUxvY2tDb3VudChtTG9ja0NvdW50RW50cnksIGlEZWx0YSk7XG5cdFx0cmV0dXJuIGFwcGx5TG9ja1N0YXRlKG1Mb2NrQ291bnRFbnRyeSk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJ1c3lMb2NrZXI7XG4iXX0=
@@ -0,0 +1,98 @@
1
+ import Log from "sap/base/Log";
2
+ const _iTimeoutInSeconds = 30,
3
+ _mLockCounters: any = {},
4
+ _oReferenceDummy = {
5
+ getId: function() {
6
+ return "BusyLocker.ReferenceDummy";
7
+ },
8
+ setBusy: function(bBusy: any) {
9
+ Log.info(`setBusy(${bBusy}) triggered on dummy reference`);
10
+ }
11
+ };
12
+ function getLockCountId(oReference: any, sPath: any) {
13
+ return oReference.getId() + (sPath || "/busy");
14
+ }
15
+ function isLocked(oReference: any, sPath: any) {
16
+ return getLockCountId(oReference, sPath) in _mLockCounters;
17
+ }
18
+ function getLockCountEntry(oReference: any, sPath: any) {
19
+ if (!oReference || !oReference.getId) {
20
+ Log.warning("No reference for BusyLocker, using dummy reference");
21
+ oReference = _oReferenceDummy;
22
+ }
23
+
24
+ sPath = sPath || "/busy";
25
+ const sId = getLockCountId(oReference, sPath);
26
+
27
+ if (!(sId in _mLockCounters)) {
28
+ _mLockCounters[sId] = {
29
+ id: sId,
30
+ path: sPath,
31
+ reference: oReference,
32
+ count: 0
33
+ };
34
+ }
35
+ return _mLockCounters[sId];
36
+ }
37
+ /**
38
+ * @param mLockCountEntry
39
+ */
40
+ function deleteLockCountEntry(mLockCountEntry: any) {
41
+ delete _mLockCounters[mLockCountEntry.id];
42
+ }
43
+
44
+ function applyLockState(mLockCountEntry: any) {
45
+ const bIsModel = mLockCountEntry.reference.isA && mLockCountEntry.reference.isA("sap.ui.model.Model"),
46
+ bBusy = mLockCountEntry.count !== 0;
47
+
48
+ if (bIsModel) {
49
+ mLockCountEntry.reference.setProperty(mLockCountEntry.path, bBusy, undefined, true);
50
+ } else if (mLockCountEntry.reference.setBusy) {
51
+ mLockCountEntry.reference.setBusy(bBusy);
52
+ }
53
+
54
+ clearTimeout(mLockCountEntry.timeout);
55
+ if (bBusy) {
56
+ mLockCountEntry.timeout = setTimeout(function() {
57
+ Log.error(
58
+ `busy lock for ${mLockCountEntry.id} with value ${mLockCountEntry.count} timed out after ${_iTimeoutInSeconds} seconds!`
59
+ );
60
+ }, _iTimeoutInSeconds * 1000);
61
+ } else {
62
+ deleteLockCountEntry(mLockCountEntry);
63
+ }
64
+
65
+ return bBusy;
66
+ }
67
+
68
+ function changeLockCount(mLockCountEntry: any, iDelta: any) {
69
+ if (iDelta === 0) {
70
+ mLockCountEntry.count = 0;
71
+ Log.info(`busy lock count '${mLockCountEntry.id}' was reset to 0`);
72
+ } else {
73
+ mLockCountEntry.count += iDelta;
74
+ Log.info(`busy lock count '${mLockCountEntry.id}' is ${mLockCountEntry.count}`);
75
+ }
76
+ }
77
+
78
+ const BusyLocker = {
79
+ lock: function(oModelOrControl: any, sPath?: string) {
80
+ return this._updateLock(oModelOrControl, sPath, 1);
81
+ },
82
+
83
+ unlock: function(oModelOrControl: any, sPath?: string) {
84
+ return this._updateLock(oModelOrControl, sPath, -1);
85
+ },
86
+
87
+ isLocked: function(oModelOrControl: any, sPath?: string) {
88
+ return isLocked(oModelOrControl, sPath);
89
+ },
90
+
91
+ _updateLock: function(oReference: any, sPath: any, iDelta: any) {
92
+ const mLockCountEntry = getLockCountEntry(oReference, sPath);
93
+ changeLockCount(mLockCountEntry, iDelta);
94
+ return applyLockState(mLockCountEntry);
95
+ }
96
+ };
97
+
98
+ export default BusyLocker;