@sapui5/sap.fe.core 1.101.0 → 1.103.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 (339) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +66 -30
  4. package/src/sap/fe/core/AppComponent.ts +68 -51
  5. package/src/sap/fe/core/AppStateHandler.js +13 -13
  6. package/src/sap/fe/core/AppStateHandler.ts +18 -18
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +279 -188
  10. package/src/sap/fe/core/CommonUtils.ts +306 -215
  11. package/src/sap/fe/core/ExtensionAPI.js +25 -30
  12. package/src/sap/fe/core/ExtensionAPI.ts +37 -41
  13. package/src/sap/fe/core/PageController.js +12 -7
  14. package/src/sap/fe/core/PageController.ts +10 -5
  15. package/src/sap/fe/core/TemplateComponent.js +6 -6
  16. package/src/sap/fe/core/TemplateComponent.ts +11 -11
  17. package/src/sap/fe/core/TemplateModel.js +2 -2
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  26. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +39 -21
  52. package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  60. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
  61. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
  65. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  67. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
  68. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
  69. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
  70. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
  73. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
  75. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
  77. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
  78. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
  79. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  80. package/src/sap/fe/core/controls/Any.js +9 -5
  81. package/src/sap/fe/core/controls/Any.ts +10 -4
  82. package/src/sap/fe/core/controls/CommandExecution.js +21 -24
  83. package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
  84. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  85. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  86. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
  87. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  89. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
  91. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
  93. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  94. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/FileWrapper.js +50 -3
  96. package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
  97. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  98. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  99. package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
  101. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  102. package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
  103. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  104. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  105. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  106. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  107. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  108. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
  109. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
  110. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
  111. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  112. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
  113. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
  114. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  115. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  116. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  117. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
  118. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  119. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  120. package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
  121. package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
  122. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  123. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  124. package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
  125. package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
  126. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  127. package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
  128. package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
  129. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
  130. package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
  131. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  132. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  133. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  134. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  135. package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
  136. package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
  137. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  138. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  139. package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
  140. package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
  142. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
  144. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
  145. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  146. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  147. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  148. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  149. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  150. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  151. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
  152. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
  153. package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
  154. package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
  155. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
  156. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
  157. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  158. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  159. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  160. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  161. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  162. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  163. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  165. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  166. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  167. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  169. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  171. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
  173. package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
  174. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
  175. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  176. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  177. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  178. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  179. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  180. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  181. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  182. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  183. package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
  184. package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
  185. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  186. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  187. package/src/sap/fe/core/fpm/Component.js +2 -2
  188. package/src/sap/fe/core/fpm/Component.ts +1 -1
  189. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  190. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  191. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  192. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
  193. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  194. package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
  195. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  196. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  197. package/src/sap/fe/core/helpers/EditState.js +1 -6
  198. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  199. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  200. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  201. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  202. package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
  203. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  204. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  205. package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
  206. package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
  207. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  208. package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
  209. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  210. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  211. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  212. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  213. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  214. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  215. package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
  216. package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
  217. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  218. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  219. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  220. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  221. package/src/sap/fe/core/library.js +51 -3
  222. package/src/sap/fe/core/library.ts +47 -0
  223. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  224. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  225. package/src/sap/fe/core/messagebundle.properties +151 -197
  226. package/src/sap/fe/core/messagebundle_ar.properties +36 -63
  227. package/src/sap/fe/core/messagebundle_bg.properties +36 -63
  228. package/src/sap/fe/core/messagebundle_ca.properties +36 -63
  229. package/src/sap/fe/core/messagebundle_cs.properties +36 -63
  230. package/src/sap/fe/core/messagebundle_cy.properties +36 -63
  231. package/src/sap/fe/core/messagebundle_da.properties +37 -64
  232. package/src/sap/fe/core/messagebundle_de.properties +36 -63
  233. package/src/sap/fe/core/messagebundle_el.properties +38 -65
  234. package/src/sap/fe/core/messagebundle_en.properties +37 -64
  235. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
  236. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
  237. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
  238. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
  239. package/src/sap/fe/core/messagebundle_es.properties +36 -63
  240. package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
  241. package/src/sap/fe/core/messagebundle_et.properties +36 -63
  242. package/src/sap/fe/core/messagebundle_fi.properties +36 -63
  243. package/src/sap/fe/core/messagebundle_fr.properties +39 -66
  244. package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
  245. package/src/sap/fe/core/messagebundle_hi.properties +36 -63
  246. package/src/sap/fe/core/messagebundle_hr.properties +36 -63
  247. package/src/sap/fe/core/messagebundle_hu.properties +35 -62
  248. package/src/sap/fe/core/messagebundle_id.properties +37 -64
  249. package/src/sap/fe/core/messagebundle_it.properties +54 -81
  250. package/src/sap/fe/core/messagebundle_iw.properties +36 -63
  251. package/src/sap/fe/core/messagebundle_ja.properties +36 -63
  252. package/src/sap/fe/core/messagebundle_kk.properties +36 -63
  253. package/src/sap/fe/core/messagebundle_ko.properties +36 -63
  254. package/src/sap/fe/core/messagebundle_lt.properties +36 -63
  255. package/src/sap/fe/core/messagebundle_lv.properties +36 -63
  256. package/src/sap/fe/core/messagebundle_ms.properties +37 -64
  257. package/src/sap/fe/core/messagebundle_nl.properties +37 -64
  258. package/src/sap/fe/core/messagebundle_no.properties +36 -63
  259. package/src/sap/fe/core/messagebundle_pl.properties +37 -64
  260. package/src/sap/fe/core/messagebundle_pt.properties +37 -64
  261. package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
  262. package/src/sap/fe/core/messagebundle_ro.properties +36 -63
  263. package/src/sap/fe/core/messagebundle_ru.properties +36 -63
  264. package/src/sap/fe/core/messagebundle_sh.properties +36 -63
  265. package/src/sap/fe/core/messagebundle_sk.properties +36 -63
  266. package/src/sap/fe/core/messagebundle_sl.properties +38 -65
  267. package/src/sap/fe/core/messagebundle_sv.properties +36 -63
  268. package/src/sap/fe/core/messagebundle_th.properties +36 -63
  269. package/src/sap/fe/core/messagebundle_tr.properties +36 -63
  270. package/src/sap/fe/core/messagebundle_uk.properties +37 -64
  271. package/src/sap/fe/core/messagebundle_vi.properties +37 -64
  272. package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
  273. package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
  274. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  275. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  276. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  278. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
  279. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
  280. package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
  281. package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
  282. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  283. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  284. package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
  285. package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
  286. package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
  287. package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
  288. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  289. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  290. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
  291. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
  292. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  293. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  294. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  295. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  296. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  297. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  298. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  299. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  300. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  301. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  302. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  303. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  304. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  305. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
  306. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
  307. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
  308. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  309. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  310. package/src/sap/fe/core/templating/FilterHelper.js +12 -11
  311. package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
  312. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  313. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  315. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  316. package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
  317. package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
  318. package/src/sap/fe/core/templating/UIFormatters.js +163 -97
  319. package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
  320. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  321. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/AnnotationHelper.js +0 -331
  325. package/src/sap/fe/core/AnnotationHelper.ts +0 -321
  326. package/src/sap/fe/core/RouterProxy.js +0 -938
  327. package/src/sap/fe/core/TransactionHelper.js +0 -1577
  328. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
  329. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
  330. package/src/sap/fe/core/actions/draft.js +0 -665
  331. package/src/sap/fe/core/actions/messageHandling.js +0 -579
  332. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  333. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  334. package/src/sap/fe/core/actions/operations.js +0 -1096
  335. package/src/sap/fe/core/actions/sticky.js +0 -130
  336. package/src/sap/fe/core/actions/sticky.ts +0 -119
  337. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  338. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
  339. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
