@sap/ux-specification 1.136.15 → 1.136.17

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 (244) hide show
  1. package/CHANGELOG.md +258 -165
  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 +280 -274
  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 +100 -10
  21. package/dist/schemas/v4/ListReportConfig.json +24 -6
  22. package/dist/schemas/v4/ObjectPageConfig.json +32 -8
  23. package/dist/specification/package.json +14 -12
  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 +367 -0
  29. package/dist/specification/scripts/generate-validity-report.js.map +1 -0
  30. package/dist/specification/scripts/macros/corrections.d.ts +40 -0
  31. package/dist/specification/scripts/macros/corrections.d.ts.map +1 -1
  32. package/dist/specification/scripts/macros/corrections.js +114 -7
  33. package/dist/specification/scripts/macros/corrections.js.map +1 -1
  34. package/dist/specification/scripts/macros/schema.d.ts.map +1 -1
  35. package/dist/specification/scripts/macros/schema.js +14 -1
  36. package/dist/specification/scripts/macros/schema.js.map +1 -1
  37. package/dist/specification/scripts/macros/types.d.ts +1 -0
  38. package/dist/specification/scripts/macros/types.d.ts.map +1 -1
  39. package/dist/specification/scripts/schema/to-json-schema.d.ts.map +1 -1
  40. package/dist/specification/scripts/schema/to-json-schema.js +2 -13
  41. package/dist/specification/scripts/schema/to-json-schema.js.map +1 -1
  42. package/dist/specification/src/api.js +1 -1
  43. package/dist/specification/src/i18n/i18n.d.ts.map +1 -1
  44. package/dist/specification/src/i18n/i18n.js +2 -1
  45. package/dist/specification/src/i18n/i18n.js.map +1 -1
  46. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.d.ts +8 -1
  47. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.d.ts.map +1 -1
  48. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.js +10 -6
  49. package/dist/specification/src/sync/common/ManifestDrivenSchemaProcessor.js.map +1 -1
  50. package/dist/specification/src/sync/common/decoration/decorator-paths.d.ts +503 -0
  51. package/dist/specification/src/sync/common/decoration/decorator-paths.d.ts.map +1 -0
  52. package/dist/specification/src/sync/common/decoration/decorator-paths.js +497 -0
  53. package/dist/specification/src/sync/common/decoration/decorator-paths.js.map +1 -0
  54. package/dist/specification/src/sync/common/decoration/decorators.d.ts +116 -24
  55. package/dist/specification/src/sync/common/decoration/decorators.d.ts.map +1 -1
  56. package/dist/specification/src/sync/common/decoration/decorators.js +308 -78
  57. package/dist/specification/src/sync/common/decoration/decorators.js.map +1 -1
  58. package/dist/specification/src/sync/common/decoration/index.d.ts +1 -0
  59. package/dist/specification/src/sync/common/decoration/index.d.ts.map +1 -1
  60. package/dist/specification/src/sync/common/decoration/index.js +1 -0
  61. package/dist/specification/src/sync/common/decoration/index.js.map +1 -1
  62. package/dist/specification/src/sync/common/dist_tag.json +8 -3
  63. package/dist/specification/src/sync/common/generate/utils.d.ts +2 -1
  64. package/dist/specification/src/sync/common/generate/utils.d.ts.map +1 -1
  65. package/dist/specification/src/sync/common/generate/utils.js +5 -1
  66. package/dist/specification/src/sync/common/generate/utils.js.map +1 -1
  67. package/dist/specification/src/sync/common/i18n.json +2 -1
  68. package/dist/specification/src/sync/common/rules.d.ts +20 -0
  69. package/dist/specification/src/sync/common/rules.d.ts.map +1 -1
  70. package/dist/specification/src/sync/common/rules.js +22 -2
  71. package/dist/specification/src/sync/common/rules.js.map +1 -1
  72. package/dist/specification/src/sync/common/utils.d.ts +22 -6
  73. package/dist/specification/src/sync/common/utils.d.ts.map +1 -1
  74. package/dist/specification/src/sync/common/utils.js +122 -18
  75. package/dist/specification/src/sync/common/utils.js.map +1 -1
  76. package/dist/specification/src/sync/v2/generate/analyticalListReport.d.ts.map +1 -1
  77. package/dist/specification/src/sync/v2/generate/analyticalListReport.js +9 -7
  78. package/dist/specification/src/sync/v2/generate/analyticalListReport.js.map +1 -1
  79. package/dist/specification/src/sync/v2/generate/listReport.d.ts.map +1 -1
  80. package/dist/specification/src/sync/v2/generate/listReport.js +3 -1
  81. package/dist/specification/src/sync/v2/generate/listReport.js.map +1 -1
  82. package/dist/specification/src/sync/v2/generate/objectPage.d.ts.map +1 -1
  83. package/dist/specification/src/sync/v2/generate/objectPage.js +58 -2
  84. package/dist/specification/src/sync/v2/generate/objectPage.js.map +1 -1
  85. package/dist/specification/src/sync/v2/generate/overviewPage.d.ts +1 -9
  86. package/dist/specification/src/sync/v2/generate/overviewPage.d.ts.map +1 -1
  87. package/dist/specification/src/sync/v2/generate/overviewPage.js +30 -1
  88. package/dist/specification/src/sync/v2/generate/overviewPage.js.map +1 -1
  89. package/dist/specification/src/sync/v2/import/app/appProvider.d.ts.map +1 -1
  90. package/dist/specification/src/sync/v2/import/app/appProvider.js +2 -0
  91. package/dist/specification/src/sync/v2/import/app/appProvider.js.map +1 -1
  92. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.d.ts +2 -1
  93. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.d.ts.map +1 -1
  94. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.js +5 -0
  95. package/dist/specification/src/sync/v2/import/pages/analyticalListPage.js.map +1 -1
  96. package/dist/specification/src/sync/v2/import/pages/listReport.d.ts +2 -1
  97. package/dist/specification/src/sync/v2/import/pages/listReport.d.ts.map +1 -1
  98. package/dist/specification/src/sync/v2/import/pages/listReport.js +5 -0
  99. package/dist/specification/src/sync/v2/import/pages/listReport.js.map +1 -1
  100. package/dist/specification/src/sync/v2/import/pages/objectPage.d.ts.map +1 -1
  101. package/dist/specification/src/sync/v2/import/pages/objectPage.js +2 -1
  102. package/dist/specification/src/sync/v2/import/pages/objectPage.js.map +1 -1
  103. package/dist/specification/src/sync/v2/import/utils.d.ts +28 -1
  104. package/dist/specification/src/sync/v2/import/utils.d.ts.map +1 -1
  105. package/dist/specification/src/sync/v2/import/utils.js +37 -0
  106. package/dist/specification/src/sync/v2/import/utils.js.map +1 -1
  107. package/dist/specification/src/sync/v2/utils.d.ts +12 -2
  108. package/dist/specification/src/sync/v2/utils.d.ts.map +1 -1
  109. package/dist/specification/src/sync/v2/utils.js +19 -2
  110. package/dist/specification/src/sync/v2/utils.js.map +1 -1
  111. package/dist/specification/src/sync/v4/application.d.ts +31 -2
  112. package/dist/specification/src/sync/v4/application.d.ts.map +1 -1
  113. package/dist/specification/src/sync/v4/application.js +44 -4
  114. package/dist/specification/src/sync/v4/application.js.map +1 -1
  115. package/dist/specification/src/sync/v4/export/controls/FilterBar.d.ts +2 -1
  116. package/dist/specification/src/sync/v4/export/controls/FilterBar.d.ts.map +1 -1
  117. package/dist/specification/src/sync/v4/export/controls/FilterBar.js +2 -1
  118. package/dist/specification/src/sync/v4/export/controls/FilterBar.js.map +1 -1
  119. package/dist/specification/src/sync/v4/export/controls/Header.d.ts +4 -3
  120. package/dist/specification/src/sync/v4/export/controls/Header.d.ts.map +1 -1
  121. package/dist/specification/src/sync/v4/export/controls/Header.js +7 -3
  122. package/dist/specification/src/sync/v4/export/controls/Header.js.map +1 -1
  123. package/dist/specification/src/sync/v4/export/controls/HeaderAction.d.ts +2 -1
  124. package/dist/specification/src/sync/v4/export/controls/HeaderAction.d.ts.map +1 -1
  125. package/dist/specification/src/sync/v4/export/controls/HeaderAction.js +7 -0
  126. package/dist/specification/src/sync/v4/export/controls/HeaderAction.js.map +1 -1
  127. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.d.ts +2 -1
  128. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.d.ts.map +1 -1
  129. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.js +2 -1
  130. package/dist/specification/src/sync/v4/export/controls/ObjectPageCustomSection.js.map +1 -1
  131. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.d.ts +1 -1
  132. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.d.ts.map +1 -1
  133. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.js +0 -13
  134. package/dist/specification/src/sync/v4/export/controls/ObjectPageTable.js.map +1 -1
  135. package/dist/specification/src/sync/v4/export/controls/Table.d.ts +32 -17
  136. package/dist/specification/src/sync/v4/export/controls/Table.d.ts.map +1 -1
  137. package/dist/specification/src/sync/v4/export/controls/Table.js +84 -58
  138. package/dist/specification/src/sync/v4/export/controls/Table.js.map +1 -1
  139. package/dist/specification/src/sync/v4/export/controls/TableColumn.d.ts.map +1 -1
  140. package/dist/specification/src/sync/v4/export/controls/TableColumn.js +2 -2
  141. package/dist/specification/src/sync/v4/export/controls/TableColumn.js.map +1 -1
  142. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.d.ts.map +1 -1
  143. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.js +2 -2
  144. package/dist/specification/src/sync/v4/export/controls/ToolBarAction.js.map +1 -1
  145. package/dist/specification/src/sync/v4/export/export.d.ts.map +1 -1
  146. package/dist/specification/src/sync/v4/export/export.js +25 -3
  147. package/dist/specification/src/sync/v4/export/export.js.map +1 -1
  148. package/dist/specification/src/sync/v4/export/pages/ListReport.js +1 -1
  149. package/dist/specification/src/sync/v4/export/pages/ListReport.js.map +1 -1
  150. package/dist/specification/src/sync/v4/generate/actions.d.ts +1 -1
  151. package/dist/specification/src/sync/v4/generate/actions.d.ts.map +1 -1
  152. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.d.ts.map +1 -1
  153. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.js +20 -12
  154. package/dist/specification/src/sync/v4/generate/fpm-custom-page/annotations.js.map +1 -1
  155. package/dist/specification/src/sync/v4/generate/fpm-custom-page/generator.d.ts.map +1 -1
  156. package/dist/specification/src/sync/v4/generate/fpm-custom-page/generator.js +16 -1
  157. package/dist/specification/src/sync/v4/generate/fpm-custom-page/generator.js.map +1 -1
  158. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.d.ts.map +1 -1
  159. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.js +10 -1
  160. package/dist/specification/src/sync/v4/generate/fpm-custom-page/utils.js.map +1 -1
  161. package/dist/specification/src/sync/v4/generate/index.d.ts +1 -1
  162. package/dist/specification/src/sync/v4/generate/index.d.ts.map +1 -1
  163. package/dist/specification/src/sync/v4/generate/index.js +1 -1
  164. package/dist/specification/src/sync/v4/generate/index.js.map +1 -1
  165. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.d.ts +73 -0
  166. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.d.ts.map +1 -0
  167. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.js +354 -0
  168. package/dist/specification/src/sync/v4/generate/list-report/ListReportUtils.js.map +1 -0
  169. package/dist/specification/src/sync/v4/generate/{listReport.d.ts → list-report/listReport.d.ts} +27 -16
  170. package/dist/specification/src/sync/v4/generate/list-report/listReport.d.ts.map +1 -0
  171. package/dist/specification/src/sync/v4/generate/{listReport.js → list-report/listReport.js} +191 -163
  172. package/dist/specification/src/sync/v4/generate/list-report/listReport.js.map +1 -0
  173. package/dist/specification/src/sync/v4/generate/objectPage.d.ts.map +1 -1
  174. package/dist/specification/src/sync/v4/generate/objectPage.js +145 -44
  175. package/dist/specification/src/sync/v4/generate/objectPage.js.map +1 -1
  176. package/dist/specification/src/sync/v4/import/pages/listReport.d.ts.map +1 -1
  177. package/dist/specification/src/sync/v4/import/pages/listReport.js +2 -1
  178. package/dist/specification/src/sync/v4/import/pages/listReport.js.map +1 -1
  179. package/dist/specification/src/sync/v4/import/utils.js +5 -3
  180. package/dist/specification/src/sync/v4/import/utils.js.map +1 -1
  181. package/dist/specification/src/sync/v4/sync-rules/App.d.ts +9 -7
  182. package/dist/specification/src/sync/v4/sync-rules/App.d.ts.map +1 -1
  183. package/dist/specification/src/sync/v4/sync-rules/App.js +4 -8
  184. package/dist/specification/src/sync/v4/sync-rules/App.js.map +1 -1
  185. package/dist/specification/src/sync/v4/sync-rules/AppSchema.d.ts +2 -9
  186. package/dist/specification/src/sync/v4/sync-rules/AppSchema.d.ts.map +1 -1
  187. package/dist/specification/src/sync/v4/sync-rules/AppSchema.js +2 -11
  188. package/dist/specification/src/sync/v4/sync-rules/AppSchema.js.map +1 -1
  189. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.d.ts +219 -96
  190. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.d.ts.map +1 -1
  191. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.js +557 -211
  192. package/dist/specification/src/sync/v4/sync-rules/DecoratorClass.js.map +1 -1
  193. package/dist/specification/src/sync/v4/sync-rules/Page.d.ts +17 -22
  194. package/dist/specification/src/sync/v4/sync-rules/Page.d.ts.map +1 -1
  195. package/dist/specification/src/sync/v4/sync-rules/Page.js +15 -22
  196. package/dist/specification/src/sync/v4/sync-rules/Page.js.map +1 -1
  197. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.d.ts +1 -0
  198. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.d.ts.map +1 -1
  199. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.js +17 -9
  200. package/dist/specification/src/sync/v4/sync-rules/controllerExtensions.js.map +1 -1
  201. package/dist/specification/src/sync/v4/sync-rules/index.d.ts +5 -0
  202. package/dist/specification/src/sync/v4/sync-rules/index.d.ts.map +1 -0
  203. package/dist/specification/src/sync/v4/sync-rules/index.js +21 -0
  204. package/dist/specification/src/sync/v4/sync-rules/index.js.map +1 -0
  205. package/dist/specification/src/sync/v4/sync-rules/utils.d.ts.map +1 -1
  206. package/dist/specification/src/sync/v4/sync-rules/utils.js +4 -0
  207. package/dist/specification/src/sync/v4/sync-rules/utils.js.map +1 -1
  208. package/dist/specification/src/sync/v4/utils/index.d.ts +2 -0
  209. package/dist/specification/src/sync/v4/utils/index.d.ts.map +1 -0
  210. package/dist/specification/src/sync/v4/utils/index.js +18 -0
  211. package/dist/specification/src/sync/v4/utils/index.js.map +1 -0
  212. package/dist/specification/src/sync/v4/utils/utils.d.ts +9 -1
  213. package/dist/specification/src/sync/v4/utils/utils.d.ts.map +1 -1
  214. package/dist/specification/src/sync/v4/utils/utils.js +17 -2
  215. package/dist/specification/src/sync/v4/utils/utils.js.map +1 -1
  216. package/dist/specification/test/test-projects/v2sttaProdMan2/webapp/manifest.json +550 -0
  217. package/dist/specification/test/test-projects/v4new/webapp/manifest.json +147 -0
  218. package/dist/specification/test/test-utils/utils.d.ts +71 -0
  219. package/dist/specification/test/test-utils/utils.d.ts.map +1 -0
  220. package/dist/specification/test/test-utils/utils.js +400 -0
  221. package/dist/specification/test/test-utils/utils.js.map +1 -0
  222. package/dist/specification/test/unit/decorators/validity-test-utils.d.ts +131 -0
  223. package/dist/specification/test/unit/decorators/validity-test-utils.d.ts.map +1 -0
  224. package/dist/specification/test/unit/decorators/validity-test-utils.js +661 -0
  225. package/dist/specification/test/unit/decorators/validity-test-utils.js.map +1 -0
  226. package/dist/types/src/apiTypes.d.ts +2 -3
  227. package/dist/types/src/apiTypes.d.ts.map +1 -1
  228. package/dist/types/src/apiTypes.js.map +1 -1
  229. package/dist/types/src/common/types.d.ts +119 -13
  230. package/dist/types/src/common/types.d.ts.map +1 -1
  231. package/dist/types/src/common/types.js.map +1 -1
  232. package/dist/types/src/v2/controls/ObjectPageTable.d.ts +1 -1
  233. package/dist/types/src/v2/controls/Table.d.ts +1 -1
  234. package/dist/types/src/v4/controls/ObjectPageTable.d.ts +1 -1
  235. package/dist/types/src/v4/controls/ObjectPageTable.d.ts.map +1 -1
  236. package/dist/types/src/v4/controls/Table.d.ts +3 -3
  237. package/dist/types/src/v4/controls/Table.d.ts.map +1 -1
  238. package/package.json +14 -12
  239. package/dist/specification/src/sync/v4/generate/ListReportUtils.d.ts +0 -107
  240. package/dist/specification/src/sync/v4/generate/ListReportUtils.d.ts.map +0 -1
  241. package/dist/specification/src/sync/v4/generate/ListReportUtils.js +0 -394
  242. package/dist/specification/src/sync/v4/generate/ListReportUtils.js.map +0 -1
  243. package/dist/specification/src/sync/v4/generate/listReport.d.ts.map +0 -1
  244. package/dist/specification/src/sync/v4/generate/listReport.js.map +0 -1
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_TABLE_TYPE = void 0;
6
7
  exports.addSelectionFields = addSelectionFields;
