@sap-ux/preview-middleware 0.11.20 → 0.11.21
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/controllers/ExtensionPoint.controller.js +37 -5
- package/dist/client/adp/controllers/ExtensionPoint.controller.ts +57 -9
- package/dist/client/adp/extension-point.js +10 -6
- package/dist/client/adp/extension-point.ts +20 -10
- package/dist/client/adp/ui/ExtensionPoint.view.xml +10 -1
- package/package.json +5 -5
|
@@ -13,10 +13,10 @@ sap.ui.define(["sap/m/MessageToast", "sap/ui/model/json/JSONModel", "../api-hand
|
|
|
13
13
|
* @namespace open.ux.preview.client.adp.controllers
|
|
14
14
|
*/
|
|
15
15
|
const ExtensionPoint = BaseDialog.extend("open.ux.preview.client.adp.controllers.ExtensionPoint", {
|
|
16
|
-
constructor: function _constructor(name, _overlays, _rta,
|
|
16
|
+
constructor: function _constructor(name, _overlays, _rta, data) {
|
|
17
17
|
BaseDialog.prototype.constructor.call(this, name);
|
|
18
18
|
this.model = new JSONModel();
|
|
19
|
-
this.
|
|
19
|
+
this.data = data;
|
|
20
20
|
},
|
|
21
21
|
onInit: async function _onInit() {
|
|
22
22
|
this.dialog = this.byId('addFragmentAtExtPointDialog');
|
|
@@ -32,8 +32,33 @@ sap.ui.define(["sap/m/MessageToast", "sap/ui/model/json/JSONModel", "../api-hand
|
|
|
32
32
|
await this.createNewFragment(fragmentName);
|
|
33
33
|
this.handleDialogClose();
|
|
34
34
|
},
|
|
35
|
+
onExtensionPointHandler: function _onExtensionPointHandler(event) {
|
|
36
|
+
const source = event.getSource();
|
|
37
|
+
const selectedItem = source.getSelectedItem();
|
|
38
|
+
let extensionPointName = '';
|
|
39
|
+
if (selectedItem) {
|
|
40
|
+
extensionPointName = selectedItem.getText();
|
|
41
|
+
}
|
|
42
|
+
this.model.setProperty('/extensionPointName', extensionPointName);
|
|
43
|
+
},
|
|
35
44
|
buildDialogData: async function _buildDialogData() {
|
|
36
|
-
|
|
45
|
+
const name = this.data?.name;
|
|
46
|
+
if (name) {
|
|
47
|
+
const extensionPointList = [{
|
|
48
|
+
key: 0,
|
|
49
|
+
value: name
|
|
50
|
+
}];
|
|
51
|
+
this.updateModel(name, 0, extensionPointList, false);
|
|
52
|
+
} else {
|
|
53
|
+
const extensionPointList = this.data.info.map((v, idx) => {
|
|
54
|
+
return {
|
|
55
|
+
key: idx,
|
|
56
|
+
value: v.name
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
const enabled = extensionPointList.length > 1;
|
|
60
|
+
this.updateModel(extensionPointList[0].value, 0, extensionPointList, enabled);
|
|
61
|
+
}
|
|
37
62
|
try {
|
|
38
63
|
const {
|
|
39
64
|
fragments
|
|
@@ -44,6 +69,12 @@ sap.ui.define(["sap/m/MessageToast", "sap/ui/model/json/JSONModel", "../api-hand
|
|
|
44
69
|
throw new Error(e.message);
|
|
45
70
|
}
|
|
46
71
|
},
|
|
72
|
+
updateModel: function _updateModel(name, key, list, enabled) {
|
|
73
|
+
this.model.setProperty('/extensionPointName', name);
|
|
74
|
+
this.model.setProperty('/extensionPointKey', key);
|
|
75
|
+
this.model.setProperty('/extensionPointList', list);
|
|
76
|
+
this.model.setProperty('/extensionListEnabled', enabled);
|
|
77
|
+
},
|
|
47
78
|
createNewFragment: async function _createNewFragment(fragmentName) {
|
|
48
79
|
try {
|
|
49
80
|
await writeFragment({
|
|
@@ -58,11 +89,12 @@ sap.ui.define(["sap/m/MessageToast", "sap/ui/model/json/JSONModel", "../api-hand
|
|
|
58
89
|
await this.createExtensionPointFragmentChange(fragmentName);
|
|
59
90
|
},
|
|
60
91
|
createExtensionPointFragmentChange: async function _createExtensionPointFragmentChange(fragmentName) {
|
|
92
|
+
const extensionPointName = this.model.getProperty('/extensionPointName');
|
|
61
93
|
const modifiedValue = {
|
|
62
94
|
fragmentPath: `fragments/${fragmentName}.fragment.xml`,
|
|
63
|
-
extensionPointName
|
|
95
|
+
extensionPointName
|
|
64
96
|
};
|
|
65
|
-
this.
|
|
97
|
+
this.data.deferred.resolve(modifiedValue);
|
|
66
98
|
}
|
|
67
99
|
});
|
|
68
100
|
return ExtensionPoint;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** sap.m */
|
|
2
|
-
import Button from 'sap/m/Button';
|
|
2
|
+
import type Button from 'sap/m/Button';
|
|
3
|
+
import type Select from 'sap/m/Select';
|
|
3
4
|
import type Dialog from 'sap/m/Dialog';
|
|
4
5
|
import MessageToast from 'sap/m/MessageToast';
|
|
5
6
|
|
|
@@ -17,18 +18,18 @@ import type RuntimeAuthoring from 'sap/ui/rta/RuntimeAuthoring';
|
|
|
17
18
|
|
|
18
19
|
import { getFragments, writeFragment } from '../api-handler';
|
|
19
20
|
import BaseDialog from './BaseDialog.controller';
|
|
20
|
-
import { ExtensionPointData } from '../extension-point';
|
|
21
|
+
import { ExtensionPointData, ExtensionPointInfo } from '../extension-point';
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* @namespace open.ux.preview.client.adp.controllers
|
|
24
25
|
*/
|
|
25
26
|
export default class ExtensionPoint extends BaseDialog {
|
|
26
|
-
public readonly
|
|
27
|
+
public readonly data: ExtensionPointData;
|
|
27
28
|
|
|
28
|
-
constructor(name: string, _overlays: UI5Element, _rta: RuntimeAuthoring,
|
|
29
|
+
constructor(name: string, _overlays: UI5Element, _rta: RuntimeAuthoring, data: ExtensionPointData) {
|
|
29
30
|
super(name);
|
|
30
31
|
this.model = new JSONModel();
|
|
31
|
-
this.
|
|
32
|
+
this.data = data;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/**
|
|
@@ -51,7 +52,7 @@ export default class ExtensionPoint extends BaseDialog {
|
|
|
51
52
|
*
|
|
52
53
|
* @param event Event
|
|
53
54
|
*/
|
|
54
|
-
async onCreateBtnPress(event: Event) {
|
|
55
|
+
async onCreateBtnPress(event: Event): Promise<void> {
|
|
55
56
|
const source = event.getSource<Button>();
|
|
56
57
|
source.setEnabled(false);
|
|
57
58
|
|
|
@@ -62,11 +63,42 @@ export default class ExtensionPoint extends BaseDialog {
|
|
|
62
63
|
this.handleDialogClose();
|
|
63
64
|
}
|
|
64
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Handler for extension point select control
|
|
68
|
+
*
|
|
69
|
+
* @param event Select control change event
|
|
70
|
+
*/
|
|
71
|
+
onExtensionPointHandler(event: Event): void {
|
|
72
|
+
const source = event.getSource<Select>();
|
|
73
|
+
|
|
74
|
+
const selectedItem = source.getSelectedItem();
|
|
75
|
+
|
|
76
|
+
let extensionPointName = '';
|
|
77
|
+
if (selectedItem) {
|
|
78
|
+
extensionPointName = selectedItem.getText();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
this.model.setProperty('/extensionPointName', extensionPointName);
|
|
82
|
+
}
|
|
83
|
+
|
|
65
84
|
/**
|
|
66
85
|
* Builds data that is used in the dialog
|
|
67
86
|
*/
|
|
68
87
|
async buildDialogData(): Promise<void> {
|
|
69
|
-
|
|
88
|
+
const name = this.data?.name;
|
|
89
|
+
if (name) {
|
|
90
|
+
const extensionPointList = [{ key: 0, value: name }];
|
|
91
|
+
this.updateModel(name, 0, extensionPointList, false);
|
|
92
|
+
} else {
|
|
93
|
+
const extensionPointList = this.data.info.map((v: ExtensionPointInfo, idx: number) => {
|
|
94
|
+
return {
|
|
95
|
+
key: idx,
|
|
96
|
+
value: v.name
|
|
97
|
+
};
|
|
98
|
+
});
|
|
99
|
+
const enabled = extensionPointList.length > 1;
|
|
100
|
+
this.updateModel(extensionPointList[0].value, 0, extensionPointList, enabled);
|
|
101
|
+
}
|
|
70
102
|
|
|
71
103
|
try {
|
|
72
104
|
const { fragments } = await getFragments();
|
|
@@ -78,6 +110,21 @@ export default class ExtensionPoint extends BaseDialog {
|
|
|
78
110
|
}
|
|
79
111
|
}
|
|
80
112
|
|
|
113
|
+
/**
|
|
114
|
+
* Updates the Select control according to provided values
|
|
115
|
+
*
|
|
116
|
+
* @param name Extension point name
|
|
117
|
+
* @param key Selected extension point key
|
|
118
|
+
* @param list All of the extension points that are under a view
|
|
119
|
+
* @param enabled Enables the select control
|
|
120
|
+
*/
|
|
121
|
+
private updateModel(name: string, key: number, list: { key: number; value: string }[], enabled: boolean): void {
|
|
122
|
+
this.model.setProperty('/extensionPointName', name);
|
|
123
|
+
this.model.setProperty('/extensionPointKey', key);
|
|
124
|
+
this.model.setProperty('/extensionPointList', list);
|
|
125
|
+
this.model.setProperty('/extensionListEnabled', enabled);
|
|
126
|
+
}
|
|
127
|
+
|
|
81
128
|
/**
|
|
82
129
|
* Creates a new fragment for the specified extension point
|
|
83
130
|
*
|
|
@@ -102,11 +149,12 @@ export default class ExtensionPoint extends BaseDialog {
|
|
|
102
149
|
* @param fragmentName Fragment name
|
|
103
150
|
*/
|
|
104
151
|
private async createExtensionPointFragmentChange(fragmentName: string): Promise<void> {
|
|
152
|
+
const extensionPointName = this.model.getProperty('/extensionPointName');
|
|
105
153
|
const modifiedValue = {
|
|
106
154
|
fragmentPath: `fragments/${fragmentName}.fragment.xml`,
|
|
107
|
-
extensionPointName
|
|
155
|
+
extensionPointName
|
|
108
156
|
};
|
|
109
157
|
|
|
110
|
-
this.
|
|
158
|
+
this.data.deferred.resolve(modifiedValue);
|
|
111
159
|
}
|
|
112
160
|
}
|
|
@@ -21,9 +21,10 @@ sap.ui.define([
|
|
|
21
21
|
subscribe(async action => {
|
|
22
22
|
if (addExtensionPoint.match(action)) {
|
|
23
23
|
try {
|
|
24
|
-
const {controlId} = action.payload;
|
|
24
|
+
const {controlId, name} = action.payload;
|
|
25
25
|
const service = await this.rta.getService('action');
|
|
26
26
|
service.execute(controlId, this.actionId);
|
|
27
|
+
this.selectedExtensionPointName = name;
|
|
27
28
|
} catch (e) {
|
|
28
29
|
throw new Error(`Failed to execute service with actionId: ${ this.actionId }`);
|
|
29
30
|
}
|
|
@@ -35,19 +36,22 @@ sap.ui.define([
|
|
|
35
36
|
const commandFactory = new CommandFactory({ flexSettings });
|
|
36
37
|
const plugin = new AddXMLAtExtensionPoint({
|
|
37
38
|
commandFactory,
|
|
38
|
-
fragmentHandler: async (overlay, info) => await this.fragmentHandler(overlay, info
|
|
39
|
+
fragmentHandler: async (overlay, info) => await this.fragmentHandler(overlay, info)
|
|
39
40
|
});
|
|
40
41
|
const defaultPlugins = this.rta.getDefaultPlugins();
|
|
41
42
|
defaultPlugins.addXMLAtExtensionPoint = plugin;
|
|
42
43
|
this.rta.setPlugins(defaultPlugins);
|
|
43
44
|
}
|
|
44
45
|
async fragmentHandler(overlay, info) {
|
|
45
|
-
let
|
|
46
|
+
let deferred = createDeferred();
|
|
47
|
+
const name = this.selectedExtensionPointName;
|
|
46
48
|
await handler(overlay, this.rta, DialogNames.ADD_FRAGMENT_AT_EXTENSION_POINT, {
|
|
47
|
-
name
|
|
48
|
-
|
|
49
|
+
name,
|
|
50
|
+
info,
|
|
51
|
+
deferred
|
|
49
52
|
});
|
|
50
|
-
|
|
53
|
+
this.selectedExtensionPointName = '';
|
|
54
|
+
return deferred.promise;
|
|
51
55
|
}
|
|
52
56
|
}
|
|
53
57
|
return ExtensionPointService;
|
|
@@ -20,9 +20,8 @@ type DeferredExtPointData = {
|
|
|
20
20
|
extensionPointName: string | undefined;
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
-
export interface
|
|
23
|
+
export interface ExtensionPointInfo {
|
|
24
24
|
name: string;
|
|
25
|
-
deffered: Deferred<DeferredExtPointData>;
|
|
26
25
|
index?: number;
|
|
27
26
|
view?: View;
|
|
28
27
|
createdControls?: [];
|
|
@@ -33,8 +32,15 @@ export interface ExtensionPointData {
|
|
|
33
32
|
targetControl?: UI5Element;
|
|
34
33
|
}
|
|
35
34
|
|
|
35
|
+
export interface ExtensionPointData {
|
|
36
|
+
name: string;
|
|
37
|
+
deferred: Deferred<DeferredExtPointData>;
|
|
38
|
+
info: ExtensionPointInfo[];
|
|
39
|
+
}
|
|
40
|
+
|
|
36
41
|
export default class ExtensionPointService {
|
|
37
42
|
private readonly actionId = 'CTX_ADDXML_AT_EXTENSIONPOINT';
|
|
43
|
+
private selectedExtensionPointName: string;
|
|
38
44
|
|
|
39
45
|
/**
|
|
40
46
|
* @param rta Runtime Authoring
|
|
@@ -51,11 +57,12 @@ export default class ExtensionPointService {
|
|
|
51
57
|
subscribe(async (action: ExternalAction): Promise<void> => {
|
|
52
58
|
if (addExtensionPoint.match(action)) {
|
|
53
59
|
try {
|
|
54
|
-
const { controlId } = action.payload;
|
|
60
|
+
const { controlId, name } = action.payload;
|
|
55
61
|
|
|
56
62
|
const service = await this.rta.getService<ActionService>('action');
|
|
57
63
|
|
|
58
64
|
service.execute(controlId, this.actionId);
|
|
65
|
+
this.selectedExtensionPointName = name;
|
|
59
66
|
} catch (e) {
|
|
60
67
|
throw new Error(`Failed to execute service with actionId: ${this.actionId}`);
|
|
61
68
|
}
|
|
@@ -75,7 +82,7 @@ export default class ExtensionPointService {
|
|
|
75
82
|
const plugin = new AddXMLAtExtensionPoint({
|
|
76
83
|
commandFactory,
|
|
77
84
|
fragmentHandler: async (overlay: UI5Element, info: ExtensionPointData[]) =>
|
|
78
|
-
await this.fragmentHandler(overlay, info
|
|
85
|
+
await this.fragmentHandler(overlay, info)
|
|
79
86
|
});
|
|
80
87
|
|
|
81
88
|
const defaultPlugins = this.rta.getDefaultPlugins();
|
|
@@ -88,16 +95,19 @@ export default class ExtensionPointService {
|
|
|
88
95
|
*
|
|
89
96
|
* @param overlay UI5 Element overlay
|
|
90
97
|
* @param info Extension point data from the plugin
|
|
91
|
-
* @returns
|
|
98
|
+
* @returns Deferred extension point data that is provided to the plugin
|
|
92
99
|
*/
|
|
93
|
-
public async fragmentHandler(overlay: UI5Element, info: ExtensionPointData): Promise<DeferredExtPointData> {
|
|
94
|
-
let
|
|
100
|
+
public async fragmentHandler(overlay: UI5Element, info: ExtensionPointData[]): Promise<DeferredExtPointData> {
|
|
101
|
+
let deferred = createDeferred<DeferredExtPointData>();
|
|
102
|
+
const name = this.selectedExtensionPointName;
|
|
95
103
|
|
|
96
104
|
await handler(overlay, this.rta, DialogNames.ADD_FRAGMENT_AT_EXTENSION_POINT, {
|
|
97
|
-
name
|
|
98
|
-
|
|
105
|
+
name,
|
|
106
|
+
info,
|
|
107
|
+
deferred
|
|
99
108
|
} as ExtensionPointData);
|
|
100
109
|
|
|
101
|
-
|
|
110
|
+
this.selectedExtensionPointName = '';
|
|
111
|
+
return deferred.promise;
|
|
102
112
|
}
|
|
103
113
|
}
|
|
@@ -11,7 +11,16 @@
|
|
|
11
11
|
singleContainerFullSize="false">
|
|
12
12
|
<f:content>
|
|
13
13
|
<Label text="Extension Point" />
|
|
14
|
-
<
|
|
14
|
+
<Select
|
|
15
|
+
enabled="{/extensionListEnabled}"
|
|
16
|
+
change="onExtensionPointHandler"
|
|
17
|
+
selectedKey='{/extensionPointKey}'
|
|
18
|
+
items="{
|
|
19
|
+
path: '/extensionPointList',
|
|
20
|
+
sorter: { path: 'text' }
|
|
21
|
+
}">
|
|
22
|
+
<core:Item key="{key}" text="{value}" />
|
|
23
|
+
</Select>
|
|
15
24
|
<Label text="Fragment Name" />
|
|
16
25
|
<Input
|
|
17
26
|
description=".fragment.xml"
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"bugs": {
|
|
10
10
|
"url": "https://github.com/SAP/open-ux-tools/issues?q=is%3Aopen+is%3Aissue+label%3Abug+label%3Apreview-middleware"
|
|
11
11
|
},
|
|
12
|
-
"version": "0.11.
|
|
12
|
+
"version": "0.11.21",
|
|
13
13
|
"license": "Apache-2.0",
|
|
14
14
|
"author": "@SAP/ux-tools-team",
|
|
15
15
|
"main": "dist/index.js",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"ejs": "3.1.9",
|
|
26
26
|
"@sap-ux/logger": "0.4.0",
|
|
27
|
-
"@sap-ux/
|
|
28
|
-
"@sap-ux/
|
|
27
|
+
"@sap-ux/adp-tooling": "0.7.2",
|
|
28
|
+
"@sap-ux/control-property-editor-sources": "npm:@sap-ux/control-property-editor@0.4.7"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/ejs": "3.1.2",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"supertest": "6.3.3",
|
|
39
39
|
"@sap-ux-private/playwright": "0.0.1",
|
|
40
40
|
"dotenv": "16.3.1",
|
|
41
|
-
"@private/preview-middleware-client": "npm:@sap-ux-private/preview-middleware-client@0.8.
|
|
42
|
-
"@sap-ux/project-access": "1.16.
|
|
41
|
+
"@private/preview-middleware-client": "npm:@sap-ux-private/preview-middleware-client@0.8.12",
|
|
42
|
+
"@sap-ux/project-access": "1.16.2",
|
|
43
43
|
"@sap-ux/store": "0.4.0"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|