@builder.io/react 5.0.2-8 → 5.0.2-9

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder.io/react",
3
- "version": "5.0.2-7",
3
+ "version": "5.0.2-8",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "main": "dist/builder-react.cjs.js",
@@ -20,32 +20,48 @@ var sdk_1 = require("@builder.io/sdk");
20
20
  var react_2 = require("react");
21
21
  var builder_blocks_component_1 = require("../components/builder-blocks.component");
22
22
  var filter_with_custom_targeting_1 = require("../functions/filter-with-custom-targeting");
23
+ var attributeCookieName = 'builder.attributes';
23
24
  function PersonalizationContainer(props) {
24
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
25
- var _l = (0, react_2.useState)(!props.clientSideOnly), isClient = _l[0], setIsClient = _l[1];
26
- var _m = (0, react_2.useState)(0), update = _m[0], setUpdate = _m[1];
25
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
26
+ var isBeingHydrated = Boolean(sdk_1.Builder.isBrowser && ((_a = window.__hydrated) === null || _a === void 0 ? void 0 : _a[(_b = props.builderBlock) === null || _b === void 0 ? void 0 : _b.id]));
27
+ var _u = (0, react_2.useState)(isBeingHydrated), isClient = _u[0], setIsClient = _u[1];
28
+ var _v = (0, react_2.useState)(0), update = _v[0], setUpdate = _v[1];
27
29
  (0, react_2.useEffect)(function () {
28
30
  setIsClient(true);
29
- }, []);
30
- (0, react_2.useEffect)(function () {
31
31
  var subscriber = sdk_1.builder.userAttributesChanged.subscribe(function () {
32
+ sdk_1.builder.setCookie(attributeCookieName, JSON.stringify(sdk_1.builder.getUserAttributes()));
32
33
  setUpdate(update + 1);
33
34
  });
34
35
  return function () {
35
36
  subscriber.unsubscribe();
36
37
  };
37
38
  }, []);
39
+ if (sdk_1.Builder.isServer) {
40
+ react_1.default.createElement(react_1.default.Fragment, null, (_c = props.variants) === null || _c === void 0 ? void 0 :
41
+ _c.map(function (variant, index) {
42
+ var _a, _b;
43
+ return (react_1.default.createElement("template", { key: index, "data-variant-id": ((_a = props.builderBlock) === null || _a === void 0 ? void 0 : _a.id) + index },
44
+ react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: variant.blocks, parentElementId: (_b = props.builderBlock) === null || _b === void 0 ? void 0 : _b.id, dataPath: "component.options.variants.".concat(index, ".blocks"), child: true })));
45
+ }),
46
+ react_1.default.createElement("script", { id: "variants-script-".concat((_d = props.builderBlock) === null || _d === void 0 ? void 0 : _d.id), dangerouslySetInnerHTML: { __html: getPersonalizationScript(props) } }),
47
+ react_1.default.createElement("div", __assign({}, props.attributes, { "data-default-variant-id": (_e = props.builderBlock) === null || _e === void 0 ? void 0 : _e.id, className: "builder-personalization-container ".concat(props.attributes.className) }),
48
+ react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_f = props.builderBlock) === null || _f === void 0 ? void 0 : _f.children, parentElementId: (_g = props.builderBlock) === null || _g === void 0 ? void 0 : _g.id, dataPath: "this.children", child: true })));
49
+ }
38
50
  var filteredVariants = (props.variants || []).filter(function (variant) {
39
51
  return (0, filter_with_custom_targeting_1.filterWithCustomTargeting)(sdk_1.builder.getUserAttributes(), variant.query, variant.startDate, variant.endDate);
40
52
  });
