@sapui5/sap.fe.core 1.99.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -16,13 +16,21 @@ import {
16
16
  not,
17
17
  notEqual,
18
18
  or,
19
- greaterThan
19
+ greaterThan,
20
+ formatResult
20
21
  } from "sap/fe/core/helpers/BindingExpression";
21
- import { CreationMode, NavigationSettingsConfiguration, TemplateType, ViewPathConfiguration } from "../../../ManifestSettings";
22
+ import { CreationMode, TemplateType, ViewPathConfiguration } from "../../../ManifestSettings";
22
23
  import { singletonPathVisitor, UI } from "../../../helpers/BindingHelper";
23
24
  import { PropertyAnnotationValue } from "@sap-ux/vocabularies-types";
24
25
  import { getTargetObjectPath, isPathDeletable, isPathInsertable, isPathUpdatable } from "sap/fe/core/templating/DataModelPathHelper";
25
26
  import { TableControlConfiguration } from "../Table";
27
+ import tableFormatters from "sap/fe/core/formatters/TableFormatter";
28
+
29
+ enum AnnotationHiddenProperty {
30
+ CreateHidden = "CreateHidden",
31
+ DeleteHidden = "DeleteHidden",
32
+ UpdateHidden = "UpdateHidden"
33
+ }
26
34
 
