dbm 1.4.16 → 1.4.17

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/commands/index.js CHANGED
@@ -57,7 +57,7 @@ export const trackEvent = function(aEventName, aAdditionalData = {}) {
57
57
  }
58
58
 
59
59
  export const performCommands = function(aCommands, aFromObject = null, aEventData = null) {
60
- let currentArray = aCommands;
60
+ let currentArray = Dbm.utils.ArrayFunctions.singleOrArray(aCommands);
61
61
  let currentArrayLength = currentArray.length;
62
62
  for(let i = 0; i < currentArrayLength; i++) {
63
63
  let currentCommand = currentArray[i];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dbm",
3
- "version": "1.4.16",
3
+ "version": "1.4.17",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -0,0 +1,89 @@
1
+ import React from "react";
2
+ import Dbm from "../../index.js";
3
+
4
+ export default class ModalDialog extends Dbm.react.BaseObject {
5
+ _construct() {
6
+ super._construct();
7
+
8
+ this._isOpen = false;
9
+ let updateCommand = this._getScopedCallFunctionCommand(this._updateOpen);
10
+
11
+ let startValue = this.getPropValue("startState") === "open";
12
+ let openProperty = this.getDynamicPropWithoutState("open", startValue);
13
+ openProperty.addUpdate(updateCommand);
14
+
15
+ let elementProperty = this.item.requireProperty("ref/mainElement", null);
16
+ elementProperty.addUpdate(updateCommand);
17
+ elementProperty.addUpdate(this._getScopedCallFunctionCommand(this._addCancelListener));
18
+ }
19
+
20
+ _removedUsedProps(aProps) {
21
+ delete aProps["startState"];
22
+ delete aProps["open"];
23
+ delete aProps["preventKeyboardClosing"];
24
+ }
25
+
26
+ _updateOpen() {
27
+ console.log("_updateOpen");
28
+ let open = this.getPropValue("open");
29
+
30
+ let element = this.item.mainElement;
31
+ if(element) {
32
+ console.log(this.item.mainElement, this.item);
33
+ if(open && !this._isOpen) {
34
+ element.showModal();
35
+ this._isOpen = true;
36
+ }
37
+ else if(this._isOpen) {
38
+ element.close();
39
+ this._isOpen = false;
40
+ }
41
+ }
42
+ }
43
+
44
+ _addCancelListener() {
45
+ console.log("_addCancelListener");
46
+ let element = this.item.mainElement;
47
+ if(element) {
48
+ element.addEventListener("cancel", this._callback_cancel.bind(this), true);
49
+ }
50
+ }
51
+
52
+ _callback_cancel(aEvent) {
53
+ console.log("_callback_cancel");
54
+ let preventKeyboardClosing = this.getPropValueWithoutNull("preventKeyboardClosing", false);
55
+ console.log(preventKeyboardClosing);
56
+
57
+ if(preventKeyboardClosing) {
58
+ aEvent.preventDefault();
59
+ aEvent.stopImmediatePropagation();
60
+
61
+ if(!aEvent.defaultPrevented) {
62
+ this._isOpen = false;
63
+ this.item.properties["props/open"].getMostUpstreamProperty().value = false;
64
+ }
65
+ }
66
+ else {
67
+ this._isOpen = false;
68
+ this.item.properties["props/open"].getMostUpstreamProperty().value = false;
69
+ }
70
+ }
71
+
72
+ componentDidMount() {
73
+ this._updateOpen();
74
+ }
75
+
76
+ _renderMainElement() {
77
+ console.log("ModalDialog::_renderMainElement");
78
+ console.log(this);
79
+
80
+ return this._createMainElement("dialog", {"className": "modal-dialog", "ref": this.createRef("mainElement")},
81
+ React.createElement(Dbm.react.area.HasData, {check: this.item.properties["props/open"]},
82
+ React.createElement(Dbm.react.context.AddContextVariables, {"values": {"open": this.item.properties["props/open"]}},
83
+ this.getPropValue("children")
84
+ )
85
+ )
86
+ );
87
+ }
88
+ }
89
+
@@ -18,6 +18,7 @@ export {default as SingleItemSlideshow} from "./SingleItemSlideshow.js";
18
18
  export {default as SlideshowSteps} from "./SlideshowSteps.js";
19
19
  export {default as RepeatedSlider} from "./RepeatedSlider.js";
20
20
  export {default as Layout} from "./Layout.js";
21
+ export {default as ModalDialog} from "./ModalDialog.js";
21
22
 
22
23
  export const responsiveLayout = function(aDefaultLayout) {
23
24
  let newResponsiveLayout = new Dbm.react.area.ResponsiveLayout();
@@ -5,9 +5,14 @@ export default class ContentBlock extends Dbm.react.BaseObject {
5
5
  _construct() {
6
6
  super._construct();
7
7
 
8
- let contentBlockId = this.context.blockData.contentBlock;
9
-
10
8
  this.item.requireProperty("item", null);
9
+ }
10
+
11
+ _constructAfterProps() {
12
+ super._constructAfterProps();
13
+
14
+ let contentBlockId = this.getPropValueWithDefault("id", this.context.blockData.contentBlock);
15
+ console.log(contentBlockId);
11
16
 
12
17
  let graphApi = Dbm.getInstance().repository.getItem("cachedGraphApi").controller;
13
18
  {
@@ -37,6 +37,8 @@ export default class CookieBar extends Dbm.react.BaseObject {
37
37
  elementSize.input.properties.element.connectInput(this.item.properties.widthElement);
38
38
  elementSize.start();
39
39
 
40
+ let settingsUrl = this.getDynamicPropWithoutState("settingsUrl", "/cookie-settings/");
41
+
40
42
  let layoutSwitch = new Dbm.flow.updatefunctions.logic.RangeSwitch();
41
43
  layoutSwitch.input.properties.value.connectInput(elementSize.output.properties.width);
42
44
 
@@ -59,7 +61,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
59
61
  Dbm.react.text.translatedText("Only necessary", "onlyNecessary")
60
62
  ),
61
63
  React.createElement("div", {"className": "spacing small"}),
62
- React.createElement(Dbm.react.text.Link, {"href": "/cookie-settings/", className:"custom-styled-link"},
64
+ React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
63
65
  React.createElement("div", {"className": "secondary-button standard-button-padding text-align-center"},
64
66
  Dbm.react.text.translatedText("Settings", "settings")
65
67
  )
@@ -81,7 +83,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
81
83
 
82
84
  React.createElement("div", {"className": "flex-row small-item-spacing"},
83
85
  React.createElement("div", {"className": "flex-row-item"},
84
- React.createElement(Dbm.react.text.Link, {"href": "/cookie-settings/", className:"custom-styled-link"},
86
+ React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
85
87
  React.createElement("div", {"className": "secondary-button standard-button-padding"},
86
88
  Dbm.react.text.translatedText("Settings", "settings")
87
89
  )
@@ -115,7 +117,7 @@ export default class CookieBar extends Dbm.react.BaseObject {
115
117
  React.createElement("div", {"className": "flex-row-item"},
116
118
  React.createElement("div", {"className": "flex-row small-item-spacing"},
117
119
  React.createElement("div", {"className": "flex-row-item"},
118
- React.createElement(Dbm.react.text.Link, {"href": "/cookie-settings/", className:"custom-styled-link"},
120
+ React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
119
121
  React.createElement("div", {"className": "secondary-button standard-button-padding"},
120
122
  Dbm.react.text.translatedText("Settings", "settings")
121
123
  )
@@ -37,6 +37,8 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
37
37
  elementSize.input.properties.element.connectInput(this.item.properties.widthElement);
38
38
  elementSize.start();
39
39
 
40
+ let settingsUrl = this.getDynamicPropWithoutState("settingsUrl", "/cookie-settings/");
41
+
40
42
  let layoutSwitch = new Dbm.flow.updatefunctions.logic.RangeSwitch();
41
43
  layoutSwitch.input.properties.value.connectInput(elementSize.output.properties.width);
42
44
 
@@ -66,7 +68,7 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
66
68
  Dbm.react.text.translatedText("Take full control over how we use cookies:", "text/settingsLinkDescription")
67
69
  ),
68
70
  React.createElement("div", {"className": "spacing small"}),
69
- React.createElement("a", {"href": "/cookie-settings/", className:"custom-styled-link"},
71
+ React.createElement("a", {"href": settingsUrl, className:"custom-styled-link"},
70
72
  React.createElement("div", {"className": "secondary-button standard-button-padding text-align-center"},
71
73
  Dbm.react.text.translatedText("Settings", "settings")
72
74
  )
@@ -106,7 +108,7 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
106
108
  Dbm.react.text.translatedText("Take full control over how we use cookies:", "text/settingsLinkDescription")
107
109
  ),
108
110
  React.createElement("div", {"className": "flex-row-item"},
109
- React.createElement("a", {"href": "/cookie-settings/", className:"custom-styled-link"},
111
+ React.createElement("a", {"href": settingsUrl, className:"custom-styled-link"},
110
112
  React.createElement("div", {"className": "cookie-settings-link"},
111
113
  Dbm.react.text.translatedText("Settings", "settings")
112
114
  )
@@ -187,6 +187,18 @@ export default class Controller extends Dbm.core.BaseObject {
187
187
  this.trackEvent("Product view", data, "ecommerce");
188
188
  }
189
189
 
190
+ trackProductListView(aProducts, aListId = null) {
191
+
192
+ let additionalData = {};
193
+ if(aListId) {
194
+ additionalData["item_list_id"] = aListId;
195
+ }
196
+
197
+ let data = this.createProductItemsSummary(aProducts, additionalData);
198
+
199
+ this.trackEvent("Product list view", data, "ecommerce");
200
+ }
201
+
190
202
  trackAddedToCart(aProductOrProducts) {
191
203
  let data = this.createProductItemsSummary(aProductOrProducts);
192
204
 
@@ -0,0 +1,53 @@
1
+ import Dbm from "../index.js";
2
+
3
+ export default class ConversionLinker extends Dbm.core.BaseObject {
4
+ _construct() {
5
+ super._construct();
6
+
7
+ this.item.setValue("linkerDomains", [document.location.host]);
8
+ }
9
+
10
+ _gtag() {
11
+ window.dataLayer.push(arguments);
12
+
13
+ return this;
14
+ }
15
+
16
+ startTracking() {
17
+ if(!window.dataLayer) {
18
+ window.dataLayer = [];
19
+ }
20
+
21
+ return this;
22
+ }
23
+
24
+ startStatisticsTracking() {
25
+
26
+ return this;
27
+ }
28
+
29
+ startMarketingTracking() {
30
+
31
+ this._gtag("set", "linker", {"domains": this.item.linkerDomains})
32
+
33
+ return this;
34
+ }
35
+
36
+ stopTracking() {
37
+
38
+
39
+ return this;
40
+ }
41
+
42
+ trackEvent(aEventName, aData, aDataStructure = null) {
43
+
44
+ }
45
+
46
+ trackCurrentPage() {
47
+
48
+ }
49
+
50
+ trackPage(aUrl, aTitle = null) {
51
+
52
+ }
53
+ }
@@ -0,0 +1,46 @@
1
+ import Dbm from "../index.js";
2
+
3
+ export default class PageListTracker extends Dbm.core.BaseObject {
4
+ _construct() {
5
+ super._construct();
6
+
7
+ this.item.requireProperty("items", []);
8
+ this.item.requireProperty("listId", null);
9
+
10
+ let allLoaded = Dbm.flow.updatefunctions.logic.allAtValue(true);
11
+ this.item.requireProperty("allLoaded", allLoaded);
12
+
13
+ let rendered = this.item.requireProperty("rendered", false);
14
+ allLoaded.addCheck(rendered);
15
+
16
+ this.item.requireProperty("ready", false).addUpdateWhenMatched(true, this._getScopedCallFunctionCommand(this._readyToSend));
17
+ this.item.properties.ready.connectInput(allLoaded.output.properties.value);
18
+ }
19
+
20
+ startRenderTime(aTime = 0.2) {
21
+ this.item.properties.rendered.delayValue(true, aTime);
22
+ }
23
+
24
+ createItem() {
25
+ let newItem = new Dbm.repository.Item();
26
+
27
+ let readyProperty = newItem.requireProperty("ready", false);
28
+ newItem.setValue("item", null);
29
+ this.item.addToArray("items", newItem);
30
+
31
+ this.item.allLoaded.addCheck(readyProperty);
32
+
33
+ return newItem;
34
+ }
35
+
36
+ _readyToSend() {
37
+ console.log("_readyToSend");
38
+
39
+ let products = Dbm.utils.ArrayFunctions.removeValues(Dbm.utils.ArrayFunctions.mapField(this.item.items, "item"), [null, undefined]);
40
+
41
+ if(products.length) {
42
+ let trackingController = Dbm.repository.getControllerIfExists("trackingController");
43
+ trackingController.trackProductListView(products, this.item.listId);
44
+ }
45
+ }
46
+ }
package/tracking/index.js CHANGED
@@ -6,6 +6,8 @@ export {default as MetaPixelTracker} from "./MetaPixelTracker.js";
6
6
  export {default as TagManagerTracker} from "./TagManagerTracker.js";
7
7
  export {default as GtagTracker} from "./GtagTracker.js";
8
8
  export {default as SingleAccountMetaPixelTracker} from "./SingleAccountMetaPixelTracker.js";
9
+ export {default as PageListTracker} from "./PageListTracker.js";
10
+ export {default as ConversionLinker} from "./ConversionLinker.js";
9
11
 
10
12
  export const addStartTagManagerMarker = function() {
11
13
  window.dataLayer=window.dataLayer || [];
@@ -26,6 +28,8 @@ export const setup = function() {
26
28
  let dataLayerTracker = new Dbm.tracking.DataLayerTracker();
27
29
  dataLayerTracker.item.register("tracking/dataLayerTracker");
28
30
  controller.addTracker(dataLayerTracker.item);
31
+
32
+ return controller;
29
33
  }
30
34
 
31
35
  export const setupExternalTagManager = function() {
@@ -40,6 +44,8 @@ export const setupExternalTagManager = function() {
40
44
  dataLayerTracker.item.setConsent = false;
41
45
  dataLayerTracker.item.register("tracking/dataLayerTracker");
42
46
  controller.addTracker(dataLayerTracker.item);
47
+
48
+ return controller;
43
49
  }
44
50
 
45
51
  export const addMetaPixel = function(aPixelId) {
@@ -47,6 +53,17 @@ export const addMetaPixel = function(aPixelId) {
47
53
  tracker.item.pixelId = aPixelId;
48
54
  tracker.item.register("tracking/metaPixelTracker");
49
55
  Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
56
+
57
+ return tracker;
58
+ }
59
+
60
+ export const addSingleAccountMetaPixel = function(aPixelId) {
61
+ let tracker = new Dbm.tracking.SingleAccountMetaPixelTracker();
62
+ tracker.item.pixelId = aPixelId;
63
+ tracker.item.register("tracking/metaPixelTracker/" + aPixelId);
64
+ Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
65
+
66
+ return tracker;
50
67
  }
51
68
 
52
69
  export const setCurrency = function(aCurrency) {
@@ -58,4 +75,21 @@ export const addTagManagerTracking = function(aId) {
58
75
  let tracker = new Dbm.tracking.TagManagerTracker();
59
76
  tracker.item.tagManagerId = aId;
60
77
  Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
78
+
79
+ return tracker;
80
+ }
81
+
82
+ export const addGtagTracker = function(aId) {
83
+ let tracker = new Dbm.tracking.GtagTracker();
84
+ tracker.item.tagId = aId;
85
+ Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
86
+
87
+ return tracker;
88
+ }
89
+
90
+ export const setupDefaultConversionLinker = function() {
91
+ let tracker = new Dbm.tracking.ConversionLinker();
92
+ Dbm.getRepositoryItem("trackingController").controller.addTracker(tracker.item);
93
+
94
+ return tracker;
61
95
  }