@@ -1,37 +1,32 @@
1
- import Log from "sap/base/Log";
2
- import UriParameters from "sap/base/util/UriParameters";
3
- import { Activity, CollaborationUtils, Message, User, UserActivity } from "sap/fe/core/actions/collaboration/CollaborationCommon";
1
+ import CommonUtils from "sap/fe/core/CommonUtils";
2
+ import {
3
+ broadcastCollaborationMessage,
4
+ endCollaboration,
5
+ initializeCollaboration,
6
+ isCollaborationConnected
7
+ } from "sap/fe/core/controllerextensions/collaboration/ActivityBase";
8
+ import type { Message, User, UserActivity } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
9
+ import { Activity, CollaborationUtils } from "sap/fe/core/controllerextensions/collaboration/CollaborationCommon";
4
10
  import MessageBox from "sap/m/MessageBox";
5
- import Event from "sap/ui/base/Event";
6
- import Control from "sap/ui/core/Control";
7
- import View from "sap/ui/core/mvc/View";
8
- import SapPcpWebSocket from "sap/ui/core/ws/SapPcpWebSocket";
9
- import Context from "sap/ui/model/odata/v4/Context";
10
- import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
11
-
12
- const CONNECTED = "/collaboration/connected";
13
- const CONNECTION = "/collaboration/connection";
11
+ import type Control from "sap/ui/core/Control";
12
+ import type View from "sap/ui/core/mvc/View";
13
+ import type JSONModel from "sap/ui/model/json/JSONModel";
14
+ import type Context from "sap/ui/model/odata/v4/Context";
15
+ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
16
+
14
17
  const MYACTIVITY = "/collaboration/myActivity";
15
18
  const ACTIVEUSERS = "/collaboration/activeUsers";
16
19
  const ACTIVITIES = "/collaboration/activities";
17
20
 
18
21
  export const isConnected = function (control: Control): boolean {
19
- return !!control.getModel("internal").getProperty(CONNECTED);
22
+ const internalModel = control.getModel("internal") as JSONModel;
23
+ return isCollaborationConnected(internalModel);
20
24
  };
21
25
 
