@sapui5/sap.fe.core 1.96.4 → 1.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/package.json +6 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +5 -3
  6. package/src/sap/fe/core/AppStateHandler.js +229 -195
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2606
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +16 -7
  14. package/src/sap/fe/core/PageController.js +84 -119
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -809
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -155
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +63 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1627
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +559 -581
  27. package/src/sap/fe/core/actions/draft.ts +593 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -435
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1192
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +235 -264
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +35 -25
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +79 -46
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +86 -10
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +109 -31
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +237 -104
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
  50. package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +36 -8
  56. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
  57. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  58. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  59. package/src/sap/fe/core/controls/CustomQuickViewPage.js +112 -113
  60. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
  61. package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
  62. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  63. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
  64. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  65. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  66. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  67. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  68. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  69. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  70. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  71. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  72. package/src/sap/fe/core/converters/ConverterContext.js +14 -2
  73. package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
  74. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  75. package/src/sap/fe/core/converters/ManifestSettings.ts +8 -1
  76. package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
  77. package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
  78. package/src/sap/fe/core/converters/MetaModelConverter.js +76 -6
  79. package/src/sap/fe/core/converters/MetaModelConverter.ts +79 -15
  80. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  81. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  82. package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
  83. package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
  84. package/src/sap/fe/core/converters/common/AnnotationConverter.js +85 -46
  85. package/src/sap/fe/core/converters/controls/Common/Action.js +16 -4
  86. package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -5
  87. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  88. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  89. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  90. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  91. package/src/sap/fe/core/converters/controls/Common/Form.js +60 -19
  92. package/src/sap/fe/core/converters/controls/Common/Form.ts +66 -14
  93. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  94. package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
  95. package/src/sap/fe/core/converters/controls/Common/Table.js +503 -399
  96. package/src/sap/fe/core/converters/controls/Common/Table.ts +615 -480
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
  101. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  102. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  104. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  105. package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
  106. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  107. package/src/sap/fe/core/converters/helpers/ID.js +9 -1
  108. package/src/sap/fe/core/converters/helpers/ID.ts +4 -0
  109. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  110. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  111. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  112. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  113. package/src/sap/fe/core/converters/templates/ListReportConverter.js +29 -11
  114. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -20
  115. package/src/sap/fe/core/designtime/AppComponent.designtime.js +13 -3
  116. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  117. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  118. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  119. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  120. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  121. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  122. package/src/sap/fe/core/formatters/TableFormatter.js +65 -31
  123. package/src/sap/fe/core/formatters/TableFormatter.ts +62 -30
  124. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  125. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  126. package/src/sap/fe/core/fpm/Component.js +3 -2
  127. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  128. package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
  129. package/src/sap/fe/core/helpers/BindingExpression.js +479 -464
  130. package/src/sap/fe/core/helpers/BindingExpression.ts +477 -483
  131. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  132. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  133. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  134. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  135. package/src/sap/fe/core/helpers/EditState.js +81 -84
  136. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  137. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  138. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  139. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  140. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  141. package/src/sap/fe/core/helpers/KeepAliveHelper.js +210 -0
  142. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
  143. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
  144. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
  145. package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
  146. package/src/sap/fe/core/helpers/ModelHelper.js +229 -174
  147. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  148. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  149. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  150. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  151. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  152. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  153. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  154. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  155. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  156. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  157. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  158. package/src/sap/fe/core/library.js +30 -3
  159. package/src/sap/fe/core/library.support.js +12 -5
  160. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  161. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  162. package/src/sap/fe/core/messagebundle.properties +72 -10
  163. package/src/sap/fe/core/messagebundle_ar.properties +41 -0
  164. package/src/sap/fe/core/messagebundle_bg.properties +41 -0
  165. package/src/sap/fe/core/messagebundle_ca.properties +41 -0
  166. package/src/sap/fe/core/messagebundle_cs.properties +42 -1
  167. package/src/sap/fe/core/messagebundle_cy.properties +41 -0
  168. package/src/sap/fe/core/messagebundle_da.properties +41 -0
  169. package/src/sap/fe/core/messagebundle_de.properties +41 -0
  170. package/src/sap/fe/core/messagebundle_el.properties +41 -0
  171. package/src/sap/fe/core/messagebundle_en.properties +41 -0
  172. package/src/sap/fe/core/messagebundle_en_GB.properties +41 -0
  173. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +41 -0
  174. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +35 -0
  175. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +41 -0
  176. package/src/sap/fe/core/messagebundle_es.properties +41 -0
  177. package/src/sap/fe/core/messagebundle_es_MX.properties +41 -0
  178. package/src/sap/fe/core/messagebundle_et.properties +41 -0
  179. package/src/sap/fe/core/messagebundle_fi.properties +41 -0
  180. package/src/sap/fe/core/messagebundle_fr.properties +46 -5
  181. package/src/sap/fe/core/messagebundle_fr_CA.properties +41 -0
  182. package/src/sap/fe/core/messagebundle_hi.properties +41 -0
  183. package/src/sap/fe/core/messagebundle_hr.properties +41 -0
  184. package/src/sap/fe/core/messagebundle_hu.properties +42 -1
  185. package/src/sap/fe/core/messagebundle_id.properties +45 -4
  186. package/src/sap/fe/core/messagebundle_it.properties +41 -0
  187. package/src/sap/fe/core/messagebundle_iw.properties +41 -0
  188. package/src/sap/fe/core/messagebundle_ja.properties +50 -9
  189. package/src/sap/fe/core/messagebundle_kk.properties +41 -0
  190. package/src/sap/fe/core/messagebundle_ko.properties +41 -0
  191. package/src/sap/fe/core/messagebundle_lt.properties +41 -0
  192. package/src/sap/fe/core/messagebundle_lv.properties +41 -0
  193. package/src/sap/fe/core/messagebundle_ms.properties +41 -0
  194. package/src/sap/fe/core/messagebundle_nl.properties +41 -0
  195. package/src/sap/fe/core/messagebundle_no.properties +41 -0
  196. package/src/sap/fe/core/messagebundle_pl.properties +41 -0
  197. package/src/sap/fe/core/messagebundle_pt.properties +43 -2
  198. package/src/sap/fe/core/messagebundle_pt_PT.properties +41 -0
  199. package/src/sap/fe/core/messagebundle_ro.properties +41 -0
  200. package/src/sap/fe/core/messagebundle_ru.properties +41 -0
  201. package/src/sap/fe/core/messagebundle_sh.properties +41 -0
  202. package/src/sap/fe/core/messagebundle_sk.properties +41 -0
  203. package/src/sap/fe/core/messagebundle_sl.properties +41 -0
  204. package/src/sap/fe/core/messagebundle_sv.properties +42 -1
  205. package/src/sap/fe/core/messagebundle_th.properties +41 -0
  206. package/src/sap/fe/core/messagebundle_tr.properties +41 -0
  207. package/src/sap/fe/core/messagebundle_uk.properties +41 -0
  208. package/src/sap/fe/core/messagebundle_vi.properties +41 -0
  209. package/src/sap/fe/core/messagebundle_zh_CN.properties +41 -0
  210. package/src/sap/fe/core/messagebundle_zh_TW.properties +41 -0
  211. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  212. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  213. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  214. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  215. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  216. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
  217. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  218. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  219. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  220. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  221. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1166
  222. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  223. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  224. package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
  225. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +41 -84
  226. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +56 -99
  227. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
  228. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  229. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  230. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  231. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  232. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  233. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  234. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  235. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  236. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  237. package/src/sap/fe/core/templating/DataModelPathHelper.js +6 -24
  238. package/src/sap/fe/core/templating/DataModelPathHelper.ts +10 -23
  239. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  240. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  241. package/src/sap/fe/core/templating/EntitySetHelper.js +80 -7
  242. package/src/sap/fe/core/templating/EntitySetHelper.ts +42 -2
  243. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  244. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  245. package/src/sap/fe/core/templating/FilterHelper.js +139 -70
  246. package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
  247. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  248. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  249. package/src/sap/fe/core/templating/UIFormatters.js +45 -113
  250. package/src/sap/fe/core/templating/UIFormatters.ts +39 -76
  251. package/src/sap/fe/core/type/Email.js +1 -1
  252. package/src/sap/fe/core/type/Email.ts +4 -6
  253. package/ui5.yaml +0 -3