41
- return (react_1.default.createElement("div", __assign({}, props.attributes, { style: __assign({ opacity: isClient ? 1 : 0, transition: 'opacity 0.2s ease-in-out' }, (_a = props.attributes) === null || _a === void 0 ? void 0 : _a.style), className: "builder-personalization-container ".concat(props.attributes.className, " ").concat(isClient ? '' : 'builder-personalization-container-loading') }), sdk_1.Builder.isEditing &&
42
- typeof props.previewingIndex === 'number' &&
43
- props.previewingIndex < (((_b = props.variants) === null || _b === void 0 ? void 0 : _b.length) || 0) ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_d = (_c = props.variants) === null || _c === void 0 ? void 0 : _c[props.previewingIndex]) === null || _d === void 0 ? void 0 : _d.blocks, parentElementId: (_e = props.builderBlock) === null || _e === void 0 ? void 0 : _e.id, dataPath: "component.options.variants.".concat(props.previewingIndex, ".blocks"), child: true })) : // If editing the default or we're on the server and there are no matching variants show the default
44
- (sdk_1.Builder.isEditing && typeof props.previewingIndex !== 'number') ||
45
- !isClient ||
46
- !filteredVariants.length ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_f = props.builderBlock) === null || _f === void 0 ? void 0 : _f.children, parentElementId: (_g = props.builderBlock) === null || _g === void 0 ? void 0 : _g.id, dataPath: "this.children", child: true })) : (
47
- // Show the variant matching the current user attributes
48
- react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_h = filteredVariants[0]) === null || _h === void 0 ? void 0 : _h.blocks, parentElementId: (_j = props.builderBlock) === null || _j === void 0 ? void 0 : _j.id, dataPath: "component.options.variants.".concat((_k = props.variants) === null || _k === void 0 ? void 0 : _k.indexOf(filteredVariants[0]), ".blocks"), child: true }))));
53
+ return (react_1.default.createElement("div", __assign({}, props.attributes, { style: __assign({ opacity: isClient ? 1 : 0, transition: 'opacity 0.2s ease-in-out' }, (_h = props.attributes) === null || _h === void 0 ? void 0 : _h.style), className: "builder-personalization-container ".concat(props.attributes.className, " ").concat(isClient ? '' : 'builder-personalization-container-loading') }),
54
+ sdk_1.Builder.isEditing &&
55
+ typeof props.previewingIndex === 'number' &&
56
+ props.previewingIndex < (((_j = props.variants) === null || _j === void 0 ? void 0 : _j.length) || 0) ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_l = (_k = props.variants) === null || _k === void 0 ? void 0 : _k[props.previewingIndex]) === null || _l === void 0 ? void 0 : _l.blocks, parentElementId: (_m = props.builderBlock) === null || _m === void 0 ? void 0 : _m.id, dataPath: "component.options.variants.".concat(props.previewingIndex, ".blocks"), child: true })) : // If editing the default or we're on the server and there are no matching variants show the default
57
+ (sdk_1.Builder.isEditing && typeof props.previewingIndex !== 'number') ||
58
+ !isClient ||
59
+ !filteredVariants.length ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_o = props.builderBlock) === null || _o === void 0 ? void 0 : _o.children, parentElementId: (_p = props.builderBlock) === null || _p === void 0 ? void 0 : _p.id, dataPath: "this.children", child: true })) : (
60
+ // Show the variant matching the current user attributes
61
+ react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_q = filteredVariants[0]) === null || _q === void 0 ? void 0 : _q.blocks, parentElementId: (_r = props.builderBlock) === null || _r === void 0 ? void 0 : _r.id, dataPath: "component.options.variants.".concat((_s = props.variants) === null || _s === void 0 ? void 0 : _s.indexOf(filteredVariants[0]), ".blocks"), child: true })),
62
+ react_1.default.createElement("script", { dangerouslySetInnerHTML: {
63
+ __html: "\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['".concat((_t = props.builderBlock) === null || _t === void 0 ? void 0 : _t.id, "'] = true;\n ").replace(/\s+/g, ' '),
64
+ } })));
49
65
  }
50
66
  exports.PersonalizationContainer = PersonalizationContainer;
51
67
  sdk_1.Builder.registerComponent(PersonalizationContainer, {
@@ -86,11 +102,10 @@ sdk_1.Builder.registerComponent(PersonalizationContainer, {
86
102
  },
87
103
  ],
88
104
  },
89
- {
90
- name: 'clientSideOnly',
91
- type: 'boolean',
92
- advanced: true,
93
- }
94
105
  ],
95
106
  });
