@sap-ux/preview-middleware 0.18.19 → 0.18.20
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/client/adp/api-handler.js +153 -153
- package/dist/client/adp/command-executor.js +75 -75
- package/dist/client/adp/control-utils.js +44 -44
- package/dist/client/adp/controllers/BaseDialog.controller.js +187 -187
- package/dist/client/adp/controllers/ControllerExtension.controller.js +209 -209
- package/dist/client/adp/controllers/ExtensionPoint.controller.js +138 -138
- package/dist/client/adp/controllers/FileExistsDialog.controller.js +66 -66
- package/dist/client/adp/dialog-factory.js +133 -133
- package/dist/client/adp/init-dialogs.js +107 -107
- package/dist/client/adp/quick-actions/common/add-controller-to-page.js +55 -55
- package/dist/client/adp/quick-actions/common/add-new-subpage.js +138 -138
- package/dist/client/adp/quick-actions/common/create-page-action.js +51 -51
- package/dist/client/adp/quick-actions/common/op-add-custom-section.js +36 -36
- package/dist/client/adp/quick-actions/common/op-add-header-field.js +61 -61
- package/dist/client/adp/quick-actions/common/utils.js +18 -18
- package/dist/client/adp/quick-actions/control-types.js +21 -21
- package/dist/client/adp/quick-actions/dialog-enablement-validator.js +24 -24
- package/dist/client/adp/quick-actions/enablement-validator.js +4 -4
- package/dist/client/adp/quick-actions/fe-v2/change-table-columns.js +101 -101
- package/dist/client/adp/quick-actions/fe-v2/create-table-action.js +104 -104
- package/dist/client/adp/quick-actions/fe-v2/create-table-custom-column.js +96 -96
- package/dist/client/adp/quick-actions/fe-v2/lr-enable-semantic-date-range-filter-bar.js +78 -78
- package/dist/client/adp/quick-actions/fe-v2/lr-enable-table-filtering.js +77 -77
- package/dist/client/adp/quick-actions/fe-v2/lr-enable-variant-management.js +69 -69
- package/dist/client/adp/quick-actions/fe-v2/lr-toggle-clear-filter-bar.js +59 -59
- package/dist/client/adp/quick-actions/fe-v2/op-enable-empty-row-mode.js +93 -93
- package/dist/client/adp/quick-actions/fe-v2/op-enable-variant-management.js +84 -84
- package/dist/client/adp/quick-actions/fe-v2/registry.js +76 -76
- package/dist/client/adp/quick-actions/fe-v2/utils.js +116 -116
- package/dist/client/adp/quick-actions/fe-v4/change-table-columns.js +73 -73
- package/dist/client/adp/quick-actions/fe-v4/create-table-action.js +50 -50
- package/dist/client/adp/quick-actions/fe-v4/create-table-custom-column.js +46 -46
- package/dist/client/adp/quick-actions/fe-v4/enable-variant-management.js +81 -81
- package/dist/client/adp/quick-actions/fe-v4/lr-enable-semantic-date-range-filter-bar.js +56 -56
- package/dist/client/adp/quick-actions/fe-v4/lr-enable-table-filtering.js +82 -82
- package/dist/client/adp/quick-actions/fe-v4/lr-toggle-clear-filter-bar.js +53 -53
- package/dist/client/adp/quick-actions/fe-v4/op-enable-empty-row-mode.js +89 -89
- package/dist/client/adp/quick-actions/fe-v4/registry.js +58 -58
- package/dist/client/adp/quick-actions/fe-v4/utils.js +47 -47
- package/dist/client/adp/quick-actions/load.js +44 -44
- package/dist/client/adp/quick-actions/quick-action-base.js +53 -53
- package/dist/client/adp/utils.js +160 -160
- package/dist/client/cpe/changes/index.js +10 -10
- package/dist/client/cpe/changes/validator.js +39 -39
- package/dist/client/cpe/documentation.js +164 -164
- package/dist/client/cpe/feature-service.js +36 -36
- package/dist/client/cpe/logger.js +30 -30
- package/dist/client/cpe/outline/editable.js +37 -37
- package/dist/client/cpe/outline/nodes.js +222 -222
- package/dist/client/cpe/quick-actions/quick-action-definition.js +4 -4
- package/dist/client/cpe/quick-actions/registry.js +143 -143
- package/dist/client/cpe/quick-actions/utils.js +92 -92
- package/dist/client/cpe/types.js +4 -4
- package/dist/client/cpe/ui5-utils.js +33 -33
- package/dist/client/cpe/utils.js +138 -138
- package/dist/client/flp/WorkspaceConnector.js +86 -86
- package/dist/client/flp/common.js +28 -28
- package/dist/client/flp/enableFakeConnector.js +83 -83
- package/dist/client/flp/initConnectors.js +28 -28
- package/dist/client/flp/initRta.js +178 -178
- package/dist/client/i18n.js +56 -56
- package/dist/client/utils/application.js +32 -32
- package/dist/client/utils/core.js +68 -68
- package/dist/client/utils/error.js +19 -19
- package/dist/client/utils/fe-v2.js +56 -56
- package/dist/client/utils/fe-v4.js +141 -141
- package/dist/client/utils/version.js +104 -104
- package/package.json +6 -6
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
sap.ui.define(["./utils", "sap/base/Log"], function (___utils, Log) {
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
const getLibrary = ___utils["getLibrary"];
|
|
7
|
-
/**
|
|
8
|
-
* Get ui5 metadata of given library name.
|
|
9
|
-
*
|
|
10
|
-
* @param libName library name for eg: sap.m
|
|
11
|
-
* @returns Promise<SchemaForApiJsonFiles>
|
|
12
|
-
*/
|
|
13
|
-
async function getUi5ApiDtMetadata(libName) {
|
|
14
|
-
const libUrl = '/test-resources/' + libName.split('.').join('/') + '/designtime/api.json';
|
|
15
|
-
return fetch(libUrl).then(res => res.json());
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* load ui5 controls design time metadata api.json for following libraries
|
|
20
|
-
* sap.m, sap.ui.comp, sap.f, sap.ui.core
|
|
21
|
-
* loading libraries(more in file size) in parallel during initialization.
|
|
22
|
-
* Others (less in file size) are loaded dynamically in getControlMetadata method
|
|
23
|
-
*/
|
|
24
|
-
const ui5ApiDtMetadata = new Map();
|
|
25
|
-
function loadDefaultLibraries() {
|
|
26
|
-
const allData = Promise.all([getUi5ApiDtMetadata('sap.m'), getUi5ApiDtMetadata('sap.ui.comp'), getUi5ApiDtMetadata('sap.ui.core'), getUi5ApiDtMetadata('sap.f')]);
|
|
27
|
-
allData.then(res => {
|
|
28
|
-
res.forEach(api => {
|
|
29
|
-
if (api.library) {
|
|
30
|
-
ui5ApiDtMetadata.set(api.library, api);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}).catch(reason => Log.error('Loading Library Failed: ' + reason));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Format html text.
|
|
38
|
-
*
|
|
39
|
-
* @param sHtml - html string
|
|
40
|
-
* @returns string
|
|
41
|
-
*/
|
|
42
|
-
function formatHtmlText(sHtml) {
|
|
43
|
-
// replaced "sHtml.replace(new RegExp('<[^>]*>', 'g')" due to regex runtime vulnerability
|
|
44
|
-
const parts = (sHtml || '').split('<');
|
|
45
|
-
let result = '';
|
|
46
|
-
for (const part of parts) {
|
|
47
|
-
if (!result) {
|
|
48
|
-
result = part;
|
|
49
|
-
} else {
|
|
50
|
-
const indexClosingBracket = part.indexOf('>');
|
|
51
|
-
result += indexClosingBracket >= 0 ? part.substring(indexClosingBracket + 1) : `<${part}`;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return result;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Method to parse ui5 control metadata.
|
|
59
|
-
*
|
|
60
|
-
* @param controlLibMetadata control library metadata
|
|
61
|
-
* @param controlName name of the control
|
|
62
|
-
* @returns ControlMetadata
|
|
63
|
-
*/
|
|
64
|
-
function parseControlMetaModel(controlLibMetadata, controlName) {
|
|
65
|
-
const controlInfo = {
|
|
66
|
-
baseType: '',
|
|
67
|
-
doc: '',
|
|
68
|
-
properties: {}
|
|
69
|
-
};
|
|
70
|
-
const selectedControlMetadata = (controlLibMetadata.symbols ?? []).find(control => control.name === controlName);
|
|
71
|
-
if (selectedControlMetadata) {
|
|
72
|
-
// base type info of control is available on property 'extends'
|
|
73
|
-
controlInfo.baseType = selectedControlMetadata.extends;
|
|
74
|
-
controlInfo.doc = selectedControlMetadata.description ?? '';
|
|
75
|
-
const properties = selectedControlMetadata['ui5-metadata'].properties;
|
|
76
|
-
if (properties) {
|
|
77
|
-
properties.forEach(prop => {
|
|
78
|
-
prop.description = formatHtmlText(prop.description || '');
|
|
79
|
-
prop.propertyName = prop.name;
|
|
80
|
-
prop.propertyType = prop.type;
|
|
81
|
-
if (prop.defaultValue === null || prop.defaultValue === '') {
|
|
82
|
-
prop.defaultValue = '-';
|
|
83
|
-
}
|
|
84
|
-
controlInfo.properties[prop.name] = {
|
|
85
|
-
...prop
|
|
86
|
-
};
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return controlInfo;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Get control metadata for a given control.
|
|
95
|
-
*
|
|
96
|
-
* @param controlName name of the control
|
|
97
|
-
* @param contLibName library name of the control
|
|
98
|
-
* @returns Promise<ControlMetadata | undefined>
|
|
99
|
-
*/
|
|
100
|
-
async function getControlMetadata(controlName, contLibName) {
|
|
101
|
-
let result;
|
|
102
|
-
let controlLibMetadata = ui5ApiDtMetadata.get(contLibName);
|
|
103
|
-
if (controlLibMetadata) {
|
|
104
|
-
result = parseControlMetaModel(controlLibMetadata, controlName);
|
|
105
|
-
} else {
|
|
106
|
-
controlLibMetadata = await getUi5ApiDtMetadata(contLibName);
|
|
107
|
-
ui5ApiDtMetadata.set(contLibName, controlLibMetadata);
|
|
108
|
-
result = parseControlMetaModel(controlLibMetadata, controlName);
|
|
109
|
-
}
|
|
110
|
-
return result;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Get Control Property Documentation for a give control name and control library.
|
|
115
|
-
*
|
|
116
|
-
* @param controlName name of the control
|
|
117
|
-
* @param contLibName library name of the control
|
|
118
|
-
* @returns Promise<Properties | undefined>
|
|
119
|
-
*/
|
|
120
|
-
async function getControlPropertyDocumentation(controlName, contLibName) {
|
|
121
|
-
const doc = await getControlMetadata(controlName, contLibName);
|
|
122
|
-
if (doc) {
|
|
123
|
-
const baseControlType = doc.baseType;
|
|
124
|
-
if (baseControlType) {
|
|
125
|
-
const baseContLibName = await getLibrary(baseControlType);
|
|
126
|
-
if (baseContLibName) {
|
|
127
|
-
const baseControlProps = await getControlPropertyDocumentation(baseControlType, baseContLibName);
|
|
128
|
-
return {
|
|
129
|
-
...baseControlProps,
|
|
130
|
-
...doc.properties
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return {
|
|
135
|
-
...doc.properties
|
|
136
|
-
};
|
|
137
|
-
} else {
|
|
138
|
-
return undefined;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Get documentation of a given control of a ui5 library.
|
|
144
|
-
*
|
|
145
|
-
* @param controlName name of the control.
|
|
146
|
-
* @param contLibName library name of the control
|
|
147
|
-
* @returns Promise<Properties | undefined>
|
|
148
|
-
*/
|
|
149
|
-
async function getDocumentation(controlName, contLibName) {
|
|
150
|
-
let doc;
|
|
151
|
-
try {
|
|
152
|
-
doc = await getControlPropertyDocumentation(controlName, contLibName);
|
|
153
|
-
} catch (err) {
|
|
154
|
-
Log.error(`Error in getting documentation for ${contLibName}`);
|
|
155
|
-
}
|
|
156
|
-
return doc;
|
|
157
|
-
}
|
|
158
|
-
var __exports = {
|
|
159
|
-
__esModule: true
|
|
160
|
-
};
|
|
161
|
-
__exports.getUi5ApiDtMetadata = getUi5ApiDtMetadata;
|
|
162
|
-
__exports.loadDefaultLibraries = loadDefaultLibraries;
|
|
163
|
-
__exports.getDocumentation = getDocumentation;
|
|
164
|
-
return __exports;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
sap.ui.define(["./utils", "sap/base/Log"], function (___utils, Log) {
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
const getLibrary = ___utils["getLibrary"];
|
|
7
|
+
/**
|
|
8
|
+
* Get ui5 metadata of given library name.
|
|
9
|
+
*
|
|
10
|
+
* @param libName library name for eg: sap.m
|
|
11
|
+
* @returns Promise<SchemaForApiJsonFiles>
|
|
12
|
+
*/
|
|
13
|
+
async function getUi5ApiDtMetadata(libName) {
|
|
14
|
+
const libUrl = '/test-resources/' + libName.split('.').join('/') + '/designtime/api.json';
|
|
15
|
+
return fetch(libUrl).then(res => res.json());
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* load ui5 controls design time metadata api.json for following libraries
|
|
20
|
+
* sap.m, sap.ui.comp, sap.f, sap.ui.core
|
|
21
|
+
* loading libraries(more in file size) in parallel during initialization.
|
|
22
|
+
* Others (less in file size) are loaded dynamically in getControlMetadata method
|
|
23
|
+
*/
|
|
24
|
+
const ui5ApiDtMetadata = new Map();
|
|
25
|
+
function loadDefaultLibraries() {
|
|
26
|
+
const allData = Promise.all([getUi5ApiDtMetadata('sap.m'), getUi5ApiDtMetadata('sap.ui.comp'), getUi5ApiDtMetadata('sap.ui.core'), getUi5ApiDtMetadata('sap.f')]);
|
|
27
|
+
allData.then(res => {
|
|
28
|
+
res.forEach(api => {
|
|
29
|
+
if (api.library) {
|
|
30
|
+
ui5ApiDtMetadata.set(api.library, api);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}).catch(reason => Log.error('Loading Library Failed: ' + reason));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Format html text.
|
|
38
|
+
*
|
|
39
|
+
* @param sHtml - html string
|
|
40
|
+
* @returns string
|
|
41
|
+
*/
|
|
42
|
+
function formatHtmlText(sHtml) {
|
|
43
|
+
// replaced "sHtml.replace(new RegExp('<[^>]*>', 'g')" due to regex runtime vulnerability
|
|
44
|
+
const parts = (sHtml || '').split('<');
|
|
45
|
+
let result = '';
|
|
46
|
+
for (const part of parts) {
|
|
47
|
+
if (!result) {
|
|
48
|
+
result = part;
|
|
49
|
+
} else {
|
|
50
|
+
const indexClosingBracket = part.indexOf('>');
|
|
51
|
+
result += indexClosingBracket >= 0 ? part.substring(indexClosingBracket + 1) : `<${part}`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Method to parse ui5 control metadata.
|
|
59
|
+
*
|
|
60
|
+
* @param controlLibMetadata control library metadata
|
|
61
|
+
* @param controlName name of the control
|
|
62
|
+
* @returns ControlMetadata
|
|
63
|
+
*/
|
|
64
|
+
function parseControlMetaModel(controlLibMetadata, controlName) {
|
|
65
|
+
const controlInfo = {
|
|
66
|
+
baseType: '',
|
|
67
|
+
doc: '',
|
|
68
|
+
properties: {}
|
|
69
|
+
};
|
|
70
|
+
const selectedControlMetadata = (controlLibMetadata.symbols ?? []).find(control => control.name === controlName);
|
|
71
|
+
if (selectedControlMetadata) {
|
|
72
|
+
// base type info of control is available on property 'extends'
|
|
73
|
+
controlInfo.baseType = selectedControlMetadata.extends;
|
|
74
|
+
controlInfo.doc = selectedControlMetadata.description ?? '';
|
|
75
|
+
const properties = selectedControlMetadata['ui5-metadata'].properties;
|
|
76
|
+
if (properties) {
|
|
77
|
+
properties.forEach(prop => {
|
|
78
|
+
prop.description = formatHtmlText(prop.description || '');
|
|
79
|
+
prop.propertyName = prop.name;
|
|
80
|
+
prop.propertyType = prop.type;
|
|
81
|
+
if (prop.defaultValue === null || prop.defaultValue === '') {
|
|
82
|
+
prop.defaultValue = '-';
|
|
83
|
+
}
|
|
84
|
+
controlInfo.properties[prop.name] = {
|
|
85
|
+
...prop
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return controlInfo;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Get control metadata for a given control.
|
|
95
|
+
*
|
|
96
|
+
* @param controlName name of the control
|
|
97
|
+
* @param contLibName library name of the control
|
|
98
|
+
* @returns Promise<ControlMetadata | undefined>
|
|
99
|
+
*/
|
|
100
|
+
async function getControlMetadata(controlName, contLibName) {
|
|
101
|
+
let result;
|
|
102
|
+
let controlLibMetadata = ui5ApiDtMetadata.get(contLibName);
|
|
103
|
+
if (controlLibMetadata) {
|
|
104
|
+
result = parseControlMetaModel(controlLibMetadata, controlName);
|
|
105
|
+
} else {
|
|
106
|
+
controlLibMetadata = await getUi5ApiDtMetadata(contLibName);
|
|
107
|
+
ui5ApiDtMetadata.set(contLibName, controlLibMetadata);
|
|
108
|
+
result = parseControlMetaModel(controlLibMetadata, controlName);
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get Control Property Documentation for a give control name and control library.
|
|
115
|
+
*
|
|
116
|
+
* @param controlName name of the control
|
|
117
|
+
* @param contLibName library name of the control
|
|
118
|
+
* @returns Promise<Properties | undefined>
|
|
119
|
+
*/
|
|
120
|
+
async function getControlPropertyDocumentation(controlName, contLibName) {
|
|
121
|
+
const doc = await getControlMetadata(controlName, contLibName);
|
|
122
|
+
if (doc) {
|
|
123
|
+
const baseControlType = doc.baseType;
|
|
124
|
+
if (baseControlType) {
|
|
125
|
+
const baseContLibName = await getLibrary(baseControlType);
|
|
126
|
+
if (baseContLibName) {
|
|
127
|
+
const baseControlProps = await getControlPropertyDocumentation(baseControlType, baseContLibName);
|
|
128
|
+
return {
|
|
129
|
+
...baseControlProps,
|
|
130
|
+
...doc.properties
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
...doc.properties
|
|
136
|
+
};
|
|
137
|
+
} else {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Get documentation of a given control of a ui5 library.
|
|
144
|
+
*
|
|
145
|
+
* @param controlName name of the control.
|
|
146
|
+
* @param contLibName library name of the control
|
|
147
|
+
* @returns Promise<Properties | undefined>
|
|
148
|
+
*/
|
|
149
|
+
async function getDocumentation(controlName, contLibName) {
|
|
150
|
+
let doc;
|
|
151
|
+
try {
|
|
152
|
+
doc = await getControlPropertyDocumentation(controlName, contLibName);
|
|
153
|
+
} catch (err) {
|
|
154
|
+
Log.error(`Error in getting documentation for ${contLibName}`);
|
|
155
|
+
}
|
|
156
|
+
return doc;
|
|
157
|
+
}
|
|
158
|
+
var __exports = {
|
|
159
|
+
__esModule: true
|
|
160
|
+
};
|
|
161
|
+
__exports.getUi5ApiDtMetadata = getUi5ApiDtMetadata;
|
|
162
|
+
__exports.loadDefaultLibraries = loadDefaultLibraries;
|
|
163
|
+
__exports.getDocumentation = getDocumentation;
|
|
164
|
+
return __exports;
|
|
165
165
|
});
|
|
166
166
|
//# sourceMappingURL=documentation.js.map
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
sap.ui.define([], function () {
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
class FeatureService {
|
|
7
|
-
static features = {};
|
|
8
|
-
static #_ = (() => {
|
|
9
|
-
// eslint-disable-next-line fiori-custom/sap-no-dom-access, fiori-custom/sap-browser-api-warning
|
|
10
|
-
const bootstrapConfig = document.getElementById('sap-ui-bootstrap');
|
|
11
|
-
const features = bootstrapConfig?.getAttribute('data-open-ux-preview-features');
|
|
12
|
-
if (features) {
|
|
13
|
-
const featureToggles = JSON.parse(features);
|
|
14
|
-
for (const {
|
|
15
|
-
feature,
|
|
16
|
-
isEnabled
|
|
17
|
-
} of featureToggles) {
|
|
18
|
-
this.features[feature] = isEnabled;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
})();
|
|
22
|
-
/**
|
|
23
|
-
* Checks if given feature is enabled.
|
|
24
|
-
*
|
|
25
|
-
* @param featureId - Id of the feature.
|
|
26
|
-
* @returns true if feature is enabled.
|
|
27
|
-
*/
|
|
28
|
-
static isFeatureEnabled(featureId) {
|
|
29
|
-
return this.features[featureId] ?? false;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
var __exports = {
|
|
33
|
-
__esModule: true
|
|
34
|
-
};
|
|
35
|
-
__exports.FeatureService = FeatureService;
|
|
36
|
-
return __exports;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
sap.ui.define([], function () {
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
class FeatureService {
|
|
7
|
+
static features = {};
|
|
8
|
+
static #_ = (() => {
|
|
9
|
+
// eslint-disable-next-line fiori-custom/sap-no-dom-access, fiori-custom/sap-browser-api-warning
|
|
10
|
+
const bootstrapConfig = document.getElementById('sap-ui-bootstrap');
|
|
11
|
+
const features = bootstrapConfig?.getAttribute('data-open-ux-preview-features');
|
|
12
|
+
if (features) {
|
|
13
|
+
const featureToggles = JSON.parse(features);
|
|
14
|
+
for (const {
|
|
15
|
+
feature,
|
|
16
|
+
isEnabled
|
|
17
|
+
} of featureToggles) {
|
|
18
|
+
this.features[feature] = isEnabled;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
/**
|
|
23
|
+
* Checks if given feature is enabled.
|
|
24
|
+
*
|
|
25
|
+
* @param featureId - Id of the feature.
|
|
26
|
+
* @returns true if feature is enabled.
|
|
27
|
+
*/
|
|
28
|
+
static isFeatureEnabled(featureId) {
|
|
29
|
+
return this.features[featureId] ?? false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
var __exports = {
|
|
33
|
+
__esModule: true
|
|
34
|
+
};
|
|
35
|
+
__exports.FeatureService = FeatureService;
|
|
36
|
+
return __exports;
|
|
37
37
|
});
|
|
38
38
|
//# sourceMappingURL=feature-service.js.map
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
sap.ui.define(["sap/base/Log"], function (Log) {
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
function getString(message) {
|
|
7
|
-
if (typeof message === 'object') {
|
|
8
|
-
return JSON.stringify(message).toString();
|
|
9
|
-
}
|
|
10
|
-
return message;
|
|
11
|
-
}
|
|
12
|
-
const logger = {
|
|
13
|
-
info: message => {
|
|
14
|
-
Log.info(getString(message));
|
|
15
|
-
},
|
|
16
|
-
debug: message => {
|
|
17
|
-
Log.debug(getString(message));
|
|
18
|
-
},
|
|
19
|
-
warn: message => {
|
|
20
|
-
Log.warning(getString(message));
|
|
21
|
-
},
|
|
22
|
-
error: message => {
|
|
23
|
-
Log.error(getString(message));
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
var __exports = {
|
|
27
|
-
__esModule: true
|
|
28
|
-
};
|
|
29
|
-
__exports.logger = logger;
|
|
30
|
-
return __exports;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
sap.ui.define(["sap/base/Log"], function (Log) {
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
function getString(message) {
|
|
7
|
+
if (typeof message === 'object') {
|
|
8
|
+
return JSON.stringify(message).toString();
|
|
9
|
+
}
|
|
10
|
+
return message;
|
|
11
|
+
}
|
|
12
|
+
const logger = {
|
|
13
|
+
info: message => {
|
|
14
|
+
Log.info(getString(message));
|
|
15
|
+
},
|
|
16
|
+
debug: message => {
|
|
17
|
+
Log.debug(getString(message));
|
|
18
|
+
},
|
|
19
|
+
warn: message => {
|
|
20
|
+
Log.warning(getString(message));
|
|
21
|
+
},
|
|
22
|
+
error: message => {
|
|
23
|
+
Log.error(getString(message));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var __exports = {
|
|
27
|
+
__esModule: true
|
|
28
|
+
};
|
|
29
|
+
__exports.logger = logger;
|
|
30
|
+
return __exports;
|
|
31
31
|
});
|
|
32
32
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
sap.ui.define(["../control-data", "../utils", "sap/ui/dt/OverlayUtil", "sap/ui/dt/OverlayRegistry", "../../utils/core"], function (___control_data, ___utils, OverlayUtil, OverlayRegistry, ____utils_core) {
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
const buildControlData = ___control_data["buildControlData"];
|
|
7
|
-
const getRuntimeControl = ___utils["getRuntimeControl"];
|
|
8
|
-
const getComponent = ____utils_core["getComponent"];
|
|
9
|
-
const isEditable = function (changeService) {
|
|
10
|
-
let id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
11
|
-
let editable = false;
|
|
12
|
-
const control = sap.ui.getCore().byId(id);
|
|
13
|
-
if (!control) {
|
|
14
|
-
const component = getComponent(id);
|
|
15
|
-
if (component) {
|
|
16
|
-
return editable;
|
|
17
|
-
}
|
|
18
|
-
} else {
|
|
19
|
-
let controlOverlay = OverlayRegistry.getOverlay(control);
|
|
20
|
-
if (!controlOverlay?.getDomRef()) {
|
|
21
|
-
//look for closest control
|
|
22
|
-
controlOverlay = OverlayUtil.getClosestOverlayFor(control);
|
|
23
|
-
}
|
|
24
|
-
if (controlOverlay) {
|
|
25
|
-
const runtimeControl = getRuntimeControl(controlOverlay);
|
|
26
|
-
const controlData = buildControlData(runtimeControl, changeService, controlOverlay);
|
|
27
|
-
const prop = controlData.properties.find(item => item.isEnabled === true);
|
|
28
|
-
editable = prop !== undefined;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return editable;
|
|
32
|
-
};
|
|
33
|
-
var __exports = {
|
|
34
|
-
__esModule: true
|
|
35
|
-
};
|
|
36
|
-
__exports.isEditable = isEditable;
|
|
37
|
-
return __exports;
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
sap.ui.define(["../control-data", "../utils", "sap/ui/dt/OverlayUtil", "sap/ui/dt/OverlayRegistry", "../../utils/core"], function (___control_data, ___utils, OverlayUtil, OverlayRegistry, ____utils_core) {
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
const buildControlData = ___control_data["buildControlData"];
|
|
7
|
+
const getRuntimeControl = ___utils["getRuntimeControl"];
|
|
8
|
+
const getComponent = ____utils_core["getComponent"];
|
|
9
|
+
const isEditable = function (changeService) {
|
|
10
|
+
let id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
11
|
+
let editable = false;
|
|
12
|
+
const control = sap.ui.getCore().byId(id);
|
|
13
|
+
if (!control) {
|
|
14
|
+
const component = getComponent(id);
|
|
15
|
+
if (component) {
|
|
16
|
+
return editable;
|
|
17
|
+
}
|
|
18
|
+
} else {
|
|
19
|
+
let controlOverlay = OverlayRegistry.getOverlay(control);
|
|
20
|
+
if (!controlOverlay?.getDomRef()) {
|
|
21
|
+
//look for closest control
|
|
22
|
+
controlOverlay = OverlayUtil.getClosestOverlayFor(control);
|
|
23
|
+
}
|
|
24
|
+
if (controlOverlay) {
|
|
25
|
+
const runtimeControl = getRuntimeControl(controlOverlay);
|
|
26
|
+
const controlData = buildControlData(runtimeControl, changeService, controlOverlay);
|
|
27
|
+
const prop = controlData.properties.find(item => item.isEnabled === true);
|
|
28
|
+
editable = prop !== undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return editable;
|
|
32
|
+
};
|
|
33
|
+
var __exports = {
|
|
34
|
+
__esModule: true
|
|
35
|
+
};
|
|
36
|
+
__exports.isEditable = isEditable;
|
|
37
|
+
return __exports;
|
|
38
38
|
});
|
|
39
39
|
//# sourceMappingURL=editable.js.map
|