22
- export const send = function (control: Control, action: Activity, content: string | string[] | Context | Context[] | undefined) {
26
+ export const send = function (control: Control, action: Activity, content: string | string[] | undefined) {
23
27
  if (isConnected(control)) {
24
- const contentArray = Array.isArray(content) ? content : [content];
25
- let clientContent: string = "";
26
- contentArray.forEach(function (c) {
27
- if (c) {
28
- clientContent += clientContent ? "|" : "";
29
- clientContent += typeof c === "string" ? c : c.getPath();
30
- }
31
- });
32
-
33
- const internalModel = control.getModel("internal") as any;
34
- const webSocket = internalModel.getProperty(CONNECTION) as SapPcpWebSocket;
28
+ const internalModel = control.getModel("internal") as JSONModel;
29
+ const clientContent = Array.isArray(content) ? content.join("|") : content;
35
30
 
36
31
  if (action === Activity.LiveChange) {
37
32
  // To avoid unnecessary traffic we keep track of live changes and send it only once
@@ -46,14 +41,7 @@ export const send = function (control: Control, action: Activity, content: strin
46
41
  internalModel.setProperty(MYACTIVITY, null);
47
42
  }
48
43
 
49
- webSocket.send("", {
50
- clientAction: action,
51
- clientContent: clientContent
52
- });
53
-
54
- if (action === Activity.Activate || action === Activity.Discard) {
55
- disconnect(control);
56
- }
44
+ broadcastCollaborationMessage(action, clientContent, internalModel);
57
45
  }
58
46
  };
59
47
 
@@ -67,12 +55,8 @@ export const isCollaborationEnabled = function (view: View): boolean {
67
55
  };
68
56
 
69
57
  export const connect = async function (view: View) {
70
- const internalModel: any = view.getModel("internal");
58
+ const internalModel = view.getModel("internal") as JSONModel;
71
59
  const me = CollaborationUtils.getMe(view);
72
- if (internalModel.getProperty(CONNECTION)) {
73
- // connection already established
74
- return;
75
- }
76
60
 
77
61
  // Retrieving ME from shell service
78
62
  if (!me) {
@@ -80,8 +64,6 @@ export const connect = async function (view: View) {
80
64
  return;
81
65
  }
82
66
 
83
- const activeUsers: any[] = [me];
84
- internalModel.setProperty("/collaboration", { activeUsers: activeUsers, activities: {} });
85
67
  const bindingContext = view.getBindingContext() as Context;
86
68
  const webSocketBaseURL = getWebSocketBaseURL(bindingContext);
87
69
 
@@ -94,63 +76,17 @@ export const connect = async function (view: View) {
94
76
  return;
95
77
  }
96
78
 
97
- const webSocket = establishWebSocketConnection(webSocketBaseURL, sDraftUUID, view);
98
-
99
- webSocket.attachMessage(function (event: Event) {
100
- const message: Message = event.getParameter("pcpFields");
101
- messageReceive(message, view, webSocket);
79
+ initializeCollaboration(me, webSocketBaseURL, sDraftUUID, internalModel, (message: Message) => {
80
+ messageReceive(message, view);
102
81
  });
103
82
  };
104
83
 
105
84
  export const disconnect = function (control: Control) {
106
- const internalModel = control.getModel("internal") as any;
107
- const webSocket = internalModel.getProperty(CONNECTION) as SapPcpWebSocket;
108
- webSocket.close();
109
- internalModel.setProperty(CONNECTION, null);
85
+ const internalModel = control.getModel("internal") as JSONModel;
86
+ endCollaboration(internalModel);
110
87
  };
111
88
 
112
- function establishWebSocketConnection(socketBaseURL: string, draftUUID: string, view: View) {
113
- const internalModel: any = view.getModel("internal");
114
- const hostLocation = window.location;
115
- let socketURI;
116
-
117
- // Support useBackendUrl for local testing
118
- const useBackendUrl = UriParameters.fromQuery(window.location.search).get("useBackendUrl");
119
- if (useBackendUrl) {
120
- socketURI = useBackendUrl.replace("https", "wss");
121
- } else {
122
- socketURI = hostLocation.protocol === "https:" ? "wss:" : "ws:";
123
- socketURI += "//" + hostLocation.host;
124
- }
125
-
126
- socketURI += (socketBaseURL.startsWith("/") ? "" : "/") + socketBaseURL + "?draft=" + draftUUID;
127
-
128
- const useFLPUser = UriParameters.fromQuery(window.location.search).get("useFLPUser");
129
- if (useFLPUser === "true") {
130
- const me = CollaborationUtils.getMe(view);
131
- socketURI += "&userID=" + encodeURI(me.id) + "&userName=" + encodeURI(me.initialName || "");
132
- }
133
-
134
- const webSocket = new SapPcpWebSocket(socketURI, ["v10.pcp.sap.com"]); // TODO: use enum
135
- internalModel.setProperty(CONNECTION, webSocket);
136
-
137
- webSocket.attachOpen(function () {
138
- internalModel.setProperty(CONNECTED, true);
139
- });
140
-
141
- webSocket.attachError(function () {
142
- Log.error("The connection to the websocket channel " + socketBaseURL + " could not be established");
143
- internalModel.setProperty(CONNECTED, false);
144
- });
145
-
146
- webSocket.attachClose(function () {
147
- internalModel.setProperty(CONNECTED, false);
148
- });
149
-
150
- return webSocket;
151
- }
152
-
153
- function messageReceive(message: Message, view: View, webSocket: any) {
89
+ function messageReceive(message: Message, view: View) {
154
90
  const internalModel: any = view.getModel("internal");
155
91
  let activeUsers: User[] = internalModel.getProperty(ACTIVEUSERS);
156
92
  let activities: UserActivity[];
@@ -165,6 +101,7 @@ function messageReceive(message: Message, view: View, webSocket: any) {
165
101
  color: CollaborationUtils.getUserColor(message.userID, activeUsers, [])
166
102
  };
167
103
 
104
+ // eslint-disable-next-line default-case
168
105
  switch (message.userAction) {
169
106
  case Activity.Join:
170
107
  case Activity.JoinEcho:
@@ -175,18 +112,14 @@ function messageReceive(message: Message, view: View, webSocket: any) {
175
112
 
176
113
  if (message.userAction === Activity.Join) {
177
114
  // we echo our existence to the newly entered user and also send the current activity if there is any
178
- webSocket.send("", {
179
- clientAction: Activity.JoinEcho,
180
- clientContent: internalModel.getProperty(MYACTIVITY)
181
- });
182
- // TODO: echo current activity
115
+ broadcastCollaborationMessage(Activity.JoinEcho, internalModel.getProperty(MYACTIVITY), internalModel);
183
116
  }
184
117
 
185
118
  if (message.userAction === Activity.JoinEcho) {
186
119
  if (message.clientContent) {
187
120
  // another user was already typing therefore I want to see his activity immediately. Calling me again as a live change
188
121
  message.userAction = Activity.LiveChange;
189
- messageReceive(message, view, webSocket);
122
+ messageReceive(message, view);
190
123
  }
191
124
  }
192
125
 
@@ -211,12 +144,23 @@ function messageReceive(message: Message, view: View, webSocket: any) {
211
144
  break;
212
145
 
213
146
  case Activity.Change:
214
- let currentActivities: any[] = internalModel.getProperty(ACTIVITIES + metaPath) || [];
215
- activityKey = getActivityKey(message.clientContent);
216
- currentActivities = currentActivities.filter((activity) => activity.key !== activityKey);
217
- internalModel.setProperty(ACTIVITIES + metaPath, currentActivities);
147
+ const metaPaths = message?.clientContent?.split("|").map((path) => {
148
+ return (view.getModel().getMetaModel() as ODataMetaModel).getMetaPath(path);
149
+ });
218
150
 
219
- update(view, message, metaPath, Activity.Change);
151
+ metaPaths.forEach((currentMetaPath, i) => {
152
+ const nesteedMessage = {
153
+ ...message,
154
+ clientContent: message?.clientContent?.split("|")[i]
155
+ };
156
+ let currentActivities: any[] = internalModel.getProperty(ACTIVITIES + currentMetaPath) || [];
157
+ activityKey = getActivityKey(nesteedMessage.clientContent);
158
+ currentActivities = currentActivities?.filter && currentActivities.filter((activity) => activity.key !== activityKey);
159
+ if (currentActivities) {
160
+ internalModel.setProperty(ACTIVITIES + currentMetaPath, currentActivities);
161
+ update(view, nesteedMessage, currentMetaPath, Activity.Change);
162
+ }
163
+ });
220
164
  break;
221
165
  case Activity.Create:
222
166
  // For create we actually just need to refresh the table
@@ -252,14 +196,14 @@ function messageReceive(message: Message, view: View, webSocket: any) {
252
196
  let initJSONModel: string = "";
253
197
  const parts = metaPath.split("/");
254
198
  for (let i = 1; i < parts.length - 1; i++) {
255
- initJSONModel += "/" + parts[i];
199
+ initJSONModel += `/${parts[i]}`;
256
200
  if (!internalModel.getProperty(ACTIVITIES + initJSONModel)) {
257
201
  internalModel.setProperty(ACTIVITIES + initJSONModel, {});
258
202
  }
259
203
  }
260
204
 
261
205
  activities = internalModel.getProperty(ACTIVITIES + metaPath);
262
- activities = activities ? activities.slice() : [];
206
+ activities = activities?.slice ? activities.slice() : [];
263
207
  activities.push(activity);
264
208
  internalModel.setProperty(ACTIVITIES + metaPath, activities);
265
209
  break;
@@ -279,7 +223,7 @@ function update(view: View, message: Message, metaPath: string, action: Activity
279
223
  const appComponent = CollaborationUtils.getAppComponent(view);
280
224
  const metaModel = view.getModel().getMetaModel() as ODataMetaModel;
281
225
  const currentPage = getCurrentPage(view);
282
- const sideEffectsService = (appComponent as any).getSideEffectsService(); // TODO: add to appcomponent
226
+ const sideEffectsService = appComponent.getSideEffectsService();
283
227
  const currentContext = currentPage.getBindingContext();
284
228
  const currentPath = currentContext.getPath();
285
229
  const currentMetaPath = metaModel.getMetaPath(currentPath);
@@ -288,12 +232,13 @@ function update(view: View, message: Message, metaPath: string, action: Activity
288
232
  if (action === Activity.Delete) {
289
233
  // check if user currently displays one deleted object
290
234
  const deletedObjects = message.clientContent.split("|");
291
- if (deletedObjects.findIndex((deletedObject) => currentPath.startsWith(deletedObject)) > -1) {
235
+ const parentDeletedIndex = deletedObjects.findIndex((deletedObject) => currentPath.startsWith(deletedObject));
236
+ if (parentDeletedIndex > -1) {
292
237
  // any other user deleted the object I'm currently looking at. Inform the user we will navigate to root now
293
238
  MessageBox.information(CollaborationUtils.getText("C_COLLABORATIONDRAFT_DELETE", message.userDescription), {
294
239
  onClose: function () {
295
- // TODO: Navigate to root? To be implemented
296
- history.back();
240
+ const targetContext = view.getModel().bindContext(deletedObjects[parentDeletedIndex]).getBoundContext();
241
+ currentPage.getController()._routing.navigateBackFromContext(targetContext);
297
242
  }
298
243
  });
299
244
  }
@@ -312,7 +257,7 @@ function update(view: View, message: Message, metaPath: string, action: Activity
312
257
  }
313
258
  ];
314
259
  const entityType = sideEffectsService.getEntityTypeFromContext(currentContext);
315
- const entityTypeSideEffects = sideEffectsService.getODataEntitySideEffects(entityType);
260
+ const entityTypeSideEffects = sideEffectsService.getODataEntitySideEffects(entityType!);
316
261
  // Poor man solution without checking source targets, just for POC, this is throw-way coding only
317
262
  const object: any = Object; // just to overcome TS issues, will be anyway replaced
318
263
  const relevantSideEffects = object.fromEntries(
@@ -344,9 +289,10 @@ function navigate(path: string, view: View) {
344
289
 
345
290
  function getCurrentPage(view: View) {
346
291
  const appComponent = CollaborationUtils.getAppComponent(view);
347
- // TODO: isn't there an easier way to get the current page?
348
- // TODO: What about FCL?
349
- return (appComponent.getRootControl() as any).getContent()[0].getCurrentPage().getComponentInstance().getRootControl();
292
+ const rootViewController = appComponent.getRootViewController() as any;
293
+ return rootViewController.isFclEnabled()
294
+ ? rootViewController.getRightmostView()
295
+ : CommonUtils.getTargetView((appComponent.getRootContainer() as any).getCurrentPage());
350
296
  }
351
297
 
352
298
  function getActivityKey(x: string): string {
@@ -113,7 +113,7 @@ sap.ui.define(["sap/ui/core/Component", "sap/ui/core/Core"], function (Component
113
113
  var me = {
114
114
  initials: shellServiceHelper.getUser().getInitials(),
115
115
  id: shellServiceHelper.getUser().getId(),
116
- name: shellServiceHelper.getUser().getFullName() + " (" + getText("C_COLLABORATIONDRAFT_YOU") + ")",
116
+ name: "".concat(shellServiceHelper.getUser().getFullName(), " (").concat(getText("C_COLLABORATIONDRAFT_YOU"), ")"),
117
117
  initialName: shellServiceHelper.getUser().getFullName(),
118
118
  color: 6,
119
119
  // same color as FLP...
@@ -143,4 +143,4 @@ sap.ui.define(["sap/ui/core/Component", "sap/ui/core/Core"], function (Component
143
143
  _exports.CollaborationUtils = CollaborationUtils;
144
144
  return _exports;
145
145
  }, false);
146
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25Db21tb24udHMiXSwibmFtZXMiOlsiUm9sZSIsIkFjdGl2aXR5IiwiZm9ybWF0SW5pdGlhbHMiLCJmdWxsTmFtZSIsImFjYWRlbWljVGl0bGVzIiwiZm9yRWFjaCIsImFjYWRlbWljVGl0bGUiLCJyZXBsYWNlIiwiaW5pdGlhbHMiLCJwYXJ0cyIsInRyaW1TdGFydCIsInNwbGl0IiwibGVuZ3RoIiwic2hpZnQiLCJjaGFyQXQiLCJwb3AiLCJzdWJzdHJpbmciLCJ0b1VwcGVyQ2FzZSIsImdldFVzZXJDb2xvciIsIlVzZXJJRCIsImFjdGl2ZVVzZXJzIiwiaW52aXRlZFVzZXJzIiwidXNlciIsImZpbmQiLCJ1IiwiaWQiLCJjb2xvciIsImkiLCJmaW5kSW5kZXgiLCJnZXRBcHBDb21wb25lbnQiLCJvQ29udHJvbCIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0TWUiLCJ2aWV3Iiwic2hlbGxTZXJ2aWNlSGVscGVyIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImhhc1VTaGVsbCIsIm1lIiwiZ2V0VXNlciIsImdldEluaXRpYWxzIiwiZ2V0SWQiLCJuYW1lIiwiZ2V0RnVsbE5hbWUiLCJnZXRUZXh0IiwiaW5pdGlhbE5hbWUiLCJyb2xlIiwiT3duZXIiLCJ0ZXh0SWQiLCJvUmVzb3VyY2VNb2RlbCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJhcmdzIiwiQ29sbGFib3JhdGlvblV0aWxzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7TUFtQllBLEk7O2FBQUFBLEk7QUFBQUEsSUFBQUEsSTtBQUFBQSxJQUFBQSxJO0tBQUFBLEksS0FBQUEsSTs7O01BS0FDLFE7O2FBQUFBLFE7QUFBQUEsSUFBQUEsUTtBQUFBQSxJQUFBQSxRO0FBQUFBLElBQUFBLFE7QUFBQUEsSUFBQUEsUTtBQUFBQSxJQUFBQSxRO0FBQUFBLElBQUFBLFE7QUFBQUEsSUFBQUEsUTtB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LEtBSDBCO0FBSWpDTixJQUFBQSxlQUFlLEVBQUVBLGVBSmdCO0FBS2pDaUIsSUFBQUEsT0FBTyxFQUFFQTtBQUx3QixHQUEzQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcblxuZXhwb3J0IHR5cGUgVXNlciA9IHtcblx0aWQ6IHN0cmluZztcblx0aW5pdGlhbHM/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cm9sZT86IFJvbGU7XG5cdGNvbG9yPzogbnVtYmVyO1xuXHR0cmFuc2llbnQ/OiBib29sZWFuO1xuXHRtZT86IGJvb2xlYW47XG5cdGluaXRpYWxOYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXNlckFjdGl2aXR5ID0gVXNlciAmIHtcblx0a2V5Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gUm9sZSB7XG5cdE93bmVyID0gXCJPXCIsXG5cdEVkaXQgPSBcIkVcIlxufVxuXG5leHBvcnQgZW51bSBBY3Rpdml0eSB7XG5cdEpvaW4gPSBcIkpPSU5cIixcblx0Sm9pbkVjaG8gPSBcIkpPSU5FQ0hPXCIsXG5cdExlYXZlID0gXCJMRUFWRVwiLFxuXHRDaGFuZ2UgPSBcIkNIQU5HRVwiLFxuXHRDcmVhdGUgPSBcIkNSRUFURVwiLFxuXHREZWxldGUgPSBcIkRFTEVURVwiLFxuXHRBY3Rpb24gPSBcIkFDVElPTlwiLFxuXHRMaXZlQ2hhbmdlID0gXCJMSVZFQ0hBTkdFXCIsXG5cdEFjdGl2YXRlID0gXCJBQ1RJVkFURVwiLFxuXHREaXNjYXJkID0gXCJESVNDQVJEXCIsXG5cdFVuZG8gPSBcIlVORE9cIlxufVxuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0ge1xuXHR1c2VyRGVzY3JpcHRpb246IHN0cmluZztcblx0dXNlcklEOiBzdHJpbmc7XG5cdHVzZXJBY3Rpb246IHN0cmluZztcblx0Y2xpZW50QWN0aW9uOiBzdHJpbmc7XG5cdGNsaWVudENvbnRlbnQ6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdEluaXRpYWxzKGZ1bGxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHQvLyByZW1vdmUgdGl0bGVzIC0gdGhvc2UgYXJlIHRoZSBvbmVzIGZyb20gUy80IHRvIGJlIGNoZWNrZWQgaWYgdGhlcmUgYXJlIG90aGVyc1xuXHRjb25zdCBhY2FkZW1pY1RpdGxlcyA9IFtcIkRyLlwiLCBcIlByb2YuXCIsIFwiUHJvZi4gRHIuXCIsIFwiQi5BLlwiLCBcIk1CQVwiLCBcIlBoLkQuXCJdO1xuXHRhY2FkZW1pY1RpdGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGFjYWRlbWljVGl0bGUpIHtcblx0XHRmdWxsTmFtZSA9IGZ1bGxOYW1lLnJlcGxhY2UoYWNhZGVtaWNUaXRsZSwgXCJcIik7XG5cdH0pO1xuXG5cdGxldCBpbml0aWFsczogc3RyaW5nO1xuXHRjb25zdCBwYXJ0cyA9IGZ1bGxOYW1lLnRyaW1TdGFydCgpLnNwbGl0KFwiIFwiKTtcblxuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGluaXRpYWxzID0gKHBhcnRzPy5zaGlmdCgpPy5jaGFyQXQoMCkgfHwgXCJcIikgKyBwYXJ0cy5wb3AoKT8uY2hhckF0KDApO1xuXHR9IGVsc2Uge1xuXHRcdGluaXRpYWxzID0gZnVsbE5hbWUuc3Vic3RyaW5nKDAsIDIpO1xuXHR9XG5cblx0cmV0dXJuIGluaXRpYWxzLnRvVXBwZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGdldFVzZXJDb2xvcihVc2VySUQ6IHN0cmluZywgYWN0aXZlVXNlcnM6IFVzZXJbXSwgaW52aXRlZFVzZXJzOiBVc2VyW10pIHtcblx0Ly8gc2VhcmNoIGlmIHVzZXIgaXMga25vd25cblx0Y29uc3QgdXNlciA9IGFjdGl2ZVVzZXJzLmZpbmQodSA9PiB1LmlkID09PSBVc2VySUQpO1xuXHRpZiAodXNlcikge1xuXHRcdHJldHVybiB1c2VyLmNvbG9yO1xuXHR9IGVsc2Uge1xuXHRcdC8vIHNlYXJjaCBmb3IgbmV4dCBmcmVlIGNvbG9yXG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gMTA7IGkrKykge1xuXHRcdFx0aWYgKGFjdGl2ZVVzZXJzLmZpbmRJbmRleCh1ID0+IHUuY29sb3IgPT09IGkpID09PSAtMSAmJiBpbnZpdGVkVXNlcnMuZmluZEluZGV4KHUgPT4gdS5jb2xvciA9PT0gaSkgPT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyB0aGlzIHNlZW1zIHRvIGJlIGEgcG9wdWxhciBvYmplY3QgOikgZm9yIG5vdyBqdXN0IHJldHVybiAxMCBmb3IgYWxsLlxuXHRcdC8vIGZvciBpbnZpdGVkIHdlIHNob3VsZCBzdGFydCBmcm9tIDEgYWdhaW4gc28gdGhlIGNvbG9ycyBhcmUgZGlmZmVyZW50XG5cdFx0cmV0dXJuIDEwO1xuXHR9XG59XG5cbi8vIGNvcGllZCBmcm9tIENvbW1vblV0aWxzLiBEdWUgdG8gYSBjeWNsZSBkZXBlbmRlbmN5IEkgY2FuJ3QgdXNlIENvbW1vblV0aWxzIGhlcmUuXG4vLyBUaGF0J3MgdG8gYmUgZml4ZWQuIHRoZSBkaXNjYXJkIHBvcG92ZXIgdGhpbmd5IHNob3VsZG4ndCBiZSBpbiB0aGUgY29tbW9uIHV0aWxzIGF0IGFsbFxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBhbnkpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNZSh2aWV3OiBWaWV3KTogVXNlciB7XG5cdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IGdldEFwcENvbXBvbmVudCh2aWV3KS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGlmICghc2hlbGxTZXJ2aWNlSGVscGVyIHx8ICFzaGVsbFNlcnZpY2VIZWxwZXIuaGFzVVNoZWxsKCkpIHtcblx0XHR0aHJvdyBcIk5vIFNoZWxsLi4uIE5vIFVzZXJcIjtcblx0fVxuXHRjb25zdCBtZTogVXNlciA9IHtcblx0XHRpbml0aWFsczogc2hlbGxTZXJ2aWNlSGVscGVyLmdldFVzZXIoKS5nZXRJbml0aWFscygpLFxuXHRcdGlkOiBzaGVsbFNlcnZpY2VIZWxwZXIuZ2V0VXNlcigpLmdldElkKCksXG5cdFx0bmFtZTogc2hlbGxTZXJ2aWNlSGVscGVyLmdldFVzZXIoKS5nZXRGdWxsTmFtZSgpICsgXCIgKFwiICsgZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX1lPVVwiKSArIFwiKVwiLFxuXHRcdGluaXRpYWxOYW1lOiBzaGVsbFNlcnZpY2VIZWxwZXIuZ2V0VXNlcigpLmdldEZ1bGxOYW1lKCksXG5cdFx0Y29sb3I6IDYsIC8vICBzYW1lIGNvbG9yIGFzIEZMUC4uLlxuXHRcdHJvbGU6IFJvbGUuT3duZXIsXG5cdFx0bWU6IHRydWVcblx0fTtcblxuXHRyZXR1cm4gbWU7XG59XG5cbmZ1bmN0aW9uIGdldFRleHQodGV4dElkOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRyZXR1cm4gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dCh0ZXh0SWQsIGFyZ3MpO1xufVxuXG5leHBvcnQgY29uc3QgQ29sbGFib3JhdGlvblV0aWxzID0ge1xuXHRmb3JtYXRJbml0aWFsczogZm9ybWF0SW5pdGlhbHMsXG5cdGdldFVzZXJDb2xvcjogZ2V0VXNlckNvbG9yLFxuXHRnZXRNZTogZ2V0TWUsXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRUZXh0OiBnZXRUZXh0XG59O1xuIl19
146
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbGxhYm9yYXRpb25Db21tb24udHMiXSwibmFtZXMiOlsiUm9sZSIsIkFjdGl2aXR5IiwiZm9ybWF0SW5pdGlhbHMiLCJmdWxsTmFtZSIsImFjYWRlbWljVGl0bGVzIiwiZm9yRWFjaCIsImFjYWRlbWljVGl0bGUiLCJyZXBsYWNlIiwiaW5pdGlhbHMiLCJwYXJ0cyIsInRyaW1TdGFydCIsInNwbGl0IiwibGVuZ3RoIiwic2hpZnQiLCJjaGFyQXQiLCJwb3AiLCJzdWJzdHJpbmciLCJ0b1VwcGVyQ2FzZSIsImdldFVzZXJDb2xvciIsIlVzZXJJRCIsImFjdGl2ZVVzZXJzIiwiaW52aXRlZFVzZXJzIiwidXNlciIsImZpbmQiLCJ1IiwiaWQiLCJjb2xvciIsImkiLCJmaW5kSW5kZXgiLCJnZXRBcHBDb21wb25lbnQiLCJvQ29udHJvbCIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0TWUiLCJ2aWV3Iiwic2hlbGxTZXJ2aWNlSGVscGVyIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImhhc1VTaGVsbCIsIm1lIiwiZ2V0VXNlciIsImdldEluaXRpYWxzIiwiZ2V0SWQiLCJuYW1lIiwiZ2V0RnVsbE5hbWUiLCJnZXRUZXh0IiwiaW5pdGlhbE5hbWUiLCJyb2xlIiwiT3duZXIiLCJ0ZXh0SWQiLCJvUmVzb3VyY2VNb2RlbCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJhcmdzIiwiQ29sbGFib3JhdGlvblV0aWxzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7TUFtQllBLEk7O2FBQUFBLEk7QUFBQUEsSUFBQUEsSTtBQUFBQSxJQUFBQSxJO0tBQUFBLEksS0FBQUEsSTs7O01BS0FDLFE7O2FBQUFBLFE7QUFBQUEsSUFBQUEsUTtBQUFBQSxJQUFBQSxRO0FBQUFBLElBQUFBLFE7QUFBQUEsSUFBQUEsUTtBQUFBQSxJQUFBQSxRO0FBQUFBLElBQUFBLFE7QUFBQUEsSUFBQUEsUTtBQUFBQSxJQUFBQSxRO0FBQUFBLElBQUFBLFE7QUFBQUEsSUFBQUEsUTtBQUFBQSxJQUFBQSxRO0tBQUFBLFEsS0FBQUEsUTs7OztBQXNCWixXQUFTQyxjQUFULENBQXdCQyxRQUF4QixFQUFrRDtBQUNqRDtBQUNBLFFBQU1DLGNBQWMsR0FBRyxDQUFDLEtBQUQsRUFBUSxPQUFSLEVBQWlCLFdBQWpCLEVBQThCLE1BQTlCLEVBQXNDLEtBQXRDLEVBQTZDLE9BQTdDLENBQXZCO0FBQ0FBLElBQUFBLGNBQWMsQ0FBQ0MsT0FBZixDQUF1QixVQUFVQyxhQUFWLEVBQXlCO0FBQy9DSCxNQUFBQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ksT0FBVCxDQUFpQkQsYUFBakIsRUFBZ0MsRUFBaEMsQ0FBWDtBQUNBLEtBRkQ7QUFJQSxRQUFJRSxRQUFKO0FBQ0EsUUFBTUMsS0FBSyxHQUFHTixRQUFRLENBQUNPLFNBQVQsR0FBcUJDLEtBQXJCLENBQTJCLEdBQTNCLENBQWQ7O0FBRUEsUUFBSUYsS0FBSyxDQUFDRyxNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFBQTs7QUFDckJKLE1BQUFBLFFBQVEsR0FBRyxDQUFDLENBQUFDLEtBQUssU0FBTCxJQUFBQSxLQUFLLFdBQUwsNEJBQUFBLEtBQUssQ0FBRUksS0FBUCxnRUFBZ0JDLE1BQWhCLENBQXVCLENBQXZCLE1BQTZCLEVBQTlCLG1CQUFvQ0wsS0FBSyxDQUFDTSxHQUFOLEVBQXBDLCtDQUFvQyxXQUFhRCxNQUFiLENBQW9CLENBQXBCLENBQXBDLENBQVg7QUFDQSxLQUZELE1BRU87QUFDTk4sTUFBQUEsUUFBUSxHQUFHTCxRQUFRLENBQUNhLFNBQVQsQ0FBbUIsQ0FBbkIsRUFBc0IsQ0FBdEIsQ0FBWDtBQUNBOztBQUVELFdBQU9SLFFBQVEsQ0FBQ1MsV0FBVCxFQUFQO0FBQ0E7O0FBRUQsV0FBU0MsWUFBVCxDQUFzQkMsTUFBdEIsRUFBc0NDLFdBQXRDLEVBQTJEQyxZQUEzRCxFQUFpRjtBQUNoRjtBQUNBLFFBQU1DLElBQUksR0FBR0YsV0FBVyxDQUFDRyxJQUFaLENBQWlCLFVBQUNDLENBQUQ7QUFBQSxhQUFPQSxDQUFDLENBQUNDLEVBQUYsS0FBU04sTUFBaEI7QUFBQSxLQUFqQixDQUFiOztBQUNBLFFBQUlHLElBQUosRUFBVTtBQUNULGFBQU9BLElBQUksQ0FBQ0ksS0FBWjtBQUNBLEtBRkQsTUFFTztBQUFBLDRCQUVHQyxDQUZIO0FBR0wsWUFBSVAsV0FBVyxDQUFDUSxTQUFaLENBQXNCLFVBQUNKLENBQUQ7QUFBQSxpQkFBT0EsQ0FBQyxDQUFDRSxLQUFGLEtBQVlDLENBQW5CO0FBQUEsU0FBdEIsTUFBZ0QsQ0FBQyxDQUFqRCxJQUFzRE4sWUFBWSxDQUFDTyxTQUFiLENBQXVCLFVBQUNKLENBQUQ7QUFBQSxpQkFBT0EsQ0FBQyxDQUFDRSxLQUFGLEtBQVlDLENBQW5CO0FBQUEsU0FBdkIsTUFBaUQsQ0FBQyxDQUE1RyxFQUErRztBQUM5RztBQUFBLGVBQU9BO0FBQVA7QUFDQTtBQUxJOztBQUNOO0FBQ0EsV0FBSyxJQUFJQSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxJQUFJLEVBQXJCLEVBQXlCQSxDQUFDLEVBQTFCLEVBQThCO0FBQUEseUJBQXJCQSxDQUFxQjs7QUFBQTtBQUk3QixPQU5LLENBT047QUFDQTs7O0FBQ0EsYUFBTyxFQUFQO0FBQ0E7QUFDRCxHLENBRUQ7QUFDQTs7O0FBQ0EsV0FBU0UsZUFBVCxDQUF5QkMsUUFBekIsRUFBc0Q7QUFDckQsUUFBSUEsUUFBUSxDQUFDQyxHQUFULENBQWEsMEJBQWIsQ0FBSixFQUE4QztBQUM3QyxhQUFPRCxRQUFQO0FBQ0E7O0FBQ0QsUUFBTUUsTUFBTSxHQUFHQyxTQUFTLENBQUNDLG9CQUFWLENBQStCSixRQUEvQixDQUFmOztBQUNBLFFBQUksQ0FBQ0UsTUFBTCxFQUFhO0FBQ1osYUFBT0YsUUFBUDtBQUNBLEtBRkQsTUFFTztBQUNOLGFBQU9ELGVBQWUsQ0FBQ0csTUFBRCxDQUF0QjtBQUNBO0FBQ0Q7O0FBRUQsV0FBU0csS0FBVCxDQUFlQyxJQUFmLEVBQWlDO0FBQ2hDLFFBQU1DLGtCQUFrQixHQUFHUixlQUFlLENBQUNPLElBQUQsQ0FBZixDQUFzQkUsZ0JBQXRCLEVBQTNCOztBQUNBLFFBQUksQ0FBQ0Qsa0JBQUQsSUFBdUIsQ0FBQ0Esa0JBQWtCLENBQUNFLFNBQW5CLEVBQTVCLEVBQTREO0FBQzNELFlBQU0scUJBQU47QUFDQTs7QUFDRCxRQUFNQyxFQUFRLEdBQUc7QUFDaEJoQyxNQUFBQSxRQUFRLEVBQUU2QixrQkFBa0IsQ0FBQ0ksT0FBbkIsR0FBNkJDLFdBQTdCLEVBRE07QUFFaEJqQixNQUFBQSxFQUFFLEVBQUVZLGtCQUFrQixDQUFDSSxPQUFuQixHQUE2QkUsS0FBN0IsRUFGWTtBQUdoQkMsTUFBQUEsSUFBSSxZQUFLUCxrQkFBa0IsQ0FBQ0ksT0FBbkIsR0FBNkJJLFdBQTdCLEVBQUwsZUFBb0RDLE9BQU8sQ0FBQywwQkFBRCxDQUEzRCxNQUhZO0FBSWhCQyxNQUFBQSxXQUFXLEVBQUVWLGtCQUFrQixDQUFDSSxPQUFuQixHQUE2QkksV0FBN0IsRUFKRztBQUtoQm5CLE1BQUFBLEtBQUssRUFBRSxDQUxTO0FBS047QUFDVnNCLE1BQUFBLElBQUksRUFBRWhELElBQUksQ0FBQ2lELEtBTks7QUFPaEJULE1BQUFBLEVBQUUsRUFBRTtBQVBZLEtBQWpCO0FBVUEsV0FBT0EsRUFBUDtBQUNBOztBQUVELFdBQVNNLE9BQVQsQ0FBaUJJLE1BQWpCLEVBQTREO0FBQzNELFFBQU1DLGNBQWMsR0FBSUMsSUFBRCxDQUFpQkMsd0JBQWpCLENBQTBDLGFBQTFDLENBQXZCOztBQUQyRCxzQ0FBeEJDLElBQXdCO0FBQXhCQSxNQUFBQSxJQUF3QjtBQUFBOztBQUUzRCxXQUFPSCxjQUFjLENBQUNMLE9BQWYsQ0FBdUJJLE1BQXZCLEVBQStCSSxJQUEvQixDQUFQO0FBQ0E7O0FBRU0sTUFBTUMsa0JBQWtCLEdBQUc7QUFDakNyRCxJQUFBQSxjQUFjLEVBQUVBLGNBRGlCO0FBRWpDZ0IsSUFBQUEsWUFBWSxFQUFFQSxZQUZtQjtBQUdqQ2lCLElBQUFBLEtBQUssRUFBRUEsS0FIMEI7QUFJakNOLElBQUFBLGVBQWUsRUFBRUEsZUFKZ0I7QUFLakNpQixJQUFBQSxPQUFPLEVBQUVBO0FBTHdCLEdBQTNCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5leHBvcnQgdHlwZSBVc2VyID0ge1xuXHRpZDogc3RyaW5nO1xuXHRpbml0aWFscz86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRyb2xlPzogUm9sZTtcblx0Y29sb3I/OiBudW1iZXI7XG5cdHRyYW5zaWVudD86IGJvb2xlYW47XG5cdG1lPzogYm9vbGVhbjtcblx0aW5pdGlhbE5hbWU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQWN0aXZpdHkgPSBVc2VyICYge1xuXHRrZXk/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZW51bSBSb2xlIHtcblx0T3duZXIgPSBcIk9cIixcblx0RWRpdCA9IFwiRVwiXG59XG5cbmV4cG9ydCBlbnVtIEFjdGl2aXR5IHtcblx0Sm9pbiA9IFwiSk9JTlwiLFxuXHRKb2luRWNobyA9IFwiSk9JTkVDSE9cIixcblx0TGVhdmUgPSBcIkxFQVZFXCIsXG5cdENoYW5nZSA9IFwiQ0hBTkdFXCIsXG5cdENyZWF0ZSA9IFwiQ1JFQVRFXCIsXG5cdERlbGV0ZSA9IFwiREVMRVRFXCIsXG5cdEFjdGlvbiA9IFwiQUNUSU9OXCIsXG5cdExpdmVDaGFuZ2UgPSBcIkxJVkVDSEFOR0VcIixcblx0QWN0aXZhdGUgPSBcIkFDVElWQVRFXCIsXG5cdERpc2NhcmQgPSBcIkRJU0NBUkRcIixcblx0VW5kbyA9IFwiVU5ET1wiXG59XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSB7XG5cdHVzZXJEZXNjcmlwdGlvbjogc3RyaW5nO1xuXHR1c2VySUQ6IHN0cmluZztcblx0dXNlckFjdGlvbjogc3RyaW5nO1xuXHRjbGllbnRBY3Rpb246IHN0cmluZztcblx0Y2xpZW50Q29udGVudDogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0SW5pdGlhbHMoZnVsbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIHJlbW92ZSB0aXRsZXMgLSB0aG9zZSBhcmUgdGhlIG9uZXMgZnJvbSBTLzQgdG8gYmUgY2hlY2tlZCBpZiB0aGVyZSBhcmUgb3RoZXJzXG5cdGNvbnN0IGFjYWRlbWljVGl0bGVzID0gW1wiRHIuXCIsIFwiUHJvZi5cIiwgXCJQcm9mLiBEci5cIiwgXCJCLkEuXCIsIFwiTUJBXCIsIFwiUGguRC5cIl07XG5cdGFjYWRlbWljVGl0bGVzLmZvckVhY2goZnVuY3Rpb24gKGFjYWRlbWljVGl0bGUpIHtcblx0XHRmdWxsTmFtZSA9IGZ1bGxOYW1lLnJlcGxhY2UoYWNhZGVtaWNUaXRsZSwgXCJcIik7XG5cdH0pO1xuXG5cdGxldCBpbml0aWFsczogc3RyaW5nO1xuXHRjb25zdCBwYXJ0cyA9IGZ1bGxOYW1lLnRyaW1TdGFydCgpLnNwbGl0KFwiIFwiKTtcblxuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGluaXRpYWxzID0gKHBhcnRzPy5zaGlmdCgpPy5jaGFyQXQoMCkgfHwgXCJcIikgKyBwYXJ0cy5wb3AoKT8uY2hhckF0KDApO1xuXHR9IGVsc2Uge1xuXHRcdGluaXRpYWxzID0gZnVsbE5hbWUuc3Vic3RyaW5nKDAsIDIpO1xuXHR9XG5cblx0cmV0dXJuIGluaXRpYWxzLnRvVXBwZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGdldFVzZXJDb2xvcihVc2VySUQ6IHN0cmluZywgYWN0aXZlVXNlcnM6IFVzZXJbXSwgaW52aXRlZFVzZXJzOiBVc2VyW10pIHtcblx0Ly8gc2VhcmNoIGlmIHVzZXIgaXMga25vd25cblx0Y29uc3QgdXNlciA9IGFjdGl2ZVVzZXJzLmZpbmQoKHUpID0+IHUuaWQgPT09IFVzZXJJRCk7XG5cdGlmICh1c2VyKSB7XG5cdFx0cmV0dXJuIHVzZXIuY29sb3I7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gc2VhcmNoIGZvciBuZXh0IGZyZWUgY29sb3Jcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSB7XG5cdFx0XHRpZiAoYWN0aXZlVXNlcnMuZmluZEluZGV4KCh1KSA9PiB1LmNvbG9yID09PSBpKSA9PT0gLTEgJiYgaW52aXRlZFVzZXJzLmZpbmRJbmRleCgodSkgPT4gdS5jb2xvciA9PT0gaSkgPT09IC0xKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyB0aGlzIHNlZW1zIHRvIGJlIGEgcG9wdWxhciBvYmplY3QgOikgZm9yIG5vdyBqdXN0IHJldHVybiAxMCBmb3IgYWxsLlxuXHRcdC8vIGZvciBpbnZpdGVkIHdlIHNob3VsZCBzdGFydCBmcm9tIDEgYWdhaW4gc28gdGhlIGNvbG9ycyBhcmUgZGlmZmVyZW50XG5cdFx0cmV0dXJuIDEwO1xuXHR9XG59XG5cbi8vIGNvcGllZCBmcm9tIENvbW1vblV0aWxzLiBEdWUgdG8gYSBjeWNsZSBkZXBlbmRlbmN5IEkgY2FuJ3QgdXNlIENvbW1vblV0aWxzIGhlcmUuXG4vLyBUaGF0J3MgdG8gYmUgZml4ZWQuIHRoZSBkaXNjYXJkIHBvcG92ZXIgdGhpbmd5IHNob3VsZG4ndCBiZSBpbiB0aGUgY29tbW9uIHV0aWxzIGF0IGFsbFxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBhbnkpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNZSh2aWV3OiBWaWV3KTogVXNlciB7XG5cdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IGdldEFwcENvbXBvbmVudCh2aWV3KS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGlmICghc2hlbGxTZXJ2aWNlSGVscGVyIHx8ICFzaGVsbFNlcnZpY2VIZWxwZXIuaGFzVVNoZWxsKCkpIHtcblx0XHR0aHJvdyBcIk5vIFNoZWxsLi4uIE5vIFVzZXJcIjtcblx0fVxuXHRjb25zdCBtZTogVXNlciA9IHtcblx0XHRpbml0aWFsczogc2hlbGxTZXJ2aWNlSGVscGVyLmdldFVzZXIoKS5nZXRJbml0aWFscygpLFxuXHRcdGlkOiBzaGVsbFNlcnZpY2VIZWxwZXIuZ2V0VXNlcigpLmdldElkKCksXG5cdFx0bmFtZTogYCR7c2hlbGxTZXJ2aWNlSGVscGVyLmdldFVzZXIoKS5nZXRGdWxsTmFtZSgpfSAoJHtnZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfWU9VXCIpfSlgLFxuXHRcdGluaXRpYWxOYW1lOiBzaGVsbFNlcnZpY2VIZWxwZXIuZ2V0VXNlcigpLmdldEZ1bGxOYW1lKCksXG5cdFx0Y29sb3I6IDYsIC8vICBzYW1lIGNvbG9yIGFzIEZMUC4uLlxuXHRcdHJvbGU6IFJvbGUuT3duZXIsXG5cdFx0bWU6IHRydWVcblx0fTtcblxuXHRyZXR1cm4gbWU7XG59XG5cbmZ1bmN0aW9uIGdldFRleHQodGV4dElkOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRyZXR1cm4gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dCh0ZXh0SWQsIGFyZ3MpO1xufVxuXG5leHBvcnQgY29uc3QgQ29sbGFib3JhdGlvblV0aWxzID0ge1xuXHRmb3JtYXRJbml0aWFsczogZm9ybWF0SW5pdGlhbHMsXG5cdGdldFVzZXJDb2xvcjogZ2V0VXNlckNvbG9yLFxuXHRnZXRNZTogZ2V0TWUsXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRUZXh0OiBnZXRUZXh0XG59O1xuIl19
@@ -1,8 +1,8 @@
1
- import View from "sap/ui/core/mvc/View";
1
+ import type AppComponent from "sap/fe/core/AppComponent";
2
2
  import Component from "sap/ui/core/Component";
3
- import AppComponent from "sap/fe/core/AppComponent";
4
- import { CoreEx } from "../../../../../../../../types/extension_types";
5
3
  import Core from "sap/ui/core/Core";
4
+ import type View from "sap/ui/core/mvc/View";
5
+ import type { CoreEx } from "../../../../../../../../types/extension_types";
6
6
 
7
7
  export type User = {
8
8
  id: string;
@@ -49,7 +49,7 @@ export type Message = {
49
49
  function formatInitials(fullName: string): string {
50
50
  // remove titles - those are the ones from S/4 to be checked if there are others
51
51
  const academicTitles = ["Dr.", "Prof.", "Prof. Dr.", "B.A.", "MBA", "Ph.D."];
52
- academicTitles.forEach(function(academicTitle) {
52
+ academicTitles.forEach(function (academicTitle) {
53
53
  fullName = fullName.replace(academicTitle, "");
54
54
  });
55
55
 
@@ -67,13 +67,13 @@ function formatInitials(fullName: string): string {
67
67
 
68
68
  function getUserColor(UserID: string, activeUsers: User[], invitedUsers: User[]) {
69
69
  // search if user is known
70
- const user = activeUsers.find(u => u.id === UserID);
70
+ const user = activeUsers.find((u) => u.id === UserID);
71
71
  if (user) {
72
72
  return user.color;
73
73
  } else {
74
74
  // search for next free color
75
75
  for (let i = 1; i <= 10; i++) {
76
- if (activeUsers.findIndex(u => u.color === i) === -1 && invitedUsers.findIndex(u => u.color === i) === -1) {
76
+ if (activeUsers.findIndex((u) => u.color === i) === -1 && invitedUsers.findIndex((u) => u.color === i) === -1) {
77
77
  return i;
78
78
  }
79
79
  }
@@ -105,7 +105,7 @@ function getMe(view: View): User {
105
105
  const me: User = {
106
106
  initials: shellServiceHelper.getUser().getInitials(),
107
107
  id: shellServiceHelper.getUser().getId(),
108
- name: shellServiceHelper.getUser().getFullName() + " (" + getText("C_COLLABORATIONDRAFT_YOU") + ")",
108
+ name: `${shellServiceHelper.getUser().getFullName()} (${getText("C_COLLABORATIONDRAFT_YOU")})`,
109
109
  initialName: shellServiceHelper.getUser().getFullName(),
110
110
  color: 6, // same color as FLP...
111
111
  role: Role.Owner,