107
+ function getPersonalizationScript(props) {
108
+ var _a, _b, _c, _d;
109
+ return "\n (function() {\n function getCookie(name) {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n }\n function removeVariants() {\n variants.forEach(function (template, index) {\n document.querySelector('template[data-variant-id=\"' + \"".concat((_a = props.builderBlock) === null || _a === void 0 ? void 0 : _a.id, "\" + index + '\"]').remove();\n });\n document.getElementById('variants-script-").concat((_b = props.builderBlock) === null || _b === void 0 ? void 0 : _b.id, "').remove();\n }\n\n var attributes = JSON.parse(getCookie(\"").concat(attributeCookieName, "\") || \"{}\");\n var variants = ").concat(JSON.stringify((_c = props.variants) === null || _c === void 0 ? void 0 : _c.map(function (v) { return ({ query: v.query, startDate: v.startDate, endDate: v.endDate }); })), ";\n var winningVariantIndex = variants.findIndex(function(variant) {\n return filterWithCustomTargeting(\n attributes,\n variant.query,\n variant.startDate,\n variant.endDate\n );\n });\n if (winningVariantIndex !== -1) {\n var winningVariant = document.querySelector('template[data-variant-index=\"' + \"").concat((_d = props.builderBlock) === null || _d === void 0 ? void 0 : _d.id, "\" + winningVariantIndex + '\"]');\n if (winningVariant) {\n var parentNode = winningVariant.parentNode;\n var newParent = parentNode.cloneNode(false);\n newParent.appendChild(winningVariant.content.firstChild);\n parentNode.parentNode.replaceChild(newParent, parentNode);\n }\n } else if (variants.length > 0) {\n removeVariants(); \n }\n function filterWithCustomTargeting(e,t,n,r){var i={query:t,startDate:n,endDate:r},o=e.date&&new Date(e.date)||new Date;return!(i.startDate&&new Date(i.startDate)>o)&&(!(i.endDate&&new Date(i.endDate)<o)&&(!i.query||!i.query.length||i.query.every((function(t){return objectMatchesQuery(e,t)}))))}function isString(e){return\"string\"==typeof e}function isNumber(e){return\"number\"==typeof e}function objectMatchesQuery(e,t){return function(){var n=t.property,r=t.operator,i=t.value;if(t&&\"urlPath\"===t.property&&t.value&&\"string\"==typeof t.value&&\"/\"!==t.value&&t.value.endsWith(\"/\")&&(i=t.value.slice(0,-1)),!n||!r)return!0;if(Array.isArray(i))return\"isNot\"===r?i.every((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})})):!!i.find((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})}));var o=e[n];if(Array.isArray(o))return o.includes(i);switch(r){case\"is\":return o===i;case\"isNot\":return o!==i;case\"contains\":return(isString(o)||Array.isArray(o))&&o.includes(String(i));case\"startsWith\":return isString(o)&&o.startsWith(String(i));case\"endsWith\":return isString(o)&&o.endsWith(String(i));case\"greaterThan\":return isNumber(o)&&isNumber(i)&&o>i;case\"lessThan\":return isNumber(o)&&isNumber(i)&&o<i;case\"greaterThanOrEqualTo\":return isNumber(o)&&isNumber(i)&&o>=i;case\"lessThanOrEqualTo\":return isNumber(o)&&isNumber(i)&&o<=i}return!1}()}\n })();\n ").replace(/\s+/g, ' ');
110
+ }
96
111
  //# sourceMappingURL=PersonalizationContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PersonalizationContainer.js","sourceRoot":"","sources":["../../../../src/blocks/PersonalizationContainer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PersonalizationContainer.js","sourceRoot":"","sources":["../../../../src/blocks/PersonalizationContainer.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filter-with-custom-targeting.js","sourceRoot":"","sources":["../../../../src/functions/filter-with-custom-targeting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filter-with-custom-targeting.js","sourceRoot":"","sources":["../../../../src/functions/filter-with-custom-targeting.ts"],"names":[],"mappings":";;;AA0BA,SAAgB,yBAAyB,CACvC,cAA8B,EAC9B,KAAc,EACd,SAAkB,EAClB,OAAgB;IAEhB,IAAM,IAAI,GAAG;QACX,KAAK,OAAA;QACL,SAAS,WAAA;QACT,OAAO,SAAA;KACR,CAAC;IAEF,IAAM,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IAEjF,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE;QACpD,OAAO,KAAK,CAAC;KACd;SAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE;QACvD,OAAO,KAAK,CAAC;KACd;IAED,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;QACrC,OAAO,IAAI,CAAC;KACb;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAC,MAAa;QACpC,OAAO,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AA3BD,8DA2BC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB,EAAE,KAAY;IAChE,IAAM,MAAM,GAAG,CAAC;QACd,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAE5B,IACE,KAAK;YACL,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC5B,KAAK,CAAC,KAAK;YACX,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;YAC/B,KAAK,CAAC,KAAK,KAAK,GAAG;YACnB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EACzB;YACA,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACtC;QAED,uFAAuF;QACvF,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC;SACb;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5B,IAAI,QAAQ,KAAK,OAAO,EAAE;gBACxB,OAAO,SAAS,CAAC,KAAK,CAAC,UAAA,GAAG;oBACxB,OAAA,kBAAkB,CAAC,QAAQ,EAAE,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gBAAhE,CAAgE,CACjE,CAAC;aACH;YACD,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAA,GAAG;gBACzB,OAAA,kBAAkB,CAAC,QAAQ,EAAE,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YAAhE,CAAgE,CACjE,CAAC;SACH;QACD,IAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAClC;QAED,QAAQ,QAAQ,EAAE;YAChB,KAAK,IAAI;gBACP,OAAO,KAAK,KAAK,SAAS,CAAC;YAC7B,KAAK,OAAO;gBACV,OAAO,KAAK,KAAK,SAAS,CAAC;YAC7B,KAAK,UAAU;gBACb,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACxF,KAAK,YAAY;gBACf,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAChE,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC9D,KAAK,aAAa;gBAChB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC;YACrE,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,GAAG,SAAS,CAAC;YACrE,KAAK,sBAAsB;gBACzB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC;YACtE,KAAK,mBAAmB;gBACtB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,SAAS,CAAC;SACvE;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -14,6 +14,5 @@ export type PersonalizationContainerProps = {
