dbm 1.4.15 → 1.4.16
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/css/admin.css +6 -1
- package/css/all.css +4 -1
- package/css/cookie-bar.css +40 -0
- package/css/elements.css +41 -0
- package/css/form-field.css +46 -0
- package/css/grid.css +8 -0
- package/css/icons.css +2 -0
- package/css/utils.css +12 -6
- package/dbm.js +1 -1
- package/ecommerce/Cart.js +44 -9
- package/ecommerce/LocalStorageCartLoader.js +7 -3
- package/flow/controllers/select/SingleSelection.js +7 -0
- package/flow/updatefunctions/basic/index.js +1 -1
- package/graphapi/webclient/decode/Relations.js +12 -0
- package/loading/index.js +34 -0
- package/package.json +1 -1
- package/react/BaseObject.js +22 -5
- package/react/admin/editor/Editor.js +5 -6
- package/react/admin/editor/fields/ArrayField.js +24 -7
- package/react/admin/editor/fields/Link.js +53 -0
- package/react/admin/editor/fields/index.js +2 -1
- package/react/admin/objects/ExploreObject.js +103 -0
- package/react/admin/objects/explore/Relation.js +67 -0
- package/react/admin/objects/explore/RelationType.js +38 -0
- package/react/admin/objects/explore/RelationTypeGroup.js +22 -0
- package/react/admin/objects/explore/index.js +3 -0
- package/react/admin/objects/index.js +3 -1
- package/react/admin/objects/itemeditors/DraggableHierarchyDisplay.js +1 -1
- package/react/admin/objects/itemeditors/TextAreaField.js +26 -0
- package/react/admin/objects/itemeditors/index.js +1 -0
- package/react/animation/AnimationController.js +1 -3
- package/react/animation/index.js +15 -0
- package/react/area/InsertElement.js +3 -0
- package/react/area/Layout.js +20 -0
- package/react/area/List.js +4 -0
- package/react/area/NativeElement.js +37 -0
- package/react/area/RepeatedSlider.js +73 -0
- package/react/area/SingleItemSlideshow.js +69 -0
- package/react/area/SlideshowSteps.js +45 -0
- package/react/area/index.js +6 -1
- package/react/blocks/admin/objects/Explore.js +18 -0
- package/react/blocks/admin/objects/index.js +2 -1
- package/react/blocks/content/Buttons.js +33 -0
- package/react/blocks/content/SectionsGrid.js +19 -0
- package/react/blocks/content/Spacing.js +13 -0
- package/react/blocks/content/SpacingLine.js +18 -0
- package/react/blocks/content/index.js +5 -1
- package/react/blocks/index.js +108 -0
- package/react/context/AddContextVariables.js +9 -4
- package/react/cookies/CookieBar.js +1 -1
- package/react/cookies/CookieOverlayMessage.js +2 -2
- package/react/dynamic/DesignRepositoryProxy.js +22 -0
- package/react/dynamic/DynamicDesignElement.js +24 -0
- package/react/dynamic/index.js +60 -0
- package/react/form/EditObjectProperty.js +15 -2
- package/react/form/EditableContent.js +71 -0
- package/react/form/GraphApiImageWithAltText.js +268 -0
- package/react/form/Link.js +40 -0
- package/react/form/Url.js +25 -0
- package/react/form/index.js +4 -0
- package/react/index.js +12 -0
- package/react/interaction/Checked.js +32 -0
- package/react/interaction/ClickOutsideTrigger.js +1 -1
- package/react/interaction/index.js +2 -1
- package/react/svg/AddGlobalFilterClasses.js +3 -3
- package/react/svg/BlendColorFilter.js +42 -0
- package/react/svg/GlobalFilters.js +1 -1
- package/react/svg/MatrixFilter.js +1 -3
- package/react/svg/index.js +20 -0
- package/react/text/index.js +4 -0
- package/repository/Item.js +8 -0
- package/repository/admin/index.js +10 -0
- package/repository/index.js +3 -0
- package/repository/proxy/RepositoryProxy.js +60 -0
- package/repository/proxy/index.js +1 -0
- package/site/BrowserUpdater.js +3 -3
- package/startup/index.js +1 -1
- package/tracking/Controller.js +14 -8
- package/tracking/DataLayerTracker.js +27 -18
- package/tracking/GtagTracker.js +112 -0
- package/tracking/MetaPixelTracker.js +1 -1
- package/tracking/SingleAccountMetaPixelTracker.js +118 -0
- package/tracking/TagManagerTracker.js +2 -2
- package/tracking/index.js +24 -0
- package/utils/svg/ColorMatrixFunctions.js +13 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class Buttons extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
_renderMainElement() {
|
|
11
|
+
|
|
12
|
+
let element = Dbm.getInstance().repository.getItem("linkListCard").element;
|
|
13
|
+
|
|
14
|
+
return React.createElement("div", {"className": "content-narrow"},
|
|
15
|
+
React.createElement("div", {"className": "flex-row small-item-spacing"},
|
|
16
|
+
React.createElement(Dbm.react.area.List, {items: this.context.blockData.buttons},
|
|
17
|
+
React.createElement("div", {"className": "flex-row-item"},
|
|
18
|
+
React.createElement(Dbm.react.text.Link, {"href": Dbm.react.source.item("url"), "className": "custom-styled-link"},
|
|
19
|
+
React.createElement(Dbm.react.area.SwitchableArea, {"area": Dbm.react.source.item("type")},
|
|
20
|
+
React.createElement(Dbm.react.design.buttons.PrimaryButton, {"data-slot": "primary"},
|
|
21
|
+
Dbm.react.text.text(Dbm.react.source.item("text"))
|
|
22
|
+
),
|
|
23
|
+
React.createElement(Dbm.react.design.buttons.SecondaryButton, {"data-slot": "secondary"},
|
|
24
|
+
Dbm.react.text.text(Dbm.react.source.item("text"))
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "dbm";
|
|
3
|
+
|
|
4
|
+
export default class SectionsGrid extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
_renderMainElement() {
|
|
11
|
+
return this._createMainElement("div", {className: "content-narrow"},
|
|
12
|
+
React.createElement("div", {className: "section-grid section-grid-gap"},
|
|
13
|
+
React.createElement(Dbm.react.area.List, {"items": Dbm.react.source.blockData("sections")},
|
|
14
|
+
React.createElement(Dbm.react.design.content.GridSectionCard, {})
|
|
15
|
+
)
|
|
16
|
+
)
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "dbm";
|
|
3
|
+
|
|
4
|
+
export default class Spacing extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
_renderMainElement() {
|
|
11
|
+
return this._createMainElement("div", {className: "spacing standard"});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "dbm";
|
|
3
|
+
|
|
4
|
+
export default class SpacingLine extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
_renderMainElement() {
|
|
11
|
+
|
|
12
|
+
return this._createMainElement("div", {className: "content-narrow"},
|
|
13
|
+
React.createElement("div", {className: "spacing medium"}),
|
|
14
|
+
React.createElement("div", {className: "spacer-line"}),
|
|
15
|
+
React.createElement("div", {className: "spacing medium"})
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -2,4 +2,8 @@ export {default as Card} from "./Card.js";
|
|
|
2
2
|
export {default as ContentBlock} from "./ContentBlock.js";
|
|
3
3
|
export {default as AnchorPosition} from "./AnchorPosition.js";
|
|
4
4
|
export {default as LinkList} from "./LinkList.js";
|
|
5
|
-
export {default as LinkListCard} from "./LinkListCard.js";
|
|
5
|
+
export {default as LinkListCard} from "./LinkListCard.js";
|
|
6
|
+
export {default as Spacing} from "./Spacing.js";
|
|
7
|
+
export {default as SpacingLine} from "./SpacingLine.js";
|
|
8
|
+
export {default as Buttons} from "./Buttons.js";
|
|
9
|
+
export {default as SectionsGrid} from "./SectionsGrid.js";
|
package/react/blocks/index.js
CHANGED
|
@@ -151,6 +151,7 @@ export let registerAllBlocks = function() {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
registerBlock("admin/objects/edit", "Admin / Edit object", createElement(Dbm.react.blocks.admin.objects.Edit));
|
|
154
|
+
registerBlock("admin/objects/explore", "Admin / Explore object", createElement(Dbm.react.blocks.admin.objects.Explore));
|
|
154
155
|
registerBlock("admin/objects/apiCommands", "Admin / Object API commands", createElement(Dbm.react.blocks.admin.objects.RunObjectCommands));
|
|
155
156
|
registerBlock("admin/users", "Admin / Users", createElement(Dbm.react.blocks.admin.objects.Users));
|
|
156
157
|
registerBlock("admin/users/user", "Admin / User", createElement(Dbm.react.blocks.admin.objects.User));
|
|
@@ -233,6 +234,32 @@ export let registerAllBlocks = function() {
|
|
|
233
234
|
registerBlock("content/linkList", "Link list", createElement(Dbm.react.blocks.content.LinkList, {}), editor, {}, {});
|
|
234
235
|
}
|
|
235
236
|
|
|
237
|
+
{
|
|
238
|
+
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
239
|
+
createElement(Dbm.react.form.LabelledArea, {label: "Sections"},
|
|
240
|
+
createElement(Dbm.react.admin.editor.fields.ArrayField, {name: "sections"},
|
|
241
|
+
createElement("div", {},
|
|
242
|
+
createElement(Dbm.react.form.EditObjectProperty, {"value": Dbm.react.source.item("properties.value"), "path": "image"},
|
|
243
|
+
createElement(Dbm.react.form.GraphApiImageWithAltText, {"value": Dbm.react.source.contextVariable("value"), "className": "standard-field standard-field-padding full-width"})
|
|
244
|
+
),
|
|
245
|
+
createElement(Dbm.react.form.EditObjectProperty, {"value": Dbm.react.source.item("properties.value"), "path": "title"},
|
|
246
|
+
createElement(Dbm.react.form.FormField, {"value": Dbm.react.source.contextVariable("value"), "className": "standard-field standard-field-padding full-width"})
|
|
247
|
+
),
|
|
248
|
+
createElement(Dbm.react.form.EditObjectProperty, {"value": Dbm.react.source.item("properties.value"), "path": "link", initialValue: {}},
|
|
249
|
+
createElement("div", {"className": "standard-field"},
|
|
250
|
+
createElement(Dbm.react.form.Link, {"value": Dbm.react.source.contextVariable("value")})
|
|
251
|
+
)
|
|
252
|
+
),
|
|
253
|
+
createElement(Dbm.react.form.EditObjectProperty, {"value": Dbm.react.source.item("properties.value"), "path": "content"},
|
|
254
|
+
createElement(Dbm.react.form.EditableContent, {"value": Dbm.react.source.contextVariable("value"), "className": "standard-field standard-field-padding full-width"})
|
|
255
|
+
)
|
|
256
|
+
)
|
|
257
|
+
)
|
|
258
|
+
)
|
|
259
|
+
);
|
|
260
|
+
registerBlock("content/sectionsGrid", "Sections grid", createElement(Dbm.react.blocks.content.SectionsGrid, {}), editor, {}, {"sections": true, "content": true});
|
|
261
|
+
}
|
|
262
|
+
|
|
236
263
|
{
|
|
237
264
|
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
238
265
|
createElement(Dbm.react.form.LabelledArea, {label: "Link name"},
|
|
@@ -309,6 +336,20 @@ export let registerAllBlocks = function() {
|
|
|
309
336
|
block.displayBlock.setValue("endSection", true);
|
|
310
337
|
}
|
|
311
338
|
|
|
339
|
+
{
|
|
340
|
+
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
341
|
+
|
|
342
|
+
);
|
|
343
|
+
let block = registerBlock("content/spacing", "Spacing", createElement(Dbm.react.blocks.content.Spacing), editor, {}, {});
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
{
|
|
347
|
+
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
348
|
+
|
|
349
|
+
);
|
|
350
|
+
let block = registerBlock("content/spacingLine", "Spacing line", createElement(Dbm.react.blocks.content.SpacingLine), editor, {}, {});
|
|
351
|
+
}
|
|
352
|
+
|
|
312
353
|
{
|
|
313
354
|
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
314
355
|
|
|
@@ -316,7 +357,55 @@ export let registerAllBlocks = function() {
|
|
|
316
357
|
let block = registerBlock("content/skipSpacing", "Skip spacing", createElement("div", {"data-skip-spacing": "1"}), editor, {}, {});
|
|
317
358
|
}
|
|
318
359
|
|
|
360
|
+
{
|
|
361
|
+
let buttonTypes = [];
|
|
362
|
+
{
|
|
363
|
+
let button = new Dbm.repository.Item();
|
|
364
|
+
button.setValue("type", "primary");
|
|
365
|
+
button.setValue("name", "Primary");
|
|
366
|
+
buttonTypes.push(button);
|
|
367
|
+
}
|
|
368
|
+
{
|
|
369
|
+
let button = new Dbm.repository.Item();
|
|
370
|
+
button.setValue("type", "secondary");
|
|
371
|
+
button.setValue("name", "Secondary");
|
|
372
|
+
buttonTypes.push(button);
|
|
373
|
+
}
|
|
319
374
|
|
|
375
|
+
let editor = createElement(Dbm.react.admin.editor.EditorBlockName, {},
|
|
376
|
+
createElement(Dbm.react.form.LabelledArea, {label: "Buttons"},
|
|
377
|
+
createElement(Dbm.react.admin.editor.fields.ArrayField, {name: "buttons"},
|
|
378
|
+
createElement("div", {"className": "standard-field flex-row vertically-center-items"},
|
|
379
|
+
createElement("div", {"className": "flex-row-item flex-no-resize"},
|
|
380
|
+
createElement(Dbm.react.form.EditObjectProperty, {"value": Dbm.react.source.item("properties.value"), "path": "type"},
|
|
381
|
+
createElement(Dbm.react.form.CustomSelection, {"value": Dbm.react.source.contextVariable("value"), "items": buttonTypes, "path": "type"},
|
|
382
|
+
createElement("div", {"data-slot": "button", "className": "standard-field-padding"}, "Select type"),
|
|
383
|
+
createElement("div", {},
|
|
384
|
+
createElement(Dbm.react.area.List, {items: Dbm.react.source.contextVariable("rows"), as: "row"},
|
|
385
|
+
createElement(Dbm.react.context.AddItemToContext, {
|
|
386
|
+
item: Dbm.react.source.contextVariable("row.forItem"),
|
|
387
|
+
children: createElement(Dbm.react.interaction.CommandButton, {
|
|
388
|
+
commands: [Dbm.commands.setProperty(Dbm.react.source.contextVariable("row.properties.selected"), true), Dbm.react.source.contextVariable("closeCommand")],
|
|
389
|
+
children: createElement("div", {
|
|
390
|
+
children: Dbm.react.text.text(Dbm.react.source.item("name"))
|
|
391
|
+
})
|
|
392
|
+
})
|
|
393
|
+
})
|
|
394
|
+
)
|
|
395
|
+
)
|
|
396
|
+
)
|
|
397
|
+
)
|
|
398
|
+
),
|
|
399
|
+
createElement("div", {"className": "flex-row-item flex-resize"},
|
|
400
|
+
createElement(Dbm.react.form.Link, {"value": Dbm.react.source.item("properties.value")})
|
|
401
|
+
)
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
)
|
|
405
|
+
),
|
|
406
|
+
);
|
|
407
|
+
let block = registerBlock("content/buttons", "Buttons", createElement(Dbm.react.blocks.content.Buttons), editor, {}, {});
|
|
408
|
+
}
|
|
320
409
|
|
|
321
410
|
{
|
|
322
411
|
let itemEditor = Dbm.getInstance().repository.getItem("admin/itemEditors/title");
|
|
@@ -611,6 +700,25 @@ export let registerAllBlocks = function() {
|
|
|
611
700
|
objectTypeEditor.editors = newArray;
|
|
612
701
|
}
|
|
613
702
|
|
|
703
|
+
{
|
|
704
|
+
let objectTypeEditor = Dbm.getInstance().repository.getItem("admin/objectTypeEditors/textMessageTemplate");
|
|
705
|
+
if(!objectTypeEditor.editors) {
|
|
706
|
+
objectTypeEditor.setValue("editors", []);
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
let newArray = [].concat(objectTypeEditor.editors);
|
|
710
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/name"));
|
|
711
|
+
newArray.push(Dbm.getInstance().repository.getItem("admin/itemEditors/identifier"));
|
|
712
|
+
|
|
713
|
+
{
|
|
714
|
+
let itemEditor = new Dbm.repository.Item();
|
|
715
|
+
itemEditor.setValue("element", createElement(Dbm.react.admin.objects.itemeditors.TextAreaField, {"label": "Content", "fieldName": "content"}));
|
|
716
|
+
newArray.push(itemEditor);
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
objectTypeEditor.editors = newArray;
|
|
720
|
+
}
|
|
721
|
+
|
|
614
722
|
{
|
|
615
723
|
let objectTypeEditor = Dbm.getInstance().repository.getItem("admin/objectTypeEditors/group/reviewGroup");
|
|
616
724
|
if(!objectTypeEditor.editors) {
|
|
@@ -6,17 +6,22 @@ export default class AddContextVariables extends Dbm.react.BaseObject {
|
|
|
6
6
|
super._construct();
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
_removedUsedProps(aProps) {
|
|
10
|
+
super._removedUsedProps(aProps);
|
|
11
|
+
|
|
12
|
+
delete aProps["values"];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
_renderMainElement() {
|
|
12
16
|
|
|
13
17
|
let newContext = {...this.context};
|
|
14
18
|
|
|
15
|
-
let values = this.
|
|
19
|
+
let values = this.getPropValue("values");
|
|
16
20
|
for(let objectName in values) {
|
|
17
21
|
newContext[objectName] = values[objectName];
|
|
18
22
|
}
|
|
19
23
|
|
|
24
|
+
//METODO: pass down props to children
|
|
20
25
|
return React.createElement(Dbm.react.context.Context.Provider, {"value": newContext}, this.props.children);
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -202,7 +202,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
|
|
|
202
202
|
|
|
203
203
|
_renderMainElement() {
|
|
204
204
|
|
|
205
|
-
return this._createMainElement("div", {className: "cookie-bar-position no-pointer-events", "data-non-static": 1, ref: this.createRef("widthElement")},
|
|
205
|
+
return this._createMainElement("div", {className: "cookie-bar-position no-pointer-events cookie-bar-layer", "data-non-static": 1, ref: this.createRef("widthElement")},
|
|
206
206
|
React.createElement(Dbm.react.area.HasData, {"check": this.item.properties.inDom},
|
|
207
207
|
React.createElement(Dbm.react.text.TranslationGroup, {"path": "cookies/notice/bar"},
|
|
208
208
|
React.createElement("div", {className: "overflow-hidden"},
|
|
@@ -78,15 +78,15 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
|
|
|
78
78
|
let desktopLayout = React.createElement("div", {className: "centered-site"},
|
|
79
79
|
React.createElement("div", {className: "cookie-overlay-message-box cookie-overlay-message-box-padding all-pointer-events"},
|
|
80
80
|
React.createElement("div", {"className": "flex-row small-item-spacing"},
|
|
81
|
-
React.createElement("div", {"className": "flex-row-item half"},
|
|
81
|
+
React.createElement("div", {"className": "flex-row-item half flex-resize"},
|
|
82
82
|
React.createElement("div", {"className": "cookie-bar-title"},
|
|
83
83
|
Dbm.react.text.translatedText("Your privacy is important to us", "text/title")
|
|
84
84
|
),
|
|
85
|
+
React.createElement("div", {"className": "spacing small"}),
|
|
85
86
|
React.createElement("div", {"className": "cookie-bar-description"},
|
|
86
87
|
Dbm.react.text.translatedText("We use cookies to make our site work properly and to improve your experience. You can choose to accept all cookies, allow only those that are necessary, or manage your preferences in the settings.", "text/description")
|
|
87
88
|
)
|
|
88
89
|
),
|
|
89
|
-
React.createElement("div", {"className": "flex-row-item quarter"}),
|
|
90
90
|
React.createElement("div", {"className": "flex-row-item quarter"},
|
|
91
91
|
React.createElement("div", {"className": "standard-button standard-button-padding big full-width text-align-center", onClick: () => this._acceptAll()},
|
|
92
92
|
Dbm.react.text.translatedText("Allow all", "allowAll")
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
export default class DesignRepositoryProxy extends Dbm.repository.proxy.RepositoryProxy {
|
|
5
|
+
|
|
6
|
+
_setupDefaults() {
|
|
7
|
+
this.reposityPrefix = "react/design/";
|
|
8
|
+
this.propertyName = "reactClass";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
_setupItem(aItem, aFullPath) {
|
|
12
|
+
console.log("_setupItem");
|
|
13
|
+
console.log(aItem, aFullPath);
|
|
14
|
+
|
|
15
|
+
let className = aFullPath.split("/").pop();
|
|
16
|
+
let element = React.createElement("div", {"className": "missing-design-element", "data-repository-path": aFullPath}, className)
|
|
17
|
+
|
|
18
|
+
let DynamicDesignElement = Dbm.react.dynamic.setupDesignItem(aItem, element, [], []);
|
|
19
|
+
|
|
20
|
+
aItem.requireProperty(this.propertyName, DynamicDesignElement);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
export default class DynamicDesignElement extends Dbm.react.BaseObject {
|
|
5
|
+
|
|
6
|
+
_construct() {
|
|
7
|
+
super._construct();
|
|
8
|
+
this.item.requireProperty("structure", null);
|
|
9
|
+
this._setupDesignElements();
|
|
10
|
+
|
|
11
|
+
//METODO: setup dynamic props
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
_setupDesignElements() {
|
|
15
|
+
//MENOTE: dynamically overridden
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
_renderMainElement() {
|
|
19
|
+
//METODO: link dynamic props
|
|
20
|
+
return React.createElement(Dbm.react.context.AddContextVariables, {"values": {"children": this.getPropValue("children")}},
|
|
21
|
+
this._mainElement(this.item.structure.element)
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
export {default as DesignRepositoryProxy} from "./DesignRepositoryProxy.js";
|
|
5
|
+
export {default as DynamicDesignElement} from "./DynamicDesignElement.js";
|
|
6
|
+
|
|
7
|
+
export const setupDesignItem = function(aItem, aElement, aPropNames = [], aSlots = []) {
|
|
8
|
+
let DynamicDesignElement = class DynamicDesignElement extends Dbm.react.dynamic.DynamicDesignElement {
|
|
9
|
+
_setupDesignElements() {
|
|
10
|
+
this.item.setValue("structure", aItem);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
aItem.setValue("element", aElement);
|
|
15
|
+
aItem.setValue("propNames", aPropNames);
|
|
16
|
+
aItem.setValue("slots", aSlots);
|
|
17
|
+
|
|
18
|
+
return DynamicDesignElement;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const addDesign = function(aPath, aElement, aPropNames = [], aSlots = []) {
|
|
22
|
+
let prefix = "react/design/";
|
|
23
|
+
let fullPath = prefix+aPath;
|
|
24
|
+
let item = Dbm.repository.getItem(fullPath);
|
|
25
|
+
let DynamicDesignElement = setupDesignItem(item, aElement, aPropNames, aSlots);
|
|
26
|
+
item.setValue("reactClass", DynamicDesignElement);
|
|
27
|
+
|
|
28
|
+
return item;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const setupDefaultDesignElements = function() {
|
|
32
|
+
addDesign("buttons/PrimaryButton", React.createElement("div", {"className": "standard-button standard-button-padding"},
|
|
33
|
+
React.createElement(Dbm.react.area.InsertElement, {"element": Dbm.react.source.contextVariable("children")})
|
|
34
|
+
));
|
|
35
|
+
|
|
36
|
+
addDesign("buttons/SecondaryButton", React.createElement("div", {"className": "secondary-button standard-button-padding"},
|
|
37
|
+
React.createElement(Dbm.react.area.InsertElement, {"element": Dbm.react.source.contextVariable("children")})
|
|
38
|
+
));
|
|
39
|
+
|
|
40
|
+
addDesign("content/GridSectionCard", React.createElement("div", {"className": "grid-section-card"},
|
|
41
|
+
React.createElement(Dbm.react.text.OptionalLink, {"href": Dbm.react.source.item("link.url"), "className": "custom-styled-link"},
|
|
42
|
+
React.createElement("div", {"className": ""},
|
|
43
|
+
React.createElement("div", {"className": "flex-row"},
|
|
44
|
+
React.createElement("div", {"className": "flex-row-item flex-no-ressize"},
|
|
45
|
+
"Icon"
|
|
46
|
+
),
|
|
47
|
+
React.createElement("div", {"className": "flex-row-item flex-resize"},
|
|
48
|
+
React.createElement("div", {"className": "grid-section-card-title"},
|
|
49
|
+
Dbm.react.text.text(Dbm.react.source.item("title"))
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
),
|
|
53
|
+
React.createElement("div", {"className": "spacing small"}),
|
|
54
|
+
React.createElement("div", {"className": "grid-section-card-content"},
|
|
55
|
+
Dbm.react.text.htmlText(Dbm.react.source.item("content"), "div", {"className": "no-margins-around"})
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
)
|
|
59
|
+
));
|
|
60
|
+
}
|
|
@@ -8,10 +8,23 @@ export default class EditObjectProperty extends Dbm.react.BaseObject {
|
|
|
8
8
|
this._valueSelector = new Dbm.flow.controllers.transform.PartOfObject();
|
|
9
9
|
|
|
10
10
|
this._valueSelector.item.properties.object.connectInput(this.getDynamicPropWithoutState("value", {}));
|
|
11
|
-
this._valueSelector.item.properties.path.connectInput(this.getDynamicPropWithoutState("path",
|
|
11
|
+
this._valueSelector.item.properties.path.connectInput(this.getDynamicPropWithoutState("path", null));
|
|
12
12
|
|
|
13
|
-
this.item.requireProperty("value",
|
|
13
|
+
this.item.requireProperty("value", {}).connectInput(this._valueSelector.item.properties.value);
|
|
14
|
+
}
|
|
14
15
|
|
|
16
|
+
_constructAfterProps() {
|
|
17
|
+
super._constructAfterProps();
|
|
18
|
+
|
|
19
|
+
this._valueSelector._objectUpdated();
|
|
20
|
+
let initialValue = this.getPropValue("initialValue");
|
|
21
|
+
let currentValue = this.item.value;
|
|
22
|
+
if(this.item.value === null || this.item.value === undefined) {
|
|
23
|
+
if(initialValue !== null && initialValue !== undefined) {
|
|
24
|
+
this._valueSelector.item.value = initialValue;
|
|
25
|
+
this._valueSelector._valueUpdated();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
15
28
|
}
|
|
16
29
|
|
|
17
30
|
_renderMainElement() {
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class EditableContent extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
let valueProperty = this.getDynamicPropWithoutState("value", "");
|
|
9
|
+
this.getDynamicPropWithoutState("editing", false);
|
|
10
|
+
this.state["formUpdate"] = 0;
|
|
11
|
+
this._currentValue = "";
|
|
12
|
+
|
|
13
|
+
this._callback_focusBound = this._callback_focus.bind(this);
|
|
14
|
+
this._callback_blurBound = this._callback_blur.bind(this);
|
|
15
|
+
|
|
16
|
+
this._elementChangedBound = this._elementChanged.bind(this);
|
|
17
|
+
this._callback_inputBound = this._callback_input.bind(this);
|
|
18
|
+
|
|
19
|
+
this.createRef("contentElement");
|
|
20
|
+
Dbm.flow.addUpdateCommand(this.item.properties.contentElement, Dbm.commands.callFunction(this._elementChangedBound));
|
|
21
|
+
|
|
22
|
+
valueProperty.addUpdate(this._getScopedCallFunctionCommand(this._valueChanged));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
_callback_focus(aEvent) {
|
|
26
|
+
//console.log("_callback_focus");
|
|
27
|
+
//console.log(aEvent);
|
|
28
|
+
|
|
29
|
+
this.getDynamicProp("editing").getMostUpstreamProperty().setValue(true);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
_callback_blur(aEvent) {
|
|
33
|
+
//console.log("_callback_blur");
|
|
34
|
+
//console.log(aEvent);
|
|
35
|
+
|
|
36
|
+
this.getDynamicProp("editing").getMostUpstreamProperty().setValue(false);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
_valueChanged() {
|
|
40
|
+
//console.log("_elementChanged");
|
|
41
|
+
|
|
42
|
+
if(this.item.contentElement) {
|
|
43
|
+
let value = this.getPropValueWithoutNull("value", "");
|
|
44
|
+
if(value !== this._currentValue) {
|
|
45
|
+
this.item.contentElement.innerHTML = value;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_elementChanged() {
|
|
51
|
+
//console.log("_elementChanged");
|
|
52
|
+
|
|
53
|
+
this.item.contentElement.innerHTML = this.getPropValueWithoutNull("value", "");
|
|
54
|
+
this.item.contentElement.addEventListener("input", this._callback_inputBound, false);
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
_callback_input(aEvent) {
|
|
59
|
+
//console.log("_callback_input");
|
|
60
|
+
|
|
61
|
+
let value = "" + this.item.contentElement.innerHTML;
|
|
62
|
+
this._currentValue = value;
|
|
63
|
+
this.getDynamicProp("value").getMostUpstreamProperty().setValue(value);
|
|
64
|
+
this.setState({"formUpdate": this.state.formUpdate}); //MENOTE: trigger change direct to not lose focus on input
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
_renderMainElement() {
|
|
68
|
+
return this._createMainElement("div", {contentEditable: true, ref: this.createRef("contentElement"), className: "standard-field standard-field-padding"});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|