dbm 1.1.19 → 1.1.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/graphapi/webclient/decode/index.js +12 -1
- package/package.json +1 -1
- package/react/admin/CreatePage.js +37 -2
- package/react/admin/EditPage.js +55 -11
- package/react/admin/objects/RunObjectCommands.js +13 -5
- package/react/admin/objects/UserList.js +123 -0
- package/react/admin/objects/UserListRow.js +35 -0
- package/react/admin/objects/index.js +2 -0
- package/react/admin/objects/itemeditors/MainImage.js +1 -1
- package/react/admin/objects/itemeditors/RichDescription.js +1 -1
- package/react/admin/objects/itemeditors/SingleRelation.js +52 -0
- package/react/admin/objects/itemeditors/index.js +2 -1
- package/react/blocks/admin/objects/RunObjectCommands.js +18 -1
- package/react/blocks/admin/objects/User.js +47 -0
- package/react/blocks/admin/objects/Users.js +15 -0
- package/react/blocks/admin/objects/index.js +3 -1
- package/react/blocks/index.js +29 -0
|
@@ -59,7 +59,9 @@ export const fullSetup = function() {
|
|
|
59
59
|
{
|
|
60
60
|
let name = "urlRequest";
|
|
61
61
|
let currentDecoder = new Dbm.graphapi.webclient.decode.DecodeBaseObject();
|
|
62
|
-
currentDecoder.item.setValue("copyFields", ["meta/description", "seo/noIndex", "seo/noFollow"]);
|
|
62
|
+
currentDecoder.item.setValue("copyFields", ["meta/description", "seo/noIndex", "seo/noFollow", "publishDate"]);
|
|
63
|
+
currentDecoder.item.setValue("copyLink", ["category"]);
|
|
64
|
+
currentDecoder.item.setValue("copyLinks", ["categories"]);
|
|
63
65
|
currentDecoder.item.setValue("encodingType", name);
|
|
64
66
|
currentDecoder.item.register(decodePrefix + name);
|
|
65
67
|
}
|
|
@@ -174,4 +176,13 @@ export const fullSetup = function() {
|
|
|
174
176
|
currentDecoder.item.setValue("encodingType", name);
|
|
175
177
|
currentDecoder.item.register(decodePrefix + name);
|
|
176
178
|
}
|
|
179
|
+
|
|
180
|
+
{
|
|
181
|
+
let name = "admin_user";
|
|
182
|
+
let currentDecoder = new Dbm.graphapi.webclient.decode.DecodeBaseObject();
|
|
183
|
+
currentDecoder.item.setValue("copyFields", ["name", "username"]);
|
|
184
|
+
currentDecoder.item.setValue("copyLinks", ["roles"]);
|
|
185
|
+
currentDecoder.item.setValue("encodingType", name);
|
|
186
|
+
currentDecoder.item.register(decodePrefix + name);
|
|
187
|
+
}
|
|
177
188
|
}
|
package/package.json
CHANGED
|
@@ -6,6 +6,9 @@ export default class CreatePage extends Dbm.react.BaseObject {
|
|
|
6
6
|
super._construct();
|
|
7
7
|
|
|
8
8
|
this.item.requireProperty("title", "");
|
|
9
|
+
this.item.requireProperty("parent", 0);
|
|
10
|
+
Dbm.flow.addUpdateCommand(this.item.properties.parent, Dbm.commands.callFunction(this._parentSelected.bind(this)));
|
|
11
|
+
this.item.requireProperty("parentUrl", "");
|
|
9
12
|
this.item.requireProperty("url", "");
|
|
10
13
|
this.item.requireProperty("freeUrl", "");
|
|
11
14
|
this.item.requireProperty("updateSlugFromTitle", true);
|
|
@@ -22,7 +25,7 @@ export default class CreatePage extends Dbm.react.BaseObject {
|
|
|
22
25
|
console.log(this.item.updateSlugFromTitle);
|
|
23
26
|
|
|
24
27
|
if(this.item.updateSlugFromTitle) {
|
|
25
|
-
this.item.url = Dbm.utils.StringFunctions.createNiceFilePath(this.item.title);
|
|
28
|
+
this.item.url = this.item.parentUrl + Dbm.utils.StringFunctions.createNiceFilePath(this.item.title);
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
}
|
|
@@ -49,10 +52,12 @@ export default class CreatePage extends Dbm.react.BaseObject {
|
|
|
49
52
|
|
|
50
53
|
_freeUrlStatusChanged(aUrl, aRequest) {
|
|
51
54
|
console.log("_freeUrlStatusChanged");
|
|
55
|
+
console.log(aUrl, aRequest);
|
|
56
|
+
|
|
52
57
|
if(aRequest.status === 1) {
|
|
53
58
|
let currentUrl = this.item.url;
|
|
54
59
|
if(!currentUrl) {
|
|
55
|
-
currentUrl = Dbm.utils.StringFunctions.createNiceFilePath(this.item.title);
|
|
60
|
+
currentUrl = this.item.parentUrl + Dbm.utils.StringFunctions.createNiceFilePath(this.item.title);
|
|
56
61
|
this.item.url = currentUrl;
|
|
57
62
|
}
|
|
58
63
|
if(currentUrl === aUrl) {
|
|
@@ -65,13 +70,34 @@ export default class CreatePage extends Dbm.react.BaseObject {
|
|
|
65
70
|
this.item.updateSlugFromTitle = false;
|
|
66
71
|
}
|
|
67
72
|
|
|
73
|
+
_parentSelected() {
|
|
74
|
+
console.log("_parentSelected");
|
|
75
|
+
let id = this.item.parent;
|
|
76
|
+
console.log(id);
|
|
77
|
+
|
|
78
|
+
let parentUrl = "";
|
|
79
|
+
|
|
80
|
+
if(id) {
|
|
81
|
+
let item = Dbm.getInstance().repository.getItem(id);
|
|
82
|
+
|
|
83
|
+
parentUrl = item.url.substring(1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this.item.parentUrl = parentUrl;
|
|
87
|
+
|
|
88
|
+
this._titleChanged();
|
|
89
|
+
}
|
|
90
|
+
|
|
68
91
|
_create() {
|
|
69
92
|
console.log("_create");
|
|
70
93
|
|
|
71
94
|
let fullUrl = this.item.freeUrl + "/";
|
|
72
95
|
|
|
96
|
+
let currentDate = (new Date()).toISOString().split("T")[0];
|
|
97
|
+
|
|
73
98
|
let changes = [
|
|
74
99
|
{"type": "setField", "data": {"value": this.item.title, "field": "title"}},
|
|
100
|
+
{"type": "setField", "data": {"value": currentDate, "field": "publishDate"}},
|
|
75
101
|
{"type": "setUrl", "data": {"value": fullUrl}}
|
|
76
102
|
]
|
|
77
103
|
|
|
@@ -96,6 +122,15 @@ export default class CreatePage extends Dbm.react.BaseObject {
|
|
|
96
122
|
React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.title, "id": this._titleFieldId, className: "standard-field standard-field-padding full-width"}),
|
|
97
123
|
),
|
|
98
124
|
React.createElement("div", {className: "spacing standard"}),
|
|
125
|
+
React.createElement("div", {},
|
|
126
|
+
React.createElement("label", {className: "standard-field-label"},
|
|
127
|
+
"Parent page"
|
|
128
|
+
),
|
|
129
|
+
React.createElement("div", {},
|
|
130
|
+
React.createElement(Dbm.react.form.GraphApiObjectSelection, {"value": this.item.properties.parent, objectType: "page", encoding: "urlRequest", nameField: "url", className: "standard-field standard-field-padding full-width"}),
|
|
131
|
+
)
|
|
132
|
+
),
|
|
133
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
99
134
|
React.createElement("div", {},
|
|
100
135
|
React.createElement("label", {className: "standard-field-label"},
|
|
101
136
|
"Url"
|
package/react/admin/EditPage.js
CHANGED
|
@@ -17,6 +17,8 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
17
17
|
itemEditor.addFieldEditor("title", page.title, "title");
|
|
18
18
|
itemEditor.addFieldEditor("navigationName", page.navigationName); //METODO: add update encoding
|
|
19
19
|
itemEditor.addFieldEditor("content", page.content, "content");
|
|
20
|
+
itemEditor.addFieldEditor("publishDate", page.publishDate, "urlRequest");
|
|
21
|
+
itemEditor.addOutgoingRelationEditor("in", "group/pageCategory", page.category ? page.category.id : 0, "urlRequest");
|
|
20
22
|
itemEditor.addEditor("url", page.url, Dbm.graphapi.webclient.admin.SaveFunctions.setUrl, "url");
|
|
21
23
|
|
|
22
24
|
let descriptionEditor = itemEditor.addFieldEditor("meta/description", page["meta/description"], "meta/description");
|
|
@@ -26,6 +28,7 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
26
28
|
itemEditor.addFieldEditor("seo/noIndex", page["seo/noIndex"], "seo/noIndex");
|
|
27
29
|
itemEditor.addFieldEditor("seo/noFollow", page["seo/noFollow"], "seo/noFollow");
|
|
28
30
|
|
|
31
|
+
this.item.requireProperty("importExportOpen", "");
|
|
29
32
|
this.item.requireProperty("importText", "");
|
|
30
33
|
}
|
|
31
34
|
|
|
@@ -146,6 +149,12 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
146
149
|
console.log(aRequest, titles);
|
|
147
150
|
}
|
|
148
151
|
|
|
152
|
+
_toggleImportExport() {
|
|
153
|
+
console.log("_toggleImportExport");
|
|
154
|
+
|
|
155
|
+
this.item.importExportOpen = !this.item.importExportOpen;
|
|
156
|
+
}
|
|
157
|
+
|
|
149
158
|
_renderMainElement() {
|
|
150
159
|
|
|
151
160
|
let page = this.context.page;
|
|
@@ -176,6 +185,20 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
176
185
|
),
|
|
177
186
|
React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("url").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Url"}),
|
|
178
187
|
),
|
|
188
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
189
|
+
React.createElement("div", {},
|
|
190
|
+
React.createElement("label", {className: "standard-field-label"},
|
|
191
|
+
"Publish date"
|
|
192
|
+
),
|
|
193
|
+
React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("publishDate").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "YYYY-MM-DD", "type": "date"}),
|
|
194
|
+
),
|
|
195
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
196
|
+
React.createElement("div", {},
|
|
197
|
+
React.createElement("label", {className: "standard-field-label"},
|
|
198
|
+
"Category"
|
|
199
|
+
),
|
|
200
|
+
React.createElement(Dbm.react.form.GraphApiObjectSelection, {"value": itemEditor.getEditor("relation_out_in_group/pageCategory").item.editValue.value, objectType: "group/pageCategory", className: "standard-field standard-field-padding full-width"}),
|
|
201
|
+
),
|
|
179
202
|
),
|
|
180
203
|
React.createElement("div", {className: "spacing standard"}),
|
|
181
204
|
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
@@ -219,18 +242,39 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
219
242
|
),
|
|
220
243
|
React.createElement("div", {},
|
|
221
244
|
React.createElement(Dbm.react.admin.editor.Editor, {"value": itemEditor.getEditor("content").item.editValue.value, "ref": this.createRef("editor")}),
|
|
245
|
+
)
|
|
246
|
+
),
|
|
247
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
248
|
+
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
249
|
+
React.createElement("label", {className: "standard-field-label", "onClick": () => {this._toggleImportExport()}},
|
|
250
|
+
"Import/export"
|
|
222
251
|
),
|
|
223
|
-
React.createElement(
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
252
|
+
React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.importExportOpen},
|
|
253
|
+
React.createElement("div", {},
|
|
254
|
+
React.createElement("div", {className: "flex-row small-item-spacing"},
|
|
255
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
256
|
+
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._export()}},
|
|
257
|
+
"Export"
|
|
258
|
+
)
|
|
259
|
+
)
|
|
260
|
+
),
|
|
261
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
262
|
+
React.createElement(Dbm.react.form.TextArea, {value: this.item.properties.importText, className: "standard-field standard-field-padding full-width"}),
|
|
263
|
+
React.createElement("div", {className: "flex-row small-item-spacing"},
|
|
264
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
265
|
+
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._import()}},
|
|
266
|
+
"Import"
|
|
267
|
+
)
|
|
268
|
+
)
|
|
269
|
+
)
|
|
270
|
+
/*
|
|
271
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
272
|
+
React.createElement("div", {onClick: () => {this._generateHelpSectionSuggestions()}, className: "action-button action-button-padding"}, "Dev: Help sections"),
|
|
273
|
+
),
|
|
274
|
+
*/
|
|
275
|
+
)
|
|
276
|
+
)
|
|
277
|
+
|
|
234
278
|
),
|
|
235
279
|
React.createElement("div", {className: "spacing standard"}),
|
|
236
280
|
React.createElement("div", {className: "save-all-position"},
|
|
@@ -45,11 +45,19 @@ export default class RunObjectCommands extends Dbm.react.BaseObject {
|
|
|
45
45
|
let id = this.getPropValue("id");
|
|
46
46
|
|
|
47
47
|
return React.createElement("div", {},
|
|
48
|
-
React.createElement(Dbm.react.form.
|
|
49
|
-
React.createElement(Dbm.react.form.
|
|
50
|
-
React.createElement("div", {
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
React.createElement(Dbm.react.form.LabelledArea, {"label": "Item id"}),
|
|
49
|
+
React.createElement(Dbm.react.form.FormField, {value: this.getDynamicProp("id"), "className": "standard-field standard-field-padding full-width"}),
|
|
50
|
+
React.createElement("div", {className: "spacing small"}),
|
|
51
|
+
React.createElement(Dbm.react.form.LabelledArea, {"label": "Command"}),
|
|
52
|
+
React.createElement(Dbm.react.form.TextArea, {value: this.item.properties.changes, "className": "standard-field standard-field-padding full-width"}),
|
|
53
|
+
React.createElement("div", {className: "spacing small"}),
|
|
54
|
+
React.createElement("div", {className: "flex-row"},
|
|
55
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
56
|
+
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._runCommand()}},
|
|
57
|
+
"Run"
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
)
|
|
53
61
|
)
|
|
54
62
|
}
|
|
55
63
|
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class UserList extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
this.item.requireProperty("username", "");
|
|
9
|
+
this.item.requireProperty("password", "");
|
|
10
|
+
this.item.requireProperty("role", null);
|
|
11
|
+
|
|
12
|
+
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
13
|
+
|
|
14
|
+
this.item.requireProperty("items", []);
|
|
15
|
+
|
|
16
|
+
let encodings = ["admin_user"];
|
|
17
|
+
|
|
18
|
+
let allLoaded = Dbm.flow.updatefunctions.logic.allAtValue(Dbm.loading.LoadingStatus.LOADED);
|
|
19
|
+
this.item.requireProperty("loaded", false);
|
|
20
|
+
|
|
21
|
+
{
|
|
22
|
+
let request = graphApi.requestRange(
|
|
23
|
+
[
|
|
24
|
+
{"type": "includePrivate"},
|
|
25
|
+
{"type": "includeDraft"},
|
|
26
|
+
{"type": "byObjectType", "objectType": "user"},
|
|
27
|
+
],
|
|
28
|
+
encodings
|
|
29
|
+
);
|
|
30
|
+
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._loaded.bind(this), [request]));
|
|
31
|
+
allLoaded.addCheck(request.properties.status);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
this.item.properties.loaded.connectInput(allLoaded.output.properties.value);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
_loaded(aRequest) {
|
|
38
|
+
console.log("_loaded");
|
|
39
|
+
|
|
40
|
+
let currentArray = [].concat(aRequest.items);
|
|
41
|
+
|
|
42
|
+
let nameField = this.getPropValueWithDefault("nameField", "name");
|
|
43
|
+
Dbm.utils.ArrayFunctions.sortOnField(currentArray, nameField);
|
|
44
|
+
|
|
45
|
+
this.item.items = currentArray;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
_create() {
|
|
49
|
+
console.log("_create");
|
|
50
|
+
|
|
51
|
+
let data = {
|
|
52
|
+
username: this.item.username,
|
|
53
|
+
password: this.item.password,
|
|
54
|
+
role: this.item.role,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
let request = Dbm.getInstance().repository.getItem("graphApi").controller.performAction("admin/addUser", data);
|
|
58
|
+
|
|
59
|
+
Dbm.flow.addUpdateCommand(request.properties.status, Dbm.commands.callFunction(this._created.bind(this), [request]));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
_created(aRequest) {
|
|
63
|
+
console.log("_created");
|
|
64
|
+
console.log(aRequest);
|
|
65
|
+
|
|
66
|
+
if(aRequest.data.id) {
|
|
67
|
+
if(!aRequest.data.created) {
|
|
68
|
+
alert("User already exists. No changes made.");
|
|
69
|
+
}
|
|
70
|
+
Dbm.getInstance().repository.getItem("siteNavigation").controller.navigate("/admin/users/user/?id=" + aRequest.data.id);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
alert("An error occured");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
_renderMainElement() {
|
|
78
|
+
|
|
79
|
+
let id = Dbm.react.source.contextVariable("item.id");
|
|
80
|
+
let text = Dbm.react.source.contextVariable("item.username");
|
|
81
|
+
|
|
82
|
+
return React.createElement("div", {"className": "standard-alternating-rows"},
|
|
83
|
+
React.createElement(Dbm.react.area.List, {items: this.item.properties.items},
|
|
84
|
+
React.createElement(Dbm.react.admin.objects.UserListRow, {"id": id, "text": text})
|
|
85
|
+
),
|
|
86
|
+
React.createElement("div", {"className": "spacing standard"}),
|
|
87
|
+
React.createElement("h2", {"className": "no-margins"},
|
|
88
|
+
"New user"
|
|
89
|
+
),
|
|
90
|
+
React.createElement("div", {"className": "spacing small"}),
|
|
91
|
+
React.createElement(Dbm.react.form.LabelledArea, {"label": "Username"}),
|
|
92
|
+
React.createElement(Dbm.react.form.FormField, {"className": "standard-field standard-field-padding full-width",
|
|
93
|
+
value: this.item.properties.username,
|
|
94
|
+
type: "email",
|
|
95
|
+
name: "username",
|
|
96
|
+
autoComplete: "username"
|
|
97
|
+
}),
|
|
98
|
+
React.createElement("div", {"className": "spacing small"}),
|
|
99
|
+
React.createElement(Dbm.react.form.LabelledArea, {"label": "Password"}),
|
|
100
|
+
React.createElement(Dbm.react.form.FormField, {"className": "standard-field standard-field-padding full-width",
|
|
101
|
+
value: this.item.properties.password,
|
|
102
|
+
type: "password",
|
|
103
|
+
name: "new-password",
|
|
104
|
+
autoComplete: "new-password"}),
|
|
105
|
+
React.createElement("div", {"className": "spacing small"}),
|
|
106
|
+
React.createElement(Dbm.react.form.LabelledArea, {"label": "Role"}),
|
|
107
|
+
React.createElement(Dbm.react.form.Selection, {"className": "standard-field standard-field-padding full-width", value: this.item.properties.role},
|
|
108
|
+
React.createElement("option", {"value": null}, "None"),
|
|
109
|
+
React.createElement("option", {"value": "editor"}, "Editor"),
|
|
110
|
+
React.createElement("option", {"value": "admin"}, "Admin"),
|
|
111
|
+
),
|
|
112
|
+
React.createElement("div", {"className": "spacing standard"}),
|
|
113
|
+
React.createElement("div", {"className": "flex-row"},
|
|
114
|
+
React.createElement("div", {"className": "flex-row-item"},
|
|
115
|
+
React.createElement(Dbm.react.interaction.CommandButton, {"command": Dbm.commands.callFunction(this._create.bind(this))},
|
|
116
|
+
React.createElement("div", {"className": "standard-button standard-button-padding"}, "Create")
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class UserListRow extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
_renderMainElement() {
|
|
10
|
+
|
|
11
|
+
let id = this.getPropValue("id");
|
|
12
|
+
let text = this.getPropValue("text");
|
|
13
|
+
|
|
14
|
+
let baseUrl = "/admin/users/user/?id={id}";
|
|
15
|
+
let url = baseUrl.split("{id}").join(id);
|
|
16
|
+
|
|
17
|
+
return React.createElement("div", {"className": "standard-row"},
|
|
18
|
+
React.createElement(Dbm.react.text.Link, {"href": url, "className": "custom-styled-link hover-row"},
|
|
19
|
+
React.createElement("div", {"className": "standard-row-padding"},
|
|
20
|
+
React.createElement("div", {"className": "flex-row small-item-spacing"},
|
|
21
|
+
React.createElement("div", {"className": "flex-row-item flex-no-resize"},
|
|
22
|
+
Dbm.react.text.text(id),
|
|
23
|
+
),
|
|
24
|
+
React.createElement("div", {"className": "flex-row-item flex-resize"},
|
|
25
|
+
Dbm.react.text.text(text)
|
|
26
|
+
),
|
|
27
|
+
React.createElement("div", {"className": "flex-row-item flex-no-resize"},
|
|
28
|
+
">"
|
|
29
|
+
),
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -3,5 +3,7 @@ export {default as ObjectListRow} from "./ObjectListRow.js";
|
|
|
3
3
|
export {default as EditObject} from "./EditObject.js";
|
|
4
4
|
export {default as InjectObjectTypeEditor} from "./InjectObjectTypeEditor.js";
|
|
5
5
|
export {default as RunObjectCommands} from "./RunObjectCommands.js";
|
|
6
|
+
export {default as UserList} from "./UserList.js";
|
|
7
|
+
export {default as UserListRow} from "./UserListRow.js";
|
|
6
8
|
|
|
7
9
|
export * as itemeditors from "./itemeditors/index.js";
|
|
@@ -36,7 +36,7 @@ export default class MainImage extends Dbm.react.BaseObject {
|
|
|
36
36
|
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
|
|
37
37
|
React.createElement(Dbm.react.form.LabelledArea, {label: "Main image"},
|
|
38
38
|
React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": "in", "relationType": "isMainImageFor", "objectType": "image"},
|
|
39
|
-
React.createElement(Dbm.react.form.GraphApiImage, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "
|
|
39
|
+
React.createElement(Dbm.react.form.GraphApiImage, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "encoding": "title", nameField: "title", className: "standard-field standard-field-padding full-width"})
|
|
40
40
|
)
|
|
41
41
|
)
|
|
42
42
|
)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class SingleRelation extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
9
|
+
|
|
10
|
+
let id = this.context.item.id;
|
|
11
|
+
|
|
12
|
+
let allLoaded = Dbm.flow.updatefunctions.logic.allAtValue(Dbm.loading.LoadingStatus.LOADED);
|
|
13
|
+
this.item.requireProperty("loaded", false);
|
|
14
|
+
|
|
15
|
+
{
|
|
16
|
+
let request = graphApi.requestRange(
|
|
17
|
+
[
|
|
18
|
+
{"type": "includePrivate"},
|
|
19
|
+
{"type": "includeDraft"},
|
|
20
|
+
{"type": "idSelection", "ids": [id]},
|
|
21
|
+
],
|
|
22
|
+
["admin_fields", "relations"]
|
|
23
|
+
);
|
|
24
|
+
allLoaded.addCheck(request.properties.status);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.item.properties.loaded.connectInput(allLoaded.output.properties.value);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
_renderMainElement() {
|
|
31
|
+
|
|
32
|
+
let id = this.context.item.id;
|
|
33
|
+
|
|
34
|
+
let label = this.getPropValue("label");
|
|
35
|
+
let direction = this.getPropValue("direction");
|
|
36
|
+
let relationType = this.getPropValue("relationType");
|
|
37
|
+
let objectType = this.getPropValue("objectType");
|
|
38
|
+
let encoding = this.getPropValueWithDefault("encoding", "name");
|
|
39
|
+
let nameField = this.getPropValueWithDefault("nameField", "name");
|
|
40
|
+
|
|
41
|
+
return React.createElement("div", {},
|
|
42
|
+
|
|
43
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
|
|
44
|
+
React.createElement(Dbm.react.form.LabelledArea, {label: label}),
|
|
45
|
+
React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": direction, "relationType": relationType, "objectType": objectType},
|
|
46
|
+
React.createElement(Dbm.react.form.GraphApiObjectSelection, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "objectType": objectType, "encoding": encoding, nameField: nameField, className: "standard-field standard-field-padding full-width"})
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -8,4 +8,5 @@ export {default as Question} from "./Question.js";
|
|
|
8
8
|
export {default as RichDescription} from "./RichDescription.js";
|
|
9
9
|
export {default as PageRepresentation} from "./PageRepresentation.js";
|
|
10
10
|
export {default as MainImage} from "./MainImage.js";
|
|
11
|
-
export {default as Identifier} from "./Identifier.js";
|
|
11
|
+
export {default as Identifier} from "./Identifier.js";
|
|
12
|
+
export {default as SingleRelation} from "./SingleRelation.js";
|
|
@@ -8,6 +8,8 @@ export default class Edit extends Dbm.react.BaseObject {
|
|
|
8
8
|
let editorGroup = new Dbm.graphapi.webclient.admin.EditorGroup();
|
|
9
9
|
this.item.setValue("editorGroup", editorGroup);
|
|
10
10
|
this.item.requireProperty("changed", false).connectInput(editorGroup.item.properties.changed);
|
|
11
|
+
|
|
12
|
+
this.item.requireProperty("open", false);
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
_save() {
|
|
@@ -20,13 +22,28 @@ export default class Edit extends Dbm.react.BaseObject {
|
|
|
20
22
|
saveData.save();
|
|
21
23
|
}
|
|
22
24
|
|
|
25
|
+
_toggleOpen() {
|
|
26
|
+
console.log("_toggleOpen");
|
|
27
|
+
|
|
28
|
+
this.item.open = !this.item.open;
|
|
29
|
+
}
|
|
30
|
+
|
|
23
31
|
_renderMainElement() {
|
|
24
32
|
|
|
25
33
|
let url = new URL(document.location.href);
|
|
26
34
|
let id = url.searchParams.get("id");
|
|
27
35
|
|
|
28
36
|
return React.createElement("div", {className: "content-narrow"},
|
|
29
|
-
React.createElement(
|
|
37
|
+
React.createElement("div", {className: "flex-row small-item-spacing"},
|
|
38
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
39
|
+
React.createElement("div", {className: "action-button action-button-padding", "onClick": () => {this._toggleOpen()}},
|
|
40
|
+
"Run commands"
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
),
|
|
44
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.open},
|
|
45
|
+
React.createElement(Dbm.react.admin.objects.RunObjectCommands, {id: id})
|
|
46
|
+
)
|
|
30
47
|
);
|
|
31
48
|
}
|
|
32
49
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class User extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
let editorGroup = new Dbm.graphapi.webclient.admin.EditorGroup();
|
|
9
|
+
this.item.setValue("editorGroup", editorGroup);
|
|
10
|
+
this.item.requireProperty("changed", false).connectInput(editorGroup.item.properties.changed);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
_save() {
|
|
14
|
+
console.log("_save");
|
|
15
|
+
|
|
16
|
+
let editorGroup = this.item.editorGroup;
|
|
17
|
+
|
|
18
|
+
let saveData = editorGroup.getSaveData();
|
|
19
|
+
|
|
20
|
+
saveData.save();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
_renderMainElement() {
|
|
24
|
+
|
|
25
|
+
let url = new URL(document.location.href);
|
|
26
|
+
let id = url.searchParams.get("id");
|
|
27
|
+
|
|
28
|
+
return React.createElement("div", {className: "content-narrow"},
|
|
29
|
+
React.createElement(Dbm.react.context.AddContextVariables, {values: {"editorGroup": this.item.editorGroup}},
|
|
30
|
+
React.createElement("h2", {className: "no-margins"}, "Edit details"),
|
|
31
|
+
React.createElement("div", {className: "spacing small"}),
|
|
32
|
+
React.createElement(Dbm.react.admin.objects.EditObject, {id: id}),
|
|
33
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
34
|
+
React.createElement("div", {className: "save-all-position"},
|
|
35
|
+
React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.changed},
|
|
36
|
+
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
|
|
37
|
+
"Save all changes"
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
),
|
|
41
|
+
React.createElement("h2", {className: "no-margins"}, "New password"),
|
|
42
|
+
React.createElement("div", {className: "spacing small"}),
|
|
43
|
+
"[Insert password field]"
|
|
44
|
+
)
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class Users extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
_renderMainElement() {
|
|
10
|
+
|
|
11
|
+
return React.createElement("div", {className: "content-narrow"},
|
|
12
|
+
React.createElement(Dbm.react.admin.objects.UserList, {})
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export {default as List} from "./List.js";
|
|
2
2
|
export {default as Edit} from "./Edit.js";
|
|
3
|
-
export {default as RunObjectCommands} from "./RunObjectCommands.js";
|
|
3
|
+
export {default as RunObjectCommands} from "./RunObjectCommands.js";
|
|
4
|
+
export {default as Users} from "./Users.js";
|
|
5
|
+
export {default as User} from "./User.js";
|
package/react/blocks/index.js
CHANGED
|
@@ -142,6 +142,8 @@ export let registerAllBlocks = function() {
|
|
|
142
142
|
|
|
143
143
|
registerBlock("admin/objects/edit", "Admin / Edit object", createElement(Dbm.react.blocks.admin.objects.Edit));
|
|
144
144
|
registerBlock("admin/objects/apiCommands", "Admin / Object API commands", createElement(Dbm.react.blocks.admin.objects.RunObjectCommands));
|
|
145
|
+
registerBlock("admin/users", "Admin / Users", createElement(Dbm.react.blocks.admin.objects.Users));
|
|
146
|
+
registerBlock("admin/users/user", "Admin / User", createElement(Dbm.react.blocks.admin.objects.User));
|
|
145
147
|
|
|
146
148
|
{
|
|
147
149
|
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
@@ -275,6 +277,18 @@ export let registerAllBlocks = function() {
|
|
|
275
277
|
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/mainImage");
|
|
276
278
|
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.MainImage, {}));
|
|
277
279
|
}
|
|
280
|
+
|
|
281
|
+
{
|
|
282
|
+
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/user/role");
|
|
283
|
+
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.SingleRelation, {
|
|
284
|
+
"label": "Role",
|
|
285
|
+
"direction": "in",
|
|
286
|
+
"relationType": "for",
|
|
287
|
+
"objectType": "type/userRole",
|
|
288
|
+
encoding: "identifier",
|
|
289
|
+
nameField: "identifier"
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
278
292
|
|
|
279
293
|
{
|
|
280
294
|
let objectTypeEditor = Dbm.getInstance().repository.getItem("admin/objectTypeEditors/page");
|
|
@@ -330,4 +344,19 @@ export let registerAllBlocks = function() {
|
|
|
330
344
|
|
|
331
345
|
objectTypeEditor.editors = newArray;
|
|
332
346
|
}
|
|
347
|
+
|
|
348
|
+
{
|
|
349
|
+
let objectTypeEditor = Dbm.getInstance().repository.getItem("admin/objectTypeEditors/user");
|
|
350
|
+
if(!objectTypeEditor.editors) {
|
|
351
|
+
objectTypeEditor.setValue("editors", []);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
let newArray = [].concat(objectTypeEditor.editors);
|
|
355
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/name"));
|
|
356
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/user/role"));
|
|
357
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/pageRepresentation"));
|
|
358
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/mainImage"));
|
|
359
|
+
|
|
360
|
+
objectTypeEditor.editors = newArray;
|
|
361
|
+
}
|
|
333
362
|
}
|