@sap/ux-specification 1.108.70 → 1.108.72

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 (227) hide show
  1. package/CHANGELOG.md +419 -339
  2. package/dist/documentation/v2/v2-AnalyticalListPage.html +2 -2
  3. package/dist/documentation/v2/v2-ApplicationV2.html +2 -2
  4. package/dist/documentation/v2/v2-ListReport.html +2 -2
  5. package/dist/documentation/v2/v2-ListReportNew.html +2 -2
  6. package/dist/documentation/v2/v2-ObjectPage.html +2 -2
  7. package/dist/documentation/v2/v2-OverviewPage.html +2 -2
  8. package/dist/documentation/v4/v4-ApplicationV4.html +2 -2
  9. package/dist/documentation/v4/v4-BuildingBlocks.html +2 -2
  10. package/dist/documentation/v4/v4-FreestylePage.html +2 -2
  11. package/dist/documentation/v4/v4-ListReport.html +2 -2
  12. package/dist/documentation/v4/v4-ObjectPage.html +2 -2
  13. package/dist/index-min.js +256 -256
  14. package/dist/index-min.js.map +4 -4
  15. package/dist/schemas/v2/AnalyticalListPageConfig.json +3 -3
  16. package/dist/schemas/v2/ListReportConfig.json +5 -5
  17. package/dist/schemas/v2/ListReportNewConfig.json +1 -1
  18. package/dist/schemas/v2/ObjectPageConfig.json +5 -5
  19. package/dist/schemas/v4/ApplicationV4.json +1 -1
  20. package/dist/schemas/v4/BuildingBlocksConfig.json +8 -4
  21. package/dist/schemas/v4/ListReportConfig.json +24 -6
  22. package/dist/schemas/v4/ObjectPageConfig.json +9 -3
  23. package/dist/specification/package.json +13 -11
  24. package/dist/specification/scripts/extractDocu.js +18 -1
  25. package/dist/specification/scripts/extractDocu.js.map +1 -1
  26. package/dist/specification/scripts/generate-validity-report.d.ts +15 -0
  27. package/dist/specification/scripts/generate-validity-report.d.ts.map +1 -0
  28. package/dist/specification/scripts/generate-validity-report.js +365 -0
  29. package/dist/specification/scripts/generate-validity-report.js.map +1 -0
  30. package/dist/specification/scripts/macros/schema.d.ts.map +1 -1
  31. package/dist/specification/scripts/macros/schema.js +4 -1
  32. package/dist/specification/scripts/macros/schema.js.map +1 -1
  33. package/dist/specification/src/api.js +1 -1
  34. package/dist/specification/src/sync/common/decoration/decorator-paths.d.ts +501 -0
  35. package/dist/specification/src/sync/common/decoration/decorator-paths.d.ts.map +1 -0
  36. package/dist/specification/src/sync/common/decoration/decorator-paths.js +497 -0
  37. package/dist/specification/src/sync/common/decoration/decorator-paths.js.map +1 -0
  38. package/dist/specification/src/sync/common/decoration/decorators.d.ts +149 -23
  39. package/dist/specification/src/sync/common/decoration/decorators.d.ts.map +1 -1
  40. package/dist/specification/src/sync/common/decoration/decorators.js +369 -74
  41. package/dist/specification/src/sync/common/decoration/decorators.js.map +1 -1
  42. package/dist/specification/src/sync/common/decoration/index.d.ts +1 -0
  43. package/dist/specification/src/sync/common/decoration/index.d.ts.map +1 -1
  44. package/dist/specification/src/sync/common/decoration/index.js +1 -0
  45. package/dist/specification/src/sync/common/decoration/index.js.map +1 -1
  46. package/dist/specification/src/sync/common/dist_tag.json +8 -3
  47. package/dist/specification/src/sync/common/i18n.json +2 -1
  48. package/dist/specification/src/sync/common/utils.d.ts +35 -7
  49. package/dist/specification/src/sync/common/utils.d.ts.map +1 -1
  50. package/dist/specification/src/sync/common/utils.js +206 -21
  51. package/dist/specification/src/sync/common/utils.js.map +1 -1
  52. package/dist/specification/src/sync/v2/export/exportPageGeneric.d.ts.map +1 -1
  53. package/dist/specification/src/sync/v2/export/exportPageGeneric.js +3 -13
  54. package/dist/specification/src/sync/v2/export/exportPageGeneric.js.map +1 -1
  55. package/dist/specification/src/sync/v2/generate/analyticalListReport.d.ts.map +1 -1
  56. package/dist/specification/src/sync/v2/generate/analyticalListReport.js +48 -0
  57. package/dist/specification/src/sync/v2/generate/analyticalListReport.js.map +1 -1
  58. package/dist/specification/src/sync/v2/generate/listReport.d.ts.map +1 -1
  59. package/dist/specification/src/sync/v2/generate/listReport.js +3 -1
  60. package/dist/specification/src/sync/v2/generate/listReport.js.map +1 -1
  61. package/dist/specification/src/sync/v2/generate/objectPage.d.ts.map +1 -1
  62. package/dist/specification/src/sync/v2/generate/objectPage.js +2 -0
  63. package/dist/specification/src/sync/v2/generate/objectPage.js.map +1 -1
  64. package/dist/specification/src/sync/v2/generate/overviewPage.d.ts +1 -9
  65. package/dist/specification/src/sync/v2/generate/overviewPage.d.ts.map +1 -1
  66. package/dist/specification/src/sync/v2/generate/overviewPage.js +30 -1
  67. package/dist/specification/src/sync/v2/generate/overviewPage.js.map +1 -1
  68. package/dist/specification/src/sync/v2/generate/schemaAdaptation.d.ts.map +1 -1
  69. package/dist/specification/src/sync/v2/generate/schemaAdaptation.js +28 -1
  70. package/dist/specification/src/sync/v2/generate/schemaAdaptation.js.map +1 -1
  71. package/dist/specification/src/sync/v2/import/app/appProvider.d.ts.map +1 -1
  72. package/dist/specification/src/sync/v2/import/app/appProvider.js +2 -0
  73. package/dist/specification/src/sync/v2/import/app/appProvider.js.map +1 -1
  74. package/dist/specification/src/sync/v2/import/importPage.d.ts.map +1 -1
  75. package/dist/specification/src/sync/v2/import/importPage.js +5 -6
  76. package/dist/specification/src/sync/v2/import/importPage.js.map +1 -1
  77. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.d.ts +2 -1
  78. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.d.ts.map +1 -1
  79. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.js +5 -0
  80. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.js.map +1 -1
  81. package/dist/specification/src/sync/v2/import/pages/listReport.d.ts +2 -1
  82. package/dist/specification/src/sync/v2/import/pages/listReport.d.ts.map +1 -1
  83. package/dist/specification/src/sync/v2/import/pages/listReport.js +5 -0
  84. package/dist/specification/src/sync/v2/import/pages/listReport.js.map +1 -1
  85. package/dist/specification/src/sync/v2/import/pages/objectPage.d.ts.map +1 -1
  86. package/dist/specification/src/sync/v2/import/pages/objectPage.js +2 -1
  87. package/dist/specification/src/sync/v2/import/pages/objectPage.js.map +1 -1
  88. package/dist/specification/src/sync/v2/import/utils.d.ts +28 -1
  89. package/dist/specification/src/sync/v2/import/utils.d.ts.map +1 -1
  90. package/dist/specification/src/sync/v2/import/utils.js +37 -0
  91. package/dist/specification/src/sync/v2/import/utils.js.map +1 -1
  92. package/dist/specification/src/sync/v2/utils.d.ts +12 -2
  93. package/dist/specification/src/sync/v2/utils.d.ts.map +1 -1
  94. package/dist/specification/src/sync/v2/utils.js +19 -2
  95. package/dist/specification/src/sync/v2/utils.js.map +1 -1
  96. package/dist/specification/src/sync/v4/application.d.ts +20 -2
  97. package/dist/specification/src/sync/v4/application.d.ts.map +1 -1
  98. package/dist/specification/src/sync/v4/application.js +27 -2
  99. package/dist/specification/src/sync/v4/application.js.map +1 -1
  100. package/dist/specification/src/sync/v4/export/controls/FilterBar.d.ts +2 -1
  101. package/dist/specification/src/sync/v4/export/controls/FilterBar.d.ts.map +1 -1
  102. package/dist/specification/src/sync/v4/export/controls/FilterBar.js +2 -1
  103. package/dist/specification/src/sync/v4/export/controls/FilterBar.js.map +1 -1
  104. package/dist/specification/src/sync/v4/export/controls/Header.d.ts +4 -3
  105. package/dist/specification/src/sync/v4/export/controls/Header.d.ts.map +1 -1
  106. package/dist/specification/src/sync/v4/export/controls/Header.js +7 -3
  107. package/dist/specification/src/sync/v4/export/controls/Header.js.map +1 -1
  108. package/dist/specification/src/sync/v4/export/controls/HeaderAction.d.ts +2 -1
  109. package/dist/specification/src/sync/v4/export/controls/HeaderAction.d.ts.map +1 -1
  110. package/dist/specification/src/sync/v4/export/controls/HeaderAction.js +7 -0
  111. package/dist/specification/src/sync/v4/export/controls/HeaderAction.js.map +1 -1
  112. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.d.ts +2 -1
  113. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.d.ts.map +1 -1
  114. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.js +2 -1
  115. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.js.map +1 -1
  116. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.d.ts +1 -1
  117. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.d.ts.map +1 -1
  118. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.js +0 -13
  119. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.js.map +1 -1
  120. package/dist/specification/src/sync/v4/export/controls/Table.d.ts +21 -8
  121. package/dist/specification/src/sync/v4/export/controls/Table.d.ts.map +1 -1
  122. package/dist/specification/src/sync/v4/export/controls/Table.js +38 -41
  123. package/dist/specification/src/sync/v4/export/controls/Table.js.map +1 -1
  124. package/dist/specification/src/sync/v4/export/controls/TableColumn.d.ts.map +1 -1
  125. package/dist/specification/src/sync/v4/export/controls/TableColumn.js +2 -2
  126. package/dist/specification/src/sync/v4/export/controls/TableColumn.js.map +1 -1
  127. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.d.ts +2 -1
  128. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.d.ts.map +1 -1
  129. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.js +2 -1
  130. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.js.map +1 -1
  131. package/dist/specification/src/sync/v4/export/export.d.ts.map +1 -1
  132. package/dist/specification/src/sync/v4/export/export.js +36 -6
  133. package/dist/specification/src/sync/v4/export/export.js.map +1 -1
  134. package/dist/specification/src/sync/v4/export/pages/ListReport.js +1 -1
  135. package/dist/specification/src/sync/v4/export/pages/ListReport.js.map +1 -1
  136. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.js +1 -1
  137. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.js.map +1 -1
  138. package/dist/specification/src/sync/v4/generate/fpm-custom-page/generator.d.ts.map +1 -1
  139. package/dist/specification/src/sync/v4/generate/fpm-custom-page/generator.js +8 -1
  140. package/dist/specification/src/sync/v4/generate/fpm-custom-page/generator.js.map +1 -1
  141. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.d.ts.map +1 -1
  142. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.js +10 -1
  143. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.js.map +1 -1
  144. package/dist/specification/src/sync/v4/generate/index.d.ts +1 -1
  145. package/dist/specification/src/sync/v4/generate/index.d.ts.map +1 -1
  146. package/dist/specification/src/sync/v4/generate/index.js +1 -1
  147. package/dist/specification/src/sync/v4/generate/index.js.map +1 -1
  148. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.d.ts +73 -0
  149. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.d.ts.map +1 -0
  150. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.js +336 -0
  151. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.js.map +1 -0
  152. package/dist/specification/src/sync/v4/generate/{listReport.d.ts → list-report/listReport.d.ts} +21 -14
  153. package/dist/specification/src/sync/v4/generate/list-report/listReport.d.ts.map +1 -0
  154. package/dist/specification/src/sync/v4/generate/{listReport.js → list-report/listReport.js} +142 -229
  155. package/dist/specification/src/sync/v4/generate/list-report/listReport.js.map +1 -0
  156. package/dist/specification/src/sync/v4/generate/objectPage.d.ts.map +1 -1
  157. package/dist/specification/src/sync/v4/generate/objectPage.js +142 -49
  158. package/dist/specification/src/sync/v4/generate/objectPage.js.map +1 -1
  159. package/dist/specification/src/sync/v4/import/pages/listReport.d.ts.map +1 -1
  160. package/dist/specification/src/sync/v4/import/pages/listReport.js +2 -1
  161. package/dist/specification/src/sync/v4/import/pages/listReport.js.map +1 -1
  162. package/dist/specification/src/sync/v4/sync-rules/App.d.ts +9 -7
  163. package/dist/specification/src/sync/v4/sync-rules/App.d.ts.map +1 -1
  164. package/dist/specification/src/sync/v4/sync-rules/App.js +4 -8
  165. package/dist/specification/src/sync/v4/sync-rules/App.js.map +1 -1
  166. package/dist/specification/src/sync/v4/sync-rules/AppSchema.d.ts +2 -9
  167. package/dist/specification/src/sync/v4/sync-rules/AppSchema.d.ts.map +1 -1
  168. package/dist/specification/src/sync/v4/sync-rules/AppSchema.js +2 -11
  169. package/dist/specification/src/sync/v4/sync-rules/AppSchema.js.map +1 -1
  170. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.d.ts +177 -46
  171. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.d.ts.map +1 -1
  172. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.js +498 -152
  173. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.js.map +1 -1
  174. package/dist/specification/src/sync/v4/sync-rules/Page.d.ts +17 -22
  175. package/dist/specification/src/sync/v4/sync-rules/Page.d.ts.map +1 -1
  176. package/dist/specification/src/sync/v4/sync-rules/Page.js +15 -22
  177. package/dist/specification/src/sync/v4/sync-rules/Page.js.map +1 -1
  178. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.d.ts +1 -0
  179. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.d.ts.map +1 -1
  180. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.js +17 -9
  181. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.js.map +1 -1
  182. package/dist/specification/src/sync/v4/sync-rules/index.d.ts +5 -0
  183. package/dist/specification/src/sync/v4/sync-rules/index.d.ts.map +1 -0
  184. package/dist/specification/src/sync/v4/sync-rules/index.js +21 -0
  185. package/dist/specification/src/sync/v4/sync-rules/index.js.map +1 -0
  186. package/dist/specification/src/sync/v4/sync-rules/utils.d.ts.map +1 -1
  187. package/dist/specification/src/sync/v4/sync-rules/utils.js +4 -0
  188. package/dist/specification/src/sync/v4/sync-rules/utils.js.map +1 -1
  189. package/dist/specification/src/sync/v4/utils/index.d.ts +2 -0
  190. package/dist/specification/src/sync/v4/utils/index.d.ts.map +1 -0
  191. package/dist/specification/src/sync/v4/utils/index.js +18 -0
  192. package/dist/specification/src/sync/v4/utils/index.js.map +1 -0
  193. package/dist/specification/src/sync/v4/utils/utils.d.ts +9 -1
  194. package/dist/specification/src/sync/v4/utils/utils.d.ts.map +1 -1
  195. package/dist/specification/src/sync/v4/utils/utils.js +18 -3
  196. package/dist/specification/src/sync/v4/utils/utils.js.map +1 -1
  197. package/dist/specification/test/test-projects/v2sttaProdMan2/webapp/manifest.json +550 -0
  198. package/dist/specification/test/test-projects/v4new/webapp/manifest.json +147 -0
  199. package/dist/specification/test/test-utils/utils.d.ts +71 -0
  200. package/dist/specification/test/test-utils/utils.d.ts.map +1 -0
  201. package/dist/specification/test/test-utils/utils.js +400 -0
  202. package/dist/specification/test/test-utils/utils.js.map +1 -0
  203. package/dist/specification/test/unit/decorators/validity-test-utils.d.ts +131 -0
  204. package/dist/specification/test/unit/decorators/validity-test-utils.d.ts.map +1 -0
  205. package/dist/specification/test/unit/decorators/validity-test-utils.js +661 -0
  206. package/dist/specification/test/unit/decorators/validity-test-utils.js.map +1 -0
  207. package/dist/types/src/apiTypes.d.ts +2 -3
  208. package/dist/types/src/apiTypes.d.ts.map +1 -1
  209. package/dist/types/src/apiTypes.js.map +1 -1
  210. package/dist/types/src/common/types.d.ts +131 -13
  211. package/dist/types/src/common/types.d.ts.map +1 -1
  212. package/dist/types/src/common/types.js +10 -1
  213. package/dist/types/src/common/types.js.map +1 -1
  214. package/dist/types/src/v2/controls/ObjectPageTable.d.ts +1 -1
  215. package/dist/types/src/v2/controls/Table.d.ts +1 -1
  216. package/dist/types/src/v4/controls/ObjectPageHeader.d.ts +1 -1
  217. package/dist/types/src/v4/controls/ObjectPageTable.d.ts +1 -1
  218. package/dist/types/src/v4/controls/ObjectPageTable.d.ts.map +1 -1
  219. package/dist/types/src/v4/controls/Table.d.ts +3 -3
  220. package/dist/types/src/v4/controls/Table.d.ts.map +1 -1
  221. package/package.json +14 -12
  222. package/dist/specification/src/sync/v4/generate/ListReportUtils.d.ts +0 -107
  223. package/dist/specification/src/sync/v4/generate/ListReportUtils.d.ts.map +0 -1
  224. package/dist/specification/src/sync/v4/generate/ListReportUtils.js +0 -374
  225. package/dist/specification/src/sync/v4/generate/ListReportUtils.js.map +0 -1
  226. package/dist/specification/src/sync/v4/generate/listReport.d.ts.map +0 -1
  227. package/dist/specification/src/sync/v4/generate/listReport.js.map +0 -1
