@sap/ux-specification 1.71.72 → 1.71.74
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/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/index-min.js +37 -37
- package/dist/index-min.js.map +2 -2
- package/dist/src/sync/common/generate/objectPage.d.ts +6 -4
- package/dist/src/sync/common/generate/objectPage.d.ts.map +1 -1
- package/dist/src/sync/common/generate/objectPage.js +290 -83
- package/dist/src/sync/common/generate/objectPage.js.map +1 -1
- package/dist/src/sync/common/generate/utils.d.ts +1 -1
- package/dist/src/sync/common/generate/utils.d.ts.map +1 -1
- package/dist/src/sync/common/generate/utils.js +13 -5
- package/dist/src/sync/common/generate/utils.js.map +1 -1
- package/dist/src/sync/common/utils.d.ts +3 -3
- package/dist/src/sync/common/utils.d.ts.map +1 -1
- package/dist/src/sync/common/utils.js +29 -12
- package/dist/src/sync/common/utils.js.map +1 -1
- package/dist/src/sync/v2/generate/objectPage.d.ts.map +1 -1
- package/dist/src/sync/v2/generate/objectPage.js +15 -8
- package/dist/src/sync/v2/generate/objectPage.js.map +1 -1
- package/dist/src/sync/v2/generate/utils.d.ts +1 -1
- package/dist/src/sync/v2/generate/utils.d.ts.map +1 -1
- package/dist/src/sync/v2/generate/utils.js +21 -18
- package/dist/src/sync/v2/generate/utils.js.map +1 -1
- package/package.json +6 -6
|
@@ -5,12 +5,14 @@ import type { Definition } from 'typescript-json-schema';
|
|
|
5
5
|
/**
|
|
6
6
|
* Adds definitions for forms in object page sections to the app schema
|
|
7
7
|
* @param {SectionType} sectionType - prefix to distinguish Section and HeaderSection
|
|
8
|
-
* @param {FacetConfig} section -
|
|
8
|
+
* @param {FacetConfig} section - section definition, as prepared from the annotations
|
|
9
9
|
* @param {object} appSchemaSection - current definition of facet or section in the JSON schema
|
|
10
10
|
* @param {object} appSchema - app specific schema that gets enhanced
|
|
11
11
|
* @param {FioriElementsVersion} version - Fiori Elements version
|
|
12
|
+
* @param {string} facetKey - facet key
|
|
13
|
+
* @returns {string | undefined} target id of form
|
|
12
14
|
*/
|
|
13
|
-
export declare function handleForm(sectionType: SectionType, section: FacetConfig, appSchemaSection: Definition, appSchema: Definition, version: FioriElementsVersion,
|
|
15
|
+
export declare function handleForm(sectionType: SectionType, section: FacetConfig, appSchemaSection: Definition, appSchema: Definition, version: FioriElementsVersion, facetKey: string): string | undefined;
|
|
14
16
|
/**
|
|
15
17
|
* Replaces an alias in an annotation ID or reference, based on the AVT references' list
|
|
16
18
|
* @param annotationIdentifier - annotation ID or reference
|
|
@@ -21,12 +23,12 @@ export declare function replaceAlias(annotationIdentifier: string, oDataServiceA
|
|
|
21
23
|
/**
|
|
22
24
|
* Common routine to determine the name and the ID of a header action
|
|
23
25
|
* @param action - action as given by AVT
|
|
24
|
-
* @param entityType - entity type by AVT
|
|
25
26
|
* @returns an object comprising action name and action id
|
|
26
27
|
*/
|
|
27
|
-
export declare function getActionNameAndId(
|
|
28
|
+
export declare function getActionNameAndId(item: any, oDataServiceAVT: ConvertedMetadata): {
|
|
28
29
|
actionName: string;
|
|
29
30
|
actionId: string;
|
|
31
|
+
namespace: string;
|
|
30
32
|
};
|
|
31
33
|
/**
|
|
32
34
|
* Add Object Page Footer Action Buttons to app-specific schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objectPage.d.ts","sourceRoot":"","sources":["../../../../../src/sync/common/generate/objectPage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI3F,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"objectPage.d.ts","sourceRoot":"","sources":["../../../../../src/sync/common/generate/objectPage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAI3F,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE5F,OAAO,EAGH,oBAAoB,EAGpB,WAAW,EAEd,MAAM,6BAA6B,CAAC;AASrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA2WzD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACtB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,UAAU,EAC5B,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAwDpB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,iBAAiB,GAAG,MAAM,CAarG;AAED;;;;GAIG;AAEH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,GAAG,EACT,eAAe,EAAE,iBAAiB,GACnC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA0B7D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,2BAA2B,GAAG,IAAI,CA+D7G;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,iBAAiB,EAClC,uBAAuB,KAAA,GACxB,IAAI,CAoCN;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAUzF;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAMlH"}
|
|
@@ -3,7 +3,40 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.determineEntitySetOfFacet = exports.addCommonHeaderSchema = exports.addHeaderActions = exports.addFooterActions = exports.getActionNameAndId = exports.replaceAlias = exports.handleForm = void 0;
|
|
4
4
|
const StableIdHelper_1 = require("../../v4/utils/StableIdHelper");
|
|
5
5
|
const ux_specification_types_1 = require("@sap/ux-specification-types");
|
|
6
|
+
const ux_specification_types_2 = require("@sap/ux-specification-types");
|
|
6
7
|
const __1 = require("..");
|
|
8
|
+
/**
|
|
9
|
+
* Copies the field properties from the generic definition to the specific field definition
|
|
10
|
+
* @param {FioriElementsVersion} version - Fiori Elements version
|
|
11
|
+
* @param {object} appSchema - App schema in general
|
|
12
|
+
* @param {DataFieldAbstractTypes} field - field definition in parser output (AVT)
|
|
13
|
+
* @param {string} fieldDefinition - the unique ID for the given field definition
|
|
14
|
+
*/
|
|
15
|
+
function copyFieldProperties(version, appSchema, field, fieldDefinition) {
|
|
16
|
+
if (version === ux_specification_types_2.FioriElementsVersion.v4 && appSchema['definitions']['Field']) {
|
|
17
|
+
switch (field.$Type) {
|
|
18
|
+
case "com.sap.vocabularies.UI.v1.DataField" /* DataField */:
|
|
19
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" /* DataFieldForAnnotation */:
|
|
20
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath" /* DataFieldWithNavigationPath */:
|
|
21
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithUrl" /* DataFieldWithUrl */: {
|
|
22
|
+
appSchema.definitions[fieldDefinition].properties =
|
|
23
|
+
appSchema.definitions.Field['properties'];
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (version === ux_specification_types_2.FioriElementsVersion.v2 && appSchema['definitions']['Field']) {
|
|
29
|
+
switch (field.$Type) {
|
|
30
|
+
case "com.sap.vocabularies.UI.v1.DataField" /* DataField */:
|
|
31
|
+
case "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" /* DataFieldForAnnotation */:
|
|
32
|
+
case "com.sap.vocabularies.UI.v1.DataFieldWithUrl" /* DataFieldWithUrl */: {
|
|
33
|
+
appSchema.definitions[fieldDefinition].properties =
|
|
34
|
+
appSchema.definitions.Field['properties'];
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
7
40
|
/**
|
|
8
41
|
* Determines the name for a field definition in app schema
|
|
9
42
|
* @param {FioriElementsVersion} version - Fiori Elements version
|
|
@@ -13,16 +46,102 @@ const __1 = require("..");
|
|
|
13
46
|
* @returns the field definition name in schema
|
|
14
47
|
*/
|
|
15
48
|
function determineFieldDefinitionName(version, fieldReferenceId, targetID, fieldReference) {
|
|
16
|
-
const fieldReferenceType = version ===
|
|
49
|
+
const fieldReferenceType = version === ux_specification_types_2.FioriElementsVersion.v2 && fieldReferenceId && fieldReferenceId.includes('::')
|
|
17
50
|
? fieldReferenceId.split('::')[0].replace('DataField', 'Field')
|
|
18
51
|
: undefined;
|
|
19
|
-
if (version ===
|
|
52
|
+
if (version === ux_specification_types_2.FioriElementsVersion.v2) {
|
|
20
53
|
return `${fieldReferenceType}<${targetID}::${fieldReference}>`;
|
|
21
54
|
}
|
|
22
55
|
else {
|
|
23
56
|
return `${targetID}::${fieldReference}`;
|
|
24
57
|
}
|
|
25
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Add th keys and targt tag for Datafield*
|
|
61
|
+
* @param field - the given field definition
|
|
62
|
+
* @param appSchema - the app schema to be updated
|
|
63
|
+
* @param schemaKeyOfField - key for the given field in the app schema
|
|
64
|
+
*/
|
|
65
|
+
function addKeysTagForDataField(field, appSchema, schemaKeyOfField) {
|
|
66
|
+
if (typeof field.Value !== 'string' && field.Value.type === 'Path') {
|
|
67
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys] = [
|
|
68
|
+
{
|
|
69
|
+
name: 'Value',
|
|
70
|
+
value: field.Value.path
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.target] = field.Value.$target
|
|
74
|
+
? field.Value.$target.fullyQualifiedName.split('/')[0]
|
|
75
|
+
: field.Value.targetString.split('/')[0];
|
|
76
|
+
}
|
|
77
|
+
else if (typeof field.Value === 'string' && field.Value) {
|
|
78
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys] = [
|
|
79
|
+
{
|
|
80
|
+
name: 'Value',
|
|
81
|
+
value: field.Value
|
|
82
|
+
}
|
|
83
|
+
];
|
|
84
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.target] = field.fullyQualifiedName.split('@')[0];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Adds the "keys" tag to a field definition in schema
|
|
89
|
+
* @param field - the given field definition
|
|
90
|
+
* @param appSchema - the app schema to be updated
|
|
91
|
+
* @param schemaKeyOfField - key for the given field in the app schema
|
|
92
|
+
*/
|
|
93
|
+
function addKeysTagToField(field, appSchema, schemaKeyOfField) {
|
|
94
|
+
if (field.$Type === "com.sap.vocabularies.UI.v1.DataField" /* DataField */ ||
|
|
95
|
+
field.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithUrl" /* DataFieldWithUrl */ ||
|
|
96
|
+
field.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath" /* DataFieldWithNavigationPath */) {
|
|
97
|
+
addKeysTagForDataField(field, appSchema, schemaKeyOfField);
|
|
98
|
+
}
|
|
99
|
+
else if (field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation" /* DataFieldForAnnotation */) {
|
|
100
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys] = [
|
|
101
|
+
{
|
|
102
|
+
name: 'Target',
|
|
103
|
+
value: field.Target.value
|
|
104
|
+
}
|
|
105
|
+
];
|
|
106
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.target] =
|
|
107
|
+
field.Target.$target.fullyQualifiedName.split('@')[0];
|
|
108
|
+
}
|
|
109
|
+
else if (field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" /* DataFieldForAction */) {
|
|
110
|
+
const separator = field.Action.lastIndexOf('.');
|
|
111
|
+
if (separator === -1) {
|
|
112
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys] = [
|
|
113
|
+
{
|
|
114
|
+
name: 'Action',
|
|
115
|
+
value: field.Action
|
|
116
|
+
}
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys] = [
|
|
121
|
+
{
|
|
122
|
+
name: 'Action',
|
|
123
|
+
value: field.Action.substring(separator + 1, field.Action.length)
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.target] = field.Action.substring(0, separator);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else if (field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation" /* DataFieldForIntentBasedNavigation */) {
|
|
130
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys] = [
|
|
131
|
+
{
|
|
132
|
+
name: 'SemanticObject',
|
|
133
|
+
value: field.SemanticObject
|
|
134
|
+
}
|
|
135
|
+
];
|
|
136
|
+
if (field.Action) {
|
|
137
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.keys].push({
|
|
138
|
+
name: 'Action',
|
|
139
|
+
value: field.Action
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.target] = field.fullyQualifiedName.split('@')[0];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
26
145
|
/**
|
|
27
146
|
* Adds a field definition to the app specific schema
|
|
28
147
|
* @param {string} sectionType - prefix to distinguish Section and HeaderSection
|
|
@@ -36,58 +155,50 @@ function determineFieldDefinitionName(version, fieldReferenceId, targetID, field
|
|
|
36
155
|
function addField(sectionType, appSchema, field, targetID, key, section, version, withActions = true) {
|
|
37
156
|
// Calculate field reference
|
|
38
157
|
const fieldReferenceId = StableIdHelper_1.getStableIdPartFromDataField(field);
|
|
39
|
-
const fieldReference = version ===
|
|
158
|
+
const fieldReference = version === ux_specification_types_2.FioriElementsVersion.v2 && fieldReferenceId && fieldReferenceId.includes('::')
|
|
40
159
|
? fieldReferenceId.split('::').splice(1).join('::')
|
|
41
160
|
: fieldReferenceId;
|
|
42
161
|
// Determine field definition name
|
|
43
|
-
const
|
|
162
|
+
const schemaKeyOfField = determineFieldDefinitionName(version, fieldReferenceId, targetID, fieldReference);
|
|
44
163
|
// Evaluate field type, set field reference of properties of fields' or actions' definition
|
|
45
164
|
if (!field || !field.$Type) {
|
|
46
165
|
return;
|
|
47
166
|
}
|
|
48
167
|
else if (field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" /* DataFieldForAction */ ||
|
|
49
168
|
field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForIntentBasedNavigation" /* DataFieldForIntentBasedNavigation */) {
|
|
50
|
-
if (withActions && sectionType ===
|
|
51
|
-
const actionsDefinition = __1.prepareRef(`${sectionType}${
|
|
169
|
+
if (withActions && sectionType === ux_specification_types_2.SectionType.Section) {
|
|
170
|
+
const actionsDefinition = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Actions}<${targetID}>`);
|
|
52
171
|
const fieldInSchema = (appSchema.definitions[actionsDefinition].properties[fieldReference] =
|
|
53
172
|
{
|
|
54
|
-
$ref: `${__1.DEFINITION_LINK_PREFIX}${
|
|
173
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${schemaKeyOfField}`
|
|
55
174
|
});
|
|
56
|
-
fieldInSchema[
|
|
175
|
+
fieldInSchema[ux_specification_types_2.SchemaTag.propertyIndex] = parseInt(key);
|
|
57
176
|
}
|
|
58
177
|
}
|
|
59
178
|
else {
|
|
60
|
-
const fieldsDefinition = __1.prepareRef(`${sectionType}${
|
|
179
|
+
const fieldsDefinition = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Fields}<${targetID}>`);
|
|
61
180
|
appSchema.definitions[fieldsDefinition]['properties'][fieldReference] = {
|
|
62
|
-
$ref: `${__1.DEFINITION_LINK_PREFIX}${
|
|
181
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${schemaKeyOfField}`,
|
|
63
182
|
propertyIndex: parseInt(key)
|
|
64
183
|
};
|
|
65
184
|
}
|
|
66
185
|
// Now set up the field definition
|
|
67
|
-
appSchema.definitions[
|
|
186
|
+
appSchema.definitions[schemaKeyOfField] = {
|
|
68
187
|
type: 'object',
|
|
69
188
|
properties: {},
|
|
70
189
|
description: __1.getDatafieldDescription(field, section.entityType),
|
|
71
190
|
additionalProperties: false
|
|
72
191
|
};
|
|
73
192
|
//Add tags
|
|
74
|
-
appSchema
|
|
75
|
-
appSchema.definitions[
|
|
76
|
-
appSchema.definitions[
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
appSchema['definitions'][fieldDefinition]['properties'] =
|
|
84
|
-
appSchema['definitions']['Field']['properties'];
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" /* DataFieldForAction */ && appSchema['definitions']?.['FormAction']) {
|
|
90
|
-
appSchema['definitions'][fieldDefinition]['properties'] = appSchema['definitions']['FormAction']['properties'];
|
|
193
|
+
addKeysTagToField(field, appSchema, schemaKeyOfField);
|
|
194
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.annotationPath] = `/${section.entityType.fullyQualifiedName}/${field.fullyQualifiedName.split(section.entityType.fullyQualifiedName)[1]}`;
|
|
195
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.annotationType] = field.$Type;
|
|
196
|
+
appSchema.definitions[schemaKeyOfField][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
197
|
+
__1.addDataTypeToDefinition(appSchema.definitions[schemaKeyOfField], field);
|
|
198
|
+
// Copy the generic definition of field properties to the specific one
|
|
199
|
+
copyFieldProperties(version, appSchema, field, schemaKeyOfField);
|
|
200
|
+
if (field.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" /* DataFieldForAction */ && appSchema.definitions?.['FormAction']) {
|
|
201
|
+
appSchema.definitions[schemaKeyOfField].properties = appSchema.definitions[ux_specification_types_2.DefinitionName.FormAction].properties;
|
|
91
202
|
}
|
|
92
203
|
}
|
|
93
204
|
/**
|
|
@@ -109,24 +220,23 @@ function determineTargetIdOfForm(section) {
|
|
|
109
220
|
return targetID;
|
|
110
221
|
}
|
|
111
222
|
/**
|
|
112
|
-
* Adds
|
|
223
|
+
* Adds the specific definitions of the form fields to a schema
|
|
224
|
+
* @param {FacetConfig} section - section definition, as prepared from the annotations
|
|
113
225
|
* @param {SectionType} sectionType - prefix to distinguish Section and HeaderSection
|
|
114
|
-
* @param {FacetConfig} section - facet or section in the FE core model
|
|
115
|
-
* @param {object} appSchemaSection - current definition of facet or section in the JSON schema
|
|
116
226
|
* @param {object} appSchema - app specific schema that gets enhanced
|
|
227
|
+
* @param {string } targetID - target id of form
|
|
117
228
|
* @param {FioriElementsVersion} version - Fiori Elements version
|
|
118
229
|
*/
|
|
119
|
-
function
|
|
230
|
+
function addFieldsToFormDefinition(section, sectionType, appSchema, targetID, version, withActions = true) {
|
|
120
231
|
if (!section.target) {
|
|
121
232
|
return;
|
|
122
233
|
}
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
const
|
|
126
|
-
const actionsDefinition = __1.prepareRef(`${sectionType}${ux_specification_types_1.DefinitionName.Actions}<${targetID}>`);
|
|
234
|
+
const formDefinition = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Form}<${targetID}>`);
|
|
235
|
+
const fieldsDefinition = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Fields}<${targetID}>`);
|
|
236
|
+
const actionsDefinition = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Actions}<${targetID}>`);
|
|
127
237
|
// Form definition
|
|
128
|
-
|
|
129
|
-
if (sectionType ===
|
|
238
|
+
appSchema.properties['form'] = { $ref: `${__1.DEFINITION_LINK_PREFIX}${formDefinition}` };
|
|
239
|
+
if (sectionType === ux_specification_types_2.SectionType.Section && withActions) {
|
|
130
240
|
appSchema['definitions'][formDefinition] = {
|
|
131
241
|
type: 'object',
|
|
132
242
|
properties: {
|
|
@@ -144,7 +254,7 @@ function handleForm(sectionType, section, appSchemaSection, appSchema, version,
|
|
|
144
254
|
description: 'Actions',
|
|
145
255
|
additionalProperties: false
|
|
146
256
|
};
|
|
147
|
-
appSchema['definitions'][actionsDefinition][
|
|
257
|
+
appSchema['definitions'][actionsDefinition][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
148
258
|
}
|
|
149
259
|
else {
|
|
150
260
|
appSchema['definitions'][formDefinition] = {
|
|
@@ -156,9 +266,9 @@ function handleForm(sectionType, section, appSchemaSection, appSchema, version,
|
|
|
156
266
|
additionalProperties: false
|
|
157
267
|
};
|
|
158
268
|
}
|
|
159
|
-
appSchema.definitions[formDefinition][
|
|
269
|
+
appSchema.definitions[formDefinition][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
160
270
|
if (section.entityType?.name) {
|
|
161
|
-
appSchema.definitions[formDefinition][
|
|
271
|
+
appSchema.definitions[formDefinition][ux_specification_types_2.SchemaTag.annotationPath] = __1.createAnnotationPath(section.entityType.fullyQualifiedName, section.target['term'], section.target['qualifier']);
|
|
162
272
|
}
|
|
163
273
|
// Fields definition
|
|
164
274
|
appSchema.definitions[fieldsDefinition] = {
|
|
@@ -167,9 +277,9 @@ function handleForm(sectionType, section, appSchemaSection, appSchema, version,
|
|
|
167
277
|
description: 'Fields',
|
|
168
278
|
additionalProperties: false
|
|
169
279
|
};
|
|
170
|
-
appSchema.definitions[fieldsDefinition][
|
|
280
|
+
appSchema.definitions[fieldsDefinition][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
171
281
|
// Add fields
|
|
172
|
-
if (section.base ===
|
|
282
|
+
if (section.base === ux_specification_types_2.FacetBase.Identification) {
|
|
173
283
|
for (const key in section.target) {
|
|
174
284
|
const field = section.target[key];
|
|
175
285
|
if (field) {
|
|
@@ -184,6 +294,95 @@ function handleForm(sectionType, section, appSchemaSection, appSchema, version,
|
|
|
184
294
|
}
|
|
185
295
|
}
|
|
186
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Adds the schema tags for a form definition
|
|
299
|
+
* @param {FacetConfig} section - section definition, as prepared from the annotations
|
|
300
|
+
* @param {object} appSchema - app specific schema that gets enhanced
|
|
301
|
+
* @param {string} formDefinitionKey - key of the form definition in schema
|
|
302
|
+
*/
|
|
303
|
+
function addTagsToFormDefinition(section, appSchema, formDefinitionKey) {
|
|
304
|
+
if (section.target) {
|
|
305
|
+
const targetValue = section.target['qualifier']
|
|
306
|
+
? `${section.target['term']}#${section.target['qualifier']}`
|
|
307
|
+
: `${section.target['term']}`;
|
|
308
|
+
appSchema.definitions[formDefinitionKey][ux_specification_types_2.SchemaTag.keys] = [
|
|
309
|
+
{
|
|
310
|
+
name: ux_specification_types_1.SchemaKeyName.target,
|
|
311
|
+
value: targetValue.replace(/com.sap.vocabularies.UI.v1./g, '')
|
|
312
|
+
}
|
|
313
|
+
];
|
|
314
|
+
appSchema.definitions[formDefinitionKey][ux_specification_types_2.SchemaTag.target] = section.target['fullyQualifiedName'].split('@')[0];
|
|
315
|
+
}
|
|
316
|
+
appSchema.definitions[formDefinitionKey][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
317
|
+
if (section.entityType?.name) {
|
|
318
|
+
appSchema.definitions[formDefinitionKey][ux_specification_types_2.SchemaTag.annotationPath] = __1.createAnnotationPath(section.entityType.fullyQualifiedName, section.target['term'], section.target['qualifier']);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Adds definitions for forms in object page sections to the app schema
|
|
323
|
+
* @param {SectionType} sectionType - prefix to distinguish Section and HeaderSection
|
|
324
|
+
* @param {FacetConfig} section - section definition, as prepared from the annotations
|
|
325
|
+
* @param {object} appSchemaSection - current definition of facet or section in the JSON schema
|
|
326
|
+
* @param {object} appSchema - app specific schema that gets enhanced
|
|
327
|
+
* @param {FioriElementsVersion} version - Fiori Elements version
|
|
328
|
+
* @param {string} facetKey - facet key
|
|
329
|
+
* @returns {string | undefined} target id of form
|
|
330
|
+
*/
|
|
331
|
+
function handleForm(sectionType, section, appSchemaSection, appSchema, version, facetKey) {
|
|
332
|
+
if (!section.target) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
const targetID = determineTargetIdOfForm(section);
|
|
336
|
+
const formDefinitionKey = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Form}<${targetID}>`);
|
|
337
|
+
const fieldsDefinitionKey = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Fields}<${targetID}>`);
|
|
338
|
+
const actionsDefinitionKey = __1.prepareRef(`${sectionType}${ux_specification_types_2.DefinitionName.Actions}<${targetID}>`);
|
|
339
|
+
const withActions = section.base === ux_specification_types_2.FacetBase.Identification && facetKey.indexOf('#') < 0 ? false : true;
|
|
340
|
+
// Form definition
|
|
341
|
+
appSchemaSection.properties.form = { $ref: `${__1.DEFINITION_LINK_PREFIX}${formDefinitionKey}` };
|
|
342
|
+
if (sectionType === ux_specification_types_2.SectionType.Section && withActions) {
|
|
343
|
+
appSchema.definitions[formDefinitionKey] = {
|
|
344
|
+
type: 'object',
|
|
345
|
+
properties: {
|
|
346
|
+
actions: {
|
|
347
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${actionsDefinitionKey}`
|
|
348
|
+
},
|
|
349
|
+
fields: { $ref: `${__1.DEFINITION_LINK_PREFIX}${fieldsDefinitionKey}` }
|
|
350
|
+
},
|
|
351
|
+
description: 'Form',
|
|
352
|
+
additionalProperties: false
|
|
353
|
+
};
|
|
354
|
+
appSchema.definitions[actionsDefinitionKey] = {
|
|
355
|
+
type: 'object',
|
|
356
|
+
properties: {},
|
|
357
|
+
description: 'Actions',
|
|
358
|
+
additionalProperties: false
|
|
359
|
+
};
|
|
360
|
+
appSchema.definitions[actionsDefinitionKey][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
appSchema.definitions[formDefinitionKey] = {
|
|
364
|
+
type: 'object',
|
|
365
|
+
properties: {
|
|
366
|
+
fields: { $ref: `${__1.DEFINITION_LINK_PREFIX}${fieldsDefinitionKey}` }
|
|
367
|
+
},
|
|
368
|
+
description: 'Form',
|
|
369
|
+
additionalProperties: false
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
//Add schema tags
|
|
373
|
+
addTagsToFormDefinition(section, appSchema, formDefinitionKey);
|
|
374
|
+
// Fields definition
|
|
375
|
+
appSchema.definitions[fieldsDefinitionKey] = {
|
|
376
|
+
type: 'object',
|
|
377
|
+
properties: {},
|
|
378
|
+
description: 'Fields',
|
|
379
|
+
additionalProperties: false
|
|
380
|
+
};
|
|
381
|
+
appSchema.definitions[fieldsDefinitionKey][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
382
|
+
// Add fields
|
|
383
|
+
addFieldsToFormDefinition(section, sectionType, appSchema, targetID, version, withActions);
|
|
384
|
+
return targetID;
|
|
385
|
+
}
|
|
187
386
|
exports.handleForm = handleForm;
|
|
188
387
|
/**
|
|
189
388
|
* Replaces an alias in an annotation ID or reference, based on the AVT references' list
|
|
@@ -209,25 +408,33 @@ exports.replaceAlias = replaceAlias;
|
|
|
209
408
|
/**
|
|
210
409
|
* Common routine to determine the name and the ID of a header action
|
|
211
410
|
* @param action - action as given by AVT
|
|
212
|
-
* @param entityType - entity type by AVT
|
|
213
411
|
* @returns an object comprising action name and action id
|
|
214
412
|
*/
|
|
215
|
-
function getActionNameAndId(
|
|
216
|
-
|
|
413
|
+
function getActionNameAndId(item, oDataServiceAVT) {
|
|
414
|
+
const action = replaceAlias(item.Action, oDataServiceAVT);
|
|
415
|
+
let relevantAction = action;
|
|
416
|
+
let separatorIndex = action.indexOf('(');
|
|
417
|
+
if (separatorIndex > 0) {
|
|
418
|
+
relevantAction = action.substring(0, separatorIndex);
|
|
419
|
+
}
|
|
420
|
+
separatorIndex = relevantAction.lastIndexOf('/');
|
|
217
421
|
if (separatorIndex === -1) {
|
|
218
|
-
separatorIndex =
|
|
422
|
+
separatorIndex = relevantAction.lastIndexOf('.');
|
|
219
423
|
}
|
|
220
|
-
let actionName, actionId;
|
|
424
|
+
let actionName, actionId, namespace;
|
|
221
425
|
if (separatorIndex > -1) {
|
|
222
|
-
actionName =
|
|
223
|
-
|
|
426
|
+
actionName = relevantAction.substring(separatorIndex + 1);
|
|
427
|
+
namespace = relevantAction.substring(0, separatorIndex);
|
|
428
|
+
actionId = `${relevantAction.substring(0, separatorIndex)}::${actionName}`;
|
|
224
429
|
}
|
|
225
430
|
else {
|
|
226
|
-
actionName =
|
|
227
|
-
|
|
228
|
-
|
|
431
|
+
actionName = relevantAction;
|
|
432
|
+
namespace = item.fullyQualifiedName.split('@')[0];
|
|
433
|
+
if (actionName && actionName !== '') {
|
|
434
|
+
actionId = `${namespace.substring(0, namespace.length - 1)}::${actionName}`;
|
|
435
|
+
}
|
|
229
436
|
}
|
|
230
|
-
return { actionName, actionId };
|
|
437
|
+
return { actionName, actionId, namespace };
|
|
231
438
|
}
|
|
232
439
|
exports.getActionNameAndId = getActionNameAndId;
|
|
233
440
|
/**
|
|
@@ -238,36 +445,36 @@ exports.getActionNameAndId = getActionNameAndId;
|
|
|
238
445
|
* @param {ConvertedMetadata} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
239
446
|
*/
|
|
240
447
|
function addFooterActions(appSchema, generateParameters) {
|
|
241
|
-
appSchema.definitions[
|
|
448
|
+
appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageFooter] = JSON.parse(JSON.stringify(appSchema.definitions[`${ux_specification_types_2.DefinitionName.ObjectPageFooter}<ObjectPageFooterActions>`]));
|
|
242
449
|
// Change reference of footer
|
|
243
450
|
appSchema.properties['footer'] = {
|
|
244
|
-
$ref: `${__1.DEFINITION_LINK_PREFIX}${
|
|
451
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${ux_specification_types_2.DefinitionName.ObjectPageFooter}`
|
|
245
452
|
};
|
|
246
453
|
// Add action to configuration
|
|
247
|
-
appSchema.definitions[
|
|
248
|
-
$ref: `${__1.DEFINITION_LINK_PREFIX}${
|
|
454
|
+
appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageFooter].properties[ux_specification_types_2.PropertyName.actions] = {
|
|
455
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${ux_specification_types_2.DefinitionName.FooterActions}`
|
|
249
456
|
};
|
|
250
|
-
const footerActions = (appSchema.definitions[
|
|
457
|
+
const footerActions = (appSchema.definitions[ux_specification_types_2.DefinitionName.FooterActions] = {
|
|
251
458
|
type: 'object',
|
|
252
459
|
properties: {},
|
|
253
460
|
description: 'Actions',
|
|
254
461
|
additionalProperties: false
|
|
255
462
|
});
|
|
256
|
-
footerActions[
|
|
257
|
-
const alias = __1.findAlias(
|
|
463
|
+
footerActions[ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
464
|
+
const alias = __1.findAlias(ux_specification_types_2.UIVOCABULARY, generateParameters.serviceAVT);
|
|
258
465
|
const entityType = generateParameters.entitySet.entityType;
|
|
259
466
|
const actionAnnotation = alias && entityType.annotations?.[alias]?.Identification;
|
|
260
467
|
if (actionAnnotation) {
|
|
261
468
|
const convertedIdentification = actionAnnotation.fullyQualifiedName.replace(`@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`, `/@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`);
|
|
262
|
-
footerActions[
|
|
469
|
+
footerActions[ux_specification_types_2.SchemaTag.annotationPath] = `/${convertedIdentification}`;
|
|
263
470
|
actionAnnotation.forEach((item, index) => {
|
|
264
471
|
if (item['Determining'] && item.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAction" /* DataFieldForAction */) {
|
|
265
|
-
const { actionName, actionId } = getActionNameAndId(item
|
|
472
|
+
const { actionName, actionId } = getActionNameAndId(item, generateParameters.serviceAVT);
|
|
266
473
|
const description = item.Label || actionName;
|
|
267
|
-
const actionDefinitionKey = __1.prepareRef(`${
|
|
268
|
-
if (appSchema.definitions[
|
|
474
|
+
const actionDefinitionKey = __1.prepareRef(`${ux_specification_types_2.DefinitionName.ObjectPageFooterAction}<${actionId}>`);
|
|
475
|
+
if (appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageFooterAction]) {
|
|
269
476
|
appSchema.definitions[actionDefinitionKey] = {
|
|
270
|
-
...JSON.parse(JSON.stringify(appSchema.definitions[
|
|
477
|
+
...JSON.parse(JSON.stringify(appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageFooterAction])),
|
|
271
478
|
description,
|
|
272
479
|
annotationPath: `/${convertedIdentification}/${index}`
|
|
273
480
|
};
|
|
@@ -278,8 +485,8 @@ function addFooterActions(appSchema, generateParameters) {
|
|
|
278
485
|
properties: {},
|
|
279
486
|
description: description
|
|
280
487
|
};
|
|
281
|
-
appSchema.definitions[actionDefinitionKey][
|
|
282
|
-
appSchema.definitions[actionDefinitionKey][
|
|
488
|
+
appSchema.definitions[actionDefinitionKey][ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
489
|
+
appSchema.definitions[actionDefinitionKey][ux_specification_types_2.SchemaTag.annotationPath] = `/${convertedIdentification}/${index}`;
|
|
283
490
|
}
|
|
284
491
|
footerActions.properties[actionId] = {
|
|
285
492
|
$ref: `${__1.DEFINITION_LINK_PREFIX}${actionDefinitionKey}`
|
|
@@ -288,10 +495,10 @@ function addFooterActions(appSchema, generateParameters) {
|
|
|
288
495
|
});
|
|
289
496
|
}
|
|
290
497
|
else {
|
|
291
|
-
footerActions[
|
|
498
|
+
footerActions[ux_specification_types_2.SchemaTag.annotationPath] = `/${entityType.fullyQualifiedName}/@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`;
|
|
292
499
|
}
|
|
293
|
-
delete appSchema.definitions[
|
|
294
|
-
delete appSchema.definitions[`${
|
|
500
|
+
delete appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageFooterActions];
|
|
501
|
+
delete appSchema.definitions[`${ux_specification_types_2.DefinitionName.ObjectPageFooter}<${ux_specification_types_2.DefinitionName.ObjectPageFooterActions}>`];
|
|
295
502
|
}
|
|
296
503
|
exports.addFooterActions = addFooterActions;
|
|
297
504
|
/**
|
|
@@ -301,32 +508,32 @@ exports.addFooterActions = addFooterActions;
|
|
|
301
508
|
* @param {ConvertedMetadata} oDataServiceAVT - complete service information, as returned by annotation vocabularies tool
|
|
302
509
|
*/
|
|
303
510
|
function addHeaderActions(appSchema, entityType, oDataServiceAVT, addHeaderActionCallBack) {
|
|
304
|
-
appSchema.definitions[
|
|
305
|
-
$ref: `${__1.DEFINITION_LINK_PREFIX}${
|
|
511
|
+
appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageHeader].properties[ux_specification_types_2.PropertyName.actions] = {
|
|
512
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${ux_specification_types_2.DefinitionName.HeaderActions}`
|
|
306
513
|
};
|
|
307
|
-
const headerActions = (appSchema.definitions[
|
|
514
|
+
const headerActions = (appSchema.definitions[ux_specification_types_2.DefinitionName.HeaderActions] = {
|
|
308
515
|
type: 'object',
|
|
309
516
|
properties: {},
|
|
310
517
|
description: 'Actions',
|
|
311
518
|
additionalProperties: false
|
|
312
519
|
});
|
|
313
|
-
headerActions[
|
|
314
|
-
const alias = __1.findAlias(
|
|
520
|
+
headerActions[ux_specification_types_2.SchemaTag.isViewNode] = true;
|
|
521
|
+
const alias = __1.findAlias(ux_specification_types_2.UIVOCABULARY, oDataServiceAVT);
|
|
315
522
|
const identification = alias &&
|
|
316
523
|
entityType.annotations &&
|
|
317
524
|
entityType.annotations[alias] &&
|
|
318
525
|
entityType.annotations[alias].Identification;
|
|
319
526
|
if (identification) {
|
|
320
|
-
headerActions[
|
|
527
|
+
headerActions[ux_specification_types_2.SchemaTag.annotationPath] =
|
|
321
528
|
'/' +
|
|
322
529
|
identification.fullyQualifiedName.replace(`@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`, `/@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`);
|
|
323
530
|
identification.forEach(addHeaderActionCallBack(entityType, appSchema, identification, headerActions, oDataServiceAVT));
|
|
324
531
|
}
|
|
325
532
|
else {
|
|
326
|
-
headerActions[
|
|
533
|
+
headerActions[ux_specification_types_2.SchemaTag.annotationPath] = `/${entityType.fullyQualifiedName}/@${"com.sap.vocabularies.UI.v1.Identification" /* Identification */}`;
|
|
327
534
|
}
|
|
328
|
-
delete appSchema.definitions[
|
|
329
|
-
delete appSchema.definitions[`${
|
|
535
|
+
delete appSchema.definitions[ux_specification_types_2.DefinitionName.GenericActions];
|
|
536
|
+
delete appSchema.definitions[`${ux_specification_types_2.DefinitionName.ObjectPageHeader}<${ux_specification_types_2.DefinitionName.GenericActions}>`];
|
|
330
537
|
}
|
|
331
538
|
exports.addHeaderActions = addHeaderActions;
|
|
332
539
|
/**
|
|
@@ -336,10 +543,10 @@ exports.addHeaderActions = addHeaderActions;
|
|
|
336
543
|
*/
|
|
337
544
|
function addCommonHeaderSchema(appSchema, entityType) {
|
|
338
545
|
appSchema.properties['header'] = {
|
|
339
|
-
$ref: `${__1.DEFINITION_LINK_PREFIX}${
|
|
546
|
+
$ref: `${__1.DEFINITION_LINK_PREFIX}${ux_specification_types_2.DefinitionName.ObjectPageHeader}`
|
|
340
547
|
};
|
|
341
|
-
appSchema.definitions[
|
|
342
|
-
appSchema.definitions[
|
|
548
|
+
appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageHeader] = JSON.parse(JSON.stringify(appSchema.definitions[`${ux_specification_types_2.DefinitionName.ObjectPageHeader}<${ux_specification_types_2.DefinitionName.GenericActions}>`]));
|
|
549
|
+
appSchema.definitions[ux_specification_types_2.DefinitionName.ObjectPageHeader][ux_specification_types_2.SchemaTag.annotationPath] = `/${entityType.fullyQualifiedName}/@${"com.sap.vocabularies.UI.v1.HeaderInfo" /* HeaderInfo */}`;
|
|
343
550
|
}
|
|
344
551
|
exports.addCommonHeaderSchema = addCommonHeaderSchema;
|
|
345
552
|
/**
|