14
14
  }
15
15
  ];
16
16
  attributes: any;
17
- clientSideOnly?: boolean;
18
17
  };
19
18
  export declare function PersonalizationContainer(props: PersonalizationContainerProps): React.JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder.io/react",
3
- "version": "5.0.2-8",
3
+ "version": "5.0.2-9",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "main": "dist/builder-react.cjs.js",
@@ -107,5 +107,5 @@
107
107
  "installConfig": {
108
108
  "hoistingLimits": "workspaces"
109
109
  },
110
- "stableVersion": "5.0.2-7"
110
+ "stableVersion": "5.0.2-8"
111
111
  }
@@ -4,6 +4,7 @@ import { useEffect, useState } from 'react';
4
4
  import { BuilderBlocks } from '../components/builder-blocks.component';
5
5
  import { filterWithCustomTargeting, Query } from '../functions/filter-with-custom-targeting';
6
6
 
7
+ const attributeCookieName = 'builder.attributes';
7
8
  export type PersonalizationContainerProps = {
8
9
  children: React.ReactNode;
9
10
  previewingIndex: number | null;
@@ -17,19 +18,19 @@ export type PersonalizationContainerProps = {
17
18
  },
18
19
  ];
19
20
  attributes: any;
20
- clientSideOnly?: boolean;
21
21
  };
22
22
 
23
23
  export function PersonalizationContainer(props: PersonalizationContainerProps) {
24
- const [isClient, setIsClient] = useState(!props.clientSideOnly);
24
+ const isBeingHydrated = Boolean(
25
+ Builder.isBrowser && (window as any).__hydrated?.[props.builderBlock?.id!]
26
+ );
27
+ const [isClient, setIsClient] = useState(isBeingHydrated);
25
28
  const [update, setUpdate] = useState(0);
26
29
 
27
30
  useEffect(() => {
28
31
  setIsClient(true);
29
- }, []);
30
-
31
- useEffect(() => {
32
32
  const subscriber = builder.userAttributesChanged.subscribe(() => {
33
+ builder.setCookie(attributeCookieName, JSON.stringify(builder.getUserAttributes()));
33
34
  setUpdate(update + 1);
34
35
  });
35
36
  return () => {
@@ -37,6 +38,37 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
37
38
  };
38
39
  }, []);
39
40
 
41
+ if (Builder.isServer) {
42
+ <>
43
+ {props.variants?.map((variant, index) => (
44
+ <template key={index} data-variant-id={props.builderBlock?.id! + index}>
45
+ <BuilderBlocks
46
+ blocks={variant.blocks}
47
+ parentElementId={props.builderBlock?.id}
48
+ dataPath={`component.options.variants.${index}.blocks`}
49
+ child
50
+ />
51
+ </template>
52
+ ))}
53
+ <script
54
+ id={`variants-script-${props.builderBlock?.id}`}
55
+ dangerouslySetInnerHTML={{ __html: getPersonalizationScript(props) }}
56
+ />
57
+ <div
58
+ {...props.attributes}
59
+ data-default-variant-id={props.builderBlock?.id}
60
+ className={`builder-personalization-container ${props.attributes.className}`}
61
+ >
62
+ <BuilderBlocks
63
+ blocks={props.builderBlock?.children}
64
+ parentElementId={props.builderBlock?.id}
65
+ dataPath="this.children"
66
+ child
67
+ />
68
+ </div>
69
+ </>;
70
+ }
71
+
40
72
  const filteredVariants = (props.variants || []).filter(variant => {
41
73
  return filterWithCustomTargeting(
42
74
  builder.getUserAttributes(),
@@ -89,6 +121,15 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
89
121
  child
90
122
  />
91
123
  )}
124
+
125
+ <script
126
+ dangerouslySetInnerHTML={{
127
+ __html: `
128
+ window.__hydrated = window.__hydrated || {};
129
+ window.__hydrated['${props.builderBlock?.id}'] = true;
130
+ `.replace(/\s+/g, ' '),
131
+ }}
132
+ />
92
133
  </div>
93
134
  );
94
135
  }