@@ -11,20 +11,18 @@ exports.analyzeViewAnnotation = analyzeViewAnnotation;
11
11
  exports.addALPViews = addALPViews;
12
12
  exports.addTagsToView = addTagsToView;
13
13
  exports.addLRViewParts = addLRViewParts;
14
- exports.getDefaultAnnotationPath = getDefaultAnnotationPath;
15
14
  exports.addHeaderActions = addHeaderActions;
16
15
  exports.addManifestPathsToPropertiesLR = addManifestPathsToPropertiesLR;
17
16
  exports.generateListReportSchemaV4 = generateListReportSchemaV4;
18
- const utils_1 = require("../utils/utils");
19
- const utils_2 = require("../utils/utils");
17
+ const utils_1 = require("../../utils");
18
+ const utils_2 = require("../../utils");
20
19
  const ux_specification_types_1 = require("@sap/ux-specification-types");
21
20
  const i18next_1 = __importDefault(require("i18next"));
22
- const extensionLogger_1 = require("../../../extensionLogger");
23
- const common_1 = require("../../common");
24
- const Page_1 = require("../sync-rules/Page");
25
- const App_1 = require("../sync-rules/App");
26
- const AppSchema_1 = require("../sync-rules/AppSchema");
21
+ const extensionLogger_1 = require("../../../../extensionLogger");
22
+ const common_1 = require("../../../common");
23
+ const sync_rules_1 = require("../../sync-rules");
27
24
  const ListReportUtils_1 = require("./ListReportUtils");
