dbm 1.1.18 → 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/flow/updatefunctions/basic/index.js +14 -0
- package/graphapi/webclient/ApiConnection.js +1 -0
- package/graphapi/webclient/WebSocketConnection.js +1 -0
- package/graphapi/webclient/admin/ItemEditor.js +21 -1
- 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 +62 -12
- package/react/admin/editor/fields/ImageField.js +31 -0
- package/react/admin/editorsgroup/EditIdentifer.js +25 -0
- package/react/admin/editorsgroup/index.js +2 -1
- package/react/admin/objects/ObjectList.js +8 -1
- 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/Identifier.js +45 -0
- package/react/admin/objects/itemeditors/MainImage.js +46 -0
- package/react/admin/objects/itemeditors/PageRepresentation.js +46 -0
- 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 +5 -1
- package/react/admin/website/EditLocalBusiness.js +9 -0
- package/react/blocks/admin/objects/List.js +7 -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/faq/AskAQuestion.js +2 -2
- package/react/blocks/faq/HelpSectionRowItem.js +1 -1
- package/react/blocks/index.js +64 -5
- package/utils/ArrayFunctions.js +20 -0
|
@@ -31,5 +31,19 @@ export const propertyOf = function(aValue, aPropertyName) {
|
|
|
31
31
|
updateFunction.input.properties.value.setOrConnect(aValue);
|
|
32
32
|
updateFunction.input.properties.propertyName.setOrConnect(aPropertyName);
|
|
33
33
|
|
|
34
|
+
return updateFunction;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const combine = function(...aValues) {
|
|
38
|
+
let updateFunction = new Dbm.flow.updatefunctions.basic.CombineString();
|
|
39
|
+
|
|
40
|
+
let currentArray = aValues;
|
|
41
|
+
let currentArrayLength = currentArray.length;
|
|
42
|
+
for(let i = 0; i < currentArrayLength; i++) {
|
|
43
|
+
let currentData = currentArray[i];
|
|
44
|
+
updateFunction.addPart(currentData);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
34
48
|
return updateFunction;
|
|
35
49
|
}
|
|
@@ -84,6 +84,7 @@ export default class WebSocketConnection extends Dbm.core.BaseObject {
|
|
|
84
84
|
|
|
85
85
|
requestItem(aId, aEncode) {
|
|
86
86
|
let item = this._getRequestItem();
|
|
87
|
+
item.requireProperty("item", null);
|
|
87
88
|
item.setValue("requestData", {"type": "item", "id": aId, "encode": aEncode, "requestId": item.id});
|
|
88
89
|
this._runRequest(item);
|
|
89
90
|
|
|
@@ -105,7 +105,7 @@ export default class ItemEditor extends Dbm.core.BaseObject {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
getVisibilityEditor(aInitialValue) {
|
|
108
|
-
let name = "visibility"
|
|
108
|
+
let name = "visibility";
|
|
109
109
|
let valueEditor = this.item["visibility"];
|
|
110
110
|
if(!valueEditor) {
|
|
111
111
|
valueEditor = new Dbm.graphapi.webclient.admin.ValueEditor();
|
|
@@ -124,6 +124,26 @@ export default class ItemEditor extends Dbm.core.BaseObject {
|
|
|
124
124
|
return valueEditor;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
getIdentiferEditor(aInitialValue) {
|
|
128
|
+
let name = "identifer";
|
|
129
|
+
let valueEditor = this.item["identifer"];
|
|
130
|
+
if(!valueEditor) {
|
|
131
|
+
valueEditor = new Dbm.graphapi.webclient.admin.ValueEditor();
|
|
132
|
+
valueEditor.item.editValue.setInitialValue(aInitialValue);
|
|
133
|
+
|
|
134
|
+
valueEditor.item.setValue("itemEditor", this.item);
|
|
135
|
+
valueEditor.item.setValue("updateEncoding", "identifer");
|
|
136
|
+
|
|
137
|
+
this.item.anyChange.addCheck(valueEditor.item.properties.changed);
|
|
138
|
+
this.item.setValue(name, valueEditor);
|
|
139
|
+
this.item.editors = [].concat(this.item.editors, valueEditor);
|
|
140
|
+
|
|
141
|
+
valueEditor.addSaveFunction(Dbm.graphapi.webclient.admin.SaveFunctions.setIdentifier);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return valueEditor;
|
|
145
|
+
}
|
|
146
|
+
|
|
127
147
|
addCommandsToSaveData(aSaveData) {
|
|
128
148
|
|
|
129
149
|
let editedItemId = Dbm.objectPath(this.item, "editedItem.id");
|
|
@@ -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"},
|
|
@@ -194,7 +217,13 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
194
217
|
"155"
|
|
195
218
|
)
|
|
196
219
|
),
|
|
197
|
-
|
|
220
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
221
|
+
React.createElement(Dbm.react.form.LabelledArea, {label: "Main image"},
|
|
222
|
+
React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": "in", "relationType": "isMainImageFor", "objectType": "image"},
|
|
223
|
+
React.createElement(Dbm.react.form.GraphApiImage, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "objectType": "page", "encoding": "title", nameField: "title", className: "standard-field standard-field-padding full-width"})
|
|
224
|
+
)
|
|
225
|
+
),
|
|
226
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
198
227
|
React.createElement("div", {className: "flex-row small-item-spacing"},
|
|
199
228
|
React.createElement("div", {className: "flex-row-item"},
|
|
200
229
|
React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noIndex").item.editValue.value}),
|
|
@@ -213,18 +242,39 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
213
242
|
),
|
|
214
243
|
React.createElement("div", {},
|
|
215
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"
|
|
216
251
|
),
|
|
217
|
-
React.createElement(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
+
|
|
228
278
|
),
|
|
229
279
|
React.createElement("div", {className: "spacing standard"}),
|
|
230
280
|
React.createElement("div", {className: "save-all-position"},
|
|
@@ -58,6 +58,14 @@ export default class ImageField extends Dbm.react.BaseObject {
|
|
|
58
58
|
"Save to library"
|
|
59
59
|
)
|
|
60
60
|
)
|
|
61
|
+
),
|
|
62
|
+
React.createElement("div", {className: "flex-row-item flex-resize"}),
|
|
63
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
64
|
+
React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.callFunction(this._updateFromLibrary.bind(this))},
|
|
65
|
+
React.createElement("div", {className: "action-button action-button-padding"},
|
|
66
|
+
"Update from library"
|
|
67
|
+
)
|
|
68
|
+
)
|
|
61
69
|
)
|
|
62
70
|
)
|
|
63
71
|
)
|
|
@@ -153,6 +161,29 @@ export default class ImageField extends Dbm.react.BaseObject {
|
|
|
153
161
|
let request = Dbm.getInstance().repository.getItem("graphApi").controller.editItem(this.item.value.id, changes);
|
|
154
162
|
}
|
|
155
163
|
|
|
164
|
+
_updateFromLibrary() {
|
|
165
|
+
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
166
|
+
|
|
167
|
+
let request = graphApi.requestItem(this.item.value.id, ["image"]);
|
|
168
|
+
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._libraryImageLoaded.bind(this), [request]));
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
_libraryImageLoaded(aRequest) {
|
|
173
|
+
console.log("_libraryImageLoaded");
|
|
174
|
+
console.log(aRequest);
|
|
175
|
+
|
|
176
|
+
let item = aRequest.item;
|
|
177
|
+
|
|
178
|
+
let imageData = {id: item.id, url: item.url, resizeUrl: item.resizeUrl, identifier: item.identifier, altText: item.altText};
|
|
179
|
+
this.item.value = null;
|
|
180
|
+
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
this.item.value = imageData;
|
|
183
|
+
}, 100);
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
156
187
|
_imageSelected(aImage) {
|
|
157
188
|
//console.log("_imageSelected");
|
|
158
189
|
//console.log(aImage);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class EditVisibility extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
let item = this.context.item;
|
|
9
|
+
let itemEditor = this.context.itemEditor;
|
|
10
|
+
let initialDataPath = this.getPropValueWithDefault("initialDataPath", "identifier");
|
|
11
|
+
let initialData = Dbm.objectPath(item, initialDataPath);
|
|
12
|
+
|
|
13
|
+
let editor = itemEditor.getIdentiferEditor(initialData);
|
|
14
|
+
this.item.setValue("editor", editor.item);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
_renderMainElement() {
|
|
18
|
+
|
|
19
|
+
let children = this.getPropValue("children")
|
|
20
|
+
|
|
21
|
+
return React.createElement("div", {},
|
|
22
|
+
React.createElement(Dbm.react.context.AddContextVariables, {"values": {"valueEditor": this.item.editor}}, children)
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export {default as EditField} from "./EditField.js";
|
|
2
2
|
export {default as EditItem} from "./EditItem.js";
|
|
3
3
|
export {default as EditRelation} from "./EditRelation.js";
|
|
4
|
-
export {default as EditVisibility} from "./EditVisibility.js";
|
|
4
|
+
export {default as EditVisibility} from "./EditVisibility.js";
|
|
5
|
+
export {default as EditIdentifer} from "./EditIdentifer.js";
|
|
@@ -44,6 +44,7 @@ export default class ObjectList extends Dbm.react.BaseObject {
|
|
|
44
44
|
|
|
45
45
|
_create() {
|
|
46
46
|
console.log("_create");
|
|
47
|
+
|
|
47
48
|
let objectType = this.getPropValue("objectType");
|
|
48
49
|
let encodings = this.getPropValueWithDefault("encodings", ["name"]);
|
|
49
50
|
let visibility = this.getPropValueWithDefault("visibility", "private");
|
|
@@ -52,7 +53,13 @@ export default class ObjectList extends Dbm.react.BaseObject {
|
|
|
52
53
|
{"type": "setField", "data": {"value": "Unnamed " + objectType, "field": "name"}}
|
|
53
54
|
];
|
|
54
55
|
|
|
55
|
-
let
|
|
56
|
+
let types = [objectType];
|
|
57
|
+
let additionalTypes = this.getPropValue("additionalTypes");
|
|
58
|
+
if(additionalTypes) {
|
|
59
|
+
types = types.concat(additionalTypes);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let request = Dbm.getInstance().repository.getItem("graphApi").controller.createItem(types, visibility, changes, encodings);
|
|
56
63
|
|
|
57
64
|
Dbm.flow.addUpdateCommand(request.properties.status, Dbm.commands.callFunction(this._created.bind(this), [request]));
|
|
58
65
|
}
|
|
@@ -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";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class Identifier 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
|
+
["identifier"]
|
|
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
|
+
return React.createElement("div", {},
|
|
35
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
|
|
36
|
+
React.createElement(Dbm.react.form.LabelledArea, {label: "Identifer"},
|
|
37
|
+
React.createElement(Dbm.react.admin.editorsgroup.EditIdentifer, {},
|
|
38
|
+
React.createElement(Dbm.react.form.FormField, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), className: "standard-field standard-field-padding full-width"})
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class MainImage 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
|
+
return React.createElement("div", {},
|
|
35
|
+
|
|
36
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
|
|
37
|
+
React.createElement(Dbm.react.form.LabelledArea, {label: "Main image"},
|
|
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"), "encoding": "title", nameField: "title", className: "standard-field standard-field-padding full-width"})
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class PageRepresentation 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
|
+
return React.createElement("div", {},
|
|
35
|
+
|
|
36
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
|
|
37
|
+
React.createElement(Dbm.react.form.LabelledArea, {label: "Represening page"},
|
|
38
|
+
React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": "in", "relationType": "pageRepresentationFor", "objectType": "page"},
|
|
39
|
+
React.createElement(Dbm.react.form.GraphApiObjectSelection, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "objectType": "page", "encoding": "title", nameField: "title", className: "standard-field standard-field-padding full-width"})
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -5,4 +5,8 @@ export {default as Link} from "./Link.js";
|
|
|
5
5
|
export {default as Visibility} from "./Visibility.js";
|
|
6
6
|
export {default as LinkedPage} from "./LinkedPage.js";
|
|
7
7
|
export {default as Question} from "./Question.js";
|
|
8
|
-
export {default as RichDescription} from "./RichDescription.js";
|
|
8
|
+
export {default as RichDescription} from "./RichDescription.js";
|
|
9
|
+
export {default as PageRepresentation} from "./PageRepresentation.js";
|
|
10
|
+
export {default as MainImage} from "./MainImage.js";
|
|
11
|
+
export {default as Identifier} from "./Identifier.js";
|
|
12
|
+
export {default as SingleRelation} from "./SingleRelation.js";
|
|
@@ -48,6 +48,12 @@ export default class EditWebsite extends Dbm.react.BaseObject {
|
|
|
48
48
|
let mainImage = (isMainImageForRelations && isMainImageForRelations.length) ? isMainImageForRelations[0].id : null;
|
|
49
49
|
itemEditor.addIncomingRelationEditor("isMainImageFor", "image", mainImage, ["relations"]);
|
|
50
50
|
|
|
51
|
+
{
|
|
52
|
+
let relatedItems = Dbm.utils.ArrayFunctions.filterByField(Dbm.objectPath(item, "relations/in.for.objects"), "objectTypes", "schema/type", "arrayContains");
|
|
53
|
+
let relatedItem = (relatedItems && relatedItems.length) ? relatedItems[0].id : null;
|
|
54
|
+
itemEditor.addIncomingRelationEditor("for", "schema/type", relatedItem, ["relations"]);
|
|
55
|
+
}
|
|
56
|
+
|
|
51
57
|
itemEditor.addFieldEditor("phoneNumber", Dbm.objectPath(item, "fields.phoneNumber"), "admin_fields");
|
|
52
58
|
itemEditor.addFieldEditor("email", Dbm.objectPath(item, "fields.email"), "admin_fields");
|
|
53
59
|
itemEditor.addFieldEditor("priceRangeDescription", Dbm.objectPath(item, "fields.priceRangeDescription"), "admin_fields");
|
|
@@ -83,6 +89,9 @@ export default class EditWebsite extends Dbm.react.BaseObject {
|
|
|
83
89
|
React.createElement(Dbm.react.form.LabelledArea, {"label": "Name"},
|
|
84
90
|
React.createElement(Dbm.react.form.FormField, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_name.item.editValue.item.properties.value"), className: "standard-field standard-field-padding full-width"})
|
|
85
91
|
),
|
|
92
|
+
React.createElement(Dbm.react.form.LabelledArea, {"label": "Schema type"},
|
|
93
|
+
React.createElement(Dbm.react.form.GraphApiObjectSelection, {"objectType": "schema/type", "value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_relation_in_for_schema/type.item.editValue.item.properties.value")}),
|
|
94
|
+
),
|
|
86
95
|
React.createElement(Dbm.react.form.LabelledArea, {"label": "Image"},
|
|
87
96
|
React.createElement(Dbm.react.form.GraphApiImage, {"value": Dbm.react.source.contextVariable("itemEditor.value.item.editor_relation_in_isMainImageFor_image.item.editValue.item.properties.value")}),
|
|
88
97
|
),
|
|
@@ -9,9 +9,15 @@ export default class ObjectList extends Dbm.react.BaseObject {
|
|
|
9
9
|
_renderMainElement() {
|
|
10
10
|
|
|
11
11
|
let encodings = Dbm.utils.ArrayFunctions.arrayOrSeparatedString(this.context.blockData.encodings);
|
|
12
|
+
let additionalTypes = [];
|
|
13
|
+
|
|
14
|
+
let additionalTypesString = this.context.blockData.additionalTypes;
|
|
15
|
+
if(additionalTypesString) {
|
|
16
|
+
additionalTypes = Dbm.utils.ArrayFunctions.arrayOrSeparatedString(additionalTypesString);
|
|
17
|
+
}
|
|
12
18
|
|
|
13
19
|
return React.createElement("div", {className: "content-narrow"},
|
|
14
|
-
React.createElement(Dbm.react.admin.objects.ObjectList, {objectType: this.context.blockData.objectType, encodings: encodings, nameField: this.context.blockData.nameField, visibility: this.context.blockData.visibility})
|
|
20
|
+
React.createElement(Dbm.react.admin.objects.ObjectList, {objectType: this.context.blockData.objectType, additionalTypes: additionalTypes, encodings: encodings, nameField: this.context.blockData.nameField, visibility: this.context.blockData.visibility})
|
|
15
21
|
);
|
|
16
22
|
}
|
|
17
23
|
}
|
|
@@ -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";
|
|
@@ -66,7 +66,7 @@ export default class AskAQuestion extends Dbm.react.BaseObject {
|
|
|
66
66
|
let currentRow = new Dbm.repository.Item();
|
|
67
67
|
currentRow.setId("_dbmInternal/row" + Dbm.getInstance().getNextId());
|
|
68
68
|
currentRow.setValue("item", currentItem);
|
|
69
|
-
currentRow.setValue("element", React.createElement(Dbm.react.blocks.faq.HelpSectionRowItem, {"open": this._getOpenProperty(i)}));
|
|
69
|
+
currentRow.setValue("element", React.createElement(Dbm.react.blocks.faq.HelpSectionRowItem, {"open": this._getOpenProperty(i), "startState": (i === 0 ? "open" : "close")}));
|
|
70
70
|
rows.push(currentRow);
|
|
71
71
|
}
|
|
72
72
|
this.item.results = rows;
|
|
@@ -133,7 +133,7 @@ export default class AskAQuestion extends Dbm.react.BaseObject {
|
|
|
133
133
|
),
|
|
134
134
|
React.createElement("div", {className: "flex-row-item flex-no-resize"},
|
|
135
135
|
React.createElement("div", {className: "submit-button-field-padding-right-side border-box-sizing full-height"},
|
|
136
|
-
React.createElement("button", {className: "skip-default full-height"},
|
|
136
|
+
React.createElement("button", {className: "skip-default full-height", "aria-label": "Search"},
|
|
137
137
|
React.createElement("div", {className: "field-submit-button field-submit-button-padding full-height", onClick: () => {this._search();}},
|
|
138
138
|
React.createElement("div", {className: "centered-cell-holder full-size"},
|
|
139
139
|
React.createElement(Dbm.react.image.Image, {src: "/assets/img/right-arrow.svg", className: "right-arrow-link-icon background-contain"})
|
|
@@ -71,7 +71,7 @@ export default class HelpSectionRowItem extends Dbm.react.BaseObject {
|
|
|
71
71
|
)
|
|
72
72
|
)
|
|
73
73
|
),
|
|
74
|
-
React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: open},
|
|
74
|
+
React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: open, startState: this.getPropValue("startState")},
|
|
75
75
|
answerElement
|
|
76
76
|
)
|
|
77
77
|
);
|
package/react/blocks/index.js
CHANGED
|
@@ -114,6 +114,10 @@ export let registerAllBlocks = function() {
|
|
|
114
114
|
createElement(Dbm.react.admin.editor.fields.TextField, {name: "objectType"})
|
|
115
115
|
),
|
|
116
116
|
createElement("div", {className: "spacing medium"}),
|
|
117
|
+
createElement(Dbm.react.form.LabelledArea, {label: "Additional types (optional)"},
|
|
118
|
+
createElement(Dbm.react.admin.editor.fields.TextField, {name: "additionalTypes"})
|
|
119
|
+
),
|
|
120
|
+
createElement("div", {className: "spacing medium"}),
|
|
117
121
|
createElement(Dbm.react.form.LabelledArea, {label: "Encodings"},
|
|
118
122
|
createElement(Dbm.react.admin.editor.fields.TextField, {name: "encodings"})
|
|
119
123
|
),
|
|
@@ -138,6 +142,8 @@ export let registerAllBlocks = function() {
|
|
|
138
142
|
|
|
139
143
|
registerBlock("admin/objects/edit", "Admin / Edit object", createElement(Dbm.react.blocks.admin.objects.Edit));
|
|
140
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));
|
|
141
147
|
|
|
142
148
|
{
|
|
143
149
|
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
@@ -210,15 +216,11 @@ export let registerAllBlocks = function() {
|
|
|
210
216
|
|
|
211
217
|
{
|
|
212
218
|
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
213
|
-
createElement(Dbm.react.form.LabelledArea, {label: "Text 1"},
|
|
214
|
-
createElement(Dbm.react.admin.editor.fields.TextField, {name: "text1"})
|
|
215
|
-
),
|
|
216
|
-
createElement("div", {className: "spacing medium"}),
|
|
217
219
|
createElement(Dbm.react.form.LabelledArea, {label: "Initial sections"},
|
|
218
220
|
createElement(Dbm.react.admin.editor.fields.SelectObjectsField, {objectType: "helpSection", name:"initialSections", "encoding": "title", "nameField": "title"})
|
|
219
221
|
),
|
|
220
222
|
);
|
|
221
|
-
registerBlock("faq/askAQuestion", "FAQ / Ask a question", createElement(Dbm.react.blocks.faq.AskAQuestion, {}), editor, {}, {
|
|
223
|
+
registerBlock("faq/askAQuestion", "FAQ / Ask a question", createElement(Dbm.react.blocks.faq.AskAQuestion, {}), editor, {}, {});
|
|
222
224
|
}
|
|
223
225
|
|
|
224
226
|
{
|
|
@@ -251,6 +253,11 @@ export let registerAllBlocks = function() {
|
|
|
251
253
|
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.Visibility, {}));
|
|
252
254
|
}
|
|
253
255
|
|
|
256
|
+
{
|
|
257
|
+
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/identifier");
|
|
258
|
+
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.Identifier, {}));
|
|
259
|
+
}
|
|
260
|
+
|
|
254
261
|
{
|
|
255
262
|
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/linkedPage");
|
|
256
263
|
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.LinkedPage, {}));
|
|
@@ -260,6 +267,28 @@ export let registerAllBlocks = function() {
|
|
|
260
267
|
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/question");
|
|
261
268
|
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.Question, {}));
|
|
262
269
|
}
|
|
270
|
+
|
|
271
|
+
{
|
|
272
|
+
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/pageRepresentation");
|
|
273
|
+
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.PageRepresentation, {}));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
{
|
|
277
|
+
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/mainImage");
|
|
278
|
+
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.MainImage, {}));
|
|
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
|
+
}
|
|
263
292
|
|
|
264
293
|
{
|
|
265
294
|
let objectTypeEditor = Dbm.getInstance().repository.getItem("admin/objectTypeEditors/page");
|
|
@@ -300,4 +329,34 @@ export let registerAllBlocks = function() {
|
|
|
300
329
|
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/visibility"));
|
|
301
330
|
objectTypeEditor.editors = newArray;
|
|
302
331
|
}
|
|
332
|
+
|
|
333
|
+
{
|
|
334
|
+
let objectTypeEditor = Dbm.getInstance().repository.getItem("admin/objectTypeEditors/type");
|
|
335
|
+
if(!objectTypeEditor.editors) {
|
|
336
|
+
objectTypeEditor.setValue("editors", []);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
let newArray = [].concat(objectTypeEditor.editors);
|
|
340
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/name"));
|
|
341
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/identifier"));
|
|
342
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/pageRepresentation"));
|
|
343
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/mainImage"));
|
|
344
|
+
|
|
345
|
+
objectTypeEditor.editors = newArray;
|
|
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
|
+
}
|
|
303
362
|
}
|
package/utils/ArrayFunctions.js
CHANGED
|
@@ -290,4 +290,24 @@ export const getItemIndexByIfExists = function(aArray, aField, aIdentifier) {
|
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
return -1;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export const sum = function(aArray) {
|
|
296
|
+
|
|
297
|
+
if(!Array.isArray(aArray)) {
|
|
298
|
+
console.warn("No array provided", aArray);
|
|
299
|
+
return 0;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
let sum = 0;
|
|
303
|
+
let currentArray = aArray;
|
|
304
|
+
let currentArrayLength = currentArray.length;
|
|
305
|
+
for(let i = 0; i < currentArrayLength; i++) {
|
|
306
|
+
let currentValue = 1*currentArray[i];
|
|
307
|
+
if(!isNaN(currentValue)) {
|
|
308
|
+
sum += currentValue;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return sum;
|
|
293
313
|
}
|