27
35
  export type StandardActionConfigType = {
28
36
  isTemplated?: BindingExpression<boolean>;
@@ -32,7 +40,7 @@ export type StandardActionConfigType = {
32
40
 
33
41
  type ExpressionRestrictionsType = {
34
42
  expression: Expression<boolean>;
35
- isOnlyCurrentEntityExpression: boolean;
43
+ navigationExpression: Expression<boolean>;
36
44
  };
37
45
  type StandardActionsRestrictionsType = Record<string, ExpressionRestrictionsType>;
38
46
 
@@ -43,7 +51,7 @@ export type StandardActionsContext = {
43
51
  "delete": Expression<boolean>;
44
52
  update: Expression<boolean>;
45
53
  };
46
- isExternalCreateConfigured: boolean;
54
+ creationMode: CreationMode;
47
55
  isDraftOrStickySupported: boolean;
48
56
  isViewWithMultipleVisualizations: boolean;
49
57
  newAction?: {
@@ -58,26 +66,25 @@ export type StandardActionsContext = {
58
66
  * Generates the context for the standard actions.
59
67
  *
60
68
  * @param {ConverterContext} converterContext
61
- * @param {NavigationSettingsConfiguration} navigationSettings
69
+ * @param {NavigationSettingsConfiguration} creationMode
62
70
  * @param {TableControlConfiguration} tableManifestConfiguration
63
71
  * @param {ViewPathConfiguration} viewConfiguration
64
72
  * @returns The context for table actions
65
73
  */
66
-
67
74
  export function generateStandardActionsContext(
68
75
  converterContext: ConverterContext,
69
- navigationSettings: NavigationSettingsConfiguration,
76
+ creationMode: CreationMode,
70
77
  tableManifestConfiguration: TableControlConfiguration,
71
78
  viewConfiguration?: ViewPathConfiguration
72
79
  ): StandardActionsContext {
73
80
  return {
74
81
  collectionPath: getTargetObjectPath(converterContext.getDataModelObjectPath()),
75
82
  hiddenAnnotation: {
76
- create: isActionAnnotatedHidden(converterContext, "CreateHidden"),
77
- "delete": isActionAnnotatedHidden(converterContext, "DeleteHidden"),
78
- update: isActionAnnotatedHidden(converterContext, "UpdateHidden")
83
+ create: isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.CreateHidden),
84
+ "delete": isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.DeleteHidden),
85
+ update: isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.UpdateHidden)
79
86
  },
80
- isExternalCreateConfigured: isExternalCreateConfigured(navigationSettings),
87
+ creationMode: creationMode,
81
88
  isDraftOrStickySupported: isDraftOrStickySupported(converterContext),
82
89
  isViewWithMultipleVisualizations: viewConfiguration
83
90
  ? converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration)
@@ -88,17 +95,6 @@ export function generateStandardActionsContext(
88
95
  };
89
96
  }
90
97
 
91
- /**
92
- * Checks if an external created is configured for the navigation.
93
- *
94
- * @param {NavigationSettingsConfiguration} navigationSettings
95
- * @returns {boolean}
96
- */
97
- export function isExternalCreateConfigured(navigationSettings: NavigationSettingsConfiguration): boolean {
98
- const navigation = navigationSettings?.create;
99
- return (navigation && navigation.outbound && navigation.outboundDetail) !== undefined;
100
- }
101
-
102
98
  /**
103
99
  * Checks if draft is supported.
104
100
  *
@@ -163,22 +159,27 @@ export function getNewAction(converterContext: ConverterContext): any {
163
159
  *
164
160
  * @param {ConverterContext} converterContext
165
161
  * @param {string} sAnnotationTerm
162
+ * @param {boolean} bWithNavigationPath
166
163
  * @returns {Expression<boolean>}
167
164
  */
168
- export function isActionAnnotatedHidden(converterContext: ConverterContext, sAnnotationTerm: string): Expression<boolean> {
165
+ export function isActionAnnotatedHidden(
166
+ converterContext: ConverterContext,
167
+ sAnnotationTerm: string,
168
+ bWithNavigationPath = true
169
+ ): Expression<boolean> {
169
170
  const currentEntitySet = converterContext.getEntitySet();
170
171
  const dataModelObjectPath = converterContext.getDataModelObjectPath();
171
172
  // Consider only the last level of navigation. The others are already considered in the element binding of the page.
172
173
  const visitedNavigationPaths =
173
- dataModelObjectPath.navigationProperties.length > 0
174
+ dataModelObjectPath.navigationProperties.length > 0 && bWithNavigationPath
174
175
  ? [dataModelObjectPath.navigationProperties[dataModelObjectPath.navigationProperties.length - 1].name]
175
176
  : [];
177
+ const actionAnnotationValue =
178
+ ((currentEntitySet?.annotations.UI as any)?.[sAnnotationTerm] as PropertyAnnotationValue<boolean>) || false;
179
+
176
180
  return currentEntitySet
177
- ? annotationExpression(
178
- ((currentEntitySet?.annotations.UI as any)?.[sAnnotationTerm] as PropertyAnnotationValue<boolean>) || false,
179
- visitedNavigationPaths,
180
- undefined,
181
- (path: string) => singletonPathVisitor(path, converterContext, visitedNavigationPaths)
181
+ ? annotationExpression(actionAnnotationValue, visitedNavigationPaths, undefined, (path: string) =>
182
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths)
182
183
  )
183
184
  : constant(false);
184
185
  }
@@ -209,9 +210,22 @@ export function getRestrictions(converterContext: ConverterContext): StandardAct
209
210
  restrictionsDef.forEach(function(def) {
210
211
  const defFunction = def["function"];
211
212
  result[def.key] = {
212
- expression: defFunction.apply(null, [dataModelObjectPath]),
213
- isOnlyCurrentEntityExpression: !!(defFunction.apply(null, [dataModelObjectPath, undefined, true]) as any)
214
- ?.currentEntityRestriction
213
+ expression: defFunction.apply(null, [
214
+ dataModelObjectPath,
215
+ {
216
+ pathVisitor: (path: string, navigationPaths: string[]) =>
217
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths)
218
+ }
219
+ ]),
220
+ navigationExpression: defFunction.apply(null, [
221
+ dataModelObjectPath,
222
+ {
223
+ ignoreTargetCollection: true,
224
+ authorizeUnresolvable: true,
225
+ pathVisitor: (path: string, navigationPaths: string[]) =>
226
+ singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths)
227
+ }
228
+ ])
215
229
  };
216
230
  });
217
231
  return result;
@@ -230,7 +244,7 @@ export function getInsertUpdateActionsTemplating(
230
244
  isDraftOrSticky: boolean,
231
245
  isCreateAlwaysHidden: boolean
232
246
  ): boolean {
233
- return (isDraftOrSticky || standardActionsContext.isExternalCreateConfigured) && !isCreateAlwaysHidden;
247
+ return (isDraftOrSticky || standardActionsContext.creationMode === CreationMode.External) && !isCreateAlwaysHidden;
234
248
  }
235
249
 
