@builder.io/react 5.0.2-8 → 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 +37 -18
- 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/blocks/PersonalizationContainer.d.ts +0 -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 +170 -54
- package/src/functions/filter-with-custom-targeting.ts +119 -117
- 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",
|
|
@@ -21,13 +21,12 @@ 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
23
|
function PersonalizationContainer(props) {
|
|
24
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
25
|
-
var
|
|
26
|
-
var
|
|
24
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
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]));
|
|
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];
|
|
27
28
|
(0, react_2.useEffect)(function () {
|
|
28
29
|
setIsClient(true);
|
|
29
|
-
}, []);
|
|
30
|
-
(0, react_2.useEffect)(function () {
|
|
31
30
|
var subscriber = sdk_1.builder.userAttributesChanged.subscribe(function () {
|
|
32
31
|
setUpdate(update + 1);
|
|
33
32
|
});
|
|
@@ -35,17 +34,39 @@ function PersonalizationContainer(props) {
|
|
|
35
34
|
subscriber.unsubscribe();
|
|
36
35
|
};
|
|
37
36
|
}, []);
|
|
37
|
+
if (sdk_1.Builder.isServer) {
|
|
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
|
+
} })));
|
|
54
|
+
}
|
|
38
55
|
var filteredVariants = (props.variants || []).filter(function (variant) {
|
|
39
56
|
return (0, filter_with_custom_targeting_1.filterWithCustomTargeting)(sdk_1.builder.getUserAttributes(), variant.query, variant.startDate, variant.endDate);
|
|
40
57
|
});
|
|
41
|
-
return (react_1.default.createElement(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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 &&
|
|
60
|
+
typeof props.previewingIndex === 'number' &&
|
|
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
|
|
62
|
+
(sdk_1.Builder.isEditing && typeof props.previewingIndex !== 'number') ||
|
|
63
|
+
!isClient ||
|
|
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 })) : (
|
|
65
|
+
// Show the variant matching the current user attributes
|
|
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 }))),
|
|
67
|
+
react_1.default.createElement("script", { dangerouslySetInnerHTML: {
|
|
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, ' '),
|
|
69
|
+
} })));
|
|
49
70
|
}
|
|
50
71
|
exports.PersonalizationContainer = PersonalizationContainer;
|
|
51
72
|
sdk_1.Builder.registerComponent(PersonalizationContainer, {
|
|
@@ -86,11 +107,9 @@ sdk_1.Builder.registerComponent(PersonalizationContainer, {
|
|
|
86
107
|
},
|
|
87
108
|
],
|
|
88
109
|
},
|
|
89
|
-
{
|
|
90
|
-
name: 'clientSideOnly',
|
|
91
|
-
type: 'boolean',
|
|
92
|
-
advanced: true,
|
|
93
|
-
}
|
|
94
110
|
],
|
|
95
111
|
});
|
|
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, ' ');
|
|
114
|
+
}
|
|
96
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":";;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,uCAAmE;AACnE,+BAA4C;AAC5C,mFAAuE;AACvE,0FAImD;AAiBnD,SAAgB,wBAAwB,CAAC,KAAoC;;IAC3E,IAAM,eAAe,GAAG,OAAO,CAC7B,aAAO,CAAC,SAAS,KAAI,MAAC,MAAc,CAAC,UAAU,0CAAG,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAG,CAAC,CAAA,CAC3E,CAAC;IACI,IAAA,KAA0B,IAAA,gBAAQ,EAAC,eAAe,CAAC,EAAlD,QAAQ,QAAA,EAAE,WAAW,QAA6B,CAAC;IACpD,IAAA,KAAsB,IAAA,gBAAQ,EAAC,CAAC,CAAC,EAAhC,MAAM,QAAA,EAAE,SAAS,QAAe,CAAC;IAExC,IAAA,iBAAS,EAAC;QACR,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,IAAM,UAAU,GAAG,aAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC;YACzD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO;YACL,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,aAAO,CAAC,QAAQ,EAAE;QACpB,OAAO,CACL,8BAAC,eAAK,CAAC,QAAQ;YACb,kDACM,KAAK,CAAC,UAAU;gBACpB,wDAAwD;gBACxD,KAAK,aACH,OAAO,EAAE,CAAC,EACV,UAAU,EAAE,0BAA0B,IACnC,MAAA,KAAK,CAAC,UAAU,0CAAE,KAAK,GAE5B,SAAS,EAAE,4CAAqC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAE,KAE3E,MAAA,KAAK,CAAC,QAAQ;mBAAE,GAAG,CAAC,UAAC,OAAO,EAAE,KAAK;;oBAAK,OAAA,CACvC,4CAAU,GAAG,EAAE,KAAK,qBAAmB,CAAA,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAG,IAAG,KAAK;wBACpE,8BAAC,wCAAa,IACZ,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,eAAe,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,EACvC,QAAQ,EAAE,qCAA8B,KAAK,YAAS,EACtD,KAAK,SACL,CACO,CACZ,CAAA;iBAAA,CAAC;gBACF,0CACE,EAAE,EAAE,0BAAmB,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,CAAE,EAC/C,uBAAuB,EAAE;wBACvB,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,CAAC;qBACzE,GACD;gBACF,8BAAC,wCAAa,IACZ,MAAM,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,QAAQ,EACpC,eAAe,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,EACvC,QAAQ,EAAC,eAAe,EACxB,KAAK,SACL,CACE;YACN,0CACE,uBAAuB,EAAE;oBACvB,MAAM,EAAE,+FAEU,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,yBAC3C,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACnB,GACD,CACa,CAClB,CAAC;KACH;IAED,IAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAA,OAAO;QAC5D,OAAO,IAAA,wDAAyB,EAC9B,aAAO,CAAC,iBAAiB,EAAE,EAC3B,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,8BAAC,eAAK,CAAC,QAAQ;QACb,kDACM,KAAK,CAAC,UAAU,IACpB,KAAK,aACH,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACzB,UAAU,EAAE,0BAA0B,IACnC,MAAA,KAAK,CAAC,UAAU,0CAAE,KAAK,GAE5B,SAAS,EAAE,4CACT,KAAK,CAAC,UAAU,CAAC,SAAS,cACxB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,2CAA2C,CAAE,KAGhE,aAAO,CAAC,SAAS;YAClB,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ;YACzC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,KAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACtD,8BAAC,wCAAa,IACZ,MAAM,EAAE,MAAA,MAAA,KAAK,CAAC,QAAQ,0CAAG,KAAK,CAAC,eAAe,CAAC,0CAAE,MAAM,EACvD,eAAe,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,EACvC,QAAQ,EAAE,qCAA8B,KAAK,CAAC,eAAe,YAAS,EACtE,KAAK,SACL,CACH,CAAC,CAAC,CAAC,oGAAoG;YACxG,CAAC,aAAO,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC;gBAC9D,CAAC,QAAQ;gBACT,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3B,8BAAC,wCAAa,IACZ,MAAM,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,QAAQ,EACpC,eAAe,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,EACvC,QAAQ,EAAC,eAAe,EACxB,KAAK,SACL,CACH,CAAC,CAAC,CAAC;YACF,wDAAwD;YACxD,8BAAC,wCAAa,IACZ,MAAM,EAAE,MAAA,gBAAgB,CAAC,CAAC,CAAC,0CAAE,MAAM,EACnC,eAAe,EAAE,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,EACvC,QAAQ,EAAE,qCAA8B,MAAA,KAAK,CAAC,QAAQ,0CAAE,OAAO,CAC7D,gBAAgB,CAAC,CAAC,CAAC,CACpB,YAAS,EACV,KAAK,SACL,CACH,CACG;QACN,0CACE,uBAAuB,EAAE;gBACvB,MAAM,EAAE,+FAEY,MAAA,KAAK,CAAC,YAAY,0CAAE,EAAE,yBAC3C,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACrB,GACD,CACa,CAClB,CAAC;AACJ,CAAC;AAjID,4DAiIC;AAED,aAAO,CAAC,iBAAiB,CAAC,wBAAwB,EAAE;IAClD,IAAI,EAAE,0BAA0B;IAChC,MAAM,EAAE,IAAI;IACZ,KAAK,EACH,sGAAsG;IACxG,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE;QACN;YACE,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,4BAA4B;YACtC,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;iBACb;gBACD;oBACE,IAAI,EAAE,OAAO;oBACb,YAAY,EAAE,iBAAiB;oBAC/B,IAAI,EAAE,cAAc;oBACpB,YAAY,EAAE,EAAE;iBACjB;gBACD;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,MAAM;iBACb;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,MAAM;iBACb;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,UAAU;oBAChB,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,EAAE;iBACjB;aACF;SACF;KACF;CACF,CAAC,CAAC;AAEH,SAAS,wBAAwB,CAC/B,QAAmD,EACnD,OAAgB;IAEhB,OAAO,olBAc4D,OAAO,8GAEvB,OAAO,wFAGX,aAAO,CAAC,oBAAoB,qDACpD,IAAI,CAAC,SAAS,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAhE,CAAgE,CAAC,CAAC,osBAkBrC,OAAO,8kBAarF,8DAA+B,wBAEpC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -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":";;;AA0BA,SAAgB,yBAAyB,
|
|
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,7 +2,11 @@ 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
11
|
export type PersonalizationContainerProps = {
|
|
8
12
|
children: React.ReactNode;
|
|
@@ -17,18 +21,17 @@ export type PersonalizationContainerProps = {
|
|
|
17
21
|
},
|
|
18
22
|
];
|
|
19
23
|
attributes: any;
|
|
20
|
-
clientSideOnly?: boolean;
|
|
21
24
|
};
|
|
22
25
|
|
|
23
26
|
export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
24
|
-
const
|
|
27
|
+
const isBeingHydrated = Boolean(
|
|
28
|
+
Builder.isBrowser && (window as any).__hydrated?.[props.builderBlock?.id!]
|
|
29
|
+
);
|
|
30
|
+
const [isClient, setIsClient] = useState(isBeingHydrated);
|
|
25
31
|
const [update, setUpdate] = useState(0);
|
|
26
32
|
|
|
27
33
|
useEffect(() => {
|
|
28
34
|
setIsClient(true);
|
|
29
|
-
}, []);
|
|
30
|
-
|
|
31
|
-
useEffect(() => {
|
|
32
35
|
const subscriber = builder.userAttributesChanged.subscribe(() => {
|
|
33
36
|
setUpdate(update + 1);
|
|
34
37
|
});
|
|
@@ -37,6 +40,54 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
37
40
|
};
|
|
38
41
|
}, []);
|
|
39
42
|
|
|
43
|
+
if (Builder.isServer) {
|
|
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
|
+
/>
|
|
72
|
+
<BuilderBlocks
|
|
73
|
+
blocks={props.builderBlock?.children}
|
|
74
|
+
parentElementId={props.builderBlock?.id}
|
|
75
|
+
dataPath="this.children"
|
|
76
|
+
child
|
|
77
|
+
/>
|
|
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
|
+
}}
|
|
86
|
+
/>
|
|
87
|
+
</React.Fragment>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
40
91
|
const filteredVariants = (props.variants || []).filter(variant => {
|
|
41
92
|
return filterWithCustomTargeting(
|
|
42
93
|
builder.getUserAttributes(),
|
|
@@ -47,49 +98,59 @@ export function PersonalizationContainer(props: PersonalizationContainerProps) {
|
|
|
47
98
|
});
|
|
48
99
|
|
|
49
100
|
return (
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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>
|
|
145
|
+
<script
|
|
146
|
+
dangerouslySetInnerHTML={{
|
|
147
|
+
__html: `
|
|
148
|
+
window.__hydrated = window.__hydrated || {};
|
|
149
|
+
window.__hydrated['${props.builderBlock?.id}'] = true;
|
|
150
|
+
`.replace(/\s+/g, ' '),
|
|
151
|
+
}}
|
|
152
|
+
/>
|
|
153
|
+
</React.Fragment>
|
|
93
154
|
);
|
|
94
155
|
}
|
|
95
156
|
|
|
@@ -132,10 +193,65 @@ Builder.registerComponent(PersonalizationContainer, {
|
|
|
132
193
|
},
|
|
133
194
|
],
|
|
134
195
|
},
|
|
135
|
-
{
|
|
136
|
-
name: 'clientSideOnly',
|
|
137
|
-
type: 'boolean',
|
|
138
|
-
advanced: true,
|
|
139
|
-
}
|
|
140
196
|
],
|
|
141
197
|
});
|
|
198
|
+
|
|
199
|
+
function getPersonalizationScript(
|
|
200
|
+
variants: PersonalizationContainerProps['variants'],
|
|
201
|
+
blockId?: string
|
|
202
|
+
) {
|
|
203
|
+
return `
|
|
204
|
+
(function() {
|
|
205
|
+
function getCookie(name) {
|
|
206
|
+
var nameEQ = name + "=";
|
|
207
|
+
var ca = document.cookie.split(';');
|
|
208
|
+
for(var i=0;i < ca.length;i++) {
|
|
209
|
+
var c = ca[i];
|
|
210
|
+
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
|
211
|
+
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
|
212
|
+
}
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
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
|
+
}
|
|
221
|
+
|
|
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 })))};
|
|
224
|
+
var winningVariantIndex = variants.findIndex(function(variant) {
|
|
225
|
+
return filterWithCustomTargeting(
|
|
226
|
+
attributes,
|
|
227
|
+
variant.query,
|
|
228
|
+
variant.startDate,
|
|
229
|
+
variant.endDate
|
|
230
|
+
);
|
|
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
|
+
}
|
|
240
|
+
if (winningVariantIndex !== -1) {
|
|
241
|
+
var winningVariant = document.querySelector('template[data-variant-id="' + "${blockId}" + winningVariantIndex + '"]');
|
|
242
|
+
if (winningVariant) {
|
|
243
|
+
var parentNode = winningVariant.parentNode;
|
|
244
|
+
var newParent = parentNode.cloneNode(false);
|
|
245
|
+
newParent.appendChild(winningVariant.content.firstChild);
|
|
246
|
+
parentNode.parentNode.replaceChild(newParent, parentNode);
|
|
247
|
+
if (isDebug) {
|
|
248
|
+
console.debug('PersonalizationContainer', 'Winning variant Replaced:', winningVariant);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
} else if (variants.length > 0) {
|
|
252
|
+
removeVariants();
|
|
253
|
+
}
|
|
254
|
+
${filterWithCustomTargetingScript}
|
|
255
|
+
})();
|
|
256
|
+
`.replace(/\s+/g, ' ');
|
|
257
|
+
}
|