@builder.io/react 5.0.2-10 → 5.0.2-12
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/dist/builder-react-lite.cjs.js +1 -1
- package/dist/builder-react-lite.cjs.js.map +1 -1
- package/dist/builder-react-lite.esm.js +1 -1
- package/dist/builder-react-lite.esm.js.map +1 -1
- package/dist/builder-react.browser.js +2 -2
- package/dist/builder-react.browser.js.map +1 -1
- package/dist/builder-react.cjs.js +1 -1
- package/dist/builder-react.cjs.js.map +1 -1
- package/dist/builder-react.es5.js +1 -1
- package/dist/builder-react.es5.js.map +1 -1
- package/dist/builder-react.unpkg.js +2 -2
- package/dist/builder-react.unpkg.js.map +1 -1
- package/dist/lib/package.json +1 -1
- package/dist/lib/src/blocks/PersonalizationContainer.js +28 -24
- package/dist/lib/src/blocks/PersonalizationContainer.js.map +1 -1
- package/dist/lib/src/functions/filter-with-custom-targeting.js +3 -1
- package/dist/lib/src/functions/filter-with-custom-targeting.js.map +1 -1
- package/dist/types/src/functions/filter-with-custom-targeting.d.ts +1 -0
- package/package.json +2 -2
- package/src/blocks/PersonalizationContainer.tsx +90 -66
- package/src/functions/filter-with-custom-targeting.ts +3 -0
package/dist/lib/package.json
CHANGED
|
@@ -20,16 +20,16 @@ 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
|
|
23
|
+
var attributesCookie = 'builder.attributes';
|
|
24
24
|
function PersonalizationContainer(props) {
|
|
25
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
25
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
26
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
|
|
28
|
-
var
|
|
27
|
+
var _v = (0, react_2.useState)(isBeingHydrated), isClient = _v[0], setIsClient = _v[1];
|
|
28
|
+
var _w = (0, react_2.useState)(0), update = _w[0], setUpdate = _w[1];
|
|
29
29
|
(0, react_2.useEffect)(function () {
|
|
30
30
|
setIsClient(true);
|
|
31
31
|
var subscriber = sdk_1.builder.userAttributesChanged.subscribe(function () {
|
|
32
|
-
sdk_1.builder.setCookie(
|
|
32
|
+
sdk_1.builder.setCookie(attributesCookie, JSON.stringify(sdk_1.builder.getUserAttributes()));
|
|
33
33
|
setUpdate(update + 1);
|
|
34
34
|
});
|
|
35
35
|
return function () {
|
|
@@ -37,31 +37,36 @@ function PersonalizationContainer(props) {
|
|
|
37
37
|
};
|
|
38
38
|
}, []);
|
|
39
39
|
if (sdk_1.Builder.isServer) {
|
|
40
|
-
return (react_1.default.createElement(
|
|
40
|
+
return (react_1.default.createElement("section", null, (_c = props.variants) === null || _c === void 0 ? void 0 :
|
|
41
41
|
_c.map(function (variant, index) {
|
|
42
42
|
var _a, _b;
|
|
43
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
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
45
|
}),
|
|
46
|
-
react_1.default.createElement("script", { id: "variants-script-".concat((_d = props.builderBlock) === null || _d === void 0 ? void 0 : _d.id), dangerouslySetInnerHTML: {
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
react_1.default.createElement("script", { id: "variants-script-".concat((_d = props.builderBlock) === null || _d === void 0 ? void 0 : _d.id), dangerouslySetInnerHTML: {
|
|
47
|
+
__html: getPersonalizationScript(props.variants, (_e = props.builderBlock) === null || _e === void 0 ? void 0 : _e.id),
|
|
48
|
+
} }),
|
|
49
|
+
react_1.default.createElement("div", __assign({}, props.attributes, {
|
|
50
|
+
// same as the client side styles for hydration matching
|
|
51
|
+
style: __assign({ opacity: 1, transition: 'opacity 0.2s ease-in-out' }, (_f = props.attributes) === null || _f === void 0 ? void 0 : _f.style), className: "builder-personalization-container ".concat(props.attributes.className) }),
|
|
52
|
+
react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_g = props.builderBlock) === null || _g === void 0 ? void 0 : _g.children, parentElementId: (_h = props.builderBlock) === null || _h === void 0 ? void 0 : _h.id, dataPath: "this.children", child: true }))));
|
|
49
53
|
}
|
|
50
54
|
var filteredVariants = (props.variants || []).filter(function (variant) {
|
|
51
55
|
return (0, filter_with_custom_targeting_1.filterWithCustomTargeting)(sdk_1.builder.getUserAttributes(), variant.query, variant.startDate, variant.endDate);
|
|
52
56
|
});
|
|
53
|
-
return (react_1.default.createElement("
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
return (react_1.default.createElement("section", null,
|
|
58
|
+
react_1.default.createElement("div", __assign({}, props.attributes, { style: __assign({ opacity: isClient ? 1 : 0, transition: 'opacity 0.2s ease-in-out' }, (_j = props.attributes) === null || _j === void 0 ? void 0 : _j.style), className: "builder-personalization-container ".concat(props.attributes.className, " ").concat(isClient ? '' : 'builder-personalization-container-loading') }),
|
|
59
|
+
sdk_1.Builder.isEditing &&
|
|
60
|
+
typeof props.previewingIndex === 'number' &&
|
|
61
|
+
props.previewingIndex < (((_k = props.variants) === null || _k === void 0 ? void 0 : _k.length) || 0) ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_m = (_l = props.variants) === null || _l === void 0 ? void 0 : _l[props.previewingIndex]) === null || _m === void 0 ? void 0 : _m.blocks, parentElementId: (_o = props.builderBlock) === null || _o === void 0 ? void 0 : _o.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
|
|
62
|
+
(sdk_1.Builder.isEditing && typeof props.previewingIndex !== 'number') ||
|
|
63
|
+
!isClient ||
|
|
64
|
+
!filteredVariants.length ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_p = props.builderBlock) === null || _p === void 0 ? void 0 : _p.children, parentElementId: (_q = props.builderBlock) === null || _q === void 0 ? void 0 : _q.id, dataPath: "this.children", child: true })) : (
|
|
65
|
+
// Show the variant matching the current user attributes
|
|
66
|
+
react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_r = filteredVariants[0]) === null || _r === void 0 ? void 0 : _r.blocks, parentElementId: (_s = props.builderBlock) === null || _s === void 0 ? void 0 : _s.id, dataPath: "component.options.variants.".concat((_t = props.variants) === null || _t === void 0 ? void 0 : _t.indexOf(filteredVariants[0]), ".blocks"), child: true })),
|
|
67
|
+
react_1.default.createElement("script", { dangerouslySetInnerHTML: {
|
|
68
|
+
__html: "\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['".concat((_u = props.builderBlock) === null || _u === void 0 ? void 0 : _u.id, "'] = true;\n ").replace(/\s+/g, ' '),
|
|
69
|
+
} }))));
|
|
65
70
|
}
|
|
66
71
|
exports.PersonalizationContainer = PersonalizationContainer;
|
|
67
72
|
sdk_1.Builder.registerComponent(PersonalizationContainer, {
|
|
@@ -104,8 +109,7 @@ sdk_1.Builder.registerComponent(PersonalizationContainer, {
|
|
|
104
109
|
},
|
|
105
110
|
],
|
|
106
111
|
});
|
|
107
|
-
function getPersonalizationScript(
|
|
108
|
-
var
|
|
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, ' ');
|
|
112
|
+
function getPersonalizationScript(variants, blockId) {
|
|
113
|
+
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(blockId, "\" + index + '\"]').remove();\n });\n document.getElementById('variants-script-").concat(blockId, "').remove();\n }\n\n var attributes = JSON.parse(getCookie(\"").concat(attributesCookie, "\") || \"{}\");\n var variants = ").concat(JSON.stringify(variants === null || variants === void 0 ? void 0 : variants.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 (location.href.includes('builder.debug=true')) {\n console.debug('PersonalizationContainer', {\n attributes: attributes,\n variants: variants,\n winningVariantIndex: winningVariantIndex,\n });\n }\n if (winningVariantIndex !== -1) {\n var winningVariant = document.querySelector('template[data-variant-index=\"' + \"").concat(blockId, "\" + 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 ").concat(filter_with_custom_targeting_1.filterWithCustomTargetingScript, "\n })();\n ").replace(/\s+/g, ' ');
|
|
110
114
|
}
|
|
111
115
|
//# sourceMappingURL=PersonalizationContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersonalizationContainer.js","sourceRoot":"","sources":["../../../../src/blocks/PersonalizationContainer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,uCAAmE;AACnE,+BAA4C;AAC5C,mFAAuE;AACvE,
|
|
1
|
+
{"version":3,"file":"PersonalizationContainer.js","sourceRoot":"","sources":["../../../../src/blocks/PersonalizationContainer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.filterWithCustomTargeting = void 0;
|
|
3
|
+
exports.filterWithCustomTargeting = exports.filterWithCustomTargetingScript = void 0;
|
|
4
|
+
// minified version of the function need to be added to the script
|
|
5
|
+
exports.filterWithCustomTargetingScript = "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}()}";
|
|
4
6
|
function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {
|
|
5
7
|
var item = {
|
|
6
8
|
query: query,
|
|
@@ -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,kEAAkE;AACrD,QAAA,+BAA+B,GAAG,q4CAAq2C,CAAC;AAEr5C,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"}
|
|
@@ -10,5 +10,6 @@ export type Query = {
|
|
|
10
10
|
operator: QueryOperator;
|
|
11
11
|
value: QueryValue;
|
|
12
12
|
};
|
|
13
|
+
export declare const filterWithCustomTargetingScript = "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}()}";
|
|
13
14
|
export declare function filterWithCustomTargeting(userAttributes: UserAttributes, query: Query[], startDate?: string, endDate?: string): boolean;
|
|
14
15
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builder.io/react",
|
|
3
|
-
"version": "5.0.2-
|
|
3
|
+
"version": "5.0.2-12",
|
|
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-
|
|
110
|
+
"stableVersion": "5.0.2-11"
|
|
111
111
|
}
|
|
@@ -2,9 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import { Builder, builder, BuilderElement } from '@builder.io/sdk';
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
4
|
import { BuilderBlocks } from '../components/builder-blocks.component';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
filterWithCustomTargeting,
|
|
7
|
+
filterWithCustomTargetingScript,
|
|
8
|
+
Query,
|
|
9
|
+
} from '../functions/filter-with-custom-targeting';
|
|
10
|
+
|
|
11
|
+
const attributesCookie = 'builder.attributes';
|
|
6
12
|
|
|
7
|
-
const attributeCookieName = 'builder.attributes';
|
|
8
13
|
export type PersonalizationContainerProps = {
|
|
9
14
|
children: React.ReactNode;
|
|
10
15
|
previewingIndex: number | null;
|
|
@@ -30,7 +35,7 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
30
35
|
useEffect(() => {
|
|
31
36
|
setIsClient(true);
|
|
32
37
|
const subscriber = builder.userAttributesChanged.subscribe(() => {
|
|
33
|
-
builder.setCookie(
|
|
38
|
+
builder.setCookie(attributesCookie, JSON.stringify(builder.getUserAttributes()));
|
|
34
39
|
setUpdate(update + 1);
|
|
35
40
|
});
|
|
36
41
|
return () => {
|
|
@@ -40,7 +45,7 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
40
45
|
|
|
41
46
|
if (Builder.isServer) {
|
|
42
47
|
return (
|
|
43
|
-
|
|
48
|
+
<section>
|
|
44
49
|
{props.variants?.map((variant, index) => (
|
|
45
50
|
<template key={index} data-variant-id={props.builderBlock?.id! + index}>
|
|
46
51
|
<BuilderBlocks
|
|
@@ -53,11 +58,18 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
53
58
|
))}
|
|
54
59
|
<script
|
|
55
60
|
id={`variants-script-${props.builderBlock?.id}`}
|
|
56
|
-
dangerouslySetInnerHTML={{
|
|
61
|
+
dangerouslySetInnerHTML={{
|
|
62
|
+
__html: getPersonalizationScript(props.variants, props.builderBlock?.id),
|
|
63
|
+
}}
|
|
57
64
|
/>
|
|
58
65
|
<div
|
|
59
66
|
{...props.attributes}
|
|
60
|
-
|
|
67
|
+
// same as the client side styles for hydration matching
|
|
68
|
+
style={{
|
|
69
|
+
opacity: 1,
|
|
70
|
+
transition: 'opacity 0.2s ease-in-out',
|
|
71
|
+
...props.attributes?.style,
|
|
72
|
+
}}
|
|
61
73
|
className={`builder-personalization-container ${props.attributes.className}`}
|
|
62
74
|
>
|
|
63
75
|
<BuilderBlocks
|
|
@@ -67,7 +79,7 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
67
79
|
child
|
|
68
80
|
/>
|
|
69
81
|
</div>
|
|
70
|
-
|
|
82
|
+
</section>
|
|
71
83
|
);
|
|
72
84
|
}
|
|
73
85
|
|
|
@@ -81,58 +93,60 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
81
93
|
});
|
|
82
94
|
|
|
83
95
|
return (
|
|
84
|
-
<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
96
|
+
<section>
|
|
97
|
+
<div
|
|
98
|
+
{...props.attributes}
|
|
99
|
+
style={{
|
|
100
|
+
opacity: isClient ? 1 : 0,
|
|
101
|
+
transition: 'opacity 0.2s ease-in-out',
|
|
102
|
+
...props.attributes?.style,
|
|
103
|
+
}}
|
|
104
|
+
className={`builder-personalization-container ${
|
|
105
|
+
props.attributes.className
|
|
106
|
+
} ${isClient ? '' : 'builder-personalization-container-loading'}`}
|
|
107
|
+
>
|
|
108
|
+
{/* If editing a specific varient */}
|
|
109
|
+
{Builder.isEditing &&
|
|
110
|
+
typeof props.previewingIndex === 'number' &&
|
|
111
|
+
props.previewingIndex < (props.variants?.length || 0) ? (
|
|
112
|
+
<BuilderBlocks
|
|
113
|
+
blocks={props.variants?.[props.previewingIndex]?.blocks}
|
|
114
|
+
parentElementId={props.builderBlock?.id}
|
|
115
|
+
dataPath={`component.options.variants.${props.previewingIndex}.blocks`}
|
|
116
|
+
child
|
|
117
|
+
/>
|
|
118
|
+
) : // If editing the default or we're on the server and there are no matching variants show the default
|
|
119
|
+
(Builder.isEditing && typeof props.previewingIndex !== 'number') ||
|
|
120
|
+
!isClient ||
|
|
121
|
+
!filteredVariants.length ? (
|
|
122
|
+
<BuilderBlocks
|
|
123
|
+
blocks={props.builderBlock?.children}
|
|
124
|
+
parentElementId={props.builderBlock?.id}
|
|
125
|
+
dataPath="this.children"
|
|
126
|
+
child
|
|
127
|
+
/>
|
|
128
|
+
) : (
|
|
129
|
+
// Show the variant matching the current user attributes
|
|
130
|
+
<BuilderBlocks
|
|
131
|
+
blocks={filteredVariants[0]?.blocks}
|
|
132
|
+
parentElementId={props.builderBlock?.id}
|
|
133
|
+
dataPath={`component.options.variants.${props.variants?.indexOf(
|
|
134
|
+
filteredVariants[0]
|
|
135
|
+
)}.blocks`}
|
|
136
|
+
child
|
|
137
|
+
/>
|
|
138
|
+
)}
|
|
126
139
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
140
|
+
<script
|
|
141
|
+
dangerouslySetInnerHTML={{
|
|
142
|
+
__html: `
|
|
130
143
|
window.__hydrated = window.__hydrated || {};
|
|
131
144
|
window.__hydrated['${props.builderBlock?.id}'] = true;
|
|
132
145
|
`.replace(/\s+/g, ' '),
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
146
|
+
}}
|
|
147
|
+
/>
|
|
148
|
+
</div>
|
|
149
|
+
</section>
|
|
136
150
|
);
|
|
137
151
|
}
|
|
138
152
|
|
|
@@ -178,7 +192,10 @@ Builder.registerComponent(PersonalizationContainer, {
|
|
|
178
192
|
],
|
|
179
193
|
});
|
|
180
194
|
|
|
181
|
-
function getPersonalizationScript(
|
|
195
|
+
function getPersonalizationScript(
|
|
196
|
+
variants: PersonalizationContainerProps['variants'],
|
|
197
|
+
blockId?: string
|
|
198
|
+
) {
|
|
182
199
|
return `
|
|
183
200
|
(function() {
|
|
184
201
|
function getCookie(name) {
|
|
@@ -191,15 +208,15 @@ function getPersonalizationScript(props: PersonalizationContainerProps) {
|
|
|
191
208
|
}
|
|
192
209
|
return null;
|
|
193
210
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
211
|
+
function removeVariants() {
|
|
212
|
+
variants.forEach(function (template, index) {
|
|
213
|
+
document.querySelector('template[data-variant-id="' + "${blockId}" + index + '"]').remove();
|
|
214
|
+
});
|
|
215
|
+
document.getElementById('variants-script-${blockId}').remove();
|
|
216
|
+
}
|
|
200
217
|
|
|
201
|
-
var attributes = JSON.parse(getCookie("${
|
|
202
|
-
var variants = ${JSON.stringify(
|
|
218
|
+
var attributes = JSON.parse(getCookie("${attributesCookie}") || "{}");
|
|
219
|
+
var variants = ${JSON.stringify(variants?.map(v => ({ query: v.query, startDate: v.startDate, endDate: v.endDate })))};
|
|
203
220
|
var winningVariantIndex = variants.findIndex(function(variant) {
|
|
204
221
|
return filterWithCustomTargeting(
|
|
205
222
|
attributes,
|
|
@@ -208,8 +225,15 @@ function getPersonalizationScript(props: PersonalizationContainerProps) {
|
|
|
208
225
|
variant.endDate
|
|
209
226
|
);
|
|
210
227
|
});
|
|
228
|
+
if (location.href.includes('builder.debug=true')) {
|
|
229
|
+
console.debug('PersonalizationContainer', {
|
|
230
|
+
attributes: attributes,
|
|
231
|
+
variants: variants,
|
|
232
|
+
winningVariantIndex: winningVariantIndex,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
211
235
|
if (winningVariantIndex !== -1) {
|
|
212
|
-
var winningVariant = document.querySelector('template[data-variant-index="' + "${
|
|
236
|
+
var winningVariant = document.querySelector('template[data-variant-index="' + "${blockId}" + winningVariantIndex + '"]');
|
|
213
237
|
if (winningVariant) {
|
|
214
238
|
var parentNode = winningVariant.parentNode;
|
|
215
239
|
var newParent = parentNode.cloneNode(false);
|
|
@@ -219,7 +243,7 @@ function getPersonalizationScript(props: PersonalizationContainerProps) {
|
|
|
219
243
|
} else if (variants.length > 0) {
|
|
220
244
|
removeVariants();
|
|
221
245
|
}
|
|
222
|
-
|
|
246
|
+
${filterWithCustomTargetingScript}
|
|
223
247
|
})();
|
|
224
248
|
`.replace(/\s+/g, ' ');
|
|
225
249
|
}
|
|
@@ -24,6 +24,9 @@ export type Query = {
|
|
|
24
24
|
value: QueryValue;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
// minified version of the function need to be added to the script
|
|
28
|
+
export const filterWithCustomTargetingScript = `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}()}`;
|
|
29
|
+
|
|
27
30
|
export function filterWithCustomTargeting(
|
|
28
31
|
userAttributes: UserAttributes,
|
|
29
32
|
query: Query[],
|