7
8
  exports.getVisualFilters = getVisualFilters;
8
9
  exports.addVisualFilters = addVisualFilters;
@@ -12,21 +13,23 @@ exports.addALPViews = addALPViews;
12
13
  exports.applyLRSchemaAdjustments = applyLRSchemaAdjustments;
13
14
  exports.addTagsToView = addTagsToView;
14
15
  exports.addLRViewParts = addLRViewParts;
15
- exports.getDefaultAnnotationPath = getDefaultAnnotationPath;
16
16
  exports.addHeaderActions = addHeaderActions;
17
17
  exports.addManifestPathsToPropertiesLR = addManifestPathsToPropertiesLR;
18
18
  exports.generateListReportSchemaV4 = generateListReportSchemaV4;
19
- const utils_1 = require("../utils/utils");
20
- const utils_2 = require("../utils/utils");
19
+ const utils_1 = require("../../utils");
20
+ const utils_2 = require("../../utils");
21
21
  const ux_specification_types_1 = require("@sap/ux-specification-types");
22
22
  const i18next_1 = __importDefault(require("i18next"));
23
- const extensionLogger_1 = require("../../../extensionLogger");
24
- const common_1 = require("../../common");
25
- const actions_1 = require("./actions");
26
- const AppSchema_1 = require("../sync-rules/AppSchema");
27
- const App_1 = require("../sync-rules/App");
28
- const Page_1 = require("../sync-rules/Page");
23
+ const extensionLogger_1 = require("../../../../extensionLogger");
24
+ const common_1 = require("../../../common");
25
+ const actions_1 = require("../actions");
26
+ const sync_rules_1 = require("../../sync-rules");
29
27
  const ListReportUtils_1 = require("./ListReportUtils");