@@ -1,17 +1,23 @@
1
- import { ControllerExtension } from "sap/ui/core/mvc";
1
+ import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
2
2
  import { ControllerExtensionMetadata } from "sap/fe/core/controllerextensions";
3
3
  import { UI5Class, Override, Public } from "../helpers/ClassSupport";
4
- import { JSONModel } from "sap/ui/model/json";
5
- import { ODataModel, Context } from "sap/ui/model/odata/v4";
6
- import { Log } from "sap/base";
7
- import { KPIChartDefinition, KPIDefinition } from "sap/fe/core/converters/controls/Common/KPI";
4
+ import JSONModel from "sap/ui/model/json/JSONModel";
5
+ import ODataModel from "sap/ui/model/odata/v4/ODataModel";
6
+ import Context from "sap/ui/model/odata/v4/Context";
7
+ import Log from "sap/base/Log";
8
+ import { KPIChartDefinition, KPIDefinition, NavigationInfo } from "sap/fe/core/converters/controls/Common/KPI";
8
9
  import { BaseController } from "sap/fe/core";
9
10
  import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
10
11
  import { FilterDefinition, RangeDefinition } from "sap/fe/core/converters/helpers/SelectionVariantHelper";
11
- import { NumberFormat, DateFormat } from "sap/ui/core/format";
12
- import { Locale } from "sap/ui/core";
13
- import { Filter, FilterOperator, Sorter } from "sap/ui/model";
14
- import { GenericTag, Popover } from "sap/m";
12
+ import NumberFormat from "sap/ui/core/format/NumberFormat";
13
+ import DateFormat from "sap/ui/core/format/DateFormat";
14
+ import Locale from "sap/ui/core/Locale";
15
+ import Filter from "sap/ui/model/Filter";
16
+ import FilterOperator from "sap/ui/model/FilterOperator";
17
+ import Sorter from "sap/ui/model/Sorter";
18
+ import GenericTag from "sap/m/GenericTag";
19
+ import Popover from "sap/m/Popover";
20
+ import ResourceBundle from "sap/base/i18n/ResourceBundle";
15
21
 