236
250
  /**
@@ -272,6 +286,24 @@ export function getStandardActionDelete(
272
286
  };
273
287
  }
274
288
 
289
+ /**
290
+ * @param converterContext
291
+ * @param standardActionsContext
292
+ * @returns StandardActionConfigType
293
+ */
294
+ export function getCreationRow(
295
+ converterContext: ConverterContext,
296
+ standardActionsContext: StandardActionsContext
297
+ ): StandardActionConfigType {
298
+ const creationRowVisibility = getCreateVisibility(converterContext, standardActionsContext, true);
299
+
300
+ return {
301
+ isTemplated: compileBinding(getCreateTemplating(standardActionsContext, creationRowVisibility, true)),
302
+ visible: compileBinding(creationRowVisibility),
303
+ enabled: compileBinding(getCreationRowEnablement(converterContext, standardActionsContext, creationRowVisibility))
304
+ };
305
+ }
306
+
275
307
  /**
276
308
  * Gets the binding expressions for the properties of the action Paste.
277
309
  *
@@ -319,39 +351,26 @@ export function getStandardActionMassEdit(
319
351
  *
320
352
  * @param {StandardActionsContext} standardActionsContext
321
353
  * @param {Expression<boolean>} createVisibility
354
+ * @param {boolean} isForCreationRow
322
355
  * @returns {Expression<boolean> }
323
356
  */
