@sapui5/sap.fe.core 1.97.0 → 1.100.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 (306) hide show
  1. package/package.json +7 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +309 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +315 -0
  5. package/src/sap/fe/core/AppComponent.js +389 -397
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +198 -181
  8. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  9. package/src/sap/fe/core/BaseController.js +83 -58
  10. package/src/sap/fe/core/BaseController.ts +68 -0
  11. package/src/sap/fe/core/BusyLocker.js +105 -121
  12. package/src/sap/fe/core/BusyLocker.ts +98 -0
  13. package/src/sap/fe/core/CommonUtils.js +2164 -2379
  14. package/src/sap/fe/core/CommonUtils.ts +2177 -0
  15. package/src/sap/fe/core/ExtensionAPI.js +279 -266
  16. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  17. package/src/sap/fe/core/PageController.js +218 -125
  18. package/src/sap/fe/core/PageController.ts +129 -0
  19. package/src/sap/fe/core/RouterProxy.js +924 -807
  20. package/src/sap/fe/core/RouterProxy.ts +840 -0
  21. package/src/sap/fe/core/Synchronization.js +41 -35
  22. package/src/sap/fe/core/Synchronization.ts +29 -0
  23. package/src/sap/fe/core/TemplateComponent.js +173 -155
  24. package/src/sap/fe/core/TemplateComponent.ts +173 -0
  25. package/src/sap/fe/core/TemplateModel.js +79 -54
  26. package/src/sap/fe/core/TemplateModel.ts +63 -0
  27. package/src/sap/fe/core/TransactionHelper.js +1560 -1579
  28. package/src/sap/fe/core/TransactionHelper.ts +1717 -0
  29. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  30. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  31. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  32. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  33. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  34. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  35. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  36. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  37. package/src/sap/fe/core/actions/draft.js +521 -581
  38. package/src/sap/fe/core/actions/draft.ts +566 -0
  39. package/src/sap/fe/core/actions/messageHandling.js +564 -511
  40. package/src/sap/fe/core/actions/messageHandling.ts +552 -0
  41. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  42. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  43. package/src/sap/fe/core/actions/operations.js +1093 -1211
  44. package/src/sap/fe/core/actions/operations.ts +1192 -0
  45. package/src/sap/fe/core/actions/sticky.js +114 -104
  46. package/src/sap/fe/core/actions/sticky.ts +119 -0
  47. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
  48. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  49. package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
  50. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  51. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  53. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  55. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  57. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  59. package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
  61. package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
  62. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  65. package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
  66. package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
  67. package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
  68. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  69. package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
  70. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  71. package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
  72. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  73. package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  75. package/src/sap/fe/core/controllerextensions/Share.js +220 -244
  76. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  77. package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
  78. package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
  79. package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
  80. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  81. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
  82. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/CommandExecution.js +68 -66
  84. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  85. package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
  86. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  87. package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  89. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  91. package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
  92. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  93. package/src/sap/fe/core/controls/FilterBar.js +163 -159
  94. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  97. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
  98. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  100. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
  101. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  102. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
  103. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  104. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
  105. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  106. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
  107. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  108. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  110. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  111. package/src/sap/fe/core/converters/ConverterContext.js +348 -367
  112. package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
  113. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  114. package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
  115. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
  116. package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
  117. package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
  118. package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
  119. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  120. package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
  121. package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
  122. package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
  123. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  124. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  125. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  126. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  127. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  128. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  130. package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
  131. package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
  132. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  133. package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
  134. package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
  135. package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
  136. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
  138. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
  140. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  142. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  143. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  144. package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
  145. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  146. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  147. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  148. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  149. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  150. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  151. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  152. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  153. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  154. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
  155. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
  156. package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
  157. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
  158. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  159. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  160. package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
  161. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  162. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  163. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  164. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  166. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  167. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  168. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  169. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  170. package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
  171. package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
  172. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  173. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  174. package/src/sap/fe/core/fpm/Component.js +51 -54
  175. package/src/sap/fe/core/fpm/Component.ts +48 -0
  176. package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
  177. package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
  178. package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
  179. package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
  180. package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
  181. package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
  183. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
  184. package/src/sap/fe/core/helpers/EditState.js +81 -84
  185. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  186. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  187. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  188. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  189. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  190. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  191. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  192. package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
  193. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  194. package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
  195. package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
  196. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  197. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  198. package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
  199. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
  200. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  201. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  202. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  203. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  204. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  205. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  206. package/src/sap/fe/core/library.js +427 -425
  207. package/src/sap/fe/core/library.support.js +23 -27
  208. package/src/sap/fe/core/library.support.ts +23 -0
  209. package/src/sap/fe/core/library.ts +420 -0
  210. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
  211. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
  212. package/src/sap/fe/core/messagebundle.properties +78 -13
  213. package/src/sap/fe/core/messagebundle_ar.properties +58 -7
  214. package/src/sap/fe/core/messagebundle_bg.properties +58 -7
  215. package/src/sap/fe/core/messagebundle_ca.properties +58 -7
  216. package/src/sap/fe/core/messagebundle_cs.properties +59 -8
  217. package/src/sap/fe/core/messagebundle_cy.properties +58 -7
  218. package/src/sap/fe/core/messagebundle_da.properties +58 -7
  219. package/src/sap/fe/core/messagebundle_de.properties +58 -7
  220. package/src/sap/fe/core/messagebundle_el.properties +58 -7
  221. package/src/sap/fe/core/messagebundle_en.properties +57 -6
  222. package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
  223. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
  224. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
  225. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
  226. package/src/sap/fe/core/messagebundle_es.properties +58 -7
  227. package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
  228. package/src/sap/fe/core/messagebundle_et.properties +58 -7
  229. package/src/sap/fe/core/messagebundle_fi.properties +60 -9
  230. package/src/sap/fe/core/messagebundle_fr.properties +64 -13
  231. package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
  232. package/src/sap/fe/core/messagebundle_hi.properties +58 -7
  233. package/src/sap/fe/core/messagebundle_hr.properties +58 -7
  234. package/src/sap/fe/core/messagebundle_hu.properties +59 -8
  235. package/src/sap/fe/core/messagebundle_id.properties +61 -10
  236. package/src/sap/fe/core/messagebundle_it.properties +58 -7
  237. package/src/sap/fe/core/messagebundle_iw.properties +58 -7
  238. package/src/sap/fe/core/messagebundle_ja.properties +58 -7
  239. package/src/sap/fe/core/messagebundle_kk.properties +58 -7
  240. package/src/sap/fe/core/messagebundle_ko.properties +58 -7
  241. package/src/sap/fe/core/messagebundle_lt.properties +58 -7
  242. package/src/sap/fe/core/messagebundle_lv.properties +59 -8
  243. package/src/sap/fe/core/messagebundle_ms.properties +58 -7
  244. package/src/sap/fe/core/messagebundle_nl.properties +58 -7
  245. package/src/sap/fe/core/messagebundle_no.properties +58 -7
  246. package/src/sap/fe/core/messagebundle_pl.properties +58 -7
  247. package/src/sap/fe/core/messagebundle_pt.properties +59 -8
  248. package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
  249. package/src/sap/fe/core/messagebundle_ro.properties +58 -7
  250. package/src/sap/fe/core/messagebundle_ru.properties +58 -7
  251. package/src/sap/fe/core/messagebundle_sh.properties +58 -7
  252. package/src/sap/fe/core/messagebundle_sk.properties +58 -7
  253. package/src/sap/fe/core/messagebundle_sl.properties +58 -7
  254. package/src/sap/fe/core/messagebundle_sv.properties +59 -8
  255. package/src/sap/fe/core/messagebundle_th.properties +58 -7
  256. package/src/sap/fe/core/messagebundle_tr.properties +60 -9
  257. package/src/sap/fe/core/messagebundle_uk.properties +58 -7
  258. package/src/sap/fe/core/messagebundle_vi.properties +58 -7
  259. package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
  260. package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
  261. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  262. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  263. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
  264. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  265. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
  266. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
  267. package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
  268. package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
  269. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
  272. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  273. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
  274. package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
  278. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
  279. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  280. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  281. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  282. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  283. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  284. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  285. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  286. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  287. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  288. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  289. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  290. package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
  291. package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
  292. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  295. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  296. package/src/sap/fe/core/templating/FilterHelper.js +140 -78
  297. package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
  298. package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
  299. package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
  300. package/src/sap/fe/core/templating/UIFormatters.js +76 -135
  301. package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
  302. package/src/sap/fe/core/type/Email.js +1 -1
  303. package/src/sap/fe/core/type/Email.ts +4 -6
  304. package/ui5.yaml +0 -3
  305. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  306. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -1,64 +1,89 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/ui/core/mvc/Controller", "sap/fe/core/CommonUtils"], function(Controller, CommonUtils) {