16
22
  const MessageTypeFromCriticality: Record<string, MessageType> = {
17
23
  "1": MessageType.Error,
@@ -211,7 +217,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
211
217
  .getConfiguration()
212
218
  .getLanguage()
213
219
  );
214
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
220
+ const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
215
221
  const dateFormat = DateFormat.getDateInstance({ style: "medium" }, currentLocale);
216
222
 
217
223
  function formatRange(range: RangeDefinition): string {
@@ -263,7 +269,7 @@ function getFilterStringFromDefinition(filterDefinition: FilterDefinition): stri
263
269
  }
264
270
 
265
271
  function formatChartTitle(kpiDef: KPIDefinition): string {
266
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
272
+ const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
267
273
 
268
274
  function formatList(items: { name: string; label: string }[]) {
269
275
  if (items.length === 0) {
@@ -522,6 +528,37 @@ function getChartFeeds(chartDefinition: KPIChartDefinition): { uid: string; type
522
528
  return res;
523
529
  }
524
530
 
531
+ function getNavigationParameters(
532
+ navInfo: NavigationInfo,
533
+ oShellService: any
534
+ ): Promise<{ semanticObject?: string; action?: string; outbound?: string } | undefined> {
535
+ if (navInfo.semanticObject) {
536
+ if (navInfo.action) {
537
+ // Action is already specified: check if it's available in the shell
538
+ return oShellService.getLinks({ semanticObject: navInfo.semanticObject, action: navInfo.action }).then((aLinks: any[]) => {
539
+ return aLinks.length ? { semanticObject: navInfo.semanticObject, action: navInfo.action } : undefined;
540
+ });
541
+ } else {
542
+ // We get the primary intent from the shell
543
+ return oShellService.getPrimaryIntent(navInfo.semanticObject).then((oLink: any) => {
544
+ if (!oLink) {
545
+ // No primary intent...
546
+ return undefined;
547
+ }
548
+
549
+ // Check that the primary intent is not part of the unavailable actions
550
+ const oInfo = oShellService.parseShellHash(oLink.intent);
551
+ return navInfo.unavailableActions && navInfo.unavailableActions.indexOf(oInfo.action) >= 0
552
+ ? undefined
553
+ : { semanticObject: oInfo.semanticObject, action: oInfo.action };
554
+ });
555
+ }
556
+ } else {
557
+ // Outbound navigation specified in the manifest
558
+ return navInfo.outboundNavigation ? Promise.resolve({ outbound: navInfo.outboundNavigation }) : Promise.resolve(undefined);
559
+ }
560
+ }
561
+
525
562
  /**
526
563
  * @class A controller extension for managing the KPIs in an analytical list page
527
564
  *
@@ -543,7 +580,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
543
580
  * @param kpiDefinition The KPI definition
544
581
  * @param oKPIModel The JSON model in which the manifest will be stored
545
582
  */
546
- protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel<any>): void {
583
+ protected initCardManifest(kpiDefinition: KPIDefinition, oKPIModel: JSONModel): void {
547
584
  const oCardManifest: any = {
548
585
  "sap.app": {
549
586
  id: "sap.fe",
@@ -587,7 +624,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
587
624
 
588
625
  // Add side indicators in the card header if a target is defined for the KPI
589
626
  if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
590
- const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core");
627
+ const resBundle = sap.ui.getCore().getLibraryResourceBundle("sap.fe.core") as ResourceBundle;
591
628
  oCardManifest["sap.card"].header.sideIndicators = [
592
629
  {
593
630
  title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
@@ -634,6 +671,24 @@ class KPIManagementControllerExtension extends ControllerExtension {
634
671
  });
635
672
  }
636
673
 
674
+ protected initNavigationInfo(kpiDefinition: KPIDefinition, oKPIModel: JSONModel, oShellService: any): Promise<void> {
675
+ // Add navigation
676
+ if (kpiDefinition.navigation) {
677
+ return getNavigationParameters(kpiDefinition.navigation, oShellService).then(oNavInfo => {
678
+ if (oNavInfo) {
679
+ oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/header/actions", [
680
+ {
681
+ type: "Navigation",
682
+ parameters: oNavInfo
683
+ }
684
+ ]);
685
+ }
686
+ });
687
+ } else {
688
+ return Promise.resolve();
689
+ }
690
+ }
691
+
637
692
  @Override()
638
693
  public onInit(): void {
639
694
  this.aKPIDefinitions = this.getKPIData();
@@ -650,6 +705,11 @@ class KPIManagementControllerExtension extends ControllerExtension {
650
705
  // Create the manifest for the KPI card and store it in the KPI model
651
706
  this.initCardManifest(kpiDefinition, oKPIModel);
652
707
 
708
+ // Set the navigation information in the manifest
709
+ this.initNavigationInfo(kpiDefinition, oKPIModel, oAppComponent.getShellServices()).catch(function(err: any) {
710
+ Log.error(err);
711
+ });
712
+
653
713
  // Load tag data for the KPI
654
714
  this.loadKPITagData(kpiDefinition, oAppComponent.getModel() as ODataModel, oKPIModel).catch(function(err: any) {
655
715
  Log.error(err);
@@ -660,7 +720,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
660
720
 
661
721
  @Override()
662
722
  public onExit(): void {
663
- const oKPIModel = this.getView().getModel("kpiModel") as JSONModel<any>;
723
+ const oKPIModel = this.getView().getModel("kpiModel") as JSONModel;
664
724
 
665
725
  if (oKPIModel) {
666
726
  oKPIModel.destroy();
@@ -683,7 +743,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
683
743
  }
684
744
  }
685
745
 
686
- private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
746
+ private updateDatapointValueAndCurrency(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
687
747
  const currentLocale = new Locale(
688
748
  sap.ui
689
749
  .getCore()
@@ -760,7 +820,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
760
820
  }
761
821
  }
762
822
 
763
- private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
823
+ private updateDatapointCriticality(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
764
824
  const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
765
825
 
766
826
  let criticalityValue = MessageType.None;
@@ -802,7 +862,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
802
862
  );
803
863
  }
804
864
 
805
- private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
865
+ private updateDatapointTrend(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
806
866
  const rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
807
867
 
808
868
  let trendValue = "None";
@@ -837,7 +897,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
837
897
  oKPIModel.setProperty("/" + kpiDefinition.id + "/manifest/sap.card/data/json/trend", trendValue);
838
898
  }
839
899
 
840
- private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel<any>) {
900
+ private updateTargetValue(kpiDefinition: KPIDefinition, kpiContext: Context, oKPIModel: JSONModel) {
841
901
  if (kpiDefinition.datapoint.targetValue === undefined && kpiDefinition.datapoint.targetPath === undefined) {
842
902
  return; // No target set for the KPI
843
903
  }
@@ -904,7 +964,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
904
964
  * @param loadFull If not true, loads only data for the KPI tag
905
965
  * @returns {Promise} Returns the promise that is resolved when data is loaded.
906
966
  */
907
- protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel<any>, loadFull?: boolean): any {
967
+ protected loadKPITagData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel, loadFull?: boolean): any {
908
968
  // If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
909
969
  // If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
910
970
  const oListBinding = loadFull
@@ -987,7 +1047,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
987
1047
  * @param {JSONModel} oKPIModel The JSON model where the data will be stored
988
1048
  * @returns {Promise} Returns the promise that is resolved when data is loaded.
989
1049
  */
990
- protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel<any>): any {
1050
+ protected loadKPICardData(kpiDefinition: KPIDefinition, oMainModel: ODataModel, oKPIModel: JSONModel): any {
991
1051
  const oListBinding = oMainModel.bindList("/" + kpiDefinition.entitySet);
992
1052
  const oGroup: Record<string, Object> = {};
993
1053
  const oAggregate: Record<string, Object> = {};
@@ -1040,26 +1100,42 @@ class KPIManagementControllerExtension extends ControllerExtension {
1040
1100
  /**
1041
1101
  * Gets the popover to display the KPI card
1042
1102
  * The popover and the contained card for the KPIs are created if necessary.
1043
- * The popover is shared between all KPIs, so we create it only once.
1103
+ * The popover is shared between all KPIs, so it's created only once.
1044
1104
  *
1045
- * @param oKPITag The Tag that triggered the popover opening.
1046
- * @returns The shared popover.
1105
+ * @param oKPITag The tag that triggered the popover opening.
1106
+ * @returns The shared popover as a promise.
1047
1107
  */
1048
1108
  protected getPopover(oKPITag: GenericTag): Promise<Popover> {
1049
1109
  if (!this.oPopover) {
1050
1110
  return new Promise((resolve, reject) => {
1051
- sap.ui
1052
- .getCore()
1053
- .loadLibrary("sap/ui/integration", { async: true })
1111
+ (sap.ui.getCore().loadLibrary("sap/ui/integration", { async: true }) as Promise<object>)
1054
1112
  .then(() => {
1055
- sap.ui.require(["sap/ui/integration/widgets/Card"], (Card: any) => {
1113
+ sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], (Card: any, Host: any) => {
1114
+ const oHost = new Host();
1115
+
1116
+ oHost.attachAction((oEvent: any) => {
1117
+ const sType = oEvent.getParameter("type");
1118
+ const oParams = oEvent.getParameter("parameters");
1119
+
1120
+ if (sType === "Navigation") {
1121
+ if (oParams.semanticObject) {
1122
+ (this.getView().getController() as any)._intentBasedNavigation.navigate(
1123
+ oParams.semanticObject,
1124
+ oParams.action
1125
+ );
1126
+ } else {
1127
+ (this.getView().getController() as any)._intentBasedNavigation.navigateOutbound(oParams.outbound);
1128
+ }
1129
+ }
1130
+ });
1131
+
1056
1132
  this.oCard = new Card({
1057
1133
  width: "25rem",
1058
1134
  height: "auto"
1059
1135
  });
1136
+ this.oCard.setHost(oHost as any);
1060
1137
 
1061
- this.oPopover = new Popover({
1062
- id: "kpi-Popover",
1138
+ this.oPopover = new Popover("kpi-Popover", {
1063
1139
  showHeader: false,
1064
1140
  placement: "Auto",
1065
1141
  content: [this.oCard]
@@ -1070,7 +1146,9 @@ class KPIManagementControllerExtension extends ControllerExtension {
1070
1146
  resolve(this.oPopover);
1071
1147
  });
1072
1148
  })
1073
- .catch(reject);
1149
+ .catch(function() {
1150
+ reject();
1151
+ });
1074
1152
  });
1075
1153
  } else {
1076
1154
  return Promise.resolve(this.oPopover);
@@ -1079,7 +1157,7 @@ class KPIManagementControllerExtension extends ControllerExtension {
1079
1157
 
1080
1158
  @Public
1081
1159
  public onKPIPressed(oKPITag: any, kpiID: string): void {
1082
- const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel<any>;
1160
+ const oKPIModel = oKPITag.getModel("kpiModel") as JSONModel;
1083
1161
 
1084
1162
  if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
1085
1163
  const kpiDefinition = this.aKPIDefinitions.find(function(oDef) {
@@ -0,0 +1,172 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+
5
+ */
6
+ sap.ui.define(
7
+ [
8
+ "sap/ui/core/mvc/ControllerExtension",
9
+ "sap/ui/core/mvc/OverrideExecution",
10
+ "sap/fe/core/helpers/MassEditHelper",
11
+ "sap/fe/core/helpers/ModelHelper",
12
+ "sap/base/Log",
13
+ "sap/m/MessageBox"
14
+ ],
15
+ function(ControllerExtension, OverrideExecution, MassEditHelper, ModelHelper, Log, MessageBox) {
16
+ "use strict";
17
+ /**
18
+ * @class Controller extension providing hooks for the mass edit in a table
19
+ *
20
+ * @name sap.fe.core.controllerextensions.MassEdit
21
+ * @hideconstructor
22
+ * @private
23
+ */
24
+ return ControllerExtension.extend("sap.fe.core.controllerextensions.MassEdit", {
25
+ metadata: {
26
+ methods: {
27
+ openMassEditDialog: {
28
+ "final": true,
29
+ "public": true
30
+ },
31
+ fetchContextsForEdit: {
32
+ "final": false,
33
+ "public": false,
34
+ overrideExecution: OverrideExecution.After
35
+ }
36
+ }
37
+ },
38
+
39
+ _getMessageDetailForNonEditable: function(oResourceBundle) {
40
+ var sHeader = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_HEADER"),
41
+ sReasonGroup = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON"),
42
+ sReasonDraft = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_DRAFT"),
43
+ sReasonNonEditable = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE");
44
+
45
+ return (
46
+ "<p><strong>" +
47
+ sHeader +
48
+ "</strong></p>\n" +
49
+ "<p>" +
50
+ sReasonGroup +
51
+ "</p>\n" +
52
+ "<ul>" +
53
+ "<li>" +
54
+ sReasonDraft +
55
+ "</li>" +
56
+ "<li>" +
57
+ sReasonNonEditable +
58
+ "</li>" +
59
+ "</ul>"
60
+ );
61
+ },
62
+
63
+ _openConfirmDialog: function(oTable, aContexts, iSelectedContexts) {
64
+ var that = this,
65
+ iUpdatableContexts = (aContexts || []).length;
66
+
67
+ return new Promise(function(resolve, reject) {
68
+ that.getView()
69
+ .getModel("sap.fe.i18n")
70
+ .getResourceBundle()
71
+ .then(function(oResourceBundle) {
72
+ var sEditButton = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_BUTTON_TEXT"),
73
+ sCancelButton = oResourceBundle.getText("C_MASS_EDIT_CANCEL_BUTTON_TEXT"),
74
+ iNonEditable = iSelectedContexts - iUpdatableContexts,
75
+ sMessage = oResourceBundle.getText("C_MASS_EDIT_CONFIRM_MESSAGE", [
76
+ iNonEditable,
77
+ iSelectedContexts,
78
+ iUpdatableContexts
79
+ ]),
80
+ sPath = oTable.data("targetCollectionPath"),
81
+ oMetaModel = oTable.getModel().getMetaModel(),
82
+ bIsDraft = ModelHelper.isDraftSupported(oMetaModel, sPath),
83
+ bDisplayMode = oTable.data("displayModePropertyBinding") === "true",
84
+ sMessageDetail = bIsDraft && bDisplayMode && that._getMessageDetailForNonEditable(oResourceBundle);
85
+
86
+ MessageBox.warning(sMessage, {
87
+ details: sMessageDetail,
88
+ actions: [sEditButton, sCancelButton],
89
+ emphasizedAction: sEditButton,
90
+ contentWidth: "100px",
91
+ onClose: function(sSelection) {
92
+ var aContextsForEdit = [];
93
+ if (sSelection === sEditButton) {
94
+ Log.info("Mass Edit: Confirmed to edit ", iUpdatableContexts, " selections.");
95
+ aContextsForEdit = aContexts;
96
+ } else if (sSelection === sCancelButton) {
97
+ Log.info("Mass Edit: Cancelled.");
98
+ }
99
+ resolve(aContextsForEdit);
100
+ }
101
+ });
102
+ })
103
+ .catch(function(error) {
104
+ Log.error(error);
105
+ });
106
+ });
107
+ },
108
+
109
+ _confirmContexts: function(oTable, aContexts) {
110
+ var that = this,
111
+ oInternalModelContext = oTable.getBindingContext("internal"),
112
+ iSelectedContexts = +oInternalModelContext.getProperty("numberOfSelectedContexts") || 0;
113
+
114
+ aContexts = aContexts || [];
115
+
116
+ if (aContexts.length && aContexts.length !== iSelectedContexts) {
117
+ return that._openConfirmDialog(oTable, aContexts, iSelectedContexts);
118
+ }
119
+ return Promise.resolve(aContexts);
120
+ },
121
+
122
+ /**
123
+ * The following operations are performed by method openMassEditDialog:
124
+ * => Opens the mass edit dialog.
125
+ * => Implements the save and cancel functionality.
126
+ * => Sets the runtime model to the dialog.
127
+ * => Sets the static model's context to the dialog.
128
+ *
129
+ * @param {object} oTable Instance of the table
130
+ * @returns {Promise} A promise that resolves on open of the mass edit dialog.
131
+ * @private
132
+ */
133
+ openMassEditDialog: function(oTable) {
134
+ var that = this,
135
+ oController = that.getView().getController(),
136
+ pContextsForEdit = that.fetchContextsForEdit(oTable);
137
+
138
+ return pContextsForEdit
139
+ .then(that._confirmContexts.bind(that, oTable))
140
+ .then(function(aContexts) {
141
+ return aContexts && aContexts.length > 0
142
+ ? MassEditHelper.createDialog(oTable, aContexts, oController)
143
+ : Promise.resolve();
144
+ })
145
+ .then(function(oDialog) {
146
+ if (oDialog) {
147
+ oDialog.open();
148
+ }
149
+ })
150
+ .catch(function(oError) {
151
+ Log.error("Mass Edit: Something went wrong in mass edit dialog creation.", oError);
152
+ });
153
+ },
154
+
155
+ /**
156
+ * Returns a promise that resolves to the contexts for mass edit.
157
+ * @function
158
+ * @param {string} oTable Table for mass edit.
159
+ * @alias sap.fe.core.contrllerextensions.MassEdit#fetchContextsForEdit
160
+ * @returns {Promise} A promise to be resolved with an array of context(s) which should be considered for mass edit.
161
+ * @private
162
+ **/
163
+ fetchContextsForEdit: function(oTable) {
164
+ //To be overridden by the application
165
+ var oInternalModelContext = oTable.getBindingContext("internal"),
166
+ aSelectedContexts = oInternalModelContext.getProperty("updatableContexts") || [];
167
+
168
+ return Promise.resolve(aSelectedContexts);
169
+ }
170
+ });
171
+ }
172
+ );