25
+ const controls_1 = require("../../export/controls");
28
26
  const ROOT_PROPERTIES_ORDER = ['header', 'filterBar', 'chart', 'table'];
29
27
  const UILINEITEM = '@UI.LineItem';
30
28
  /**
@@ -38,6 +36,7 @@ const UILINEITEM = '@UI.LineItem';
38
36
  * @returns {Definition} - the updated selection fields definition
39
37
  */
40
38
  function addSelectionFields(entityType, appSchema, selectionFieldsAnnotation, selectionFieldsDefinition, qualifier) {
39
+ // No @validity check needed here
41
40
  if (!selectionFieldsDefinition) {
42
41
  selectionFieldsDefinition = appSchema.definitions[ux_specification_types_1.DefinitionName.SelectionFields];
43
42
  selectionFieldsDefinition.additionalProperties = false;
@@ -48,8 +47,9 @@ function addSelectionFields(entityType, appSchema, selectionFieldsAnnotation, se
48
47
  }
49
48
  let i = 0;
50
49
  selectionFieldsAnnotation?.forEach((selectionField) => {
50
+ const value = selectionField.value ?? `UnknownField${i}`;
51
51
  let description = selectionField.value;
52
- const fieldDefinition = 'SelectionField::' + (0, common_1.prepareRef)(selectionField.value);
52
+ const fieldDefinition = 'SelectionField::' + (0, common_1.prepareRef)(value);
53
53
  if (selectionField.type === 'PropertyPath') {
54
54
  description = (0, common_1.getLabelForPropertyPath)(selectionField, entityType);
55
55
  }
@@ -65,10 +65,14 @@ function addSelectionFields(entityType, appSchema, selectionFieldsAnnotation, se
65
65
  additionalProperties: false,
66
66
  ...(dataType && { dataType })
67
67
  };
68
+ if (selectionField.value === undefined) {
69
+ // Add message about unresolvable value for selection field
70
+ (0, common_1.addMessageToSchema)(appSchema.definitions[fieldDefinition], {
71
+ text: i18next_1.default.t('UNRESOLVABLE_VALUE_OF_SELECTION_FIELD')
72
+ });
73
+ }
68
74
  appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.isViewNode] = true;
69
- appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.keys] = [
70
- { name: ux_specification_types_1.SchemaKeyName.value, value: `${selectionField.value}` }
71
- ];
75
+ appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.keys] = [{ name: ux_specification_types_1.SchemaKeyName.value, value: `${value}` }];
72
76
  if (selectionField.$target?.fullyQualifiedName.indexOf('@') > -1) {
73
77
  appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.target] = selectionField.$target.fullyQualifiedName
74
78
  .split('@')[0]
@@ -126,6 +130,7 @@ function getPropertiesIndex(selectionFields, entityType) {
126
130
  * @param selectionFields - The selection fields annotation to be processed
127
131
  */
128
132
  function addVisualFilters(entityType, appSchema, visualFiltersManifest, selectionFields) {
133
+ // No @validity check needed here
129
134
  const propertiesIndex = getPropertiesIndex(selectionFields, entityType);
130
135
  const visualFilters = appSchema.definitions[ux_specification_types_1.DefinitionName.VisualFilters];
131
136
  visualFilters.properties = {};
@@ -167,6 +172,8 @@ function applyCustomFilterFields(appSchema, selectionFieldsDefinition, v4Page) {
167
172
  };
168
173
  (0, utils_2.addCustomFilterFieldDefinition)(appSchema, selectionFieldsDefinition, v4Page);
169
174
  const customSectionDefinition = appSchema.definitions[ux_specification_types_1.DefinitionName.CustomFilterFieldPosition];
175
+ // Instantiate for @validity check
176
+ new controls_1.CustomFilterFieldPosition().init();
170
177
  if (typeof customSectionDefinition === 'object') {
171
178
  (0, common_1.addDescriptiveEnumDefinition)(appSchema, selectionFieldsDefinition, {
172
179
  schema: customSectionDefinition,
@@ -240,6 +247,8 @@ function defineActions(appSchema, schemaIdForActions, annotations, targetAnnotat
240
247
  action[ux_specification_types_1.SchemaTag.annotationPath] = `/${actionRecord.fullyQualifiedName}`;
241
248
  //as ChartToolBarAction is an empty object, copy ViewToolBarAction and remove properties
242
249
  appSchema.definitions[actionDefinition] = JSON.parse(JSON.stringify(appSchema.definitions[ux_specification_types_1.DefinitionName.ViewToolBarAction]));
250
+ // Instantiate for @validity check
251
+ new controls_1.ViewToolBarAction().init();
243
252
  appSchema.definitions[actionDefinition].properties = {};
244
253
  appSchema.definitions[actionDefinition][ux_specification_types_1.SchemaTag.annotationPath] = actionRecord.fullyQualifiedName;
245
254
  i++;
@@ -423,6 +432,8 @@ function addALPChartView(appSchema, chartAnnotationPath, targetAnnotation, annot
423
432
  chartView[ux_specification_types_1.SchemaTag.artifactType] = ux_specification_types_1.ArtifactType.Manifest;
424
433
  chartView[ux_specification_types_1.SchemaTag.key] = 'primary';
425
434
  chartView[ux_specification_types_1.SchemaTag.keys] = [{ name: ux_specification_types_1.SchemaKeyName.key, value: 'primary' }];
435
+ // Instantiate for @validity check
436
+ new controls_1.ALPChart().init();
426
437
  }
427
438
  /**
428
439
  * Adds the ALP views to the app-specific schema.
@@ -508,7 +519,7 @@ function addALPViews(appSchema, viewsPaths, generateParameters, templateAnnotati
508
519
  addManifestPathsToPropertiesLR(appSchema, ux_specification_types_1.DefinitionName.ALPTable, tableDefinition, {
509
520
  pageName: v4Page.id,
510
521
  manifest: generateParameters.manifest,
511
- targetAnnotation
522
+ targetAnnotation: target
512
523
  });
513
524
  }
514
525
  /**
@@ -547,33 +558,50 @@ function addViewChartDefinitions(inputParameters, annotations) {
547
558
  * @param viewsDefinition - the views definition in app schema (MultiTableModeV4)
548
559
  * @param viewKey - view key
549
560
  * @param title - view title
561
+ * @param page - Represents the page in the application's structure where the view line items are to be added.
562
+ * @param app - Represents the overall application structure, providing access to the manifest.
550
563
  */
551
- function addViewChart(inputParameters, UIAnnotations, appSchema, viewsDefinition, viewKey, title) {
564
+ function addViewChart(inputParameters, UIAnnotations, appSchema, viewsDefinition, viewKey, title, page, app) {
552
565
  const idForChart = addViewChartDefinitions(inputParameters, UIAnnotations);
553
- appSchema.definitions[idForChart].properties.annotationPath[ux_specification_types_1.SchemaTag.hidden] = true;
554
- appSchema.definitions[idForChart].properties.index[ux_specification_types_1.SchemaTag.hidden] = true;
555
- appSchema.definitions[idForChart].properties.entitySet[ux_specification_types_1.SchemaTag.hidden] = true;
566
+ const chartViewDefinition = appSchema.definitions[idForChart];
567
+ chartViewDefinition.properties.annotationPath[ux_specification_types_1.SchemaTag.hidden] = true;
568
+ chartViewDefinition.properties.index[ux_specification_types_1.SchemaTag.hidden] = true;
569
+ chartViewDefinition.properties.entitySet[ux_specification_types_1.SchemaTag.hidden] = true;
556
570
  const titleOnHover = `Chart View (key: ${viewKey})`;
557
571
  viewsDefinition.properties[viewKey] = {
558
572
  $ref: `${common_1.DEFINITION_LINK_PREFIX}${idForChart}`,
559
573
  description: title ? title : titleOnHover,
560
574
  title: titleOnHover
561
575
  };
576
+ // Add "manifestPath" for table properties
577
+ addManifestPathsToPropertiesLR(inputParameters.appSchema, ux_specification_types_1.DefinitionName.LRChartView, chartViewDefinition, {
578
+ pageName: page.target.id,
579
+ manifest: app.manifest,
580
+ targetAnnotation: inputParameters.targetAnnotation,
581
+ viewConfig: {
582
+ key: viewKey,
583
+ entitySet: inputParameters.entitySet
584
+ }
585
+ });
562
586
  }
563
587
  /**
564
588
  * Modifies the app schema, adds the right line item settings as derived from the visualization.
565
589
  *
566
- * @param {ViewsParameters} inputParameters - The parameters required for generating and defining the line items in the view schema.
567
- * @param {Definition} viewsDefinition - The existing schema definition for views that will be updated with new view line items.
568
- * @param {string} visualization - The visualization format or mode for the line items, used to determine the associated annotations.
569
- * @param {string} templateAnnotation - The template annotation to infer metadata for the line items.
570
- * @param {GenerateAppSchemaParameters} generateParameters - Parameters essential for schema generation, including OData service metadata.
571
- * @param {Page} page - The page object representing the context in which the view is being generated.
572
- * @returns {void} No return value.
590
+ * @param {ViewsParameters} inputParameters - Parameters containing details needed for the view line item addition, including the app schema, view key, and target annotation.
591
+ * @param {Definition} viewsDefinition - The definition object to which the view line items will be added.
592
+ * @param {string} visualization - The specific visualization type, typically used to determine the annotation term.
593
+ * @param {string} templateAnnotation - Annotation path or type related to the template.
594
+ * @param generateParameters - list of API input parameters
595
+ * @param generateParameters.serviceAVT - OData service AVT information
596
+ * @param generateParameters.entityType - entity type of the current page
597
+ * @param {Page} page - Represents the page in the application's structure where the view line items are to be added.
598
+ * @param app - the application object containing manifest and other app-specific information.
599
+ * @param {ExtensionLogger} logger - Logger for recording informational or error messages during the schema adjustment process.
573
600
  */
574
- function addViewLineItems(inputParameters, viewsDefinition, visualization, templateAnnotation, { serviceAVT, entityType }, page) {
601
+ function addViewLineItems(inputParameters, viewsDefinition, visualization, templateAnnotation, { serviceAVT, entityType }, page, app, logger) {
575
602
  const tableId = `${ux_specification_types_1.DefinitionName.LRTableView}<${inputParameters.viewKey}>`;
576
- const viewId = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${inputParameters.viewKey}`;
603
+ const schemaIdForColumns = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${inputParameters.viewKey}`;
604
+ const schemaIdForActions = `${ux_specification_types_1.DefinitionName.Actions}<${schemaIdForColumns}>`;
577
605
  const lrTableView = (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.LRTableView, inputParameters.viewKey, inputParameters.appSchema);
578
606
  delete lrTableView[ux_specification_types_1.SchemaTag.isViewNode];
579
607
  lrTableView[ux_specification_types_1.SchemaTag.annotationPath] = inputParameters.targetAnnotation;
@@ -584,14 +612,14 @@ function addViewLineItems(inputParameters, viewsDefinition, visualization, templ
584
612
  lrTableView['entitySet'] = inputParameters.entitySet;
585
613
  }
586
614
  //Copy toolbar
587
- (0, common_1.addDefinitionRef)(lrTableView.properties.toolBar, ux_specification_types_1.DefinitionName.ToolBar, viewId);
615
+ (0, common_1.addDefinitionRef)(lrTableView.properties.toolBar, ux_specification_types_1.DefinitionName.ToolBar, schemaIdForColumns);
588
616
  const title = `Table View (key: ${inputParameters.viewKey})`;
589
617
  viewsDefinition.properties[inputParameters.viewKey] = {
590
618
  $ref: `${common_1.DEFINITION_LINK_PREFIX}${tableId}`,
591
619
  description: inputParameters.title || title,
592
620
  title
593
621
  };
594
- (0, common_1.addDefinitionRef)(lrTableView.properties.columns, viewId);
622
+ (0, common_1.addDefinitionRef)(lrTableView.properties.columns, schemaIdForColumns);
595
623
  lrTableView.properties.annotationPath[ux_specification_types_1.SchemaTag.hidden] = true;
596
624
  lrTableView.properties.index[ux_specification_types_1.SchemaTag.hidden] = true;
597
625
  lrTableView.properties.entitySet[ux_specification_types_1.SchemaTag.hidden] = true;
@@ -602,14 +630,18 @@ function addViewLineItems(inputParameters, viewsDefinition, visualization, templ
602
630
  lineItemAnnotation: inputParameters.targetEntityType?.annotations.UI[annotationTerm],
603
631
  entityType: inputParameters.targetEntityType,
604
632
  oDataServiceAVT: serviceAVT,
605
- lineItemId: viewId
633
+ lineItemId: schemaIdForColumns
606
634
  };
607
635
  (0, utils_2.addLineItemsTypeToSchema)(dataForLineItem, ux_specification_types_1.DefinitionName.ViewTableColumn, ux_specification_types_1.DefinitionName.ViewCustomColumn, ux_specification_types_1.DefinitionName.ViewCustomAction);
608
636
  // Add "manifestPath" for table properties
609
637
  addManifestPathsToPropertiesLR(inputParameters.appSchema, ux_specification_types_1.DefinitionName.LRTableView, lrTableView, {
610
- pageName: page.getPage().id,
611
- manifest: page.getApp().manifest,
612
- targetAnnotation: inputParameters.targetAnnotation
638
+ pageName: page.target.id,
639
+ manifest: app.manifest,
640
+ targetAnnotation: inputParameters.targetAnnotation,
641
+ viewConfig: {
642
+ key: inputParameters.viewKey,
643
+ entitySet: inputParameters.entitySet
644
+ }
613
645
  });
614
646
  }
615
647
  /**
@@ -629,57 +661,43 @@ function addTagsToView(viewsDefinition, viewKey, namespace, view) {
629
661
  viewsDefinition.properties[viewKey][ux_specification_types_1.SchemaTag.key] = viewKey;
630
662
  viewsDefinition.properties[viewKey][ux_specification_types_1.SchemaTag.keys] = [{ name: ux_specification_types_1.SchemaKeyName.key, value: viewKey }];
631
663
  }
632
- /**
633
- * Adjusts the entity type if a different entity set is maintained for a view.
634
- *
635
- * @param {EntitySet} entitySet - actual entity set (AVT information)
636
- * @param view - the current view in manifest
637
- * @param {GenerateAppSchemaParameters} generateParameters - list of API input parameters
638
- * @returns the target entity type
639
- */
640
- function getTargetEntityType(entitySet, view, generateParameters) {
641
- let targetEntityType = generateParameters.entityType;
642
- let viewEntitySet = entitySet;
643
- if (view['entitySet'] && view['entitySet'] !== entitySet.name) {
644
- viewEntitySet = generateParameters.serviceAVT?.entitySets.find((es) => {
645
- return es.name === view['entitySet'];
646
- });
647
- targetEntityType = viewEntitySet.entityType;
648
- }
649
- return targetEntityType;
650
- }
651
664
  /**
652
665
  * Adds view custom extensions - custom column and custom action definitions.
653
666
  *
654
667
  * @param commonInputParameters - list of input parameters as collected by the calling instance
655
668
  * @param visualization - visualization of the annotation
656
669
  * @param v4Page - the given page in manifest
670
+ * @param manifest - The application manifest
657
671
  * @param logger - extension logger
658
672
  */
659
- function addViewCustomExtensions(commonInputParameters, visualization, v4Page, logger) {
660
- const sectionId = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${commonInputParameters.viewKey}`;
673
+ function addViewCustomExtensions(commonInputParameters, visualization, v4Page, manifest, logger) {
674
+ const schemaIdForColumns = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${commonInputParameters.viewKey}`;
661
675
  const sectionIdPrefix = commonInputParameters.entitySet ? `/${commonInputParameters.entitySet}/` : '';
662
676
  const sectionIdInManifest = `${sectionIdPrefix}@${"com.sap.vocabularies.UI.v1.LineItem" /* UIAnnotationTerms.LineItem */}${visualization.split(ux_specification_types_1.Visualization.LineItem)[1]}`;
663
- const viewColumnDefinition = (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomColumn, sectionId, commonInputParameters.appSchema);
664
- (0, common_1.addDefinitionRef)(viewColumnDefinition.properties.position, ux_specification_types_1.DefinitionName.ViewPosition, sectionId);
665
- (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewPosition, sectionId, commonInputParameters.appSchema);
666
- (0, utils_2.addCustomColumnDefinition)(commonInputParameters.appSchema, v4Page, logger, `${ux_specification_types_1.DefinitionName.ViewCustomColumn}<${sectionId}>`, sectionId, sectionIdInManifest);
667
- (0, utils_2.addFragmentEnumForAnchor)(commonInputParameters.appSchema, sectionId, v4Page, `${ux_specification_types_1.DefinitionName.ViewPosition}<${sectionId}>`, sectionIdInManifest);
677
+ const viewColumnDefinition = (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomColumn, schemaIdForColumns, commonInputParameters.appSchema);
678
+ (0, common_1.addDefinitionRef)(viewColumnDefinition.properties.position, ux_specification_types_1.DefinitionName.ViewPosition, schemaIdForColumns);
679
+ (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewPosition, schemaIdForColumns, commonInputParameters.appSchema);
680
+ (0, utils_2.addCustomColumnDefinition)(commonInputParameters.appSchema, v4Page, logger, `${ux_specification_types_1.DefinitionName.ViewCustomColumn}<${schemaIdForColumns}>`, schemaIdForColumns, sectionIdInManifest);
681
+ (0, utils_2.addFragmentEnumForAnchor)(commonInputParameters.appSchema, schemaIdForColumns, v4Page, `${ux_specification_types_1.DefinitionName.ViewPosition}<${schemaIdForColumns}>`, sectionIdInManifest);
682
+ // Add "manifestPath" for view columns
683
+ (0, ListReportUtils_1.addManifestPathsToDefinitionPropertiesLR)(commonInputParameters.appSchema, v4Page.id, schemaIdForColumns, manifest, commonInputParameters.targetAnnotation, commonInputParameters.entitySet);
668
684
  // Remove generic position
669
685
  if (commonInputParameters.appSchema.definitions.Position) {
670
686
  delete commonInputParameters.appSchema.definitions.Position;
671
687
  }
672
688
  // Table toolbar actions with custom actions
673
- const schemaIdForToolbarActions = `${ux_specification_types_1.DefinitionName.Actions}<${sectionId}>`;
674
- const customActionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomAction}<${sectionId}>`;
689
+ const schemaIdForToolbarActions = `${ux_specification_types_1.DefinitionName.Actions}<${schemaIdForColumns}>`;
690
+ const customActionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomAction}<${schemaIdForColumns}>`;
675
691
  (0, utils_2.addCustomActionDefinition)(commonInputParameters.appSchema, v4Page, logger, customActionDefinitionKey, schemaIdForToolbarActions, sectionIdInManifest);
676
692
  // Anchor selection
677
- (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomActionPosition, sectionId, commonInputParameters.appSchema);
678
- const customActionPositionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomActionPosition}<${sectionId}>`;
693
+ (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomActionPosition, schemaIdForColumns, commonInputParameters.appSchema);
694
+ const customActionPositionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomActionPosition}<${schemaIdForColumns}>`;
679
695
  const customActionDefinition = commonInputParameters.appSchema.definitions[customActionDefinitionKey];
680
696
  customActionDefinition.properties.position.$ref =
681
697
  `${common_1.DEFINITION_LINK_PREFIX}${customActionPositionDefinitionKey}`;
682
698
  (0, utils_2.addEnumForActionAnchor)(commonInputParameters.appSchema, schemaIdForToolbarActions, customActionPositionDefinitionKey);
699
+ // Add "manifestPath" for view actions
700
+ (0, ListReportUtils_1.addManifestPathsToDefinitionPropertiesLR)(commonInputParameters.appSchema, v4Page.id, schemaIdForToolbarActions, manifest, commonInputParameters.targetAnnotation, commonInputParameters.entitySet);
683
701
  }
684
702
  /**
685
703
  * Adds definition parts to a LR View (LineItem/Chart).
@@ -692,18 +710,19 @@ function addViewCustomExtensions(commonInputParameters, visualization, v4Page, l
692
710
  * @param generateParameters.entityType - entity type of the current page
693
711
  * @param generateParameters.logger - extension logger
694
712
  * @param page - the current page object
713
+ * @param app - the application object containing manifest and other app-specific information.
695
714
  * @param uiAnnotations - UI annotations of the given entityType
696
715
  * @param view - the given view
697
716
  */
698
- function addLRViewParts(visualization, viewsDefinition, commonInputParameters, { serviceAVT, entityType, logger }, page, uiAnnotations, view) {
717
+ function addLRViewParts(visualization, viewsDefinition, commonInputParameters, { serviceAVT, entityType, logger }, page, app, uiAnnotations, view) {
699
718
  if (visualization?.indexOf(ux_specification_types_1.Visualization.LineItem) > -1) {
700
719
  //Add Line item view
701
- addViewLineItems(commonInputParameters, viewsDefinition, visualization, commonInputParameters.targetAnnotation, { serviceAVT, entityType }, page);
702
- addViewCustomExtensions(commonInputParameters, visualization, page.getPage(), logger);
720
+ addViewLineItems(commonInputParameters, viewsDefinition, visualization, commonInputParameters.targetAnnotation, { serviceAVT, entityType }, page, app, logger);
721
+ addViewCustomExtensions(commonInputParameters, visualization, page.target, app.getManifest(), logger);
703
722
  }
704
723
  else if (visualization?.indexOf('Chart') > -1) {
705
724
  //Add Chart view
706
- addViewChart(commonInputParameters, uiAnnotations, commonInputParameters.appSchema, viewsDefinition, commonInputParameters.viewKey, commonInputParameters.title);
725
+ addViewChart(commonInputParameters, uiAnnotations, commonInputParameters.appSchema, viewsDefinition, commonInputParameters.viewKey, commonInputParameters.title, page, app);
707
726
  }
708
727
  else if (view['template']) {
709
728
  const titleOnHover = view['label'] || `Custom View (key: ${commonInputParameters.viewKey})`;
@@ -724,157 +743,19 @@ function addLRViewParts(visualization, viewsDefinition, commonInputParameters, {
724
743
  };
725
744
  }
726
745
  }
727
- /**
728
- * Add list report views to the app-specific schema.
729
- *
730
- * @param appSchema - app-specific JSON schema
731
- * @param viewsPaths - views' paths' section in the manifest
732
- * @param generateParameters - list of API input parameters
733
- * @param page - the current page object
734
- * @param tableDefinitionName - The name of the table definition in the schema
735
- */
736
- function addLRViews(appSchema, viewsPaths, generateParameters, page, tableDefinitionName) {
737
- const tableDefinition = appSchema.definitions[tableDefinitionName];
738
- tableDefinition.properties = {
739
- annotationPath: tableDefinition.properties.annotationPath,
740
- initialLoad: tableDefinition.properties.initialLoad,
741
- views: tableDefinition.properties.views
742
- };
743
- const viewsDefinition = appSchema.definitions.MultiTableModeV4;
744
- for (const view of viewsPaths) {
745
- if (!view[ux_specification_types_1.SchemaTag.key]) {
746
- continue;
747
- }
748
- let navPropName = undefined;
749
- const targetEntityType = getTargetEntityType(generateParameters.entitySet, view, generateParameters);
750
- const uiAnnotations = targetEntityType?.annotations.UI;
751
- const { visualization, targetAnnotation, namespace, title } = analyzeViewAnnotation(view?.[ux_specification_types_1.SchemaTag.annotationPath], uiAnnotations, generateParameters.serviceAVT, view[ux_specification_types_1.SchemaTag.key], undefined, generateParameters.logger);
752
- if (view['entitySet']) {
753
- navPropName = generateParameters.entityType.navigationProperties.find((np) => {
754
- return np.targetTypeName === namespace;
755
- })?.name;
756
- }
757
- const viewKey = (0, common_1.prepareRef)(view[ux_specification_types_1.SchemaTag.key]);
758
- const commonInputParameters = {
759
- viewKey,
760
- appSchema,
761
- targetAnnotation,
762
- navPropName,
763
- targetEntityType,
764
- title,
765
- entitySet: view['entitySet']
766
- };
767
- addLRViewParts(visualization, viewsDefinition, commonInputParameters, generateParameters, page, uiAnnotations, view);
768
- addTagsToView(viewsDefinition, viewKey, namespace, view);
769
- }
770
- }
771
- /**
772
- * Adapts the table definition in schema.
773
- * Evaluates the path depending on if defaultTemplateAnnotationPath or Selection-/PresentationVariant is present.
774
- *
775
- * @param appSchema - the app-specific JSON schema
776
- * @param generateParameters - list of API input parameters
777
- * @param templateAnnotation - defaultTemplateAnnotationPath as registered in manifest
778
- * @param v4Page - the given page in manifest
779
- * @param alias - alias definition for the UI vocabulary
780
- * @param tableDefinitionName - The name of the table definition in the schema
781
- */
782
- function adaptTableDefinition(appSchema, generateParameters, templateAnnotation, v4Page, alias, tableDefinitionName) {
783
- //here: tableDefinitionName = DefinitionName.Table
784
- const tableDefinition = appSchema.definitions[tableDefinitionName];
785
- const { visualization, targetAnnotation, namespace } = analyzeViewAnnotation(templateAnnotation, generateParameters.entityType?.annotations.UI, generateParameters.serviceAVT, undefined, ux_specification_types_1.Visualization.LineItem, generateParameters.logger);
786
- if (visualization) {
787
- const annotationTerm = visualization.split('.')[1];
788
- const annotationTermInSchema = `${ux_specification_types_1.DefinitionName.LineItems}OfSPV::${(0, common_1.prepareRef)(annotationTerm)}`;
789
- const spvTable = (appSchema.definitions[`${tableDefinitionName}SPV`] = JSON.parse(JSON.stringify(appSchema.definitions[tableDefinitionName])));
790
- delete spvTable[ux_specification_types_1.SchemaTag.isViewNode];
791
- (0, common_1.addDefinitionRef)(spvTable.properties.toolBar, ux_specification_types_1.DefinitionName.ToolBar, annotationTermInSchema);
792
- // Switch from generic column to specific definition
793
- spvTable[ux_specification_types_1.SchemaTag.annotationPath] = targetAnnotation;
794
- spvTable.properties.columns = {};
795
- (0, common_1.addDefinitionRef)(spvTable.properties.columns, annotationTermInSchema);
796
- delete tableDefinition.properties;
797
- (0, common_1.addDefinitionRef)(tableDefinition, `${tableDefinitionName}SPV`);
798
- tableDefinition[ux_specification_types_1.SchemaTag.annotationPath] = `/${namespace}/@${templateAnnotation}`;
799
- const lineItemAnnotation = generateParameters.entityType?.annotations.UI[annotationTerm];
800
- if (!lineItemAnnotation) {
801
- (0, extensionLogger_1.log)(generateParameters.logger, {
802
- severity: "error" /* LogSeverity.Error */,
803
- message: i18next_1.default.t('NOTARGET', { target: annotationTerm })
804
- });
805
- }
806
- const dataForLineItem = {
807
- isObjectPage: false,
808
- appSchema,
809
- lineItemAnnotation,
810
- entityType: generateParameters.entityType,
811
- oDataServiceAVT: generateParameters.serviceAVT,
812
- lineItemId: annotationTermInSchema
813
- };
814
- (0, utils_2.addLineItemsTypeToSchema)(dataForLineItem);
815
- const annotationTermQualifier = annotationTerm.split('#')?.[1];
816
- const sectionIdInManifest = annotationTermQualifier
817
- ? `@${"com.sap.vocabularies.UI.v1.LineItem" /* UIAnnotationTerms.LineItem */}#${annotationTermQualifier}`
818
- : `@${"com.sap.vocabularies.UI.v1.LineItem" /* UIAnnotationTerms.LineItem */}`;
819
- (0, utils_2.addCustomColumnDefinition)(appSchema, v4Page, generateParameters.logger, undefined, annotationTermInSchema, sectionIdInManifest);
820
- (0, utils_2.addFragmentEnumForAnchor)(appSchema, annotationTermInSchema, v4Page, undefined, sectionIdInManifest);
821
- // Table toolbar actions with custom actions
822
- const schemaIdForToolbarActions = `${ux_specification_types_1.DefinitionName.Actions}<${annotationTermInSchema}>`;
823
- const customColumnDefinitionName = (0, common_1.getCustomExtensionDefinitionName)(appSchema, annotationTermInSchema, ux_specification_types_1.DefinitionName.CustomTableAction);
824
- (0, utils_2.addCustomActionDefinition)(appSchema, v4Page, generateParameters.logger, (0, common_1.getDefinitionKey)(customColumnDefinitionName), schemaIdForToolbarActions, sectionIdInManifest);
825
- (0, utils_2.addEnumForActionAnchor)(appSchema, schemaIdForToolbarActions, ux_specification_types_1.DefinitionName.CustomActionPosition);
826
- }
827
- else {
828
- tableDefinition.properties.toolBar['$ref'] = `${common_1.DEFINITION_LINK_PREFIX}${ux_specification_types_1.DefinitionName.ToolBarLR}`;
829
- // Switch from generic column to specific definition
830
- (0, common_1.addDefinitionRef)(tableDefinition.properties.columns, ux_specification_types_1.DefinitionName.LineItems);
831
- const lineItemAnnotation = generateParameters.entityType?.annotations?.[alias]?.LineItem;
832
- if (!lineItemAnnotation && !v4Page.options?.settings?.views?.paths) {
833
- (0, extensionLogger_1.log)(generateParameters.logger, {
834
- severity: "error" /* LogSeverity.Error */,
835
- message: i18next_1.default.t('NOLINEITEMS')
836
- });
837
- }
838
- const dataForLineItem = {
839
- isObjectPage: false,
840
- appSchema,
841
- lineItemAnnotation,
842
- entityType: generateParameters.entityType,
843
- oDataServiceAVT: generateParameters.serviceAVT,
844
- lineItemId: ux_specification_types_1.DefinitionName.LineItems
845
- };
846
- (0, utils_2.addLineItemsTypeToSchema)(dataForLineItem);
847
- (0, utils_2.addCustomColumnDefinition)(appSchema, v4Page, generateParameters.logger);
848
- (0, utils_2.addFragmentEnumForAnchor)(appSchema, ux_specification_types_1.DefinitionName.LineItems, v4Page);
849
- if (lineItemAnnotation && !v4Page.options?.settings?.views?.paths) {
850
- tableDefinition[ux_specification_types_1.SchemaTag.annotationPath] = (0, common_1.createAnnotationPath)(generateParameters.entityType?.fullyQualifiedName, lineItemAnnotation.term, lineItemAnnotation.qualifier);
851
- }
852
- // Table toolbar actions with custom actions
853
- const schemaIdForActions = `${ux_specification_types_1.DefinitionName.Actions}<${(0, common_1.prepareRef)(ux_specification_types_1.DefinitionName.LineItems)}>`;
854
- (0, utils_2.addCustomActionDefinition)(appSchema, v4Page, generateParameters.logger, undefined, schemaIdForActions);
855
- (0, utils_2.addEnumForActionAnchor)(appSchema, schemaIdForActions, ux_specification_types_1.DefinitionName.CustomActionPosition);
856
- }
857
- // Add "manifestPath" for table properties
858
- addManifestPathsToPropertiesLR(appSchema, tableDefinitionName, tableDefinition, {
859
- pageName: v4Page.id,
860
- manifest: generateParameters.manifest,
861
- targetAnnotation
862
- });
863
- }
864
746
  /**
865
747
  * Checks for the default annotation path to use for LR table.
866
748
  *
867
- * @param v4Page - actual page in the manifest
868
- * @param entityType - actual entity type (AVT information)
869
- * @param templateType - The type of template being used (e.g., ListReportObjectPageV4 or AnalyticalListPageV4)
749
+ * @param page - the current page object
870
750
  * @returns annotation term
871
751
  */
872
- function getDefaultAnnotationPath(v4Page, entityType, templateType) {
873
- if (v4Page.options.settings?.views?.paths && templateType === ux_specification_types_1.TemplateType.ListReportObjectPageV4) {
752
+ function getDefaultAnnotationPath(page) {
753
+ const { entity: { type: entityType }, template: { type: templateType }, target } = page;
754
+ if (target?.options?.settings?.views?.paths && templateType === ux_specification_types_1.TemplateType.ListReportObjectPageV4) {
874
755
  return;
875
756
  }
876
- if (v4Page.options.settings?.defaultTemplateAnnotationPath) {
877
- return v4Page.options.settings.defaultTemplateAnnotationPath;
757
+ if (target?.options?.settings?.defaultTemplateAnnotationPath) {
758
+ return target?.options?.settings.defaultTemplateAnnotationPath;
878
759
  }
879
760
  if (templateType === ux_specification_types_1.TemplateType.ListReportObjectPageV4) {
880
761
  return (entityType?.annotations.UI?.SelectionPresentationVariant?.term ||
@@ -914,8 +795,9 @@ function addHeaderActions(appSchema, v4Page, logger) {
914
795
  * @param definitionName - The name of the definition/class whose properties are being processed.
915
796
  * @param definition - The definition object containing property schemas.
916
797
  * @param pathParams - Additional context required to compute manifest paths.
798
+ * @param handleRelative - A flag indicating whether to use relative paths for definition properties.
917
799
  */
918
- function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, pathParams) {
800
+ function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, pathParams, handleRelative = false) {
919
801
  let targetAnnotation = undefined;
920
802
  if (pathParams.targetAnnotation) {
921
803
  const annotationParts = pathParams.targetAnnotation?.split('/');
@@ -925,10 +807,19 @@ function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, p
925
807
  // Default annotation path
926
808
  targetAnnotation = `@${"com.sap.vocabularies.UI.v1.LineItem" /* UIAnnotationTerms.LineItem */}`;
927
809
  }
810
+ const entitySet = pathParams.viewConfig?.entitySet;
811
+ if (entitySet) {
812
+ targetAnnotation = entitySet ? `/${entitySet}/${targetAnnotation}` : targetAnnotation;
813
+ }
928
814
  (0, utils_1.addManifestPathsToProperties)(appSchema, definitionName, definition, {
929
815
  ...pathParams,
930
- pathsParts: [targetAnnotation, '', targetAnnotation]
931
- });
816
+ pathsParts: [
817
+ pathParams.sectionId ? undefined : targetAnnotation,
818
+ pathParams.columnKey ? pathParams.columnKey : '',
819
+ targetAnnotation,
820
+ pathParams.viewConfig
821
+ ]
822
+ }, handleRelative);
932
823
  }
933
824
  /**
934
825
  * Adds 'manifestPath' to static nodes in schema.
@@ -937,6 +828,8 @@ function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, p
937
828
  * @param pathParams - Additional context required to compute manifest paths.
938
829
  */
939
830
  function addManifestPathsToStaticNodes(appSchema, pathParams) {
831
+ // Add "manifestPath" for current page
832
+ appSchema['manifestPath'] = (0, utils_1.getPageManifestPath)(pathParams);
940
833
  // Root level - rules stored on page class level
941
834
  addManifestPathsToPropertiesLR(appSchema, ux_specification_types_1.PageTypeV4.ListReport, appSchema, pathParams);
942
835
  // Other definitions
@@ -961,17 +854,24 @@ class ListReportPage {
961
854
  * @param contextPath - context path of the page
962
855
  */
963
856
  constructor(generateParameters, schema, templateName, contextPath) {
964
- this.schema = new AppSchema_1.AppSchema(schema);
965
- this.app = (0, App_1.createApp)(generateParameters.manifest, generateParameters.serviceAVT, generateParameters.logger);
966
- this.page = new Page_1.Page(this.app, { name: templateName, type: generateParameters.templateType }, generateParameters.entitySet, contextPath);
857
+ const template = { name: templateName, type: generateParameters.templateType };
858
+ this.appSchema = new sync_rules_1.AppSchema(schema);
859
+ this.app = (0, sync_rules_1.createApp)(generateParameters.manifest, generateParameters.serviceAVT, generateParameters.logger);
860
+ this.page = new sync_rules_1.Page(this.app, template, generateParameters.entitySet, generateParameters.entityType, contextPath);
861
+ this.logger = this.app.logger;
862
+ this.page.addConfig({
863
+ isALP: template.type === ux_specification_types_1.TemplateType.AnalyticalListPageV4,
864
+ views: this.page.target?.options?.settings.views,
865
+ defaultAnnotation: getDefaultAnnotationPath(this.page)
866
+ });
967
867
  }
968
868
  /**
969
869
  * Cleans up the schema by hiding specific properties and removing unnecessary definitions.
970
870
  */
971
871
  cleanup() {
972
- this.schema.hide(this.schema.getRootProperty([ux_specification_types_1.PropertyName.defaultTemplateAnnotationPath]));
973
- this.schema.cleanup(['GenericColumns', 'Action']);
974
- (0, common_1.updatePropertyIndices)(this.schema.getSchema(), ROOT_PROPERTIES_ORDER);
872
+ this.appSchema.hide(this.appSchema.getRootProperty([ux_specification_types_1.PropertyName.defaultTemplateAnnotationPath]));
873
+ this.appSchema.cleanup(['GenericColumns', 'Action']);
874
+ (0, common_1.updatePropertyIndices)(this.appSchema.get(), ROOT_PROPERTIES_ORDER);
975
875
  }
976
876
  /**
977
877
  * Generates the finalized schema for the List Report page.
@@ -979,20 +879,33 @@ class ListReportPage {
979
879
  * @returns The finalized schema for List Report page
980
880
  */
981
881
  generate() {
982
- new ListReportUtils_1.GeneralListReportSettings(this.schema, this.page, this.app.getLogger()).instantiate();
983
- if (!this.page.getPage()) {
984
- return this.schema.finalize();
882
+ const params = {
883
+ appSchema: this.appSchema,
884
+ app: this.app,
885
+ page: this.page,
886
+ logger: this.logger
887
+ };
888
+ new ListReportUtils_1.GeneralListReportSettings(params).init();
889
+ if (!this.page.target) {
890
+ return this.appSchema.get();
985
891
  }
986
- new ListReportUtils_1.Header(this.schema, this.page, this.app.getLogger()).instantiate();
987
- new ListReportUtils_1.FilterBar(this.schema, this.page, this.app.getLogger()).instantiate();
988
- new ListReportUtils_1.TableAndViews(this.schema, this.page, this.app.getLogger()).instantiate();
892
+ new controls_1.Header(params).init();
893
+ new controls_1.HeaderActions(params).init();
894
+ new controls_1.CustomHeaderAction(params).init();
895
+ new ListReportUtils_1.FilterBar(params).init();
896
+ new ListReportUtils_1.TableAndViews(params).init();
989
897
  // Add "manifestPath" for properties in static nodes
990
- addManifestPathsToStaticNodes(this.schema.getSchema(), {
991
- pageName: this.page.getPage().id,
898
+ addManifestPathsToStaticNodes(this.appSchema.get(), {
899
+ pageName: this.page.target.id,
992
900
  manifest: this.app.getManifest()
993
901
  });
902
+ // Add "manifestPath" for custom header actions
903
+ const definitionNames = [ux_specification_types_1.DefinitionName.HeaderActions];
904
+ definitionNames.forEach((definitionName) => {
905
+ (0, ListReportUtils_1.addManifestPathsToDefinitionPropertiesLR)(this.appSchema.get(), this.page.target.id, definitionName, this.app.getManifest());
906
+ });
994
907
  this.cleanup();
995
- return this.schema.finalize();
908
+ return this.appSchema.get();
996
909
  }
997
910
  }
998
911
  /**
@@ -1009,7 +922,7 @@ function generateListReportSchemaV4(generateParameters, genericSchema, templateN
1009
922
  const listReport = new ListReportPage(generateParameters, genericSchema, templateName, contextPath);
1010
923
  if (!listReport.app.getManifest()) {
1011
924
  listReport.cleanup();
1012
- return listReport.schema.finalize();
925
+ return listReport.appSchema.get();
1013
926
  }
1014
927
  return listReport.generate();
1015
928
  }