@@ -132,10 +173,51 @@ Builder.registerComponent(PersonalizationContainer, {
132
173
  },
133
174
  ],
134
175
  },
135
- {
136
- name: 'clientSideOnly',
137
- type: 'boolean',
138
- advanced: true,
139
- }
140
176
  ],
141
177
  });
178
+
179
+ function getPersonalizationScript(props: PersonalizationContainerProps) {
180
+ return `
181
+ (function() {
182
+ function getCookie(name) {
183
+ var nameEQ = name + "=";
184
+ var ca = document.cookie.split(';');
185
+ for(var i=0;i < ca.length;i++) {
186
+ var c = ca[i];
187
+ while (c.charAt(0)==' ') c = c.substring(1,c.length);
188
+ if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
189
+ }
190
+ return null;
191
+ }
192
+ function removeVariants() {
193
+ variants.forEach(function (template, index) {
194
+ document.querySelector('template[data-variant-id="' + "${props.builderBlock?.id}" + index + '"]').remove();
195
+ });
196
+ document.getElementById('variants-script-${props.builderBlock?.id}').remove();
197
+ }
198
+
199
+ var attributes = JSON.parse(getCookie("${attributeCookieName}") || "{}");
200
+ var variants = ${JSON.stringify(props.variants?.map(v => ({ query: v.query, startDate: v.startDate, endDate: v.endDate })))};
201
+ var winningVariantIndex = variants.findIndex(function(variant) {
202
+ return filterWithCustomTargeting(
203
+ attributes,
204
+ variant.query,
205
+ variant.startDate,
206
+ variant.endDate
207
+ );
208
+ });
209
+ if (winningVariantIndex !== -1) {
210
+ var winningVariant = document.querySelector('template[data-variant-index="' + "${props.builderBlock?.id}" + winningVariantIndex + '"]');
211
+ if (winningVariant) {
212
+ var parentNode = winningVariant.parentNode;
213
+ var newParent = parentNode.cloneNode(false);
214
+ newParent.appendChild(winningVariant.content.firstChild);
215
+ parentNode.parentNode.replaceChild(newParent, parentNode);
216
+ }
217
+ } else if (variants.length > 0) {
218
+ removeVariants();
219
+ }
220
+ function filterWithCustomTargeting(e,t,n,r){var i={query:t,startDate:n,endDate:r},o=e.date&&new Date(e.date)||new Date;return!(i.startDate&&new Date(i.startDate)>o)&&(!(i.endDate&&new Date(i.endDate)<o)&&(!i.query||!i.query.length||i.query.every((function(t){return objectMatchesQuery(e,t)}))))}function isString(e){return"string"==typeof e}function isNumber(e){return"number"==typeof e}function objectMatchesQuery(e,t){return function(){var n=t.property,r=t.operator,i=t.value;if(t&&"urlPath"===t.property&&t.value&&"string"==typeof t.value&&"/"!==t.value&&t.value.endsWith("/")&&(i=t.value.slice(0,-1)),!n||!r)return!0;if(Array.isArray(i))return"isNot"===r?i.every((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})})):!!i.find((function(t){return objectMatchesQuery(e,{property:n,operator:r,value:t})}));var o=e[n];if(Array.isArray(o))return o.includes(i);switch(r){case"is":return o===i;case"isNot":return o!==i;case"contains":return(isString(o)||Array.isArray(o))&&o.includes(String(i));case"startsWith":return isString(o)&&o.startsWith(String(i));case"endsWith":return isString(o)&&o.endsWith(String(i));case"greaterThan":return isNumber(o)&&isNumber(i)&&o>i;case"lessThan":return isNumber(o)&&isNumber(i)&&o<i;case"greaterThanOrEqualTo":return isNumber(o)&&isNumber(i)&&o>=i;case"lessThanOrEqualTo":return isNumber(o)&&isNumber(i)&&o<=i}return!1}()}
221
+ })();
222
+ `.replace(/\s+/g, ' ');
223
+ }
@@ -1,127 +1,126 @@
1
1
  type UserAttributes = {
2
- date?: string | Date;
3
- urlPath?: string;
4
- [key: string]: any; // Allow any other properties
5
- };
6
-
7
- // Query type
8
- type QueryOperator =
9
- | 'is'
10
- | 'isNot'
11
- | 'contains'
12
- | 'startsWith'
13
- | 'endsWith'
14
- | 'greaterThan'
15
- | 'lessThan'
16
- | 'greaterThanOrEqualTo'
17
- | 'lessThanOrEqualTo';
18
-
19
- type QueryValue = string | number | boolean | Array<string | number | boolean>;
20
-
21
- export type Query = {
22
- property: string;
23
- operator: QueryOperator;
24
- value: QueryValue;
25
- };
2
+ date?: string | Date;
3
+ urlPath?: string;
4
+ [key: string]: any; // Allow any other properties
5
+ };
6
+
7
+ // Query type
8
+ type QueryOperator =
9
+ | 'is'
10
+ | 'isNot'
11
+ | 'contains'
12
+ | 'startsWith'
13
+ | 'endsWith'
14
+ | 'greaterThan'
15
+ | 'lessThan'
16
+ | 'greaterThanOrEqualTo'
17
+ | 'lessThanOrEqualTo';
18
+
19
+ type QueryValue = string | number | boolean | Array<string | number | boolean>;
20
+
21
+ export type Query = {
22
+ property: string;
23
+ operator: QueryOperator;
24
+ value: QueryValue;
25
+ };
26
26
 