28
+ const controls_1 = require("../../export/controls");
29
+ /**
30
+ * Default table type when not specified in manifest.
31
+ */
32
+ exports.DEFAULT_TABLE_TYPE = ux_specification_types_1.v4.TableTypeV4.ResponsiveTable;
30
33
  const ROOT_PROPERTIES_ORDER = ['header', 'filterBar', 'chart', 'table'];
31
34
  const UILINEITEM = '@UI.LineItem';
32
35
  /**
@@ -40,6 +43,7 @@ const UILINEITEM = '@UI.LineItem';
40
43
  * @returns {Definition} - the updated selection fields definition
41
44
  */
42
45
  function addSelectionFields(entityType, appSchema, selectionFieldsAnnotation, selectionFieldsDefinition, qualifier) {
46
+ // No @validity check needed here
43
47
  if (!selectionFieldsDefinition) {
44
48
  selectionFieldsDefinition = appSchema.definitions[ux_specification_types_1.DefinitionName.SelectionFields];
45
49
  selectionFieldsDefinition.additionalProperties = false;
@@ -51,8 +55,9 @@ function addSelectionFields(entityType, appSchema, selectionFieldsAnnotation, se
51
55
  if (selectionFieldsAnnotation) {
52
56
  let i = 0;
53
57
  selectionFieldsAnnotation?.forEach((selectionField) => {
58
+ const value = selectionField.value ?? `UnknownField${i}`;
54
59
  let description = selectionField.value;
55
- const fieldDefinition = 'SelectionField::' + (0, common_1.prepareRef)(selectionField.value);
60
+ const fieldDefinition = 'SelectionField::' + (0, common_1.prepareRef)(value);
56
61
  if (selectionField.type === 'PropertyPath') {
57
62
  description = (0, common_1.getLabelForPropertyPath)(selectionField, entityType);
58
63
  }
@@ -68,10 +73,14 @@ function addSelectionFields(entityType, appSchema, selectionFieldsAnnotation, se
68
73
  additionalProperties: false,
69
74
  ...(dataType && { dataType })
70
75
  };
76
+ if (selectionField.value === undefined) {
77
+ // Add message about unresolvable value for selection field
78
+ (0, common_1.addMessageToSchema)(appSchema.definitions[fieldDefinition], {
79
+ text: i18next_1.default.t('UNRESOLVABLE_VALUE_OF_SELECTION_FIELD')
80
+ });
81
+ }
71
82
  appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.isViewNode] = true;
72
- appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.keys] = [
73
- { name: ux_specification_types_1.SchemaKeyName.value, value: `${selectionField.value}` }
74
- ];
83
+ appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.keys] = [{ name: ux_specification_types_1.SchemaKeyName.value, value: `${value}` }];
75
84
  if (selectionField.$target?.fullyQualifiedName.indexOf('@') > -1) {
76
85
  appSchema.definitions[fieldDefinition][ux_specification_types_1.SchemaTag.target] = selectionField.$target.fullyQualifiedName
77
86
  .split('@')[0]
@@ -130,6 +139,7 @@ function getPropertiesIndex(selectionFields, entityType) {
130
139
  * @param selectionFields - The selection fields annotation to be processed
131
140
  */
132
141
  function addVisualFilters(entityType, appSchema, visualFiltersManifest, selectionFields) {
142
+ // No @validity check needed here
133
143
  const propertiesIndex = getPropertiesIndex(selectionFields, entityType);
134
144
  const visualFilters = appSchema.definitions[ux_specification_types_1.DefinitionName.VisualFilters];
135
145
  visualFilters.properties = {};
@@ -171,6 +181,8 @@ function applyCustomFilterFields(appSchema, selectionFieldsDefinition, v4Page) {
171
181
  };
172
182
  (0, utils_2.addCustomFilterFieldDefinition)(appSchema, selectionFieldsDefinition, v4Page);
173
183
  const customSectionDefinition = appSchema.definitions[ux_specification_types_1.DefinitionName.CustomFilterFieldPosition];
184
+ // Instantiate for @validity check
185
+ new controls_1.CustomFilterFieldPosition().init();
174
186
  if (typeof customSectionDefinition === 'object') {
175
187
  (0, common_1.addDescriptiveEnumDefinition)(appSchema, selectionFieldsDefinition, {
176
188
  schema: customSectionDefinition,
@@ -395,6 +407,8 @@ function addALPChartView(appSchema, chartAnnotationPath, targetAnnotation, annot
395
407
  chartView[ux_specification_types_1.SchemaTag.artifactType] = ux_specification_types_1.ArtifactType.Manifest;
396
408
  chartView[ux_specification_types_1.SchemaTag.key] = 'primary';
397
409
  chartView[ux_specification_types_1.SchemaTag.keys] = [{ name: ux_specification_types_1.SchemaKeyName.key, value: 'primary' }];
410
+ // Instantiate for @validity check
411
+ new controls_1.ALPChart().init();
398
412
  }
399
413
  /**
400
414
  * Adds the ALP views to the app-specific schema.
@@ -527,8 +541,9 @@ function addViewChartDefinitions(inputParameters, annotations) {
527
541
  * @param viewKey - view key
528
542
  * @param title - view title
529
543
  * @param page - Represents the page in the application's structure where the view line items are to be added.
544
+ * @param app - Represents the overall application structure, providing access to the manifest.
530
545
  */
531
- function addViewChart(inputParameters, UIAnnotations, appSchema, viewsDefinition, viewKey, title, page) {
546
+ function addViewChart(inputParameters, UIAnnotations, appSchema, viewsDefinition, viewKey, title, page, app) {
532
547
  const idForChart = addViewChartDefinitions(inputParameters, UIAnnotations);
533
548
  const chartViewDefinition = appSchema.definitions[idForChart];
534
549
  chartViewDefinition.properties.annotationPath[ux_specification_types_1.SchemaTag.hidden] = true;
@@ -542,8 +557,8 @@ function addViewChart(inputParameters, UIAnnotations, appSchema, viewsDefinition
542
557
  };
543
558
  // Add "manifestPath" for table properties
544
559
  addManifestPathsToPropertiesLR(inputParameters.appSchema, ux_specification_types_1.DefinitionName.LRChartView, chartViewDefinition, {
545
- pageName: page.getPage().id,
546
- manifest: page.getApp().manifest,
560
+ pageName: page.target.id,
561
+ manifest: app.manifest,
547
562
  targetAnnotation: inputParameters.targetAnnotation,
548
563
  viewConfig: {
549
564
  key: viewKey,
@@ -573,96 +588,6 @@ function getLineItemRef(v4Page, entityType, viewKey, lineItemTerm, lineItemQuali
573
588
  `@${lineItemTerm}${qualifier}`;
574
589
  return entitySet ? `/${entitySet}/${lineItemReference}` : lineItemReference;
575
590
  }
576
- /**
577
- * Adjusts the schema definition related to the creation fields in the list report (LR) table.
578
- * This function modifies the app schema to handle the creation mode and relevant settings for the table.
579
- *
580
- * @param {SchemaAdjustmentParameters} schemaAdjustmentParameters - An object containing parameters required for schema adjustments.
581
- * It includes the application schema, table definition ID, facet definition ID, and the V4 page information.
582
- */
583
- function adjustCreationFieldsDefinition(schemaAdjustmentParameters) {
584
- const { entityType, appSchema, tableDefinitionKey, facetDefinitionKey, v4Page, viewKey } = schemaAdjustmentParameters;
585
- // when the table view is created, the entity type may differ from the one used for the table
586
- // schemaAdjustmentParameters contains the entity type used for the view
587
- const lineItemRef = getLineItemRef(v4Page, entityType, viewKey, entityType?.annotations?.UI?.LineItem?.term);
588
- // set specific implementation for creation fields in the LR table
589
- const creationModeDefinitionKey = (0, common_1.getFacetDefinitionKey)(ux_specification_types_1.DefinitionName.TableCreationModeLR, facetDefinitionKey);
590
- const tableDefinition = appSchema.definitions[tableDefinitionKey];
591
- const creationModeProperty = tableDefinition.properties[ux_specification_types_1.PropertyName.creationMode];
592
- creationModeProperty.$ref = (0, common_1.getFacetDefinitionLink)(ux_specification_types_1.DefinitionName.TableCreationModeLR, facetDefinitionKey);
593
- const creationModeDefinition = appSchema.definitions[creationModeDefinitionKey] ??
594
- (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.TableCreationModeLR, facetDefinitionKey, appSchema);
595
- const context = {
596
- page: v4Page,
597
- schema: creationModeDefinition,
598
- parameters: {
599
- lineItemRef,
600
- tableDefinition
601
- }
602
- };
603
- // for the AnalyticalTable we don't set the creation mode property
604
- common_1.manifestDrivenSchemaProcessor.apply(ux_specification_types_1.RuleName.LRCreationModeForAnalyticalTable, context);
605
- // the TreeTable has some specific properties in the creation mode
606
- common_1.manifestDrivenSchemaProcessor.apply(ux_specification_types_1.RuleName.LRCreationModeForNonTreeTable, context);
607
- // only in CreationDialog mode is the creationFields property allowed
608
- common_1.manifestDrivenSchemaProcessor.apply(ux_specification_types_1.RuleName.LRCreationModeForNonCreationDialogMode, context);
609
- }
610
- /**
611
- * Adjusts the schema definition related to the analytical configuration in the list report (LR) table.
612
- * This function modifies the app schema to handle the analytical configuration and relevant settings for the table.
613
- *
614
- * @param {SchemaAdjustmentParameters} schemaAdjustmentParameters - An object containing parameters required for schema adjustments.
615
- * It includes the application schema, table definition ID, facet definition ID, and the V4 page information.
616
- */
617
- function adjustAnalyticalConfiguration(schemaAdjustmentParameters) {
618
- const { entityType, appSchema, tableDefinitionKey, facetDefinitionKey, v4Page, viewKey, dataForLineItem } = schemaAdjustmentParameters;
619
- // when the table view is created, the entity type may differ from the one used for the table
620
- // schemaAdjustmentParameters contains the entity type used for the view
621
- const lineItemRef = getLineItemRef(v4Page, entityType, viewKey, entityType?.annotations?.UI?.LineItem?.term, dataForLineItem.lineItemAnnotation?.qualifier);
622
- // set specific implementation for analytical configuration in the LR table
623
- const tableDefinition = appSchema.definitions[tableDefinitionKey];
624
- const analyticalConfigurationDefinitionName = viewKey
625
- ? ux_specification_types_1.DefinitionName.ViewAnalyticalConfiguration
626
- : ux_specification_types_1.DefinitionName.AnalyticalConfiguration;
627
- const analyticalConfigurationDefinition = appSchema.definitions[analyticalConfigurationDefinitionName] ??
628
- (0, common_1.parseSchemaDefinition)(analyticalConfigurationDefinitionName, facetDefinitionKey, appSchema);
629
- const context = {
630
- page: v4Page,
631
- schema: analyticalConfigurationDefinition,
632
- parameters: {
633
- lineItemRef,
634
- tableDefinition
635
- }
636
- };
637
- // for the AnalyticalTable we set the analytical configuration property
638
- common_1.manifestDrivenSchemaProcessor.apply(ux_specification_types_1.RuleName.LRAnalyticalConfigurationForNonAnalyticalTable, context);
639
- }
640
- /**
641
- * Adjusts the schema definition related to the popin layout in the list report (LR) table.
642
- * This function modifies the app schema to handle the popin layout and relevant settings for the table.
643
- *
644
- * @param {SchemaAdjustmentParameters} schemaAdjustmentParameters - An object containing parameters required for schema adjustments.
645
- * It includes the application schema, table definition ID, facet definition ID, and the V4 page information.
646
- */
647
- function adjustPopinLayout(schemaAdjustmentParameters) {
648
- const { entityType, appSchema, tableDefinitionKey, v4Page, viewKey, dataForLineItem } = schemaAdjustmentParameters;
649
- // when the table view is created, the entity type may differ from the one used for the table
650
- // schemaAdjustmentParameters contains the entity type used for the view
651
- const lineItemRef = getLineItemRef(v4Page, entityType, viewKey, entityType?.annotations?.UI?.LineItem?.term, dataForLineItem.lineItemAnnotation?.qualifier);
652
- // set specific implementation for popinLayout in the LR table
653
- const tableDefinition = appSchema.definitions[tableDefinitionKey];
654
- const popinLayoutDefinition = tableDefinition.properties['popinLayout'];
655
- const context = {
656
- page: v4Page,
657
- schema: popinLayoutDefinition,
658
- parameters: {
659
- lineItemRef,
660
- tableDefinition
661
- }
662
- };
663
- // for the ResponsiveTable (default table type) we allow to set the popin layout property
664
- common_1.manifestDrivenSchemaProcessor.apply(ux_specification_types_1.RuleName.LRPopinLayoutForNonResponsiveTable, context);
665
- }
666
591
  /**
667
592
  * Adjusts the schema for a table by making necessary changes such as populating creation fields,
668
593
  * adjusting creation field definitions, and adding enum mappings for mass edit functionalities.
@@ -674,16 +599,85 @@ function applyLRSchemaAdjustments(schemaAdjustmentParameters) {
674
599
  // in the future, all postgeneration adjustments for the LR Page should be done here
675
600
  // populate the creation fields for the table with the data from the columns
676
601
  (0, utils_1.initializeCreationModeSchema)(appSchema, facetDefinitionKey, entityType, ux_specification_types_1.DefinitionName.TableCreationModeLR);
677
- // remove unnecessary properties from the creation mode aggregation according to the table type
678
- adjustCreationFieldsDefinition(schemaAdjustmentParameters);
679
- // remove unnecessary properties from the analytical configuration aggregation according to the table type
680
- adjustAnalyticalConfiguration(schemaAdjustmentParameters);
681
- adjustPopinLayout(schemaAdjustmentParameters);
602
+ // Apply decorator-based visibility rules for table properties
603
+ applyTableDecorators(schemaAdjustmentParameters);
682
604
  // add columns to a enum, in this case enableMassEdit -> visibleFields and ignoredFields
683
605
  (0, utils_2.addEnumForEnableMassEdit)(appSchema, tableDefinitionKey, facetDefinitionKey, entityType);
684
606
  // add the custom action and custom action menu definition
685
607
  (0, actions_1.configureCustomActionDefinition)(schemaAdjustmentParameters);
686
608
  }
609
+ /**
610
+ * Retrieves the table settings from the manifest for a given line item reference.
611
+ * The returned object includes both TableSettings and Table-level properties
612
+ * like creationMode, analyticalConfiguration, and popinLayout.
613
+ *
614
+ * @param v4Page - The V4 page configuration from manifest
615
+ * @param lineItemRef - The line item reference (e.g., '@UI.LineItem')
616
+ * @returns The table settings or undefined if not found
617
+ */
618
+ function getTableSettingsFromManifest(v4Page, lineItemRef) {
619
+ return v4Page?.options?.settings?.controlConfiguration?.[lineItemRef ?? '']?.[ux_specification_types_1.PropertyName.tableSettings];
620
+ }
621
+ /**
622
+ * Applies decorator-based visibility rules to table and creation mode definitions.
623
+ * This function uses the @hide and @message decorators defined on the Table and TableCreationModeLR classes
624
+ * to conditionally hide properties and show warning messages based on table type and settings.
625
+ *
626
+ * @param schemaAdjustmentParameters - Parameters containing schema, page, and table definition information
627
+ */
628
+ function applyTableDecorators(schemaAdjustmentParameters) {
629
+ const { appSchema, tableDefinitionKey, facetDefinitionKey, v4Page, viewKey, entityType, dataForLineItem } = schemaAdjustmentParameters;
630
+ // Get the line item reference for looking up table settings in manifest
631
+ const lineItemRef = getLineItemRef(v4Page, entityType, viewKey, entityType?.annotations?.UI?.LineItem?.term, dataForLineItem?.lineItemAnnotation?.qualifier);
632
+ // Get table settings from manifest and build custom context for decorator evaluation
633
+ const tableSettings = getTableSettingsFromManifest(v4Page, lineItemRef);
634
+ const customContext = {
635
+ ...tableSettings,
636
+ type: tableSettings?.type ?? exports.DEFAULT_TABLE_TYPE
637
+ };
638
+ // Get the table definition to apply decorators to
639
+ const tableDefinition = appSchema.definitions[tableDefinitionKey];
640
+ // Get the creation mode definition
641
+ const creationModeDefinitionKey = (0, common_1.getFacetDefinitionKey)(ux_specification_types_1.DefinitionName.TableCreationModeLR, facetDefinitionKey);
642
+ const creationModeDefinition = appSchema.definitions[creationModeDefinitionKey] ??
643
+ (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.TableCreationModeLR, facetDefinitionKey, appSchema);
644
+ // Set up the $ref for creationMode property
645
+ if (tableDefinition?.properties?.[ux_specification_types_1.PropertyName.creationMode]) {
646
+ const creationModeProperty = tableDefinition.properties[ux_specification_types_1.PropertyName.creationMode];
647
+ creationModeProperty.$ref = (0, common_1.getFacetDefinitionLink)(ux_specification_types_1.DefinitionName.TableCreationModeLR, facetDefinitionKey);
648
+ }
649
+ // Apply decorators to the Table definition (creationMode, analyticalConfiguration, popinLayout)
650
+ // Create a Table instance and apply its decorators to the specific table definition
651
+ new controls_1.Table().init(customContext, tableDefinition);
652
+ // Apply decorators to the TableCreationModeLR definition (creationFields, createInPlace, isCreateEnabled)
653
+ new controls_1.TableCreationModeLR().init(customContext, creationModeDefinition);
654
+ // Apply analyticalConfiguration decorators only when the property is specified in manifest
655
+ const hasAnalyticalConfiguration = tableSettings?.analyticalConfiguration !== undefined;
656
+ if (!hasAnalyticalConfiguration) {
657
+ return;
658
+ }
659
+ if (viewKey) {
660
+ // Multi-view: create a view-specific definition to isolate decorator messages per view
661
+ (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewAnalyticalConfiguration, viewKey, appSchema);
662
+ const definitionKey = (0, common_1.getFacetDefinitionKey)(ux_specification_types_1.DefinitionName.ViewAnalyticalConfiguration, viewKey);
663
+ const definition = appSchema.definitions[definitionKey];
664
+ if (definition) {
665
+ new controls_1.ViewAnalyticalConfiguration().init(customContext, definition);
666
+ // Update the table's $ref to point to the view-specific definition
667
+ const analyticalConfigProp = tableDefinition?.properties?.[ux_specification_types_1.PropertyName.analyticalConfiguration];
668
+ if (analyticalConfigProp) {
669
+ analyticalConfigProp.$ref = (0, common_1.getFacetDefinitionLink)(ux_specification_types_1.DefinitionName.ViewAnalyticalConfiguration, viewKey);
670
+ }
671
+ }
672
+ }
673
+ else {
674
+ // Single table: use the shared definition
675
+ const definition = appSchema.definitions[ux_specification_types_1.DefinitionName.AnalyticalConfiguration];
676
+ if (definition) {
677
+ new controls_1.AnalyticalConfiguration().init(customContext, definition);
678
+ }
679
+ }
680
+ }
687
681
  /**
688
682
  * Modifies the app schema, adds the right line item settings as derived from the visualization.
689
683
  *
@@ -695,11 +689,13 @@ function applyLRSchemaAdjustments(schemaAdjustmentParameters) {
695
689
  * @param generateParameters.serviceAVT - OData service AVT information
696
690
  * @param generateParameters.entityType - entity type of the current page
697
691
  * @param {Page} page - Represents the page in the application's structure where the view line items are to be added.
692
+ * @param app - the application object containing manifest and other app-specific information.
698
693
  * @param {ExtensionLogger} logger - Logger for recording informational or error messages during the schema adjustment process.
699
694
  */
700
- function addViewLineItems(inputParameters, viewsDefinition, visualization, templateAnnotation, { serviceAVT, entityType }, page, logger) {
695
+ function addViewLineItems(inputParameters, viewsDefinition, visualization, templateAnnotation, { serviceAVT, entityType }, page, app, logger) {
701
696
  const tableId = `${ux_specification_types_1.DefinitionName.LRTableView}<${inputParameters.viewKey}>`;
702
- const viewId = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${inputParameters.viewKey}`;
697
+ const schemaIdForColumns = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${inputParameters.viewKey}`;
698
+ const schemaIdForActions = `${ux_specification_types_1.DefinitionName.Actions}<${schemaIdForColumns}>`;
703
699
  const lrTableView = (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.LRTableView, inputParameters.viewKey, inputParameters.appSchema);
704
700
  delete lrTableView[ux_specification_types_1.SchemaTag.isViewNode];
705
701
  lrTableView[ux_specification_types_1.SchemaTag.annotationPath] = inputParameters.targetAnnotation;
@@ -710,14 +706,14 @@ function addViewLineItems(inputParameters, viewsDefinition, visualization, templ
710
706
  lrTableView['entitySet'] = inputParameters.entitySet;
711
707
  }
712
708
  //Copy toolbar
713
- (0, common_1.addDefinitionRef)(lrTableView.properties.toolBar, ux_specification_types_1.DefinitionName.ToolBar, viewId);
709
+ (0, common_1.addDefinitionRef)(lrTableView.properties.toolBar, ux_specification_types_1.DefinitionName.ToolBar, schemaIdForColumns);
714
710
  const title = `Table View (key: ${inputParameters.viewKey})`;
715
711
  viewsDefinition.properties[inputParameters.viewKey] = {
716
712
  $ref: `${common_1.DEFINITION_LINK_PREFIX}${tableId}`,
717
713
  description: inputParameters.title || title,
718
714
  title
719
715
  };
720
- (0, common_1.addDefinitionRef)(lrTableView.properties.columns, viewId);
716
+ (0, common_1.addDefinitionRef)(lrTableView.properties.columns, schemaIdForColumns);
721
717
  lrTableView.properties.annotationPath[ux_specification_types_1.SchemaTag.hidden] = true;
722
718
  lrTableView.properties.index[ux_specification_types_1.SchemaTag.hidden] = true;
723
719
  lrTableView.properties.entitySet[ux_specification_types_1.SchemaTag.hidden] = true;
@@ -728,30 +724,29 @@ function addViewLineItems(inputParameters, viewsDefinition, visualization, templ
728
724
  lineItemAnnotation: inputParameters.targetEntityType?.annotations.UI[annotationTerm],
729
725
  entityType: inputParameters.targetEntityType,
730
726
  oDataServiceAVT: serviceAVT,
731
- lineItemId: viewId
727
+ lineItemId: schemaIdForColumns
732
728
  };
733
729
  (0, utils_2.addLineItemsTypeToSchema)(dataForLineItem, ux_specification_types_1.DefinitionName.ViewTableColumn, ux_specification_types_1.DefinitionName.ViewCustomColumn, ux_specification_types_1.DefinitionName.ViewCustomAction);
734
730
  // Table toolbar actions with custom actions
735
731
  const sectionIdPrefix = inputParameters.entitySet ? `/${inputParameters.entitySet}/` : '';
736
732
  const sectionIdInManifest = `${sectionIdPrefix}@${"com.sap.vocabularies.UI.v1.LineItem" /* UIAnnotationTerms.LineItem */}${visualization.split(ux_specification_types_1.Visualization.LineItem)[1]}`;
737
- const schemaIdForToolbarActions = `${ux_specification_types_1.DefinitionName.Actions}<${viewId}>`;
738
- const customActionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomAction}<${viewId}>`;
733
+ const customActionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomAction}<${schemaIdForColumns}>`;
739
734
  // Anchor selection
740
- (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomActionPosition, viewId, inputParameters.appSchema);
741
- const customActionPositionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomActionPosition}<${viewId}>`;
735
+ (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomActionPosition, schemaIdForColumns, inputParameters.appSchema);
736
+ const customActionPositionDefinitionKey = `${ux_specification_types_1.DefinitionName.ViewCustomActionPosition}<${schemaIdForColumns}>`;
742
737
  const customActionDefinition = inputParameters.appSchema.definitions[customActionDefinitionKey];
743
738
  customActionDefinition.properties.position.$ref =
744
739
  `${common_1.DEFINITION_LINK_PREFIX}${customActionPositionDefinitionKey}`;
745
740
  const schemaAdjustmentParameters = {
746
741
  logger: logger,
747
742
  appSchema: inputParameters.appSchema,
748
- v4Page: page.getPage(),
743
+ v4Page: page.target,
749
744
  tableDefinitionKey: tableId,
750
- facetDefinitionKey: viewId,
745
+ facetDefinitionKey: schemaIdForColumns,
751
746
  viewKey: inputParameters.viewKey,
752
747
  entityType: inputParameters.targetEntityType || entityType,
753
748
  dataForLineItem,
754
- sectionActionsDefinitionKey: schemaIdForToolbarActions,
749
+ sectionActionsDefinitionKey: schemaIdForActions,
755
750
  scopedCustomActionDefinitionKey: customActionDefinitionKey,
756
751
  customActionDefinitionName: ux_specification_types_1.DefinitionName.ViewCustomAction,
757
752
  sectionIdInManifest,
@@ -760,14 +755,16 @@ function addViewLineItems(inputParameters, viewsDefinition, visualization, templ
760
755
  applyLRSchemaAdjustments(schemaAdjustmentParameters);
761
756
  // Add "manifestPath" for table properties
762
757
  addManifestPathsToPropertiesLR(inputParameters.appSchema, ux_specification_types_1.DefinitionName.LRTableView, lrTableView, {
763
- pageName: page.getPage().id,
764
- manifest: page.getApp().manifest,
758
+ pageName: page.target.id,
759
+ manifest: app.manifest,
765
760
  targetAnnotation: inputParameters.targetAnnotation,
766
761
  viewConfig: {
767
762
  key: inputParameters.viewKey,
768
763
  entitySet: inputParameters.entitySet
769
764
  }
770
- });
765
+ }, true);
766
+ // Add "manifestPath" for view actions
767
+ (0, ListReportUtils_1.addManifestPathsToDefinitionPropertiesLR)(inputParameters.appSchema, page.target.id, schemaIdForActions, app.getManifest(), inputParameters.targetAnnotation, inputParameters.entitySet);
771
768
  }
772
769
  /**
773
770
  * Adds the schema tags to a given view.
@@ -792,17 +789,20 @@ function addTagsToView(viewsDefinition, viewKey, namespace, view) {
792
789
  * @param commonInputParameters - list of input parameters as collected by the calling instance
793
790
  * @param visualization - visualization of the annotation
794
791
  * @param v4Page - the given page in manifest
792
+ * @param manifest - The application manifest
795
793
  * @param logger - extension logger
796
794
  */
797
- function addViewCustomExtensions(commonInputParameters, visualization, v4Page, logger) {
798
- const sectionId = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${commonInputParameters.viewKey}`;
795
+ function addViewCustomExtensions(commonInputParameters, visualization, v4Page, manifest, logger) {
796
+ const schemaIdForColumns = `${ux_specification_types_1.DefinitionName.LineItemsOfView}::${commonInputParameters.viewKey}`;
799
797
  const sectionIdPrefix = commonInputParameters.entitySet ? `/${commonInputParameters.entitySet}/` : '';
800
798
  const sectionIdInManifest = `${sectionIdPrefix}@${"com.sap.vocabularies.UI.v1.LineItem" /* UIAnnotationTerms.LineItem */}${visualization.split(ux_specification_types_1.Visualization.LineItem)[1]}`;
801
- const viewColumnDefinition = (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomColumn, sectionId, commonInputParameters.appSchema);
802
- (0, common_1.addDefinitionRef)(viewColumnDefinition.properties.position, ux_specification_types_1.DefinitionName.ViewPosition, sectionId);
803
- (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewPosition, sectionId, commonInputParameters.appSchema);
804
- (0, utils_2.addCustomColumnDefinition)(commonInputParameters.appSchema, v4Page, logger, `${ux_specification_types_1.DefinitionName.ViewCustomColumn}<${sectionId}>`, sectionId, sectionIdInManifest);
805
- (0, utils_2.addFragmentEnumForAnchor)(commonInputParameters.appSchema, sectionId, v4Page, `${ux_specification_types_1.DefinitionName.ViewPosition}<${sectionId}>`, sectionIdInManifest);
799
+ const viewColumnDefinition = (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewCustomColumn, schemaIdForColumns, commonInputParameters.appSchema);
800
+ (0, common_1.addDefinitionRef)(viewColumnDefinition.properties.position, ux_specification_types_1.DefinitionName.ViewPosition, schemaIdForColumns);
801
+ (0, common_1.parseSchemaDefinition)(ux_specification_types_1.DefinitionName.ViewPosition, schemaIdForColumns, commonInputParameters.appSchema);
802
+ (0, utils_2.addCustomColumnDefinition)(commonInputParameters.appSchema, v4Page, logger, `${ux_specification_types_1.DefinitionName.ViewCustomColumn}<${schemaIdForColumns}>`, schemaIdForColumns, sectionIdInManifest);
803
+ (0, utils_2.addFragmentEnumForAnchor)(commonInputParameters.appSchema, schemaIdForColumns, v4Page, `${ux_specification_types_1.DefinitionName.ViewPosition}<${schemaIdForColumns}>`, sectionIdInManifest);
804
+ // Add "manifestPath" for view columns
805
+ (0, ListReportUtils_1.addManifestPathsToDefinitionPropertiesLR)(commonInputParameters.appSchema, v4Page.id, schemaIdForColumns, manifest, commonInputParameters.targetAnnotation, commonInputParameters.entitySet);
806
806
  // Remove generic position
807
807
  if (commonInputParameters.appSchema.definitions.Position) {
808
808
  delete commonInputParameters.appSchema.definitions.Position;
@@ -819,18 +819,19 @@ function addViewCustomExtensions(commonInputParameters, visualization, v4Page, l
819
819
  * @param generateParameters.entityType - entity type of the current page
820
820
  * @param generateParameters.logger - extension logger
821
821
  * @param page - the current page object
822
+ * @param app - the application object containing manifest and other app-specific information.
822
823
  * @param uiAnnotations - UI annotations of the given entityType
823
824
  * @param view - the given view
824
825
  */
825
- function addLRViewParts(visualization, viewsDefinition, commonInputParameters, { serviceAVT, entityType, logger }, page, uiAnnotations, view) {
826
+ function addLRViewParts(visualization, viewsDefinition, commonInputParameters, { serviceAVT, entityType, logger }, page, app, uiAnnotations, view) {
826
827
  if (visualization?.indexOf(ux_specification_types_1.Visualization.LineItem) > -1) {
827
828
  //Add Line item view
828
- addViewLineItems(commonInputParameters, viewsDefinition, visualization, commonInputParameters.targetAnnotation, { serviceAVT, entityType }, page, logger);
829
- addViewCustomExtensions(commonInputParameters, visualization, page.getPage(), logger);
829
+ addViewLineItems(commonInputParameters, viewsDefinition, visualization, commonInputParameters.targetAnnotation, { serviceAVT, entityType }, page, app, logger);
830
+ addViewCustomExtensions(commonInputParameters, visualization, page.target, app.getManifest(), logger);
830
831
  }
831
832
  else if (visualization?.indexOf('Chart') > -1) {
832
833
  //Add Chart view
833
- addViewChart(commonInputParameters, uiAnnotations, commonInputParameters.appSchema, viewsDefinition, commonInputParameters.viewKey, commonInputParameters.title, page);
834
+ addViewChart(commonInputParameters, uiAnnotations, commonInputParameters.appSchema, viewsDefinition, commonInputParameters.viewKey, commonInputParameters.title, page, app);
834
835
  }
835
836
  else if (view['template']) {
836
837
  const titleOnHover = view['label'] || `Custom View (key: ${commonInputParameters.viewKey})`;
@@ -854,17 +855,16 @@ function addLRViewParts(visualization, viewsDefinition, commonInputParameters, {
854
855
  /**
855
856
  * Checks for the default annotation path to use for LR table.
856
857
  *
857
- * @param v4Page - actual page in the manifest
858
- * @param entityType - actual entity type (AVT information)
859
- * @param templateType - The type of template being used (e.g., ListReportObjectPageV4 or AnalyticalListPageV4)
858
+ * @param page - the current page object
860
859
  * @returns annotation term
861
860
  */
862
- function getDefaultAnnotationPath(v4Page, entityType, templateType) {
863
- if (v4Page.options.settings?.views?.paths && templateType === ux_specification_types_1.TemplateType.ListReportObjectPageV4) {
861
+ function getDefaultAnnotationPath(page) {
862
+ const { entity: { type: entityType }, template: { type: templateType }, target } = page;
863
+ if (target?.options?.settings?.views?.paths && templateType === ux_specification_types_1.TemplateType.ListReportObjectPageV4) {
864
864
  return;
865
865
  }
866
- if (v4Page.options.settings?.defaultTemplateAnnotationPath) {
867
- return v4Page.options.settings.defaultTemplateAnnotationPath;
866
+ if (target?.options?.settings?.defaultTemplateAnnotationPath) {
867
+ return target?.options?.settings.defaultTemplateAnnotationPath;
868
868
  }
869
869
  if (templateType === ux_specification_types_1.TemplateType.ListReportObjectPageV4) {
870
870
  return (entityType?.annotations.UI?.SelectionPresentationVariant?.term ||
@@ -904,8 +904,9 @@ function addHeaderActions(appSchema, v4Page, logger) {
904
904
  * @param definitionName - The name of the definition/class whose properties are being processed.
905
905
  * @param definition - The definition object containing property schemas.
906
906
  * @param pathParams - Additional context required to compute manifest paths.
907
+ * @param handleRelative - A flag indicating whether to use relative paths for definition properties.
907
908
  */
908
- function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, pathParams) {
909
+ function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, pathParams, handleRelative = false) {
909
910
  let targetAnnotation = undefined;
910
911
  if (pathParams.targetAnnotation) {
911
912
  const annotationParts = pathParams.targetAnnotation?.split('/');
@@ -921,8 +922,13 @@ function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, p
921
922
  }
922
923
  (0, utils_1.addManifestPathsToProperties)(appSchema, definitionName, definition, {
923
924
  ...pathParams,
924
- pathsParts: [targetAnnotation, '', targetAnnotation, pathParams.viewConfig]
925
- });
925
+ pathsParts: [
926
+ pathParams.sectionId ? undefined : targetAnnotation,
927
+ pathParams.columnKey ? pathParams.columnKey : '',
928
+ targetAnnotation,
929
+ pathParams.viewConfig
930
+ ]
931
+ }, handleRelative);
926
932
  }
927
933
  /**
928
934
  * Adds 'manifestPath' to static nodes in schema.
@@ -931,6 +937,8 @@ function addManifestPathsToPropertiesLR(appSchema, definitionName, definition, p
931
937
  * @param pathParams - Additional context required to compute manifest paths.
932
938
  */
933
939
  function addManifestPathsToStaticNodes(appSchema, pathParams) {
940
+ // Add "manifestPath" for current page
941
+ appSchema['manifestPath'] = (0, utils_1.getPageManifestPath)(pathParams);
934
942
  // Root level - rules stored on page class level
935
943
  addManifestPathsToPropertiesLR(appSchema, ux_specification_types_1.PageTypeV4.ListReport, appSchema, pathParams);
936
944
  // Other definitions
@@ -955,17 +963,24 @@ class ListReportPage {
955
963
  * @param contextPath - context path of the page
956
964
  */
957
965
  constructor(generateParameters, schema, templateName, contextPath) {
958
- this.schema = new AppSchema_1.AppSchema(schema);
959
- this.app = (0, App_1.createApp)(generateParameters.manifest, generateParameters.serviceAVT, generateParameters.logger);
960
- this.page = new Page_1.Page(this.app, { name: templateName, type: generateParameters.templateType }, generateParameters.entitySet, contextPath);
966
+ const template = { name: templateName, type: generateParameters.templateType };
967
+ this.appSchema = new sync_rules_1.AppSchema(schema);
968
+ this.app = (0, sync_rules_1.createApp)(generateParameters.manifest, generateParameters.serviceAVT, generateParameters.logger);
969
+ this.page = new sync_rules_1.Page(this.app, template, generateParameters.entitySet, generateParameters.entityType, contextPath);
970
+ this.logger = this.app.logger;
971
+ this.page.addConfig({
972
+ isALP: template.type === ux_specification_types_1.TemplateType.AnalyticalListPageV4,
973
+ views: this.page.target?.options?.settings.views,
974
+ defaultAnnotation: getDefaultAnnotationPath(this.page)
975
+ });
961
976
  }
962
977
  /**
963
978
  * Cleans up the schema by hiding specific properties and removing unnecessary definitions.
964
979
  */
965
980
  cleanup() {
966
- this.schema.hide(this.schema.getRootProperty([ux_specification_types_1.PropertyName.defaultTemplateAnnotationPath]));
967
- this.schema.cleanup(['GenericColumns', 'Action']);
968
- (0, common_1.updatePropertyIndices)(this.schema.getSchema(), ROOT_PROPERTIES_ORDER);
981
+ this.appSchema.hide(this.appSchema.getRootProperty([ux_specification_types_1.PropertyName.defaultTemplateAnnotationPath]));
982
+ this.appSchema.cleanup(['GenericColumns', 'Action']);
983
+ (0, common_1.updatePropertyIndices)(this.appSchema.get(), ROOT_PROPERTIES_ORDER);
969
984
  }
970
985
  /**
971
986
  * Generates the finalized schema for the List Report page.
@@ -973,20 +988,33 @@ class ListReportPage {
973
988
  * @returns The finalized schema for List Report page
974
989
  */
975
990
  generate() {
976
- new ListReportUtils_1.GeneralListReportSettings(this.schema, this.page, this.app.getLogger()).instantiate();
977
- if (!this.page.getPage()) {
978
- return this.schema.finalize();
991
+ const params = {
992
+ appSchema: this.appSchema,
993
+ app: this.app,
994
+ page: this.page,
995
+ logger: this.logger
996
+ };
997
+ new ListReportUtils_1.GeneralListReportSettings(params).init();
998
+ if (!this.page.target) {
999
+ return this.appSchema.get();
979
1000
  }
980
- new ListReportUtils_1.Header(this.schema, this.page, this.app.getLogger()).instantiate();
981
- new ListReportUtils_1.FilterBar(this.schema, this.page, this.app.getLogger()).instantiate();
982
- new ListReportUtils_1.TableAndViews(this.schema, this.page, this.app.getLogger()).instantiate();
1001
+ new controls_1.Header(params).init();
1002
+ new controls_1.HeaderActions(params).init();
1003
+ new controls_1.CustomHeaderAction(params).init();
1004
+ new ListReportUtils_1.FilterBar(params).init();
1005
+ new ListReportUtils_1.TableAndViews(params).init();
983
1006
  // Add "manifestPath" for properties in static nodes
984
- addManifestPathsToStaticNodes(this.schema.getSchema(), {
985
- pageName: this.page.getPage().id,
1007
+ addManifestPathsToStaticNodes(this.appSchema.get(), {
1008
+ pageName: this.page.target.id,
986
1009
  manifest: this.app.getManifest()
987
1010
  });
1011
+ // Add "manifestPath" for custom header actions
1012
+ const definitionNames = [ux_specification_types_1.DefinitionName.HeaderActions];
1013
+ definitionNames.forEach((definitionName) => {
1014
+ (0, ListReportUtils_1.addManifestPathsToDefinitionPropertiesLR)(this.appSchema.get(), this.page.target.id, definitionName, this.app.getManifest());
1015
+ });
988
1016
  this.cleanup();
989
- return this.schema.finalize();
1017
+ return this.appSchema.get();
990
1018
  }
991
1019
  }
992
1020
  /**
@@ -1003,7 +1031,7 @@ function generateListReportSchemaV4(generateParameters, genericSchema, templateN
1003
1031
  const listReport = new ListReportPage(generateParameters, genericSchema, templateName, contextPath);
1004
1032
  if (!listReport.app.getManifest()) {
1005
1033
  listReport.cleanup();
1006
- return listReport.schema.finalize();
1034
+ return listReport.appSchema.get();
1007
1035
  }
1008
1036
  return listReport.generate();
1009
1037
  }