@builder.io/react 5.0.2-9 → 5.0.2
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/.yarnrc.yml +1 -0
- package/CHANGELOG.md +8 -0
- 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 +3 -3
- package/dist/lib/src/blocks/PersonalizationContainer.js +27 -23
- 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 +6 -7
- package/scripts/fix-core-version.sh +0 -0
- package/src/blocks/PersonalizationContainer.tsx +116 -82
- package/src/functions/filter-with-custom-targeting.ts +3 -0
- package/.npmrc +0 -1
package/dist/lib/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",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"main": "dist/builder-react.cjs.js",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"cross-env": "^5.0.1",
|
|
59
59
|
"jest": "^28.1.3",
|
|
60
60
|
"jest-environment-jsdom": "^28.1.3",
|
|
61
|
-
"nx": "
|
|
62
|
-
"nx-cloud": "
|
|
61
|
+
"nx": "^19.6.5",
|
|
62
|
+
"nx-cloud": "^19.0.0",
|
|
63
63
|
"prettier": "^3.2.5",
|
|
64
64
|
"prompt": "^1.0.0",
|
|
65
65
|
"react": ">=16.8.0",
|
|
@@ -20,16 +20,14 @@ 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';
|
|
24
23
|
function PersonalizationContainer(props) {
|
|
25
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
24
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
26
25
|
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
|
|
26
|
+
var _w = (0, react_2.useState)(isBeingHydrated), isClient = _w[0], setIsClient = _w[1];
|
|
27
|
+
var _x = (0, react_2.useState)(0), update = _x[0], setUpdate = _x[1];
|
|
29
28
|
(0, react_2.useEffect)(function () {
|
|
30
29
|
setIsClient(true);
|
|
31
30
|
var subscriber = sdk_1.builder.userAttributesChanged.subscribe(function () {
|
|
32
|
-
sdk_1.builder.setCookie(attributeCookieName, JSON.stringify(sdk_1.builder.getUserAttributes()));
|
|
33
31
|
setUpdate(update + 1);
|
|
34
32
|
});
|
|
35
33
|
return function () {
|
|
@@ -37,30 +35,37 @@ function PersonalizationContainer(props) {
|
|
|
37
35
|
};
|
|
38
36
|
}, []);
|
|
39
37
|
if (sdk_1.Builder.isServer) {
|
|
40
|
-
react_1.default.createElement(react_1.default.Fragment, null,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
39
|
+
react_1.default.createElement("div", __assign({}, props.attributes, {
|
|
40
|
+
// same as the client side styles for hydration matching
|
|
41
|
+
style: __assign({ opacity: 1, transition: 'opacity 0.2s ease-in-out' }, (_c = props.attributes) === null || _c === void 0 ? void 0 : _c.style), className: "builder-personalization-container ".concat(props.attributes.className) }), (_d = props.variants) === null || _d === void 0 ? void 0 :
|
|
42
|
+
_d.map(function (variant, index) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
return (react_1.default.createElement("template", { key: index, "data-variant-id": ((_a = props.builderBlock) === null || _a === void 0 ? void 0 : _a.id) + index },
|
|
45
|
+
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 })));
|
|
46
|
+
}),
|
|
47
|
+
react_1.default.createElement("script", { id: "variants-script-".concat((_e = props.builderBlock) === null || _e === void 0 ? void 0 : _e.id), dangerouslySetInnerHTML: {
|
|
48
|
+
__html: getPersonalizationScript(props.variants, (_f = props.builderBlock) === null || _f === void 0 ? void 0 : _f.id),
|
|
49
|
+
} }),
|
|
50
|
+
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 })),
|
|
51
|
+
react_1.default.createElement("script", { dangerouslySetInnerHTML: {
|
|
52
|
+
__html: "\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['".concat((_j = props.builderBlock) === null || _j === void 0 ? void 0 : _j.id, "'] = true;\n ").replace(/\s+/g, ' '),
|
|
53
|
+
} })));
|
|
49
54
|
}
|
|
50
55
|
var filteredVariants = (props.variants || []).filter(function (variant) {
|
|
51
56
|
return (0, filter_with_custom_targeting_1.filterWithCustomTargeting)(sdk_1.builder.getUserAttributes(), variant.query, variant.startDate, variant.endDate);
|
|
52
57
|
});
|
|
53
|
-
return (react_1.default.createElement(
|
|
54
|
-
sdk_1.Builder.isEditing &&
|
|
58
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
59
|
+
react_1.default.createElement("div", __assign({}, props.attributes, { style: __assign({ opacity: isClient ? 1 : 0, transition: 'opacity 0.2s ease-in-out' }, (_k = props.attributes) === null || _k === void 0 ? void 0 : _k.style), className: "builder-personalization-container ".concat(props.attributes.className, " ").concat(isClient ? '' : 'builder-personalization-container-loading') }), sdk_1.Builder.isEditing &&
|
|
55
60
|
typeof props.previewingIndex === 'number' &&
|
|
56
|
-
props.previewingIndex < (((
|
|
61
|
+
props.previewingIndex < (((_l = props.variants) === null || _l === void 0 ? void 0 : _l.length) || 0) ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_o = (_m = props.variants) === null || _m === void 0 ? void 0 : _m[props.previewingIndex]) === null || _o === void 0 ? void 0 : _o.blocks, parentElementId: (_p = props.builderBlock) === null || _p === void 0 ? void 0 : _p.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
62
|
(sdk_1.Builder.isEditing && typeof props.previewingIndex !== 'number') ||
|
|
58
63
|
!isClient ||
|
|
59
|
-
!filteredVariants.length ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (
|
|
64
|
+
!filteredVariants.length ? (react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_q = props.builderBlock) === null || _q === void 0 ? void 0 : _q.children, parentElementId: (_r = props.builderBlock) === null || _r === void 0 ? void 0 : _r.id, dataPath: "this.children", child: true })) : (
|
|
60
65
|
// Show the variant matching the current user attributes
|
|
61
|
-
react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (
|
|
66
|
+
react_1.default.createElement(builder_blocks_component_1.BuilderBlocks, { blocks: (_s = filteredVariants[0]) === null || _s === void 0 ? void 0 : _s.blocks, parentElementId: (_t = props.builderBlock) === null || _t === void 0 ? void 0 : _t.id, dataPath: "component.options.variants.".concat((_u = props.variants) === null || _u === void 0 ? void 0 : _u.indexOf(filteredVariants[0]), ".blocks"), child: true }))),
|
|
62
67
|
react_1.default.createElement("script", { dangerouslySetInnerHTML: {
|
|
63
|
-
__html: "\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['".concat((
|
|
68
|
+
__html: "\n window.__hydrated = window.__hydrated || {};\n window.__hydrated['".concat((_v = props.builderBlock) === null || _v === void 0 ? void 0 : _v.id, "'] = true;\n ").replace(/\s+/g, ' '),
|
|
64
69
|
} })));
|
|
65
70
|
}
|
|
66
71
|
exports.PersonalizationContainer = 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(sdk_1.Builder.attributesCookieName, "\") || \"{}\");\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 var isDebug = location.href.includes('builder.debug=true');\n if (isDebug) {\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-id=\"' + \"").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 if (isDebug) {\n console.debug('PersonalizationContainer', 'Winning variant Replaced:', winningVariant);\n }\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":"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"}
|
|
@@ -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",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"main": "dist/builder-react.cjs.js",
|
|
@@ -58,8 +58,8 @@
|
|
|
58
58
|
"cross-env": "^5.0.1",
|
|
59
59
|
"jest": "^28.1.3",
|
|
60
60
|
"jest-environment-jsdom": "^28.1.3",
|
|
61
|
-
"nx": "
|
|
62
|
-
"nx-cloud": "
|
|
61
|
+
"nx": "^19.6.5",
|
|
62
|
+
"nx-cloud": "^19.0.0",
|
|
63
63
|
"prettier": "^3.2.5",
|
|
64
64
|
"prompt": "^1.0.0",
|
|
65
65
|
"react": ">=16.8.0",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"react-dom": ">=16.8.0"
|
|
99
99
|
},
|
|
100
100
|
"dependencies": {
|
|
101
|
-
"@builder.io/sdk": "3.0.2
|
|
101
|
+
"@builder.io/sdk": "3.0.2",
|
|
102
102
|
"@emotion/core": "^10.0.17",
|
|
103
103
|
"hash-sum": "^2.0.0",
|
|
104
104
|
"isolated-vm": "^5.0.0",
|
|
@@ -106,6 +106,5 @@
|
|
|
106
106
|
},
|
|
107
107
|
"installConfig": {
|
|
108
108
|
"hoistingLimits": "workspaces"
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
File without changes
|
|
@@ -2,9 +2,12 @@ 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';
|
|
6
10
|
|
|
7
|
-
const attributeCookieName = 'builder.attributes';
|
|
8
11
|
export type PersonalizationContainerProps = {
|
|
9
12
|
children: React.ReactNode;
|
|
10
13
|
previewingIndex: number | null;
|
|
@@ -30,7 +33,6 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
30
33
|
useEffect(() => {
|
|
31
34
|
setIsClient(true);
|
|
32
35
|
const subscriber = builder.userAttributesChanged.subscribe(() => {
|
|
33
|
-
builder.setCookie(attributeCookieName, JSON.stringify(builder.getUserAttributes()));
|
|
34
36
|
setUpdate(update + 1);
|
|
35
37
|
});
|
|
36
38
|
return () => {
|
|
@@ -39,34 +41,51 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
39
41
|
}, []);
|
|
40
42
|
|
|
41
43
|
if (Builder.isServer) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<
|
|
44
|
+
return (
|
|
45
|
+
<React.Fragment>
|
|
46
|
+
<div
|
|
47
|
+
{...props.attributes}
|
|
48
|
+
// same as the client side styles for hydration matching
|
|
49
|
+
style={{
|
|
50
|
+
opacity: 1,
|
|
51
|
+
transition: 'opacity 0.2s ease-in-out',
|
|
52
|
+
...props.attributes?.style,
|
|
53
|
+
}}
|
|
54
|
+
className={`builder-personalization-container ${props.attributes.className}`}
|
|
55
|
+
>
|
|
56
|
+
{props.variants?.map((variant, index) => (
|
|
57
|
+
<template key={index} data-variant-id={props.builderBlock?.id! + index}>
|
|
58
|
+
<BuilderBlocks
|
|
59
|
+
blocks={variant.blocks}
|
|
60
|
+
parentElementId={props.builderBlock?.id}
|
|
61
|
+
dataPath={`component.options.variants.${index}.blocks`}
|
|
62
|
+
child
|
|
63
|
+
/>
|
|
64
|
+
</template>
|
|
65
|
+
))}
|
|
66
|
+
<script
|
|
67
|
+
id={`variants-script-${props.builderBlock?.id}`}
|
|
68
|
+
dangerouslySetInnerHTML={{
|
|
69
|
+
__html: getPersonalizationScript(props.variants, props.builderBlock?.id),
|
|
70
|
+
}}
|
|
71
|
+
/>
|
|
45
72
|
<BuilderBlocks
|
|
46
|
-
blocks={
|
|
73
|
+
blocks={props.builderBlock?.children}
|
|
47
74
|
parentElementId={props.builderBlock?.id}
|
|
48
|
-
dataPath=
|
|
75
|
+
dataPath="this.children"
|
|
49
76
|
child
|
|
50
77
|
/>
|
|
51
|
-
</
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
78
|
+
</div>
|
|
79
|
+
<script
|
|
80
|
+
dangerouslySetInnerHTML={{
|
|
81
|
+
__html: `
|
|
82
|
+
window.__hydrated = window.__hydrated || {};
|
|
83
|
+
window.__hydrated['${props.builderBlock?.id}'] = true;
|
|
84
|
+
`.replace(/\s+/g, ' '),
|
|
85
|
+
}}
|
|
67
86
|
/>
|
|
68
|
-
</
|
|
69
|
-
|
|
87
|
+
</React.Fragment>
|
|
88
|
+
);
|
|
70
89
|
}
|
|
71
90
|
|
|
72
91
|
const filteredVariants = (props.variants || []).filter(variant => {
|
|
@@ -79,49 +98,50 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
79
98
|
});
|
|
80
99
|
|
|
81
100
|
return (
|
|
82
|
-
<
|
|
83
|
-
|
|
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
|
-
|
|
101
|
+
<React.Fragment>
|
|
102
|
+
<div
|
|
103
|
+
{...props.attributes}
|
|
104
|
+
style={{
|
|
105
|
+
opacity: isClient ? 1 : 0,
|
|
106
|
+
transition: 'opacity 0.2s ease-in-out',
|
|
107
|
+
...props.attributes?.style,
|
|
108
|
+
}}
|
|
109
|
+
className={`builder-personalization-container ${
|
|
110
|
+
props.attributes.className
|
|
111
|
+
} ${isClient ? '' : 'builder-personalization-container-loading'}`}
|
|
112
|
+
>
|
|
113
|
+
{/* If editing a specific varient */}
|
|
114
|
+
{Builder.isEditing &&
|
|
115
|
+
typeof props.previewingIndex === 'number' &&
|
|
116
|
+
props.previewingIndex < (props.variants?.length || 0) ? (
|
|
117
|
+
<BuilderBlocks
|
|
118
|
+
blocks={props.variants?.[props.previewingIndex]?.blocks}
|
|
119
|
+
parentElementId={props.builderBlock?.id}
|
|
120
|
+
dataPath={`component.options.variants.${props.previewingIndex}.blocks`}
|
|
121
|
+
child
|
|
122
|
+
/>
|
|
123
|
+
) : // If editing the default or we're on the server and there are no matching variants show the default
|
|
124
|
+
(Builder.isEditing && typeof props.previewingIndex !== 'number') ||
|
|
125
|
+
!isClient ||
|
|
126
|
+
!filteredVariants.length ? (
|
|
127
|
+
<BuilderBlocks
|
|
128
|
+
blocks={props.builderBlock?.children}
|
|
129
|
+
parentElementId={props.builderBlock?.id}
|
|
130
|
+
dataPath="this.children"
|
|
131
|
+
child
|
|
132
|
+
/>
|
|
133
|
+
) : (
|
|
134
|
+
// Show the variant matching the current user attributes
|
|
135
|
+
<BuilderBlocks
|
|
136
|
+
blocks={filteredVariants[0]?.blocks}
|
|
137
|
+
parentElementId={props.builderBlock?.id}
|
|
138
|
+
dataPath={`component.options.variants.${props.variants?.indexOf(
|
|
139
|
+
filteredVariants[0]
|
|
140
|
+
)}.blocks`}
|
|
141
|
+
child
|
|
142
|
+
/>
|
|
143
|
+
)}
|
|
144
|
+
</div>
|
|
125
145
|
<script
|
|
126
146
|
dangerouslySetInnerHTML={{
|
|
127
147
|
__html: `
|
|
@@ -130,7 +150,7 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
130
150
|
`.replace(/\s+/g, ' '),
|
|
131
151
|
}}
|
|
132
152
|
/>
|
|
133
|
-
</
|
|
153
|
+
</React.Fragment>
|
|
134
154
|
);
|
|
135
155
|
}
|
|
136
156
|
|
|
@@ -176,7 +196,10 @@ Builder.registerComponent(PersonalizationContainer, {
|
|
|
176
196
|
],
|
|
177
197
|
});
|
|
178
198
|
|
|
179
|
-
function getPersonalizationScript(
|
|
199
|
+
function getPersonalizationScript(
|
|
200
|
+
variants: PersonalizationContainerProps['variants'],
|
|
201
|
+
blockId?: string
|
|
202
|
+
) {
|
|
180
203
|
return `
|
|
181
204
|
(function() {
|
|
182
205
|
function getCookie(name) {
|
|
@@ -189,15 +212,15 @@ function getPersonalizationScript(props: PersonalizationContainerProps) {
|
|
|
189
212
|
}
|
|
190
213
|
return null;
|
|
191
214
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
215
|
+
function removeVariants() {
|
|
216
|
+
variants.forEach(function (template, index) {
|
|
217
|
+
document.querySelector('template[data-variant-id="' + "${blockId}" + index + '"]').remove();
|
|
218
|
+
});
|
|
219
|
+
document.getElementById('variants-script-${blockId}').remove();
|
|
220
|
+
}
|
|
198
221
|
|
|
199
|
-
var attributes = JSON.parse(getCookie("${
|
|
200
|
-
var variants = ${JSON.stringify(
|
|
222
|
+
var attributes = JSON.parse(getCookie("${Builder.attributesCookieName}") || "{}");
|
|
223
|
+
var variants = ${JSON.stringify(variants?.map(v => ({ query: v.query, startDate: v.startDate, endDate: v.endDate })))};
|
|
201
224
|
var winningVariantIndex = variants.findIndex(function(variant) {
|
|
202
225
|
return filterWithCustomTargeting(
|
|
203
226
|
attributes,
|
|
@@ -206,18 +229,29 @@ function getPersonalizationScript(props: PersonalizationContainerProps) {
|
|
|
206
229
|
variant.endDate
|
|
207
230
|
);
|
|
208
231
|
});
|
|
232
|
+
var isDebug = location.href.includes('builder.debug=true');
|
|
233
|
+
if (isDebug) {
|
|
234
|
+
console.debug('PersonalizationContainer', {
|
|
235
|
+
attributes: attributes,
|
|
236
|
+
variants: variants,
|
|
237
|
+
winningVariantIndex: winningVariantIndex,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
209
240
|
if (winningVariantIndex !== -1) {
|
|
210
|
-
var winningVariant = document.querySelector('template[data-variant-
|
|
241
|
+
var winningVariant = document.querySelector('template[data-variant-id="' + "${blockId}" + winningVariantIndex + '"]');
|
|
211
242
|
if (winningVariant) {
|
|
212
243
|
var parentNode = winningVariant.parentNode;
|
|
213
244
|
var newParent = parentNode.cloneNode(false);
|
|
214
245
|
newParent.appendChild(winningVariant.content.firstChild);
|
|
215
246
|
parentNode.parentNode.replaceChild(newParent, parentNode);
|
|
247
|
+
if (isDebug) {
|
|
248
|
+
console.debug('PersonalizationContainer', 'Winning variant Replaced:', winningVariant);
|
|
249
|
+
}
|
|
216
250
|
}
|
|
217
251
|
} else if (variants.length > 0) {
|
|
218
|
-
removeVariants();
|
|
252
|
+
removeVariants();
|
|
219
253
|
}
|
|
220
|
-
|
|
254
|
+
${filterWithCustomTargetingScript}
|
|
221
255
|
})();
|
|
222
256
|
`.replace(/\s+/g, ' ');
|
|
223
257
|
}
|
|
@@ -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[],
|
package/.npmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
git-tag-version=false
|