324
357
  export function getCreateTemplating(
325
358
  standardActionsContext: StandardActionsContext,
326
- createVisibility: Expression<boolean>
359
+ createVisibility: Expression<boolean>,
360
+ isForCreationRow = false
327
361
  ): Expression<boolean> {
328
- const isCreationRow = standardActionsContext.tableManifestConfiguration.creationMode === CreationMode.CreationRow;
329
- const newAction = standardActionsContext.newAction;
330
- const isInsertable = standardActionsContext.restrictions.isInsertable.expression;
331
-
332
362
  //Templating of Create Button is not done:
333
- // - If Button is never visible or CreationMode is on CreationRow
334
- // - Otherwise If new action is configured and never available
335
- // - Otherwise If delete restrictions coming from NavigationRestrictions are constantly false
336
- // - Otherwise If there is no external create action
337
- // - Otherwise if there is delete restrictions on the current entitySet set to false
363
+ // - If Button is never visible(covered the External create button, new Action)
364
+ // - or CreationMode is on CreationRow for Create Button
365
+ // - or CreationMode is not on CreationRow for CreationRow Button
338
366
 
339
- return ifElse(
340
- or(and(isConstant(createVisibility), equal(createVisibility, false)), isCreationRow),
341
- false,
342
- ifElse(
343
- and(isConstant(newAction?.available), equal(newAction?.available, false)),
344
- false,
345
- ifElse(
346
- and(not(standardActionsContext.restrictions.isInsertable.isOnlyCurrentEntityExpression), isConstant(isInsertable)),
347
- isInsertable,
348
- ifElse(
349
- standardActionsContext.isExternalCreateConfigured,
350
- true,
351
- not(and(isConstant(isInsertable), equal(isInsertable, constant(false))))
352
- )
353
- )
354
- )
367
+ return and(
368
+ //XNOR gate
369
+ or(
370
+ and(isForCreationRow, standardActionsContext.creationMode === CreationMode.CreationRow),
371
+ and(!isForCreationRow, standardActionsContext.creationMode !== CreationMode.CreationRow)
372
+ ),
373
+ or(not(isConstant(createVisibility)), createVisibility)
355
374
  );
356
375
  }
357
376
 
@@ -362,7 +381,7 @@ export function getCreateTemplating(
362
381
  * @returns {Expression<boolean> }
363
382
  */
364
383
  export function getDefaultTemplating(actionVisibility: Expression<boolean>): Expression<boolean> {
365
- return not(and(isConstant(actionVisibility), equal(actionVisibility, false)));
384
+ return or(not(isConstant(actionVisibility)), actionVisibility);
366
385
  }
367
386
 
368
387
  /**
@@ -370,14 +389,18 @@ export function getDefaultTemplating(actionVisibility: Expression<boolean>): Exp
370
389
  *
371
390
  * @param {ConverterContext} converterContext
372
391
  * @param {StandardActionsContext} standardActionsContext
392
+ * @param {boolean} isForCreationRow
373
393
  * @returns {Expression<boolean> }
374
394
  */
375
395
  export function getCreateVisibility(
376
396
  converterContext: ConverterContext,
377
- standardActionsContext: StandardActionsContext
397
+ standardActionsContext: StandardActionsContext,
398
+ isForCreationRow = false
378
399
  ): Expression<boolean> {
379
400
  const isInsertable = standardActionsContext.restrictions.isInsertable.expression;
380
- const isCreateHidden = standardActionsContext.hiddenAnnotation.create;
401
+ const isCreateHidden = isForCreationRow
402
+ ? isActionAnnotatedHidden(converterContext, AnnotationHiddenProperty.CreateHidden, false)
403
+ : standardActionsContext.hiddenAnnotation.create;
381
404
  const newAction = standardActionsContext.newAction;
382
405
 
383
406
  //Create Button is visible:
@@ -391,12 +414,8 @@ export function getCreateVisibility(
391
414
  // - Otherwise
392
415
  // - This depends on the value of the the UI.IsEditable
393
416
  return ifElse(
394
- standardActionsContext.isExternalCreateConfigured,
395
- ifElse(
396
- converterContext.getTemplateType() === TemplateType.ListReport,
397
- not(isCreateHidden),
398
- and(not(isCreateHidden), UI.IsEditable)
399
- ),
417
+ standardActionsContext.creationMode === CreationMode.External,
418
+ and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)),
400
419
  ifElse(
401
420
  or(
402
421
  and(isConstant(newAction?.available), equal(newAction?.available, false)),
@@ -408,7 +427,7 @@ export function getCreateVisibility(
408
427
  false,
409
428
  ifElse(
410
429
  converterContext.getTemplateType() === TemplateType.ListReport,
411
- ifElse(isBinding(isCreateHidden), not(isCreateHidden), true),
430
+ or(not(isBinding(isCreateHidden)), not(isCreateHidden)),
412
431
  and(not(isCreateHidden), UI.IsEditable)
413
432
  )
414
433
  )
@@ -454,7 +473,7 @@ export function getDeleteVisibility(
454
473
  ifElse(
455
474
  converterContext.getTemplateType() !== TemplateType.ListReport,
456
475
  and(not(isDeleteHidden), equal(bindingExpression("/editMode", "ui"), "Editable")),
457
- ifElse(isBinding(isDeleteHidden), not(isDeleteHidden), true)
476
+ not(and(isBinding(isDeleteHidden), isDeleteHidden))
458
477
  )
459
478
  )
460
479
  )
@@ -479,15 +498,12 @@ export function getPasteVisibility(
479
498
  // If Create is visible, enablePaste is not disabled into manifest and we are on OP/blocks outside Fiori elements templates
480
499
  // Then button will be visible according to insertable restrictions and create visibility
481
500
  // Otherwise it's not visible
482
- return ifElse(
483
- and(
484
- notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false),
485
- createVisibility,
486
- isInsertUpdateActionsTemplated
487
- ),
488
- [TemplateType.ListReport, TemplateType.AnalyticalListPage].indexOf(converterContext.getTemplateType()) === -1 &&
489
- standardActionsContext.restrictions.isInsertable.expression,
490
- false
501
+ return and(
502
+ notEqual(standardActionsContext.tableManifestConfiguration.enablePaste, false),
503
+ createVisibility,
504
+ isInsertUpdateActionsTemplated,
505
+ [TemplateType.ListReport, TemplateType.AnalyticalListPage].indexOf(converterContext.getTemplateType()) === -1,
506
+ standardActionsContext.restrictions.isInsertable.expression
491
507
  );
492
508
  }
493
509
 
@@ -516,10 +532,59 @@ export function getMassEditVisibility(
516
532
  // - and the selectionMode is relevant
517
533
  // Then MassEdit is always visible in LR or dynamically visible in OP according to ui>Editable and hiddenAnnotation
518
534
  // Button is hidden for all other cases
519
- return ifElse(
520
- and(not(and(isConstant(pathUpdatableExpression), equal(pathUpdatableExpression, false))), bMassEditEnabledInManifest),
521
- and(templateBindingExpression, not(isUpdateHidden)),
522
- false
535
+ return and(
536
+ not(and(isConstant(pathUpdatableExpression), equal(pathUpdatableExpression, false))),
537
+ bMassEditEnabledInManifest,
538
+ templateBindingExpression,
539
+ not(isUpdateHidden)
540
+ );
541
+ }
542
+
543
+ /**
544
+ * Gets the binding expression for the property enabled of the creationRow.
545
+ *
546
+ * @param {ConverterContext} converterContext
547
+ * @param {StandardActionsContext} standardActionsContext
548
+ * @param {Expression<boolean>} creationRowVisibility
549
+ * @returns {Expression<boolean> }
550
+ */
551
+ export function getCreationRowEnablement(
552
+ converterContext: ConverterContext,
553
+ standardActionsContext: StandardActionsContext,
554
+ creationRowVisibility: Expression<boolean>
555
+ ): Expression<boolean> {
556
+ const restrictionsInsertable = isPathInsertable(converterContext.getDataModelObjectPath(), {
557
+ ignoreTargetCollection: true,
558
+ authorizeUnresolvable: true,
559
+ pathVisitor: (path: string, navigationPaths: string[]) => {
560
+ if (path.indexOf("/") === 0) {
561
+ path = singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths);
562
+ return path;
563
+ }
564
+ const navigationProperties = converterContext.getDataModelObjectPath().navigationProperties;
565
+ if (navigationProperties) {
566
+ const partner = navigationProperties[navigationProperties.length - 1].partner;
567
+ if (partner) {
568
+ path = `${partner}/${path}`;
569
+ }
570
+ }
571
+ return path;
572
+ }
573
+ });
574
+ const isInsertable =
575
+ restrictionsInsertable._type === "Unresolvable"
576
+ ? isPathInsertable(converterContext.getDataModelObjectPath(), {
577
+ pathVisitor: (path: string) => singletonPathVisitor(path, converterContext.getConvertedTypes(), [])
578
+ })
579
+ : restrictionsInsertable;
580
+
581
+ return and(
582
+ creationRowVisibility,
583
+ isInsertable,
584
+ or(
585
+ !standardActionsContext.tableManifestConfiguration.disableAddRowButtonForEmptyData,
586
+ formatResult([bindingExpression("creationRowFieldValidity", "internal")], tableFormatters.validateCreationRowFields)
587
+ )
523
588
  );
524
589
  }
525
590
 
@@ -540,13 +605,11 @@ export function getCreateEnablement(
540
605
  const CollectionType = converterContext.resolveAbsolutePath<any>(standardActionsContext.collectionPath).target?._type;
541
606
  return and(
542
607
  createVisibility,
543
- ifElse(
608
+ or(
544
609
  CollectionType === "EntitySet",
545
- true,
546
- ifElse(
547
- converterContext.getTemplateType() !== TemplateType.ObjectPage,
610
+ and(
548
611
  isInsertable,
549
- and(isInsertable, equal(bindingExpression("/editMode", "ui"), "Editable"))
612
+ or(converterContext.getTemplateType() !== TemplateType.ObjectPage, equal(bindingExpression("/editMode", "ui"), "Editable"))
550
613
  )
551
614
  )
552
615
  );
@@ -567,7 +630,7 @@ export function getDeleteEnablement(
567
630
  ): Expression<boolean> {
568
631
  const isDeletable = standardActionsContext.restrictions.isDeletable.expression;
569
632
  const isOnlyDynamicOnCurrentEntity =
570
- standardActionsContext.restrictions.isDeletable.isOnlyCurrentEntityExpression && !isConstant(isDeletable);
633
+ !isConstant(isDeletable) && standardActionsContext.restrictions.isDeletable.navigationExpression._type === "Unresolvable";
571
634
  const numberOfSelectedContexts = bindingExpression("numberOfSelectedContexts", "internal");
572
635
  const numberOfDeletableContexts = bindingExpression("deletableContexts", "internal");
573
636
  const numberOfUnSavedContexts = bindingExpression("unSavedContexts", "internal");
@@ -576,13 +639,12 @@ export function getDeleteEnablement(
576
639
  deleteVisibility,
577
640
  ifElse(
578
641
  or(converterContext.getTemplateType() !== TemplateType.ObjectPage, isOnlyDynamicOnCurrentEntity),
579
- ifElse(
642
+ and(
580
643
  or(
581
644
  and(notEqual(numberOfDeletableContexts, undefined), greaterThan(length(numberOfDeletableContexts), 0)),
582
645
  and(notEqual(numberOfUnSavedContexts, undefined), greaterThan(length(numberOfUnSavedContexts), 0))
583
646
  ),
584
- bindingExpression("deleteEnabled", "internal"),
585
- false
647
+ bindingExpression("deleteEnabled", "internal")
586
648
  ),
587
649
  and(notEqual(numberOfSelectedContexts, 0), isDeletable)
588
650
  )
@@ -615,7 +677,8 @@ export function getMassEditEnablement(
615
677
  ): Expression<boolean> {
616
678
  const pathUpdatableExpression = standardActionsContext.restrictions.isUpdatable.expression;
617
679
  const isOnlyDynamicOnCurrentEntity: any =
618
- standardActionsContext.restrictions.isUpdatable.isOnlyCurrentEntityExpression && !isConstant(pathUpdatableExpression);
680
+ !isConstant(pathUpdatableExpression) &&
681
+ standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable";
619
682
  const numberOfSelectedContexts = greaterOrEqual(bindingExpression("numberOfSelectedContexts", "internal"), 1);
620
683
  const numberOfUpdatableContexts = greaterOrEqual(length(bindingExpression("updatableContexts", "internal")), 1);
621
684
  const bIsDraftSupported = isDraftSupported(converterContext);