@useinsider/guido 3.17.0-beta.668ca65 → 3.17.0-beta.6b602e7
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/README.md +5 -5
- package/dist/components/Guido.vue.js +7 -7
- package/dist/components/Guido.vue2.js +65 -61
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +3 -3
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +78 -52
- package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js +18 -0
- package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue2.js +25 -0
- package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.js +17 -0
- package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +57 -0
- package/dist/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue2.js +36 -35
- package/dist/composables/useCustomInterfaceAppearance.js +46 -42
- package/dist/composables/useLegacyStrategyConversion.js +52 -0
- package/dist/composables/useStripo.js +14 -14
- package/dist/config/i18n/en/labels.json.js +1 -1
- package/dist/config/migrator/index.js +9 -8
- package/dist/config/migrator/recommendation/compositionMapper.js +20 -20
- package/dist/config/migrator/recommendation/extractors.js +29 -24
- package/dist/config/migrator/recommendation/htmlBuilder.js +116 -130
- package/dist/config/migrator/recommendationMigrator.js +30 -25
- package/dist/config/migrator/recommendationTitleMigrator.js +119 -0
- package/dist/enums/extensions/recommendationBlock.js +2 -1
- package/dist/extensions/Blocks/Recommendation/block.js +12 -11
- package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +1 -1
- package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
- package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +24 -22
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +35 -28
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +329 -257
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +211 -145
- package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +66 -31
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +1 -0
- package/dist/extensions/Blocks/Recommendation/controls/title/index.js +44 -0
- package/dist/extensions/Blocks/Recommendation/extension.js +31 -29
- package/dist/extensions/Blocks/Recommendation/services/configService.js +34 -16
- package/dist/extensions/Blocks/Recommendation/settingsPanel.js +23 -4
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +93 -42
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +3 -3
- package/dist/extensions/Blocks/Recommendation/templates/titleRows.js +33 -0
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +85 -107
- package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.js +58 -0
- package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +22 -0
- package/dist/guido.css +1 -1
- package/dist/services/recommendationApi.js +61 -52
- package/dist/src/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.d.ts +2 -0
- package/dist/src/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.d.ts +2 -0
- package/dist/src/composables/useLegacyStrategyConversion.d.ts +3 -0
- package/dist/src/config/migrator/recommendation/extractors.d.ts +8 -0
- package/dist/src/config/migrator/recommendationTitleMigrator.d.ts +5 -0
- package/dist/src/enums/extensions/recommendationBlock.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +2 -1
- package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +12 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +11 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +38 -8
- package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +86 -0
- package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +12 -1
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +80 -1
- package/dist/src/extensions/Blocks/Recommendation/templates/titleRows.d.ts +13 -0
- package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +6 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.d.ts +39 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/nodeConfigWriter.d.ts +31 -0
- package/dist/src/services/recommendationApi.d.ts +2 -1
- package/dist/src/utils/genericUtil.d.ts +5 -0
- package/dist/static/assets/icons/filled-arrow-rising.svg.js +5 -0
- package/dist/static/assets/icons/line-info.svg.js +5 -0
- package/dist/static/styles/components/recommendation-strategy.css.js +70 -5
- package/dist/static/styles/customEditorStyle.css.js +3 -1
- package/dist/utils/genericUtil.js +28 -27
- package/package.json +2 -2
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { ATTR_PRODUCT_PRICE as l, ATTR_PRODUCT_OLD_PRICE as a, ATTR_CUSTOM_PREFIX as T, ATTR_PRODUCT_IMAGE as
|
|
1
|
+
import { ATTR_PRODUCT_PRICE as l, ATTR_PRODUCT_OLD_PRICE as a, ATTR_CUSTOM_PREFIX as T, ATTR_PRODUCT_IMAGE as b, ATTR_PRODUCT_NAME as _, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as A, ATTR_PRODUCT_BUTTON as p, PRODUCT_ATTRIBUTE_PREFIX as I } from "../constants/selectors.js";
|
|
2
2
|
import { useRecommendationExtensionStore as L } from "../store/recommendation.js";
|
|
3
|
-
import { compositionKeyToProductAttr as
|
|
3
|
+
import { compositionKeyToProductAttr as y, isDefaultProductAttr as f, bareAttributeName as S, findFilterByBareName as $, productAttrToCompositionKey as P } from "../utils/compositionKeys.js";
|
|
4
4
|
import { formatPrice as B } from "../utils/priceFormatter.js";
|
|
5
|
-
|
|
5
|
+
import { buildTitleRows as k } from "./titleRows.js";
|
|
6
|
+
function x() {
|
|
6
7
|
const t = L(), { currencySettings: e } = t.recommendationConfigs;
|
|
7
8
|
return {
|
|
8
9
|
code: e.value,
|
|
@@ -13,17 +14,17 @@ function k() {
|
|
|
13
14
|
thousandSeparator: e.thousandSeparator
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
|
-
function
|
|
17
|
-
const o =
|
|
17
|
+
function m(t, e = "price") {
|
|
18
|
+
const o = x(), n = t[e], c = (n == null ? void 0 : n[o.code]) ?? Object.values(n ?? {})[0] ?? 0;
|
|
18
19
|
return B({
|
|
19
20
|
price: c,
|
|
20
21
|
currency: o
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
function q(t) {
|
|
24
|
-
return
|
|
25
|
+
return m(t, "price") === m(t, "original_price");
|
|
25
26
|
}
|
|
26
|
-
function
|
|
27
|
+
function N(t) {
|
|
27
28
|
return t.replace(/_/g, " ").replace(/\b\w/g, (e) => e.toUpperCase());
|
|
28
29
|
}
|
|
29
30
|
function J(t) {
|
|
@@ -34,115 +35,114 @@ function J(t) {
|
|
|
34
35
|
skip: n ? l : a
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
|
-
function
|
|
38
|
+
function F(t) {
|
|
38
39
|
const e = Array.isArray(t) ? t[t.length - 1] : t;
|
|
39
40
|
if (typeof e == "string")
|
|
40
41
|
return e;
|
|
41
42
|
if (typeof e == "number")
|
|
42
43
|
return String(e);
|
|
43
44
|
}
|
|
44
|
-
function
|
|
45
|
+
function v(t, e) {
|
|
45
46
|
var o;
|
|
46
47
|
return ((o = $(t, e)) == null ? void 0 : o.type) === "defaultAttribute";
|
|
47
48
|
}
|
|
48
|
-
function
|
|
49
|
-
return
|
|
49
|
+
function w(t, e) {
|
|
50
|
+
return v(t, e) ? t : `${I}${t}`;
|
|
50
51
|
}
|
|
51
52
|
function Q(t) {
|
|
52
|
-
return
|
|
53
|
+
return P(t);
|
|
53
54
|
}
|
|
54
|
-
const
|
|
55
|
+
const M = Symbol("customCellHtml");
|
|
55
56
|
function Z(t, e, o = {}) {
|
|
56
|
-
const n = t[
|
|
57
|
+
const n = t[M];
|
|
57
58
|
if (!n)
|
|
58
59
|
return { ...t };
|
|
59
60
|
const c = { ...t };
|
|
60
|
-
return e.filter((
|
|
61
|
-
const
|
|
62
|
-
c[
|
|
61
|
+
return e.filter((i) => i.startsWith(T) && !c[i]).forEach((i) => {
|
|
62
|
+
const s = y(i), r = f(s) ? w(s, o) : s, u = S(r), h = N(u), D = f(r);
|
|
63
|
+
c[i] = (d, U) => {
|
|
63
64
|
var g;
|
|
64
|
-
const
|
|
65
|
-
return n(r,
|
|
65
|
+
const O = D ? d[u] : (g = d.product_attributes) == null ? void 0 : g[u], E = F(O) ?? h;
|
|
66
|
+
return n(r, E, U);
|
|
66
67
|
};
|
|
67
68
|
}), c;
|
|
68
69
|
}
|
|
69
70
|
function tt(t, e, o = []) {
|
|
70
|
-
const n = t.startsWith(T) ?
|
|
71
|
+
const n = t.startsWith(T) ? P(S(y(t))) : t, i = n !== t && !o.includes(n) ? n : t, s = (r) => (r == null ? void 0 : r[t]) ?? (r == null ? void 0 : r[i]);
|
|
71
72
|
return {
|
|
72
73
|
cellPadding: e.cellPadding,
|
|
73
74
|
cardBackgroundColor: e.cardBackgroundColor,
|
|
74
|
-
cellBackgroundColor:
|
|
75
|
-
cellAlignment:
|
|
76
|
-
cellClasses:
|
|
77
|
-
omnibusText:
|
|
78
|
-
styleTemplate:
|
|
75
|
+
cellBackgroundColor: s(e.cellBackgroundColors),
|
|
76
|
+
cellAlignment: s(e.cellAlignments),
|
|
77
|
+
cellClasses: s(e.cellClasses),
|
|
78
|
+
omnibusText: s(e.omnibusTexts),
|
|
79
|
+
styleTemplate: s(e.styleTemplates)
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
82
|
const et = {
|
|
82
83
|
TITLE: "You May Also Like!"
|
|
83
84
|
}, ot = [
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
b,
|
|
86
|
+
_,
|
|
86
87
|
a,
|
|
87
88
|
l,
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
C,
|
|
90
|
+
A,
|
|
91
|
+
p
|
|
91
92
|
], nt = {
|
|
92
|
-
[
|
|
93
|
-
[
|
|
93
|
+
[b]: !0,
|
|
94
|
+
[_]: !0,
|
|
94
95
|
[l]: !0,
|
|
95
96
|
[a]: !0,
|
|
96
|
-
[
|
|
97
|
-
[
|
|
98
|
-
[
|
|
99
|
-
},
|
|
100
|
-
function
|
|
97
|
+
[C]: !1,
|
|
98
|
+
[A]: !1,
|
|
99
|
+
[p]: !0
|
|
100
|
+
}, W = 10;
|
|
101
|
+
function rt(t = W) {
|
|
101
102
|
return `
|
|
102
103
|
<tr>
|
|
103
104
|
<td class="spacer" style="height: ${t}px;"></td>
|
|
104
105
|
</tr>
|
|
105
106
|
`;
|
|
106
107
|
}
|
|
107
|
-
|
|
108
|
-
function V(t, e) {
|
|
108
|
+
function H(t, e) {
|
|
109
109
|
return e ? e.pStyle ?? "" : t;
|
|
110
110
|
}
|
|
111
|
-
function
|
|
112
|
-
const n =
|
|
113
|
-
return `<p contenteditable="false" style="${n}">${c}${t}${
|
|
111
|
+
function it(t, e, o) {
|
|
112
|
+
const n = H(e.pStyle, o), c = o ? o.openTags ?? "" : e.openTags, i = o ? o.closeTags ?? "" : e.closeTags;
|
|
113
|
+
return `<p contenteditable="false" style="${n}">${c}${t}${i}</p>`;
|
|
114
114
|
}
|
|
115
115
|
function st(t, e) {
|
|
116
116
|
const o = [];
|
|
117
117
|
return t && o.push(t), e && o.push(`background-color: ${e};`), o.join(" ");
|
|
118
118
|
}
|
|
119
|
-
function
|
|
119
|
+
function V(t) {
|
|
120
120
|
return t ? ` background-color: ${t};` : "";
|
|
121
121
|
}
|
|
122
|
-
function
|
|
123
|
-
const e =
|
|
122
|
+
function ct(t) {
|
|
123
|
+
const e = V(t);
|
|
124
124
|
return e ? ` style="${e.trim()}"` : "";
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function lt(t, e = "") {
|
|
127
127
|
return {
|
|
128
128
|
before: (t == null ? void 0 : t.before) ?? e,
|
|
129
129
|
after: (t == null ? void 0 : t.after) ?? ""
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
-
function
|
|
132
|
+
function at(t, e) {
|
|
133
133
|
return `${(e == null ? void 0 : e.openTags) ?? ""}${t}${(e == null ? void 0 : e.closeTags) ?? ""}`;
|
|
134
134
|
}
|
|
135
|
-
function
|
|
135
|
+
function ut(t) {
|
|
136
136
|
return t != null && t.buttonFitToContainer ? "es-button-border es-fw" : "es-button-border";
|
|
137
137
|
}
|
|
138
|
-
const
|
|
139
|
-
function
|
|
140
|
-
return !t || typeof t != "string" || t.trim() === "" ?
|
|
138
|
+
const dt = "display: block; max-width: 100%; height: auto;", gt = "border-width: 1px; background: rgb(217, 234, 211); border-color: rgb(106, 168, 79);", ft = "color: rgb(56, 118, 29); background: rgb(217, 234, 211); font-family: arial, 'helvetica neue', helvetica, sans-serif; font-size: 16px; font-weight: normal; line-height: 120%; mso-border-alt: 10px solid rgb(217, 234, 211); mso-padding-alt: 0;", R = "https://email-static.useinsider.com/stripo/modules/email-recommendation-v3/assets/images/image-placeholder.png";
|
|
139
|
+
function mt(t) {
|
|
140
|
+
return !t || typeof t != "string" || t.trim() === "" ? R : t.startsWith("http://") ? t.replace("http://", "https://") : t;
|
|
141
141
|
}
|
|
142
|
-
function
|
|
142
|
+
function Y(t) {
|
|
143
143
|
return {
|
|
144
144
|
name: "Product Name",
|
|
145
|
-
image_url:
|
|
145
|
+
image_url: R,
|
|
146
146
|
price: { USD: 18 },
|
|
147
147
|
original_price: { USD: 20 },
|
|
148
148
|
discount: { USD: 2 },
|
|
@@ -154,19 +154,20 @@ function G(t) {
|
|
|
154
154
|
category: []
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
|
-
function
|
|
157
|
+
function Tt(t = 6) {
|
|
158
158
|
return Array.from(
|
|
159
159
|
{ length: t },
|
|
160
|
-
(e, o) =>
|
|
160
|
+
(e, o) => Y(String(o + 1))
|
|
161
161
|
);
|
|
162
162
|
}
|
|
163
|
-
function
|
|
163
|
+
function bt(t = "grid", e) {
|
|
164
164
|
const o = t === "list" ? `
|
|
165
|
-
data-layout="list"` : "", n = e ? ` ${e}` : ""
|
|
165
|
+
data-layout="list"` : "", n = e ? ` ${e}` : "", i = `recommendation-block-v2 esd-block-recommendation-v3-block es-p20${t === "list" ? " es-m-p0 ins-recommendation-list-layout" : ""}${n}`, s = t === "list" ? "" : `
|
|
166
|
+
{-{-MOBILE_PRODUCT_ROWS-}-}`, r = t === "list" ? ' style="display: none;"' : "";
|
|
166
167
|
return `
|
|
167
168
|
<td
|
|
168
169
|
align="left"
|
|
169
|
-
class="${
|
|
170
|
+
class="${i}"${o}>
|
|
170
171
|
<table width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
171
172
|
<tr>
|
|
172
173
|
<td align="center">
|
|
@@ -177,28 +178,7 @@ function Tt(t = "grid", e) {
|
|
|
177
178
|
cellspacing="0"
|
|
178
179
|
border="0">
|
|
179
180
|
<tbody>
|
|
180
|
-
|
|
181
|
-
<td>
|
|
182
|
-
<table
|
|
183
|
-
width="100%"
|
|
184
|
-
cellpadding="0"
|
|
185
|
-
cellspacing="0"
|
|
186
|
-
border="0">
|
|
187
|
-
<tbody>
|
|
188
|
-
<tr>
|
|
189
|
-
<td
|
|
190
|
-
class="esd-block-text es-p10t es-p10b es-p20l es-p20r"
|
|
191
|
-
align="center">
|
|
192
|
-
<p style="font-size: 28px; color: #333333;">
|
|
193
|
-
<strong>{-{-TITLE-}-}</strong>
|
|
194
|
-
</p>
|
|
195
|
-
</td>
|
|
196
|
-
</tr>
|
|
197
|
-
</tbody>
|
|
198
|
-
</table>
|
|
199
|
-
</td>
|
|
200
|
-
</tr>
|
|
201
|
-
${H}
|
|
181
|
+
${k()}
|
|
202
182
|
<tr>
|
|
203
183
|
<td>
|
|
204
184
|
<table
|
|
@@ -213,7 +193,7 @@ function Tt(t = "grid", e) {
|
|
|
213
193
|
</table>
|
|
214
194
|
</td>
|
|
215
195
|
</tr>
|
|
216
|
-
<tr class="ins-recommendation-mobile-row"${
|
|
196
|
+
<tr class="ins-recommendation-mobile-row"${r}>
|
|
217
197
|
<td>
|
|
218
198
|
<table
|
|
219
199
|
class="ins-recommendation-product-container
|
|
@@ -223,8 +203,7 @@ function Tt(t = "grid", e) {
|
|
|
223
203
|
cellspacing="0"
|
|
224
204
|
border="0"
|
|
225
205
|
style="display: none;"
|
|
226
|
-
>${
|
|
227
|
-
{-{-MOBILE_PRODUCT_ROWS-}-}`}
|
|
206
|
+
>${s}
|
|
228
207
|
</table>
|
|
229
208
|
</td>
|
|
230
209
|
</tr>
|
|
@@ -237,37 +216,36 @@ function Tt(t = "grid", e) {
|
|
|
237
216
|
`;
|
|
238
217
|
}
|
|
239
218
|
export {
|
|
240
|
-
|
|
219
|
+
M as CUSTOM_CELL_HTML,
|
|
241
220
|
et as DEFAULTS,
|
|
242
|
-
|
|
243
|
-
|
|
221
|
+
ft as DEFAULT_BUTTON_ANCHOR_STYLE,
|
|
222
|
+
gt as DEFAULT_BUTTON_BORDER_STYLE,
|
|
244
223
|
ot as DEFAULT_CARD_COMPOSITION,
|
|
245
224
|
nt as DEFAULT_CARD_VISIBILITY,
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
225
|
+
dt as DEFAULT_IMG_STYLE,
|
|
226
|
+
W as DEFAULT_ROW_SPACING_PX,
|
|
227
|
+
R as PLACEHOLDER_IMAGE,
|
|
228
|
+
V as bgColorFragment,
|
|
250
229
|
tt as buildCellOptions,
|
|
251
230
|
Z as buildElementRenderer,
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
231
|
+
rt as buildSpacer,
|
|
232
|
+
ct as cellBgStyleAttr,
|
|
233
|
+
bt as createBlockTemplate,
|
|
234
|
+
m as formatProductPrice,
|
|
235
|
+
x as getCurrentCurrencyConfig,
|
|
236
|
+
Tt as getDefaultProducts,
|
|
237
|
+
v as isDefaultAttribute,
|
|
259
238
|
q as isSamePrice,
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
239
|
+
at as renderButtonLabel,
|
|
240
|
+
it as renderStyledParagraph,
|
|
241
|
+
ut as resolveButtonBorderClass,
|
|
263
242
|
J as resolveInlinePriceOrder,
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
243
|
+
lt as resolveOmnibusText,
|
|
244
|
+
H as resolvePStyle,
|
|
245
|
+
w as resolveProductAttrValue,
|
|
267
246
|
st as resolveSegmentBgStyle,
|
|
268
|
-
|
|
269
|
-
H as spacer,
|
|
247
|
+
mt as sanitizeImageUrl,
|
|
270
248
|
Q as toCustomCompositionKey,
|
|
271
|
-
|
|
272
|
-
|
|
249
|
+
N as toDisplayName,
|
|
250
|
+
F as toDisplayableAttributeValue
|
|
273
251
|
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { OP_ANY_OF as u } from "../../../../enums/extensions/recommendationBlock.js";
|
|
2
|
+
import "../constants/selectors.js";
|
|
3
|
+
import { CURRENT_CONFIG_VERSION as d } from "../constants/defaultConfig.js";
|
|
4
|
+
import { parseTagList as m } from "./filterUtil.js";
|
|
5
|
+
import { sanitizeProductIds as l } from "./productIds.js";
|
|
6
|
+
const I = "String", N = "manualMerchandising";
|
|
7
|
+
function _({ strategyId: t, nodeConfigVersion: e }) {
|
|
8
|
+
return !t && e < d;
|
|
9
|
+
}
|
|
10
|
+
const c = (t) => t === "|" ? "or" : "and", b = (t, e) => {
|
|
11
|
+
var r;
|
|
12
|
+
return {
|
|
13
|
+
conditionLogic: c(t.innerGroupOperator),
|
|
14
|
+
attribute: {
|
|
15
|
+
attributeName: t.attribute,
|
|
16
|
+
attributeType: ((r = e.find((o) => o.value === t.attribute)) == null ? void 0 : r.type) || I
|
|
17
|
+
},
|
|
18
|
+
operator: { operator: t.operator === u ? "=" : t.operator },
|
|
19
|
+
value: t.operator === u ? m(t.value).join(u) : t.value
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
function f(t, e) {
|
|
23
|
+
const r = /* @__PURE__ */ new Map();
|
|
24
|
+
return t.filter((o) => o.isValid).forEach((o) => {
|
|
25
|
+
r.set(o.filterGroup, [...r.get(o.filterGroup) ?? [], o]);
|
|
26
|
+
}), [...r.keys()].sort((o, i) => o - i).map((o) => {
|
|
27
|
+
const i = [...r.get(o) ?? []].sort((n, a) => n.filterNumber - a.filterNumber);
|
|
28
|
+
return {
|
|
29
|
+
groupLogic: c(i[0].outerGroupOperator),
|
|
30
|
+
conditionList: i.map((n) => b(n, e))
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function A({
|
|
35
|
+
blockId: t,
|
|
36
|
+
url: e,
|
|
37
|
+
templateId: r,
|
|
38
|
+
variationId: o,
|
|
39
|
+
strategy: i,
|
|
40
|
+
productIds: n,
|
|
41
|
+
filters: a,
|
|
42
|
+
attributes: g
|
|
43
|
+
}) {
|
|
44
|
+
const p = f(a, g), s = i === N ? l(n).split(",").filter(Boolean) : [];
|
|
45
|
+
return {
|
|
46
|
+
campaignId: Number.parseInt(r) || 0,
|
|
47
|
+
variationId: Number.parseInt(o) || 0,
|
|
48
|
+
blockId: String(t),
|
|
49
|
+
url: e,
|
|
50
|
+
...p.length ? { filters: p } : {},
|
|
51
|
+
...s.length ? { productIds: s } : {}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
A as buildLegacyMigrationPayload,
|
|
56
|
+
_ as isLegacyStrategyConfig,
|
|
57
|
+
f as toMigrationFilterGroups
|
|
58
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ModificationDescription as f } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
|
|
2
|
+
import { RECOMMENDATION_ID_ATTR as m } from "../constants/selectors.js";
|
|
3
|
+
import { isPartnerManagedBlock as a, updateProductContentInPlace as d, regenerateProductRowsWithStyles as l } from "../controls/main/utils.js";
|
|
4
|
+
import { RecommendationConfigService as s } from "../services/configService.js";
|
|
5
|
+
let e = null;
|
|
6
|
+
function N(r) {
|
|
7
|
+
e = r;
|
|
8
|
+
}
|
|
9
|
+
function D(r, c, i, u) {
|
|
10
|
+
const n = e == null ? void 0 : e.getDocumentRootHtmlNode();
|
|
11
|
+
if (!e || !n || !("querySelector" in n))
|
|
12
|
+
return !1;
|
|
13
|
+
const t = n.querySelector(`[${m}="${r}"]`);
|
|
14
|
+
if (!t)
|
|
15
|
+
return !1;
|
|
16
|
+
const o = e.getDocumentModifier();
|
|
17
|
+
return s.stageConfig(o, t, c), a(t) ? (o.apply(new f(u)), !0) : (d({ currentNode: t, documentModifier: o, products: i }) || l({ currentNode: t, documentModifier: o, products: i }), !0);
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
D as commitBlockChangeOutsidePanel,
|
|
21
|
+
N as registerNodeConfigWriter
|
|
22
|
+
};
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-6e711fd7]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-
|
|
1
|
+
@charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-6e711fd7]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-d1f80922]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-d1f80922]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-d1f80922]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-4019dc4d]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-4019dc4d] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
|
|
@@ -1,88 +1,97 @@
|
|
|
1
|
-
import { useHttp as
|
|
2
|
-
import { URLS as
|
|
3
|
-
const
|
|
4
|
-
(
|
|
5
|
-
attributeName:
|
|
6
|
-
attributeJs:
|
|
7
|
-
attributeType:
|
|
8
|
-
type:
|
|
9
|
-
displayName:
|
|
10
|
-
isFilterable:
|
|
11
|
-
},
|
|
1
|
+
import { useHttp as y } from "../composables/useHttp.js";
|
|
2
|
+
import { URLS as c, QUERY_PARAMS as u } from "../enums/extensions/recommendationBlock.js";
|
|
3
|
+
const g = "[sr_strategies.status][=][active]*[sr_strategies.suitable_channels][~][EMAIL]", l = (s) => s.reduce(
|
|
4
|
+
(i, o, d) => (i[d] = {
|
|
5
|
+
attributeName: o.attributeName,
|
|
6
|
+
attributeJs: o.attributeJs,
|
|
7
|
+
attributeType: o.attributeType,
|
|
8
|
+
type: o.type,
|
|
9
|
+
displayName: o.displayName,
|
|
10
|
+
isFilterable: o.isFilterable
|
|
11
|
+
}, i),
|
|
12
12
|
{}
|
|
13
13
|
), _ = () => {
|
|
14
|
-
const { get:
|
|
14
|
+
const { get: s, post: i } = y(), { get: o } = y({ headers: {} }), d = "6KcLM9TwheVB1mgK";
|
|
15
15
|
return {
|
|
16
16
|
fetchRecommendationCreateData: async () => {
|
|
17
17
|
try {
|
|
18
|
-
return (await c
|
|
19
|
-
} catch (
|
|
20
|
-
throw console.error("fetchUserModalState error:",
|
|
18
|
+
return (await s(`${c.NEWSLETTER_RECOMMENDATIONS_PATH}/create-data`)).data;
|
|
19
|
+
} catch (t) {
|
|
20
|
+
throw console.error("fetchUserModalState error:", t), t;
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
fetchRecommendationFilters: async () => {
|
|
24
24
|
try {
|
|
25
|
-
const { data:
|
|
26
|
-
|
|
27
|
-
),
|
|
28
|
-
return
|
|
29
|
-
} catch (
|
|
30
|
-
throw console.error("fetchRecommendationFilters error:",
|
|
25
|
+
const { data: t } = await s(
|
|
26
|
+
c.PRODUCT_ATTRIBUTES_PATH
|
|
27
|
+
), r = Array.isArray(t) ? t : (t == null ? void 0 : t.data) ?? [];
|
|
28
|
+
return l(r);
|
|
29
|
+
} catch (t) {
|
|
30
|
+
throw console.error("fetchRecommendationFilters error:", t), t;
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
|
-
fetchRecommendationProducts: async (
|
|
34
|
-
var
|
|
33
|
+
fetchRecommendationProducts: async (t, r) => {
|
|
34
|
+
var e;
|
|
35
35
|
try {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
console.debug("🏁 Recommendation API Query:",
|
|
40
|
-
const
|
|
41
|
-
`${
|
|
36
|
+
const a = new URLSearchParams(Object.entries(r));
|
|
37
|
+
a.set(u.CLIENT_ID, d);
|
|
38
|
+
const m = decodeURIComponent(a.toString());
|
|
39
|
+
console.debug("🏁 Recommendation API Query:", m);
|
|
40
|
+
const n = await o(
|
|
41
|
+
`${c.RECOMMENDATION_API_URL}/v2/${t}?${m}`
|
|
42
42
|
);
|
|
43
|
-
return ((
|
|
44
|
-
} catch (
|
|
45
|
-
throw console.error("fetchRecommendationProducts error:",
|
|
43
|
+
return ((e = n == null ? void 0 : n.data) == null ? void 0 : e.data) ?? [];
|
|
44
|
+
} catch (a) {
|
|
45
|
+
throw console.error("fetchRecommendationProducts error:", a), a;
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
|
-
fetchRecommendationProductsByUrl: async (
|
|
49
|
-
var
|
|
48
|
+
fetchRecommendationProductsByUrl: async (t) => {
|
|
49
|
+
var r;
|
|
50
50
|
try {
|
|
51
|
-
const
|
|
52
|
-
|
|
51
|
+
const e = new RegExp(`[?&]${u.CLIENT_ID}=`).test(t), a = t.includes("?") ? "&" : "?", m = e ? t : `${t}${a}${u.CLIENT_ID}=${d}`, n = await o(
|
|
52
|
+
m
|
|
53
53
|
);
|
|
54
|
-
return ((
|
|
55
|
-
} catch (
|
|
56
|
-
return console.error("fetchRecommendationProductsByUrl error:",
|
|
54
|
+
return ((r = n == null ? void 0 : n.data) == null ? void 0 : r.data) ?? [];
|
|
55
|
+
} catch (e) {
|
|
56
|
+
return console.error("fetchRecommendationProductsByUrl error:", e), [];
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
59
|
fetchRecommendationStrategies: async () => {
|
|
60
60
|
try {
|
|
61
|
-
const { data:
|
|
62
|
-
`${
|
|
61
|
+
const { data: t } = await s(
|
|
62
|
+
`${c.RECOMMENDATION_STRATEGIES_PATH}?filters=${encodeURIComponent(g)}`
|
|
63
63
|
);
|
|
64
|
-
return Array.isArray(
|
|
65
|
-
} catch (
|
|
66
|
-
|
|
64
|
+
return Array.isArray(t) ? t : (t == null ? void 0 : t.data) ?? [];
|
|
65
|
+
} catch (t) {
|
|
66
|
+
throw console.error("fetchRecommendationStrategies error:", t), t;
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
|
-
generateStrategyEndpoint: async (
|
|
69
|
+
generateStrategyEndpoint: async (t, r) => {
|
|
70
70
|
try {
|
|
71
|
-
const { data:
|
|
72
|
-
`${
|
|
71
|
+
const { data: e } = await i(
|
|
72
|
+
`${c.RECOMMENDATION_STRATEGIES_PATH}/endpoint-generate`,
|
|
73
73
|
{
|
|
74
74
|
campaignId: 0,
|
|
75
75
|
pageTypes: [],
|
|
76
76
|
isPreviewer: !1,
|
|
77
|
-
strategy:
|
|
77
|
+
strategy: t,
|
|
78
78
|
userId: "",
|
|
79
|
-
currency:
|
|
79
|
+
currency: r
|
|
80
80
|
}
|
|
81
81
|
);
|
|
82
|
-
return !
|
|
83
|
-
} catch (
|
|
84
|
-
return console.error("generateStrategyEndpoint error:",
|
|
82
|
+
return !e || typeof e != "object" || !("full_path" in e || "data" in e) ? (console.error("generateStrategyEndpoint unexpected response shape:", e), null) : "full_path" in e ? e : e.data;
|
|
83
|
+
} catch (e) {
|
|
84
|
+
return console.error("generateStrategyEndpoint error:", e), null;
|
|
85
85
|
}
|
|
86
|
+
},
|
|
87
|
+
migrateLegacyStrategy: async (t) => {
|
|
88
|
+
const { data: r } = await i(
|
|
89
|
+
`${c.NEWSLETTER_RECOMMENDATIONS_PATH}/migrate-strategies`,
|
|
90
|
+
t
|
|
91
|
+
), e = r && typeof r == "object" && "data" in r ? r.data : r, a = e == null ? void 0 : e.strategyId;
|
|
92
|
+
if (a == null || a === "")
|
|
93
|
+
throw new Error("[Guido] migrate-strategies returned no strategyId");
|
|
94
|
+
return String(a);
|
|
86
95
|
}
|
|
87
96
|
};
|
|
88
97
|
};
|
package/dist/src/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export declare function extractTitleText(block: Element): string;
|
|
2
|
+
/**
|
|
3
|
+
* Fallback for legacy configs that carry no `p_recommendation_title` variable:
|
|
4
|
+
* the rendered HTML decides. A missing or `display: none` title container means
|
|
5
|
+
* the user never saw a title, so the migrated block keeps it toggled off.
|
|
6
|
+
* @param block - The legacy recommendation block element
|
|
7
|
+
* @returns True when the legacy block renders a visible title
|
|
8
|
+
*/
|
|
9
|
+
export declare function hasVisibleTitle(block: Element): boolean;
|
|
2
10
|
/**
|
|
3
11
|
* Card background lives on either the block (`bgcolor`/`style`) or per-card
|
|
4
12
|
* cells (`.product-card`). Returns empty string when no background is set —
|
|
@@ -10,5 +10,6 @@ export declare enum RecommendationBlockId {
|
|
|
10
10
|
OMNIBUS_PRICE = "recommendation-block-omnibus-price",
|
|
11
11
|
OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount",
|
|
12
12
|
IMAGE = "recommendation-block-image",
|
|
13
|
-
CUSTOM_ATTRIBUTE = "recommendation-block-custom-attribute"
|
|
13
|
+
CUSTOM_ATTRIBUTE = "recommendation-block-custom-attribute",
|
|
14
|
+
TITLE = "recommendation-block-title"
|
|
14
15
|
}
|