27
27
  export function filterWithCustomTargeting(
28
- userAttributes: UserAttributes,
29
- query: Query[],
30
- startDate?: string,
31
- endDate?: string
32
- ) {
33
- const item = {
34
- query,
35
- startDate,
36
- endDate,
37
- };
38
-
39
- const now = (userAttributes.date && new Date(userAttributes.date)) || new Date();
40
-
41
- if (item.startDate && new Date(item.startDate) > now) {
42
- return false;
43
- } else if (item.endDate && new Date(item.endDate) < now) {
44
- return false;
28
+ userAttributes: UserAttributes,
29
+ query: Query[],
30
+ startDate?: string,
31
+ endDate?: string
32
+ ) {
33
+ const item = {
34
+ query,
35
+ startDate,
36
+ endDate,
37
+ };
38
+
39
+ const now = (userAttributes.date && new Date(userAttributes.date)) || new Date();
40
+
41
+ if (item.startDate && new Date(item.startDate) > now) {
42
+ return false;
43
+ } else if (item.endDate && new Date(item.endDate) < now) {
44
+ return false;
45
+ }
46
+
47
+ if (!item.query || !item.query.length) {
48
+ return true;
49
+ }
50
+
51
+ return item.query.every((filter: Query) => {
52
+ return objectMatchesQuery(userAttributes, filter);
53
+ });
54
+ }
55
+
56
+ function isString(val: unknown): val is string {
57
+ return typeof val === 'string';
58
+ }
59
+
60
+ function isNumber(val: unknown): val is number {
61
+ return typeof val === 'number';
62
+ }
63
+
64
+ function objectMatchesQuery(userattr: UserAttributes, query: Query): boolean {
65
+ const result = (() => {
66
+ const property = query.property;
67
+ const operator = query.operator;
68
+ let testValue = query.value;
69
+
70
+ if (
71
+ query &&
72
+ query.property === 'urlPath' &&
73
+ query.value &&
74
+ typeof query.value === 'string' &&
75
+ query.value !== '/' &&
76
+ query.value.endsWith('/')
77
+ ) {
78
+ testValue = query.value.slice(0, -1);
45
79
  }
46
-
47
- if (!item.query || !item.query.length) {
80
+
81
+ // Check is query property is present in userAttributes. Proceed only if it is present.
82
+ if (!(property && operator)) {
48
83
  return true;
49
84
  }
50
-
51
- return item.query.every((filter: Query) => {
52
- return objectMatchesQuery(userAttributes, filter);
53
- });
54
- }
55
-
56
- function isString(val: unknown): val is string {
57
- return typeof val === 'string';
58
- }
59
-
60
- function isNumber(val: unknown): val is number {
61
- return typeof val === 'number';
62
- }
63
-
64
- function objectMatchesQuery(userattr: UserAttributes, query: Query): boolean {
65
- const result = (() => {
66
- const property = query.property;
67
- const operator = query.operator;
68
- let testValue = query.value;
69
-
70
- if (
71
- query &&
72
- query.property === 'urlPath' &&
73
- query.value &&
74
- typeof query.value === 'string' &&
75
- query.value !== '/' &&
76
- query.value.endsWith('/')
77
- ) {
78
- testValue = query.value.slice(0, -1);
79
- }
80
85
 
81
-
82
- // Check is query property is present in userAttributes. Proceed only if it is present.
83
- if (!(property && operator)) {
84
- return true;
85
- }
86
-
87
- if (Array.isArray(testValue)) {
88
- if (operator === 'isNot') {
89
- return testValue.every(val =>
90
- objectMatchesQuery(userattr, { property, operator, value: val })
91
- );
92
- }
93
- return !!testValue.find(val =>
86
+ if (Array.isArray(testValue)) {
87
+ if (operator === 'isNot') {
88
+ return testValue.every(val =>
94
89
  objectMatchesQuery(userattr, { property, operator, value: val })
95
90
  );
96
91
  }
97
- const value = userattr[property];
98
-
99
- if (Array.isArray(value)) {
100
- return value.includes(testValue);
101
- }
102
-
103
- switch (operator) {
104
- case 'is':
105
- return value === testValue;
106
- case 'isNot':
107
- return value !== testValue;
108
- case 'contains':
109
- return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
110
- case 'startsWith':
111
- return isString(value) && value.startsWith(String(testValue));
112
- case 'endsWith':
113
- return isString(value) && value.endsWith(String(testValue));
114
- case 'greaterThan':
115
- return isNumber(value) && isNumber(testValue) && value > testValue;
116
- case 'lessThan':
117
- return isNumber(value) && isNumber(testValue) && value < testValue;
118
- case 'greaterThanOrEqualTo':
119
- return isNumber(value) && isNumber(testValue) && value >= testValue;
120
- case 'lessThanOrEqualTo':
121
- return isNumber(value) && isNumber(testValue) && value <= testValue;
122
- }
123
- return false;
124
- })();
125
-
126
- return result;
127
- }
92
+ return !!testValue.find(val =>
93
+ objectMatchesQuery(userattr, { property, operator, value: val })
94
+ );
95
+ }
96
+ const value = userattr[property];
97
+
98
+ if (Array.isArray(value)) {
99
+ return value.includes(testValue);
100
+ }
101
+
102
+ switch (operator) {
103
+ case 'is':
104
+ return value === testValue;
105
+ case 'isNot':
106
+ return value !== testValue;
107
+ case 'contains':
108
+ return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
109
+ case 'startsWith':
110
+ return isString(value) && value.startsWith(String(testValue));
111
+ case 'endsWith':
112
+ return isString(value) && value.endsWith(String(testValue));
113
+ case 'greaterThan':
114
+ return isNumber(value) && isNumber(testValue) && value > testValue;
115
+ case 'lessThan':
116
+ return isNumber(value) && isNumber(testValue) && value < testValue;
117
+ case 'greaterThanOrEqualTo':
118
+ return isNumber(value) && isNumber(testValue) && value >= testValue;
119
+ case 'lessThanOrEqualTo':
120
+ return isNumber(value) && isNumber(testValue) && value <= testValue;
121
+ }
122
+ return false;
123
+ })();
124
+
125
+ return result;
126
+ }