6
- "use strict";
5
+ sap.ui.define(["sap/ui/core/mvc/Controller", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/mvc/ControllerMetadata"], function (Controller, CommonUtils, ClassSupport, ControllerMetadata) {
6
+ "use strict";
7
7
 
8
- /**
9
- * @class Internal base controller class for SAP Fiori elements application.
10
- *
11
- * If you want to extend a base controller for your custom page, please use for sap.fe.core.PageController.
12
- *
13
- * @hideconstructor
14
- * @public
15
- * @name sap.fe.core.BaseController
16
- * @since 1.90.0
17
- */
18
- return Controller.extend("sap.fe.core.BaseController", {
19
- /**
20
- * Returns the current app component.
21
- *
22
- * @returns {sap.fe.core.AppComponent} The app component or, if not found, null
23
- * @alias sap.fe.core.BaseController#getAppComponent
24
- * @public
25
- * @since 1.91.0
26
- */
27
- getAppComponent: function() {
28
- if (!this._oAppComponent) {
29
- this._oAppComponent = CommonUtils.getAppComponent(this.getView());
30
- }
31
- return this._oAppComponent;
32
- },
8
+ var _dec, _class, _class2;
33
9
 
34
- /**
35
- * Convenience method provided by SAP Fiori elements to enable applications to include the view model by name into each controller.
36
- * @public
37
- * @param {string} sName The model name
38
- * @returns {sap.ui.model.Model} The model instance
39
- */
40
- getModel: function(sName) {
41
- return this.getView().getModel(sName);
42
- },
10
+ var UI5Class = ClassSupport.UI5Class;
11
+ var Public = ClassSupport.Public;
43
12
 
44
- /**
45
- * Convenience method for setting the view model in every controller of the application.
46
- * @public
47
- * @param {sap.ui.model.Model} oModel The model instance
48
- * @param {string} sName The model name
49
- * @returns {sap.ui.mvc.View} The view instance
50
- */
51
- setModel: function(oModel, sName) {
52
- return this.getView().setModel(oModel, sName);
53
- },
13
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
54
14
 
55
- getResourceBundle: function(sI18nModelName) {
56
- if (!sI18nModelName) {
57
- sI18nModelName = "i18n";
58
- }
59
- return this.getAppComponent()
60
- .getModel(sI18nModelName)
61
- .getResourceBundle();
62
- }
63
- });
64
- });
15
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
16
+
17
+ function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
18
+
19
+ /**
20
+ * Internal base controller class for SAP Fiori elements application.
21
+ *
22
+ * If you want to extend a base controller for your custom page, please use for sap.fe.core.PageController.
23
+ *
24
+ * @hideconstructor
25
+ * @public
26
+ * @name sap.fe.core.BaseController
27
+ * @since 1.90.0
28
+ */
29
+ var BaseController = (_dec = UI5Class("sap.fe.core.BaseController", ControllerMetadata, {}), _dec(_class = (_class2 = /*#__PURE__*/function (_Controller) {
30
+ _inherits(BaseController, _Controller);
31
+
32
+ function BaseController() {
33
+ return _Controller.apply(this, arguments) || this;
34
+ }
35
+
36
+ var _proto = BaseController.prototype;
37
+
38
+ /**
39
+ * Returns the current app component.
40
+ *
41
+ * @returns {sap.fe.core.AppComponent} The app component or, if not found, null
42
+ * @alias sap.fe.core.BaseController#getAppComponent
43
+ * @public
44
+ * @since 1.91.0
45
+ */
46
+ _proto.getAppComponent = function getAppComponent() {
47
+ if (!this._oAppComponent) {
48
+ this._oAppComponent = CommonUtils.getAppComponent(this.getView());
49
+ }
50
+
51
+ return this._oAppComponent;
52
+ }
53
+ /**
54
+ * Convenience method provided by SAP Fiori elements to enable applications to include the view model by name into each controller.
55
+ * @public
56
+ * @param {string} sName The model name
57
+ * @returns {sap.ui.model.Model} The model instance
58
+ */
59
+ ;
60
+
61
+ _proto.getModel = function getModel(sName) {
62
+ return this.getView().getModel(sName);
63
+ }
64
+ /**
65
+ * Convenience method for setting the view model in every controller of the application.
66
+ * @public
67
+ * @param {sap.ui.model.Model} oModel The model instance
68
+ * @param {string} sName The model name
69
+ * @returns {sap.ui.mvc.View} The view instance
70
+ */
71
+ ;
72
+
73
+ _proto.setModel = function setModel(oModel, sName) {
74
+ return this.getView().setModel(oModel, sName);
75
+ };
76
+
77
+ _proto.getResourceBundle = function getResourceBundle(sI18nModelName) {
78
+ if (!sI18nModelName) {
79
+ sI18nModelName = "i18n";
80
+ }
81
+
82
+ return this.getAppComponent().getModel(sI18nModelName).getResourceBundle();
83
+ };
84
+
85
+ return BaseController;
86
+ }(Controller), (_applyDecoratedDescriptor(_class2.prototype, "getAppComponent", [Public], Object.getOwnPropertyDescriptor(_class2.prototype, "getAppComponent"), _class2.prototype)), _class2)) || _class);
87
+ return BaseController;
88
+ }, false);
89
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2VDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbIkJhc2VDb250cm9sbGVyIiwiVUk1Q2xhc3MiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJnZXRBcHBDb21wb25lbnQiLCJfb0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0VmlldyIsImdldE1vZGVsIiwic05hbWUiLCJzZXRNb2RlbCIsIm9Nb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwic0kxOG5Nb2RlbE5hbWUiLCJDb250cm9sbGVyIiwiUHVibGljIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtNQUVNQSxjLFdBRExDLFFBQVEsQ0FBQyw0QkFBRCxFQUErQkMsa0JBQS9CLEVBQW1ELEVBQW5ELEM7Ozs7Ozs7OztBQUdSO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7V0FFQ0MsZSxHQURBLDJCQUNnQztBQUMvQixVQUFJLENBQUMsS0FBS0MsY0FBVixFQUEwQjtBQUN6QixhQUFLQSxjQUFMLEdBQXNCQyxXQUFXLENBQUNGLGVBQVosQ0FBNEIsS0FBS0csT0FBTCxFQUE1QixDQUF0QjtBQUNBOztBQUNELGFBQU8sS0FBS0YsY0FBWjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0csUSxHQUFBLGtCQUFTQyxLQUFULEVBQXlCO0FBQ3hCLGFBQU8sS0FBS0YsT0FBTCxHQUFlQyxRQUFmLENBQXdCQyxLQUF4QixDQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0NDLFEsR0FBQSxrQkFBU0MsTUFBVCxFQUF3QkYsS0FBeEIsRUFBNkM7QUFDNUMsYUFBTyxLQUFLRixPQUFMLEdBQWVHLFFBQWYsQ0FBd0JDLE1BQXhCLEVBQWdDRixLQUFoQyxDQUFQO0FBQ0EsSzs7V0FFREcsaUIsR0FBQSwyQkFBa0JDLGNBQWxCLEVBQXVDO0FBQ3RDLFVBQUksQ0FBQ0EsY0FBTCxFQUFxQjtBQUNwQkEsUUFBQUEsY0FBYyxHQUFHLE1BQWpCO0FBQ0E7O0FBQ0QsYUFBUSxLQUFLVCxlQUFMLEdBQXVCSSxRQUF2QixDQUFnQ0ssY0FBaEMsQ0FBRCxDQUFtRUQsaUJBQW5FLEVBQVA7QUFDQSxLOzs7SUE1QzJCRSxVLHFFQVUzQkMsTTtTQXFDYWQsYyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBQdWJsaWMsIFVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuXG4vKipcbiAqIEludGVybmFsIGJhc2UgY29udHJvbGxlciBjbGFzcyBmb3IgU0FQIEZpb3JpIGVsZW1lbnRzIGFwcGxpY2F0aW9uLlxuICpcbiAqIElmIHlvdSB3YW50IHRvIGV4dGVuZCBhIGJhc2UgY29udHJvbGxlciBmb3IgeW91ciBjdXN0b20gcGFnZSwgcGxlYXNlIHVzZSBmb3Igc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXIuXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQG5hbWUgc2FwLmZlLmNvcmUuQmFzZUNvbnRyb2xsZXJcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQmFzZUNvbnRyb2xsZXJcIiwgQ29udHJvbGxlck1ldGFkYXRhLCB7fSlcbmNsYXNzIEJhc2VDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlciB7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQ7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFwcCBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzYXAuZmUuY29yZS5BcHBDb21wb25lbnR9IFRoZSBhcHAgY29tcG9uZW50IG9yLCBpZiBub3QgZm91bmQsIG51bGxcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLkJhc2VDb250cm9sbGVyI2dldEFwcENvbXBvbmVudFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkxLjBcblx0ICovXG5cdEBQdWJsaWNcblx0Z2V0QXBwQ29tcG9uZW50KCk6IEFwcENvbXBvbmVudCB7XG5cdFx0aWYgKCF0aGlzLl9vQXBwQ29tcG9uZW50KSB7XG5cdFx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX29BcHBDb21wb25lbnQgYXMgQXBwQ29tcG9uZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlbmllbmNlIG1ldGhvZCBwcm92aWRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMgdG8gZW5hYmxlIGFwcGxpY2F0aW9ucyB0byBpbmNsdWRlIHRoZSB2aWV3IG1vZGVsIGJ5IG5hbWUgaW50byBlYWNoIGNvbnRyb2xsZXIuXG5cdCAqIEBwdWJsaWNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lIFRoZSBtb2RlbCBuYW1lXG5cdCAqIEByZXR1cm5zIHtzYXAudWkubW9kZWwuTW9kZWx9IFRoZSBtb2RlbCBpbnN0YW5jZVxuXHQgKi9cblx0Z2V0TW9kZWwoc05hbWU/OiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoc05hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3Igc2V0dGluZyB0aGUgdmlldyBtb2RlbCBpbiBldmVyeSBjb250cm9sbGVyIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5Nb2RlbH0gb01vZGVsIFRoZSBtb2RlbCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWUgVGhlIG1vZGVsIG5hbWVcblx0ICogQHJldHVybnMge3NhcC51aS5tdmMuVmlld30gVGhlIHZpZXcgaW5zdGFuY2Vcblx0ICovXG5cdHNldE1vZGVsKG9Nb2RlbDogTW9kZWwsIHNOYW1lOiBzdHJpbmcpOiBWaWV3IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuc2V0TW9kZWwob01vZGVsLCBzTmFtZSk7XG5cdH1cblxuXHRnZXRSZXNvdXJjZUJ1bmRsZShzSTE4bk1vZGVsTmFtZTogYW55KSB7XG5cdFx0aWYgKCFzSTE4bk1vZGVsTmFtZSkge1xuXHRcdFx0c0kxOG5Nb2RlbE5hbWUgPSBcImkxOG5cIjtcblx0XHR9XG5cdFx0cmV0dXJuICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKHNJMThuTW9kZWxOYW1lKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VDb250cm9sbGVyO1xuIl19
@@ -0,0 +1,68 @@
1
+ import Controller from "sap/ui/core/mvc/Controller";
2
+ import CommonUtils from "sap/fe/core/CommonUtils";
3
+ import { Public, UI5Class } from "sap/fe/core/helpers/ClassSupport";
4
+ import ControllerMetadata from "sap/ui/core/mvc/ControllerMetadata";
5
+ import AppComponent from "sap/fe/core/AppComponent";
6
+ import ResourceModel from "sap/ui/model/resource/ResourceModel";
7
+ import View from "sap/ui/core/mvc/View";
8
+ import Model from "sap/ui/model/Model";
9
+
10
+ /**
11
+ * Internal base controller class for SAP Fiori elements application.
12
+ *
13
+ * If you want to extend a base controller for your custom page, please use for sap.fe.core.PageController.
14
+ *
15
+ * @hideconstructor
16
+ * @public
17
+ * @name sap.fe.core.BaseController
18
+ * @since 1.90.0
19
+ */
20
+ @UI5Class("sap.fe.core.BaseController", ControllerMetadata, {})
21
+ class BaseController extends Controller {
22
+ private _oAppComponent?: AppComponent;
23
+ /**
24
+ * Returns the current app component.
25
+ *
26
+ * @returns {sap.fe.core.AppComponent} The app component or, if not found, null
27
+ * @alias sap.fe.core.BaseController#getAppComponent
28
+ * @public
29
+ * @since 1.91.0
30
+ */
31
+ @Public
32
+ getAppComponent(): AppComponent {
33
+ if (!this._oAppComponent) {
34
+ this._oAppComponent = CommonUtils.getAppComponent(this.getView());
35
+ }
36
+ return this._oAppComponent as AppComponent;
37
+ }
38
+
39
+ /**
40
+ * Convenience method provided by SAP Fiori elements to enable applications to include the view model by name into each controller.
41
+ * @public
42
+ * @param {string} sName The model name
43
+ * @returns {sap.ui.model.Model} The model instance
44
+ */
45
+ getModel(sName?: string) {
46
+ return this.getView().getModel(sName);
47
+ }
48
+
49
+ /**
50
+ * Convenience method for setting the view model in every controller of the application.
51
+ * @public
52
+ * @param {sap.ui.model.Model} oModel The model instance
53
+ * @param {string} sName The model name
54
+ * @returns {sap.ui.mvc.View} The view instance
55
+ */
56
+ setModel(oModel: Model, sName: string): View {
57
+ return this.getView().setModel(oModel, sName);
58
+ }
59
+
60
+ getResourceBundle(sI18nModelName: any) {
61
+ if (!sI18nModelName) {
62
+ sI18nModelName = "i18n";
63
+ }
64
+ return (this.getAppComponent().getModel(sI18nModelName) as ResourceModel).getResourceBundle();
65
+ }
66
+ }
67
+
68
+ export default BaseController;
@@ -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;