@sap/ux-specification 1.90.11 → 1.90.15
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.
- package/CHANGELOG.md +74 -4
- package/dist/documentation/v2/v2-AnalyticalListPage.html +1 -1
- package/dist/documentation/v2/v2-ApplicationV2.html +1 -1
- package/dist/documentation/v2/v2-ListReport.html +1 -1
- package/dist/documentation/v2/v2-ObjectPage.html +1 -1
- package/dist/documentation/v2/v2-OverviewPage.html +1 -1
- package/dist/documentation/v4/v4-AnalyticalListPage.html +1 -1
- package/dist/documentation/v4/v4-ApplicationV4.html +1 -1
- package/dist/documentation/v4/v4-ListReport.html +1 -1
- package/dist/documentation/v4/v4-ObjectPage.html +1 -1
- package/dist/index-min.js +1 -1
- package/dist/schemas/v2/AnalyticalListPageConfig.json +90 -13
- package/dist/schemas/v2/ListReportConfig.json +93 -16
- package/dist/schemas/v2/ObjectPageConfig.json +274 -60
- package/dist/schemas/v2/OverviewPageConfig.json +0 -28
- package/dist/schemas/v4/ObjectPageConfig.json +22 -0
- package/dist/scripts/to-json-schema.js +11 -2
- package/dist/scripts/to-json-schema.js.map +1 -1
- package/dist/specification/v2/index-min.js +1 -1
- package/dist/src/apiTypes.d.ts +8 -0
- package/dist/src/specification/v2/controls/Card.d.ts +0 -8
- package/dist/src/specification/v2/controls/Card.js.map +1 -1
- package/dist/src/specification/v2/controls/{DataField.d.ts → Field.d.ts} +2 -2
- package/dist/src/specification/v2/controls/{DataField.js → Field.js} +1 -1
- package/dist/src/specification/v2/controls/Field.js.map +1 -0
- package/dist/src/specification/v2/controls/FormAction.d.ts +27 -0
- package/dist/src/specification/v2/controls/FormAction.js +3 -0
- package/dist/src/specification/v2/controls/FormAction.js.map +1 -0
- package/dist/src/specification/v2/controls/ObjectPageFooter.d.ts +11 -0
- package/dist/src/specification/v2/controls/ObjectPageFooter.js +3 -0
- package/dist/src/specification/v2/controls/ObjectPageFooter.js.map +1 -0
- package/dist/src/specification/v2/controls/ObjectPageForm.d.ts +4 -5
- package/dist/src/specification/v2/controls/ObjectPageHeader.d.ts +2 -5
- package/dist/src/specification/v2/controls/ObjectPageHeader.js +0 -5
- package/dist/src/specification/v2/controls/ObjectPageHeader.js.map +1 -1
- package/dist/src/specification/v2/controls/ObjectPageHeaderAction.d.ts +20 -0
- package/dist/src/specification/v2/controls/ObjectPageSection.d.ts +25 -15
- package/dist/src/specification/v2/controls/ObjectPageSection.js.map +1 -1
- package/dist/src/specification/v2/controls/ObjectPageTable.d.ts +10 -5
- package/dist/src/specification/v2/controls/ObjectPageTable.js.map +1 -1
- package/dist/src/specification/v2/controls/Table.d.ts +7 -18
- package/dist/src/specification/v2/controls/Table.js +0 -15
- package/dist/src/specification/v2/controls/Table.js.map +1 -1
- package/dist/src/specification/v2/controls/ToolBar.d.ts +2 -6
- package/dist/src/specification/v2/controls/index.d.ts +4 -1
- package/dist/src/specification/v2/controls/index.js +0 -1
- package/dist/src/specification/v2/controls/index.js.map +1 -1
- package/dist/src/specification/v2/pages/ObjectPageConfig.d.ts +2 -1
- package/dist/src/specification/v4/controls/ObjectPageFooter.d.ts +11 -0
- package/dist/src/specification/v4/controls/ObjectPageFooter.js +3 -0
- package/dist/src/specification/v4/controls/ObjectPageFooter.js.map +1 -0
- package/dist/src/specification/v4/controls/index.d.ts +1 -0
- package/dist/src/specification/v4/pages/ObjectPageConfig.d.ts +2 -1
- package/dist/src/specification/v4/webapp/manifest/sapUi5.d.ts +2 -1
- package/dist/src/specification/v4/webapp/manifest/sapUi5.js.map +1 -1
- package/dist/src/sync/common/decoration/control.js +34 -19
- package/dist/src/sync/common/decoration/control.js.map +1 -1
- package/dist/src/sync/common/generate/objectPage.d.ts +31 -2
- package/dist/src/sync/common/generate/objectPage.js +195 -29
- package/dist/src/sync/common/generate/objectPage.js.map +1 -1
- package/dist/src/sync/common/import/utils.d.ts +6 -0
- package/dist/src/sync/common/import/utils.js +21 -0
- package/dist/src/sync/common/import/utils.js.map +1 -1
- package/dist/src/sync/common/importProject.js +64 -62
- package/dist/src/sync/common/importProject.js.map +1 -1
- package/dist/src/sync/common/types.d.ts +5 -2
- package/dist/src/sync/common/types.js +4 -0
- package/dist/src/sync/common/types.js.map +1 -1
- package/dist/src/sync/common/utils.d.ts +5 -3
- package/dist/src/sync/common/utils.js +94 -94
- package/dist/src/sync/common/utils.js.map +1 -1
- package/dist/src/sync/v2/application.d.ts +1 -0
- package/dist/src/sync/v2/application.js +3 -0
- package/dist/src/sync/v2/application.js.map +1 -1
- package/dist/src/sync/v2/export/controls/Card.d.ts +0 -2
- package/dist/src/sync/v2/export/controls/Card.js +0 -14
- package/dist/src/sync/v2/export/controls/Card.js.map +1 -1
- package/dist/src/sync/v2/export/controls/Field.d.ts +4 -0
- package/dist/src/sync/v2/export/controls/{DataField.js → Field.js} +6 -6
- package/dist/src/sync/v2/export/controls/Field.js.map +1 -0
- package/dist/src/sync/v2/export/controls/FilterBar.d.ts +1 -2
- package/dist/src/sync/v2/export/controls/FilterBar.js +2 -4
- package/dist/src/sync/v2/export/controls/FilterBar.js.map +1 -1
- package/dist/src/sync/v2/export/controls/FormAction.d.ts +16 -0
- package/dist/src/sync/v2/export/controls/FormAction.js +95 -0
- package/dist/src/sync/v2/export/controls/FormAction.js.map +1 -0
- package/dist/src/sync/v2/export/controls/ObjectPageChart.d.ts +4 -1
- package/dist/src/sync/v2/export/controls/ObjectPageChart.js +13 -0
- package/dist/src/sync/v2/export/controls/ObjectPageChart.js.map +1 -1
- package/dist/src/sync/v2/export/controls/ObjectPageHeader.d.ts +3 -2
- package/dist/src/sync/v2/export/controls/ObjectPageHeader.js.map +1 -1
- package/dist/src/sync/v2/export/controls/ObjectPageHeaderAction.d.ts +5 -0
- package/dist/src/sync/v2/export/controls/ObjectPageHeaderAction.js +42 -3
- package/dist/src/sync/v2/export/controls/ObjectPageHeaderAction.js.map +1 -1
- package/dist/src/sync/v2/export/controls/ObjectPageSectionsV2.d.ts +32 -0
- package/dist/src/sync/v2/export/controls/ObjectPageSectionsV2.js +144 -0
- package/dist/src/sync/v2/export/controls/ObjectPageSectionsV2.js.map +1 -0
- package/dist/src/sync/v2/export/controls/ObjectPageTable.d.ts +7 -5
- package/dist/src/sync/v2/export/controls/ObjectPageTable.js +16 -4
- package/dist/src/sync/v2/export/controls/ObjectPageTable.js.map +1 -1
- package/dist/src/sync/v2/export/controls/Table.d.ts +14 -5
- package/dist/src/sync/v2/export/controls/Table.js +84 -37
- package/dist/src/sync/v2/export/controls/Table.js.map +1 -1
- package/dist/src/sync/v2/export/controls/TableColumn.d.ts +3 -2
- package/dist/src/sync/v2/export/controls/TableColumn.js.map +1 -1
- package/dist/src/sync/v2/export/controls/index.d.ts +3 -1
- package/dist/src/sync/v2/export/controls/index.js +3 -1
- package/dist/src/sync/v2/export/controls/index.js.map +1 -1
- package/dist/src/sync/v2/export/export.js +125 -86
- package/dist/src/sync/v2/export/export.js.map +1 -1
- package/dist/src/sync/v2/generate/analyticalListReport.d.ts +3 -9
- package/dist/src/sync/v2/generate/analyticalListReport.js +12 -13
- package/dist/src/sync/v2/generate/analyticalListReport.js.map +1 -1
- package/dist/src/sync/v2/generate/generate.js +28 -6
- package/dist/src/sync/v2/generate/generate.js.map +1 -1
- package/dist/src/sync/v2/generate/listReport.d.ts +3 -10
- package/dist/src/sync/v2/generate/listReport.js +7 -12
- package/dist/src/sync/v2/generate/listReport.js.map +1 -1
- package/dist/src/sync/v2/generate/objectPage.d.ts +3 -10
- package/dist/src/sync/v2/generate/objectPage.js +201 -148
- package/dist/src/sync/v2/generate/objectPage.js.map +1 -1
- package/dist/src/sync/v2/generate/utils.d.ts +1 -2
- package/dist/src/sync/v2/generate/utils.js +8 -3
- package/dist/src/sync/v2/generate/utils.js.map +1 -1
- package/dist/src/sync/v2/import/pages/objectPage.js +176 -102
- package/dist/src/sync/v2/import/pages/objectPage.js.map +1 -1
- package/dist/src/sync/v2/types.d.ts +12 -0
- package/dist/src/sync/v2/types.js +11 -0
- package/dist/src/sync/v2/types.js.map +1 -1
- package/dist/src/sync/v4/application.js +10 -10
- package/dist/src/sync/v4/application.js.map +1 -1
- package/dist/src/sync/v4/export/export.js +156 -134
- package/dist/src/sync/v4/export/export.js.map +1 -1
- package/dist/src/sync/v4/export/manifest.js +96 -76
- package/dist/src/sync/v4/export/manifest.js.map +1 -1
- package/dist/src/sync/v4/generate/generate.js +10 -2
- package/dist/src/sync/v4/generate/generate.js.map +1 -1
- package/dist/src/sync/v4/generate/objectPage.d.ts +3 -6
- package/dist/src/sync/v4/generate/objectPage.js +92 -93
- package/dist/src/sync/v4/generate/objectPage.js.map +1 -1
- package/dist/src/sync/v4/import/app/appProvider.js +108 -80
- package/dist/src/sync/v4/import/app/appProvider.js.map +1 -1
- package/dist/src/sync/v4/import/fragment.js +41 -46
- package/dist/src/sync/v4/import/fragment.js.map +1 -1
- package/dist/src/sync/v4/utils/StableIdHelper.d.ts +0 -3
- package/dist/src/sync/v4/utils/StableIdHelper.js +9 -11
- package/dist/src/sync/v4/utils/StableIdHelper.js.map +1 -1
- package/dist/src/sync/v4/utils/utils.js +36 -21
- package/dist/src/sync/v4/utils/utils.js.map +1 -1
- package/package.json +14 -15
- package/dist/src/specification/v2/controls/DataField.js.map +0 -1
- package/dist/src/sync/v2/export/controls/DataField.d.ts +0 -4
- package/dist/src/sync/v2/export/controls/DataField.js.map +0 -1
|
@@ -47,12 +47,102 @@ function initializeRouting(manifestRouting) {
|
|
|
47
47
|
}
|
|
48
48
|
return routing;
|
|
49
49
|
}
|
|
50
|
+
function setTargetOptions(target, navigationKey, association) {
|
|
51
|
+
if (!target.options) {
|
|
52
|
+
target.options = createTargetOption();
|
|
53
|
+
}
|
|
54
|
+
if (!target.options.settings) {
|
|
55
|
+
target.options.settings = {};
|
|
56
|
+
}
|
|
57
|
+
if (!target.options.settings.navigation) {
|
|
58
|
+
target.options.settings.navigation = {};
|
|
59
|
+
}
|
|
60
|
+
target.options.settings.navigation[navigationKey] = {
|
|
61
|
+
detail: {
|
|
62
|
+
route: association
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function calculateQueryPattern(parts, pageType) {
|
|
67
|
+
let pattern = '';
|
|
68
|
+
parts.forEach((part, index) => {
|
|
69
|
+
let key = '';
|
|
70
|
+
if (pageType !== v4_1.PageTypeV4.ListReport) {
|
|
71
|
+
// Keys should be like - 'key', 'key2', 'key3'
|
|
72
|
+
key = `({key${index ? index + 1 : ''}})`;
|
|
73
|
+
}
|
|
74
|
+
pattern += `${pattern ? '/' : ''}${part}${key}`;
|
|
75
|
+
});
|
|
76
|
+
return pattern;
|
|
77
|
+
}
|
|
78
|
+
function handlePageNavigation(page, pages, target, routing) {
|
|
79
|
+
if (page.navigation) {
|
|
80
|
+
for (const association in page.navigation) {
|
|
81
|
+
const parts = page.navigation[association].split('.');
|
|
82
|
+
const pageType = pages[association] && pages[association].pageType;
|
|
83
|
+
const pattern = calculateQueryPattern(parts, pageType);
|
|
84
|
+
// Handle list report page different as there can be duplicate last part
|
|
85
|
+
let navigationKey = parts[parts.length - 1];
|
|
86
|
+
if (pageType === v4_1.PageTypeV4.ListReport ||
|
|
87
|
+
(pageType === v4_1.PageTypeV4.CustomPage && !pages[association].entitySet && !navigationKey)) {
|
|
88
|
+
navigationKey = association;
|
|
89
|
+
}
|
|
90
|
+
if (navigationKey) {
|
|
91
|
+
setTargetOptions(target, navigationKey, association);
|
|
92
|
+
}
|
|
93
|
+
if (!routing.routes.some((routingRoute) => routingRoute.name === association)) {
|
|
94
|
+
// Make sure there no route duplication
|
|
95
|
+
routing.routes.push(createRoute(association, association, `${pattern}${Constants.OptionalQuery}`));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function removeDeletedPages(routing, pages) {
|
|
101
|
+
for (const id in routing.targets) {
|
|
102
|
+
if (!pages || !pages[id]) {
|
|
103
|
+
// Remove target
|
|
104
|
+
delete routing.targets[id];
|
|
105
|
+
// Remove routes
|
|
106
|
+
const index = routing.routes.findIndex((route) => route.name === id);
|
|
107
|
+
if (index !== -1) {
|
|
108
|
+
routing.routes.splice(index, 1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function transferEntitySet(page, target) {
|
|
114
|
+
var _a, _b, _c, _d, _e, _f;
|
|
115
|
+
if (page.entitySet) {
|
|
116
|
+
if (!target.options) {
|
|
117
|
+
target.options = createTargetOption(page.entitySet, page.variantManagement);
|
|
118
|
+
}
|
|
119
|
+
target.options.settings.entitySet = page.entitySet;
|
|
120
|
+
// We handle custom sections from scratch in exportObjectPageV4- clear 'sections' before handling
|
|
121
|
+
if ((_d = (_c = (_b = (_a = target === null || target === void 0 ? void 0 : target.options) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.sections) {
|
|
122
|
+
target.options.settings.content.body.sections = {};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
(_f = (_e = target.options) === null || _e === void 0 ? void 0 : _e.settings) === null || _f === void 0 ? true : delete _f.entitySet;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function updateRoute(routing, id, page) {
|
|
130
|
+
const route = routing.routes.find((routingRoute) => routingRoute.name === id);
|
|
131
|
+
if (route) {
|
|
132
|
+
if (page.defaultLayoutType) {
|
|
133
|
+
route.layout = page.defaultLayoutType;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
delete route.layout;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
50
140
|
/**
|
|
51
141
|
* Transform Pages(from app.json) to UI5 routing configuration(manifest.json)
|
|
52
142
|
* @param routing UI5 routing configuration
|
|
53
143
|
*/
|
|
54
144
|
function transformRoutingV4(homePage, pages, manifest) {
|
|
55
|
-
var _a, _b
|
|
145
|
+
var _a, _b;
|
|
56
146
|
const routing = initializeRouting(manifest[v4_1.ManifestSection.ui5].routing);
|
|
57
147
|
// add default route
|
|
58
148
|
if (homePage && !routing.routes.some((route) => route.name === homePage)) {
|
|
@@ -95,93 +185,23 @@ function transformRoutingV4(homePage, pages, manifest) {
|
|
|
95
185
|
}
|
|
96
186
|
});
|
|
97
187
|
}
|
|
98
|
-
|
|
99
|
-
if (!target.options) {
|
|
100
|
-
target.options = createTargetOption(page.entitySet, page.variantManagement);
|
|
101
|
-
}
|
|
102
|
-
target.options.settings.entitySet = page.entitySet;
|
|
103
|
-
// We handle custom sections from scratch in exportObjectPageV4- clear 'sections' before handling
|
|
104
|
-
if ((_d = (_c = (_b = (_a = target === null || target === void 0 ? void 0 : target.options) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.sections) {
|
|
105
|
-
target.options.settings.content.body.sections = {};
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
(_f = (_e = target.options) === null || _e === void 0 ? void 0 : _e.settings) === null || _f === void 0 ? true : delete _f.entitySet;
|
|
110
|
-
}
|
|
188
|
+
transferEntitySet(page, target);
|
|
111
189
|
if (target && !page.controlAggregation) {
|
|
112
190
|
delete target.contextPattern;
|
|
113
191
|
delete target.controlAggregation;
|
|
114
192
|
}
|
|
115
|
-
if ((
|
|
193
|
+
if ((_b = (_a = target === null || target === void 0 ? void 0 : target.options) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.navigation) {
|
|
116
194
|
// We handle page 'navigation' from scratch - clear 'navigation' before handling
|
|
117
195
|
target.options.settings.navigation = {};
|
|
118
196
|
}
|
|
119
197
|
// Handle page 'navigation'
|
|
120
|
-
|
|
121
|
-
for (const association in page.navigation) {
|
|
122
|
-
let pattern = '';
|
|
123
|
-
const parts = page.navigation[association].split('.');
|
|
124
|
-
const pageType = pages[association] && pages[association].pageType;
|
|
125
|
-
parts.forEach((part, index) => {
|
|
126
|
-
let key = '';
|
|
127
|
-
if (pageType !== v4_1.PageTypeV4.ListReport) {
|
|
128
|
-
// Keys should be like - 'key', 'key2', 'key3'
|
|
129
|
-
key = `({key${index ? index + 1 : ''}})`;
|
|
130
|
-
}
|
|
131
|
-
pattern += `${pattern ? '/' : ''}${part}${key}`;
|
|
132
|
-
});
|
|
133
|
-
// Handle list report page different as there can be duplicate last part
|
|
134
|
-
let navigationKey = parts[parts.length - 1];
|
|
135
|
-
if (pageType === v4_1.PageTypeV4.ListReport ||
|
|
136
|
-
(pageType === v4_1.PageTypeV4.CustomPage && !pages[association].entitySet && !navigationKey)) {
|
|
137
|
-
navigationKey = association;
|
|
138
|
-
}
|
|
139
|
-
if (navigationKey) {
|
|
140
|
-
if (!target.options) {
|
|
141
|
-
target.options = createTargetOption();
|
|
142
|
-
}
|
|
143
|
-
if (!target.options.settings) {
|
|
144
|
-
target.options.settings = {};
|
|
145
|
-
}
|
|
146
|
-
if (!target.options.settings.navigation) {
|
|
147
|
-
target.options.settings.navigation = {};
|
|
148
|
-
}
|
|
149
|
-
target.options.settings.navigation[navigationKey] = {
|
|
150
|
-
detail: {
|
|
151
|
-
route: association
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
if (!routing.routes.some((route) => route.name === association)) {
|
|
156
|
-
// Make sure there no route duplication
|
|
157
|
-
routing.routes.push(createRoute(association, association, `${pattern}${Constants.OptionalQuery}`));
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
198
|
+
handlePageNavigation(page, pages, target, routing);
|
|
161
199
|
// Update associated route with layout information
|
|
162
|
-
|
|
163
|
-
if (route) {
|
|
164
|
-
if (page.defaultLayoutType) {
|
|
165
|
-
route.layout = page.defaultLayoutType;
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
delete route.layout;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
200
|
+
updateRoute(routing, id, page);
|
|
171
201
|
routing.targets[id] = target;
|
|
172
202
|
}
|
|
173
203
|
// Remove deleted pages
|
|
174
|
-
|
|
175
|
-
if (!pages || !pages[id]) {
|
|
176
|
-
// Remove target
|
|
177
|
-
delete routing.targets[id];
|
|
178
|
-
// Remove routes
|
|
179
|
-
const index = routing.routes.findIndex((route) => route.name === id);
|
|
180
|
-
if (index !== -1) {
|
|
181
|
-
routing.routes.splice(index, 1);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
204
|
+
removeDeletedPages(routing, pages);
|
|
185
205
|
return routing;
|
|
186
206
|
}
|
|
187
207
|
exports.transformRoutingV4 = transformRoutingV4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../../src/sync/v4/export/manifest.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../../src/sync/v4/export/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const utils_1 = require("../../common/utils");
|
|
4
4
|
const _1 = require(".");
|
|
5
|
+
const __1 = require("../../..");
|
|
5
6
|
/**
|
|
6
7
|
* Generates the app specific schema of an object page out of the generic schema for the same page.
|
|
7
8
|
* Generic types are replaced by information from the app specific annotations.
|
|
@@ -15,8 +16,15 @@ const _1 = require(".");
|
|
|
15
16
|
* @returns the app specific JSON schema
|
|
16
17
|
*/
|
|
17
18
|
function generateObjectPageInterfaceV4(genericSchema, entitySet, annotations, manifest, logger) {
|
|
18
|
-
const
|
|
19
|
-
|
|
19
|
+
const serviceAVT = utils_1.parseAndMergeAndConvert(annotations, logger);
|
|
20
|
+
const generateParameters = {
|
|
21
|
+
fioriElementsVersion: __1.FioriElementsVersion.v4,
|
|
22
|
+
manifest,
|
|
23
|
+
fragments: [],
|
|
24
|
+
serviceAVT,
|
|
25
|
+
logger
|
|
26
|
+
};
|
|
27
|
+
return _1.generateObjectPageSchemaV4(generateParameters, genericSchema, entitySet);
|
|
20
28
|
}
|
|
21
29
|
exports.generateObjectPageInterfaceV4 = generateObjectPageInterfaceV4;
|
|
22
30
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../src/sync/v4/generate/generate.ts"],"names":[],"mappings":";;AACA,8CAA6D;AAC7D,wBAA2E;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../../src/sync/v4/generate/generate.ts"],"names":[],"mappings":";;AACA,8CAA6D;AAC7D,wBAA2E;AAE3E,gCAAgD;AAEhD;;;;;;;;;;;GAWG;AACH,SAAgB,6BAA6B,CACzC,aAAqB,EACrB,SAAiB,EACjB,WAAuB,EACvB,QAAgB,EAChB,MAAwB;IAExB,MAAM,UAAU,GAAG,+BAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,kBAAkB,GAAgC;QACpD,oBAAoB,EAAE,wBAAoB,CAAC,EAAE;QAC7C,QAAQ;QACR,SAAS,EAAE,EAAE;QACb,UAAU;QACV,MAAM;KACT,CAAC;IACF,OAAO,6BAA0B,CAAC,kBAAkB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AACpF,CAAC;AAhBD,sEAgBC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,6BAA6B,CACzC,aAAqB,EACrB,aAAqB,EACrB,WAAuB,EACvB,MAAwB;IAExB,MAAM,eAAe,GAAG,+BAAuB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAErF,OAAO,6BAA0B,CAAC,aAAa,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AACzG,CAAC;AAVD,sEAUC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ExtensionLogger } from '../../../v4';
|
|
1
|
+
import { GenerateAppSchemaParameters } from '../../../v4';
|
|
3
2
|
/**
|
|
4
3
|
* Generates an app specific schema out of the generic schema.
|
|
5
4
|
* Generic types are replaced by information from the app specific annotations.
|
|
5
|
+
* @param {GenerateAppSchemaParameters} generateParameters - list of API input parameters
|
|
6
6
|
* @param genericSchema - generic JSON schema of an object page
|
|
7
7
|
* @param entityTypeName - the base entity type of the given page
|
|
8
|
-
* @param {ConverterOutput} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
9
|
-
* @param manifest - manifest.json of the app
|
|
10
|
-
* @param {ExtensionLogger} logger - Logger class for logging messages
|
|
11
8
|
*
|
|
12
9
|
* @returns the app specific JSON schema
|
|
13
10
|
*/
|
|
14
|
-
export declare function generateObjectPageSchemaV4(genericSchema: object, entityTypeName: string
|
|
11
|
+
export declare function generateObjectPageSchemaV4(generateParameters: GenerateAppSchemaParameters, genericSchema: object, entityTypeName: string): object;
|
|
@@ -10,57 +10,33 @@ const utils_1 = require("../utils/utils");
|
|
|
10
10
|
const i18next_1 = __importDefault(require("i18next"));
|
|
11
11
|
const extensionLogger_1 = require("../../../extensionLogger");
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* @param {object} appSchema Schema of the app
|
|
13
|
+
* Callback for adding a single action to headerActions of V4
|
|
16
14
|
* @param {EntityType} entityType - current entity type
|
|
17
|
-
* @param {
|
|
15
|
+
* @param {object} appSchema Schema of the app
|
|
16
|
+
* @param actionAnnotation - annotation as present in AVT ConverterOutput
|
|
17
|
+
* @param headerActions - list of header actions, to be enhanced
|
|
18
18
|
*/
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
function addHeaderActionCallBackV4(entityType, appSchema, actionAnnotation, headerActions, oDataServiceAVT) {
|
|
20
|
+
return (item, index) => {
|
|
21
|
+
if ((!item['Determining'] && item.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" /* DataFieldForAction */) ||
|
|
22
|
+
item.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation" /* DataFieldForIntentBasedNavigation */) {
|
|
23
|
+
const action = common_2.replaceAlias(item.Action, oDataServiceAVT);
|
|
24
|
+
const { actionName, actionId } = common_2.getActionNameAndId(action, entityType);
|
|
25
|
+
const description = item.Label || actionName;
|
|
26
|
+
const actionDefinitionKey = `HeaderAction<${common_2.prepareRef(actionId)}>`;
|
|
27
|
+
const convertedIdentification = actionAnnotation.fullyQualifiedName.replace(`@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`, `/@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`);
|
|
28
|
+
appSchema['definitions'][actionDefinitionKey] = {
|
|
29
|
+
isViewNode: true,
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {},
|
|
32
|
+
description: description,
|
|
33
|
+
annotationPath: `/${convertedIdentification}/${index}`
|
|
34
|
+
};
|
|
35
|
+
headerActions.properties[actionId] = {
|
|
36
|
+
$ref: `${common_2.DEFINITION_LINK_PREFIX}${actionDefinitionKey}`
|
|
37
|
+
};
|
|
38
|
+
}
|
|
24
39
|
};
|
|
25
|
-
delete appSchema['definitions']['GenericActions'];
|
|
26
|
-
delete appSchema['definitions']['ObjectPageHeader<GenericActions>'];
|
|
27
|
-
const alias = common_2.findAlias(v4_1.UIVOCABULARY, oDataServiceAVT);
|
|
28
|
-
const actionAnnotation = alias &&
|
|
29
|
-
entityType.annotations &&
|
|
30
|
-
entityType.annotations[alias] &&
|
|
31
|
-
entityType.annotations[alias].Identification;
|
|
32
|
-
if (actionAnnotation) {
|
|
33
|
-
// Add action to configuration
|
|
34
|
-
appSchema['definitions']['ObjectPageHeader'].properties['actions'] = {
|
|
35
|
-
$ref: `${common_2.DEFINITION_LINK_PREFIX}HeaderActions`
|
|
36
|
-
};
|
|
37
|
-
const headerActions = (appSchema['definitions']['HeaderActions'] = {
|
|
38
|
-
type: 'object',
|
|
39
|
-
properties: {},
|
|
40
|
-
description: 'Actions',
|
|
41
|
-
additionalProperties: false,
|
|
42
|
-
isViewNode: true,
|
|
43
|
-
annotationPath: actionAnnotation.fullyQualifiedName
|
|
44
|
-
});
|
|
45
|
-
actionAnnotation.forEach((item, index) => {
|
|
46
|
-
if ((!item['Determining'] && item.$Type === 'com.sap.vocabularies.UI.v1.DataFieldForAction') ||
|
|
47
|
-
item.$Type === 'com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation') {
|
|
48
|
-
const { actionName, actionId } = common_2.getActionNameAndId(item.Action, entityType);
|
|
49
|
-
const description = item.Label || actionName;
|
|
50
|
-
const actionDefinitionKey = `HeaderAction<${actionId}>`;
|
|
51
|
-
appSchema['definitions'][actionDefinitionKey] = {
|
|
52
|
-
isViewNode: true,
|
|
53
|
-
type: 'object',
|
|
54
|
-
properties: {},
|
|
55
|
-
description: description,
|
|
56
|
-
annotationPath: `${actionAnnotation.fullyQualifiedName}/${index}`
|
|
57
|
-
};
|
|
58
|
-
headerActions.properties[actionId] = {
|
|
59
|
-
$ref: `${common_2.DEFINITION_LINK_PREFIX}${actionDefinitionKey}`
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
40
|
}
|
|
65
41
|
/**
|
|
66
42
|
* Adds definitions for line items in object page sections to the app schema
|
|
@@ -92,7 +68,7 @@ function handleLineItem(facetId, appSchema, facet, facets, oDataServiceAVT) {
|
|
|
92
68
|
appSchema['definitions'][idForTable].properties['toolBar'].$ref = `${common_2.DEFINITION_LINK_PREFIX}ObjectPageToolBar<${facetId}>`;
|
|
93
69
|
for (const facetKey in facets) {
|
|
94
70
|
if (facets[facetKey].base === 'LineItem' && facetKey.includes(navigationProperty)) {
|
|
95
|
-
utils_1.addLineItemsType(appSchema, facets[facetKey]
|
|
71
|
+
utils_1.addLineItemsType(appSchema, facets[facetKey].target, facets[facetKey].entityType, oDataServiceAVT, 'ObjectPageTableColumn', facetId);
|
|
96
72
|
}
|
|
97
73
|
}
|
|
98
74
|
}
|
|
@@ -106,6 +82,7 @@ function handleLineItem(facetId, appSchema, facet, facets, oDataServiceAVT) {
|
|
|
106
82
|
*/
|
|
107
83
|
function addSection(facets, facetKey, sections, appSchema, oDataServiceAVT, sectionPrefix) {
|
|
108
84
|
const facet = facets[facetKey];
|
|
85
|
+
const definitionKey = facetKey.replace('#', '::');
|
|
109
86
|
if (facet.base === 'CollectionFacet') {
|
|
110
87
|
//handle collection facets
|
|
111
88
|
sections['properties'][facetKey] = common_2.createSectionWithoutProperties(facet, facetKey);
|
|
@@ -127,12 +104,12 @@ function addSection(facets, facetKey, sections, appSchema, oDataServiceAVT, sect
|
|
|
127
104
|
else if (facet.base === 'LineItem' && sectionPrefix === v4_1.SectionType.Section) {
|
|
128
105
|
//handle reference facet (if comprising line item)
|
|
129
106
|
sections['properties'][facetKey] = {
|
|
130
|
-
$ref: `${common_2.DEFINITION_LINK_PREFIX}ObjectPage${sectionPrefix}TableV4<${
|
|
107
|
+
$ref: `${common_2.DEFINITION_LINK_PREFIX}ObjectPage${sectionPrefix}TableV4<${definitionKey}>`
|
|
131
108
|
};
|
|
132
|
-
handleLineItem(
|
|
109
|
+
handleLineItem(definitionKey, appSchema, facet, facets, oDataServiceAVT);
|
|
133
110
|
}
|
|
134
111
|
else if (facet.base === common_2.FacetBase.Form || facet.base === common_2.FacetBase.Identification) {
|
|
135
|
-
const formDefinitionKey = `ObjectPage${sectionPrefix}Form<${
|
|
112
|
+
const formDefinitionKey = `ObjectPage${sectionPrefix}Form<${definitionKey}>`;
|
|
136
113
|
sections['properties'][facetKey] = {
|
|
137
114
|
$ref: `${common_2.DEFINITION_LINK_PREFIX}${formDefinitionKey}`
|
|
138
115
|
};
|
|
@@ -140,13 +117,13 @@ function addSection(facets, facetKey, sections, appSchema, oDataServiceAVT, sect
|
|
|
140
117
|
common_2.addSectionTitleAndDescription(facet, appSchema['definitions'][formDefinitionKey], facetKey);
|
|
141
118
|
appSchema['definitions'][formDefinitionKey]['annotationPath'] = facet.annotationPath;
|
|
142
119
|
appSchema['definitions'][formDefinitionKey]['isViewNode'] = true;
|
|
143
|
-
const withActions = facet.base === common_2.FacetBase.Identification ? false : true;
|
|
144
|
-
common_2.handleForm(sectionPrefix, facet, appSchema['definitions'][formDefinitionKey], appSchema,
|
|
120
|
+
const withActions = facet.base === common_2.FacetBase.Identification && facetKey.indexOf('#') < 0 ? false : true;
|
|
121
|
+
common_2.handleForm(sectionPrefix, facet, appSchema['definitions'][formDefinitionKey], appSchema, common_1.FioriElementsVersion.v4, withActions);
|
|
145
122
|
}
|
|
146
123
|
else if (facet.base === common_2.FacetBase.DataPoint ||
|
|
147
124
|
facet.base === common_2.FacetBase.Address ||
|
|
148
125
|
facet.base === common_2.FacetBase.Contact) {
|
|
149
|
-
const facetDefinitionKey = `ObjectPage${sectionPrefix}${facet.base}<${
|
|
126
|
+
const facetDefinitionKey = `ObjectPage${sectionPrefix}${facet.base}<${definitionKey}>`;
|
|
150
127
|
sections['properties'][facetKey] = {
|
|
151
128
|
$ref: `${common_2.DEFINITION_LINK_PREFIX}${facetDefinitionKey}`
|
|
152
129
|
};
|
|
@@ -161,15 +138,15 @@ function addSection(facets, facetKey, sections, appSchema, oDataServiceAVT, sect
|
|
|
161
138
|
}
|
|
162
139
|
/**
|
|
163
140
|
* Derives the sections from the UI.Facets annotation and adds them to the schema
|
|
141
|
+
* @param {GenerateAppSchemaParameters} generateParameters - list of API input parameters
|
|
164
142
|
* @param {object} appSchema - application specific JSON schema
|
|
165
|
-
* @param {
|
|
143
|
+
* @param {EntityType} entityType - current entity type
|
|
144
|
+
* @param {string} entitySetName - name of the current entity set
|
|
166
145
|
* @param pages {SapUiAppPageV4[]} - list of (manifest) pages
|
|
167
|
-
* @param {ConverterOutput} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
168
|
-
* @param {ExtensionLogger} logger - Logger class for logging messages
|
|
169
146
|
*/
|
|
170
|
-
function addSections(appSchema, entityType, entitySetName, pages
|
|
147
|
+
function addSections(generateParameters, appSchema, entityType, entitySetName, pages) {
|
|
171
148
|
// Get facet annotations
|
|
172
|
-
const facets = common_2.getObjectPageFacets(entityType,
|
|
149
|
+
const facets = common_2.getObjectPageFacets(entityType, generateParameters.serviceAVT, common_1.FioriElementsVersion.v4, generateParameters.logger);
|
|
173
150
|
if (!facets) {
|
|
174
151
|
delete appSchema['definitions']['ObjectPageSubSections'];
|
|
175
152
|
return;
|
|
@@ -180,7 +157,7 @@ function addSections(appSchema, entityType, entitySetName, pages, oDataServiceAV
|
|
|
180
157
|
if (((_b = (_a = pages[element].options) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.entitySet) === entitySetName &&
|
|
181
158
|
pages[element].name === v4_1.FE_TEMPLATE_V4_OBJECT_PAGE) {
|
|
182
159
|
for (const facetKey in facets) {
|
|
183
|
-
addSection(facets, facetKey, sections, appSchema,
|
|
160
|
+
addSection(facets, facetKey, sections, appSchema, generateParameters.serviceAVT, v4_1.SectionType.Section);
|
|
184
161
|
}
|
|
185
162
|
}
|
|
186
163
|
});
|
|
@@ -191,15 +168,15 @@ function addSections(appSchema, entityType, entitySetName, pages, oDataServiceAV
|
|
|
191
168
|
}
|
|
192
169
|
/**
|
|
193
170
|
* Derives the header sections from the UI.HeaderFacets annotation and adds them to the schema
|
|
171
|
+
* @param {GenerateAppSchemaParameters} generateParameters - list of API input parameters
|
|
194
172
|
* @param {object} appSchema - application specific JSON schema
|
|
195
|
-
* @param {
|
|
173
|
+
* @param {EntityType} entityType - current entity type
|
|
174
|
+
* @param {string} entitySetName - name of the current entity set
|
|
196
175
|
* @param pages {SapUiAppPageV4[]} - list of (manifest) pages
|
|
197
|
-
* @param {ConverterOutput} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
198
|
-
* @param {ExtensionLogger} logger - Logger class for logging messages
|
|
199
176
|
*/
|
|
200
|
-
function addHeaderSections(appSchema, entityType, entitySetName, pages
|
|
177
|
+
function addHeaderSections(generateParameters, appSchema, entityType, entitySetName, pages) {
|
|
201
178
|
// Get facet annotations
|
|
202
|
-
const facets = common_2.getObjectPageHeaderFacets(entityType,
|
|
179
|
+
const facets = common_2.getObjectPageHeaderFacets(entityType, generateParameters.serviceAVT, common_1.FioriElementsVersion.v4, generateParameters.logger);
|
|
203
180
|
const sections = appSchema['definitions']['HeaderSections'];
|
|
204
181
|
sections.properties = {};
|
|
205
182
|
sections.additionalProperties = false;
|
|
@@ -211,14 +188,10 @@ function addHeaderSections(appSchema, entityType, entitySetName, pages, oDataSer
|
|
|
211
188
|
if (((_b = (_a = pages[element].options) === null || _a === void 0 ? void 0 : _a.settings) === null || _b === void 0 ? void 0 : _b.entitySet) === entitySetName &&
|
|
212
189
|
pages[element].name === v4_1.FE_TEMPLATE_V4_OBJECT_PAGE) {
|
|
213
190
|
for (const facetKey in facets) {
|
|
214
|
-
addSection(facets, facetKey, sections, appSchema,
|
|
191
|
+
addSection(facets, facetKey, sections, appSchema, generateParameters.serviceAVT, v4_1.SectionType.HeaderSection);
|
|
215
192
|
}
|
|
216
193
|
}
|
|
217
194
|
});
|
|
218
|
-
// Custom sections as part of sections - still open if can be added the same way
|
|
219
|
-
/*if (appSchema['definitions']['CustomSections']) {
|
|
220
|
-
sections.properties = { ...sections.properties, ...appSchema['definitions']['CustomSections'].properties };
|
|
221
|
-
}*/
|
|
222
195
|
//delete generic definitions
|
|
223
196
|
delete appSchema['definitions']['ObjectPageHeaderSectionForm'];
|
|
224
197
|
delete appSchema['definitions']['ObjectPageHeaderSectionChart'];
|
|
@@ -228,20 +201,20 @@ function addHeaderSections(appSchema, entityType, entitySetName, pages, oDataSer
|
|
|
228
201
|
}
|
|
229
202
|
/**
|
|
230
203
|
* Adds the related facets keys 'enum' to the app schema
|
|
204
|
+
* @param {GenerateAppSchemaParameters} generateParameters - list of API input parameters
|
|
231
205
|
* @param {object} schema - app specific schema that potentially gets enhanced
|
|
232
206
|
* @param {EntityType} entityType - current entity type
|
|
233
207
|
* @param {string} entitySetName - entity set of the actual (object) page
|
|
234
208
|
* @param {SapUiAppPageV4[]} pages - list of all pages
|
|
235
|
-
* @param {ConverterOutput} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
236
209
|
*/
|
|
237
|
-
function addRelatedFacetKeysType(schema, entityType, entitySetName, pages
|
|
210
|
+
function addRelatedFacetKeysType(generateParameters, schema, entityType, entitySetName, pages) {
|
|
238
211
|
Object.keys(pages).forEach((element) => {
|
|
239
212
|
if (pages[element].options &&
|
|
240
213
|
pages[element].options.settings &&
|
|
241
214
|
pages[element].options.settings.entitySet === entitySetName &&
|
|
242
215
|
pages[element].name === v4_1.FE_TEMPLATE_V4_OBJECT_PAGE) {
|
|
243
216
|
// Find sections from annotation
|
|
244
|
-
const facetSections = common_2.getObjectPageFacetSection(entityType,
|
|
217
|
+
const facetSections = common_2.getObjectPageFacetSection(entityType, generateParameters.serviceAVT, generateParameters.logger);
|
|
245
218
|
// Find custom sections ids from manifest
|
|
246
219
|
const page = pages[element];
|
|
247
220
|
if (page.options &&
|
|
@@ -268,27 +241,43 @@ function addRelatedFacetKeysType(schema, entityType, entitySetName, pages, oData
|
|
|
268
241
|
}
|
|
269
242
|
});
|
|
270
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Add Object Page Header to app-specific schema
|
|
246
|
+
*
|
|
247
|
+
* @param {object} appSchema Schema of the app
|
|
248
|
+
* @param {EntityType} entityType - current entity type
|
|
249
|
+
* @param {ConverterOutput} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
250
|
+
* @param entitySet - current entity set
|
|
251
|
+
* @param manifest - manifest.json of the app
|
|
252
|
+
* @param {ExtensionLogger} logger - Logger class for logging messages
|
|
253
|
+
*/
|
|
254
|
+
function addHeader(generateParameters, appSchema, entityType, entitySet, pages) {
|
|
255
|
+
common_2.addCommonHeaderSchema(appSchema, entityType);
|
|
256
|
+
// Add header actions
|
|
257
|
+
common_2.addHeaderActions(appSchema, entityType, generateParameters.serviceAVT, addHeaderActionCallBackV4);
|
|
258
|
+
// Add header sections
|
|
259
|
+
appSchema['definitions']['HeaderSections']['annotationPath'] = `/${entitySet.entityType.fullyQualifiedName}/@${"com.sap.vocabularies.UI.v1.HeaderFacets" /* HeaderFacets */}`;
|
|
260
|
+
addHeaderSections(generateParameters, appSchema, entityType, entitySet.name, pages);
|
|
261
|
+
}
|
|
271
262
|
/**
|
|
272
263
|
* Generates an app specific schema out of the generic schema.
|
|
273
264
|
* Generic types are replaced by information from the app specific annotations.
|
|
265
|
+
* @param {GenerateAppSchemaParameters} generateParameters - list of API input parameters
|
|
274
266
|
* @param genericSchema - generic JSON schema of an object page
|
|
275
267
|
* @param entityTypeName - the base entity type of the given page
|
|
276
|
-
* @param {ConverterOutput} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
277
|
-
* @param manifest - manifest.json of the app
|
|
278
|
-
* @param {ExtensionLogger} logger - Logger class for logging messages
|
|
279
268
|
*
|
|
280
269
|
* @returns the app specific JSON schema
|
|
281
270
|
*/
|
|
282
|
-
function generateObjectPageSchemaV4(genericSchema, entityTypeName
|
|
283
|
-
var _a
|
|
271
|
+
function generateObjectPageSchemaV4(generateParameters, genericSchema, entityTypeName) {
|
|
272
|
+
var _a;
|
|
284
273
|
const appSchema = JSON.parse(JSON.stringify(genericSchema));
|
|
285
274
|
// Change reference to generated sections
|
|
286
275
|
appSchema['properties']['sections'] = {
|
|
287
276
|
$ref: common_2.DEFINITION_LINK_PREFIX + 'Sections'
|
|
288
277
|
};
|
|
289
|
-
const entitySet =
|
|
278
|
+
const entitySet = (_a = generateParameters.serviceAVT.entitySets) === null || _a === void 0 ? void 0 : _a.find((es) => es.entityType.name === entityTypeName);
|
|
290
279
|
if (!entitySet) {
|
|
291
|
-
extensionLogger_1.log(logger, {
|
|
280
|
+
extensionLogger_1.log(generateParameters.logger, {
|
|
292
281
|
severity: "error" /* Error */,
|
|
293
282
|
message: i18next_1.default.t('NOENTITYSET4NAME', { entityType: entityTypeName }),
|
|
294
283
|
location: {
|
|
@@ -297,8 +286,9 @@ function generateObjectPageSchemaV4(genericSchema, entityTypeName, oDataServiceA
|
|
|
297
286
|
});
|
|
298
287
|
}
|
|
299
288
|
const entityType = entitySet === null || entitySet === void 0 ? void 0 : entitySet.entityType;
|
|
300
|
-
if (!manifest[common_1.ManifestSection.ui5].routing ||
|
|
301
|
-
|
|
289
|
+
if (!generateParameters.manifest[common_1.ManifestSection.ui5].routing ||
|
|
290
|
+
!generateParameters.manifest[common_1.ManifestSection.ui5].routing.targets) {
|
|
291
|
+
extensionLogger_1.log(generateParameters.logger, {
|
|
302
292
|
severity: "error" /* Error */,
|
|
303
293
|
message: i18next_1.default.t('NOROUTING'),
|
|
304
294
|
location: {
|
|
@@ -315,18 +305,27 @@ function generateObjectPageSchemaV4(genericSchema, entityTypeName, oDataServiceA
|
|
|
315
305
|
description: 'Sections'
|
|
316
306
|
};
|
|
317
307
|
if (entitySet) {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
308
|
+
const pages = generateParameters.manifest[common_1.ManifestSection.ui5].routing.targets;
|
|
309
|
+
if (!pages) {
|
|
310
|
+
extensionLogger_1.log(generateParameters.logger, {
|
|
311
|
+
severity: "error" /* Error */,
|
|
312
|
+
message: i18next_1.default.t('NOPAGES', { appId: generateParameters.manifest['sap.app']['id'] }),
|
|
313
|
+
location: {
|
|
314
|
+
path: v4_1.MANIFESTPATH,
|
|
315
|
+
range: [common_1.ManifestSection.generic]
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
return appSchema;
|
|
319
|
+
}
|
|
320
|
+
// Add Header
|
|
321
|
+
addHeader(generateParameters, appSchema, entityType, entitySet, pages);
|
|
325
322
|
// Add sections
|
|
326
|
-
appSchema['definitions']['Sections']['annotationPath'] = `/${entitySet.entityType.fullyQualifiedName}
|
|
327
|
-
addSections(appSchema, entityType, entitySet.name,
|
|
323
|
+
appSchema['definitions']['Sections']['annotationPath'] = `/${entitySet.entityType.fullyQualifiedName}/@${"com.sap.vocabularies.UI.v1.Facets" /* Facets */}`;
|
|
324
|
+
addSections(generateParameters, appSchema, entityType, entitySet.name, pages);
|
|
328
325
|
// Custom Section facets
|
|
329
|
-
addRelatedFacetKeysType(appSchema, entityType, entitySet.name,
|
|
326
|
+
addRelatedFacetKeysType(generateParameters, appSchema, entityType, entitySet.name, pages);
|
|
327
|
+
// Add Footer (actions only)
|
|
328
|
+
common_2.addFooterActions(appSchema, entityType, generateParameters.serviceAVT);
|
|
330
329
|
}
|
|
331
330
|
// Delete generic definitions from schema
|
|
332
331
|
delete appSchema['definitions']['GenericSections'];
|