@useinsider/guido 3.18.2-beta.ec25841 → 3.18.2-beta.f42547e

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.
@@ -87,21 +87,21 @@ function j(e, t = {}) {
87
87
  documentModifier: o,
88
88
  products: r,
89
89
  layout: s,
90
- composition: i
90
+ composition: l
91
91
  } = e;
92
92
  if (!n || !("querySelector" in n))
93
93
  return !1;
94
- const u = s ?? P(n), l = y.getConfig(n);
95
- if (u === "list" || !l.mobileLayoutEnabled)
94
+ const u = s ?? P(n), i = y.getConfig(n);
95
+ if (u === "list" || !i.mobileLayoutEnabled)
96
96
  return te({ currentNode: n, documentModifier: o });
97
- const c = A(), a = $(r, c.recommendationProducts), f = i ?? U(n, c.filterList), p = `<td><table class="ins-recommendation-product-container ins-recommendation-mobile-container" width="100%" cellpadding="0" cellspacing="0" border="0">${k(a, u, {
98
- productsPerRow: l.mobileCardsInRow,
97
+ const c = A(), a = $(r, c.recommendationProducts), f = l ?? U(n, c.filterList), p = `<td><table class="ins-recommendation-product-container ins-recommendation-mobile-container" width="100%" cellpadding="0" cellspacing="0" border="0">${k(a, u, {
98
+ productsPerRow: i.mobileCardsInRow,
99
99
  composition: f,
100
100
  filterList: c.filterList,
101
- priceInline: !l.priceMovedToNextLine,
101
+ priceInline: !i.priceMovedToNextLine,
102
102
  // Match the initial render's gutter so a regeneration never changes block height (SD-143023, #386).
103
- cellPadding: v(l.mobileColumnSpacing),
104
- rowSpacingPx: l.mobileRowSpacing,
103
+ cellPadding: v(i.mobileColumnSpacing),
104
+ rowSpacingPx: i.mobileRowSpacing,
105
105
  ...t
106
106
  })}</table></td>`, E = n.querySelector(w);
107
107
  return E ? (o.modifyHtml(E).setInnerHtml(p), !0) : (re(n, o, p), !1);
@@ -115,17 +115,17 @@ function ie(e, t = {}) {
115
115
  documentModifier: o,
116
116
  products: r,
117
117
  layout: s,
118
- composition: i
118
+ composition: l
119
119
  } = e;
120
120
  if (!n || !("querySelector" in n))
121
121
  return !1;
122
122
  const u = n.querySelector(L) ?? n.querySelector(W);
123
123
  if (!u)
124
124
  return !1;
125
- const l = A(), c = $(r, l.recommendationProducts), { cardsInRow: a } = y.getConfig(n), f = i ?? U(n, l.filterList), d = s ?? P(n), p = y.getConfig(n), E = k(c, d, {
125
+ const i = A(), c = $(r, i.recommendationProducts), { cardsInRow: a } = y.getConfig(n), f = l ?? U(n, i.filterList), d = s ?? P(n), p = y.getConfig(n), E = k(c, d, {
126
126
  productsPerRow: a,
127
127
  composition: f,
128
- filterList: l.filterList,
128
+ filterList: i.filterList,
129
129
  priceInline: !p.priceMovedToNextLine,
130
130
  // Match the initial render's gutter so a regeneration never changes block height (SD-143023, #386).
131
131
  cellPadding: v(p.columnSpacing),
@@ -151,14 +151,14 @@ function ce(e, t, n) {
151
151
  const r = o.getAttribute(R);
152
152
  if (!r)
153
153
  return !1;
154
- const s = A(), i = r.split(",").filter(Boolean), u = D(i, o, s.filterList), l = [], c = u.join(",") !== i.join(",");
155
- c && l.push([R, u.join(",")]);
154
+ const s = A(), l = r.split(",").filter(Boolean), u = D(l, o, s.filterList), i = [], c = u.join(",") !== l.join(",");
155
+ c && i.push([R, u.join(",")]);
156
156
  const a = le(
157
157
  o.getAttribute(q)
158
158
  ), f = a && z(a, o, s.filterList);
159
- if (a && f && f.join(",") !== a.join(",") && l.push([q, JSON.stringify(f)]), l.length === 0)
159
+ if (a && f && f.join(",") !== a.join(",") && i.push([q, JSON.stringify(f)]), i.length === 0)
160
160
  return !1;
161
- if (l.forEach(([d, p]) => {
161
+ if (i.forEach(([d, p]) => {
162
162
  t.modifyHtml(o).setAttribute(d, p);
163
163
  }), c && y.hasConfig(e)) {
164
164
  const d = {
@@ -176,20 +176,20 @@ function Te(e) {
176
176
  afterRegenerate: o,
177
177
  products: r,
178
178
  layout: s,
179
- composition: i,
179
+ composition: l,
180
180
  skipStylePreservation: u
181
181
  } = e;
182
182
  if (!t)
183
- return;
184
- const l = u ? {} : x(t), c = {
183
+ return !1;
184
+ const i = u ? {} : x(t), c = {
185
185
  currentNode: t,
186
186
  documentModifier: n,
187
187
  products: r,
188
188
  layout: s,
189
- composition: i
189
+ composition: l
190
190
  };
191
- let a = ie(c, l);
192
- a = j(c, l) || a, a && (ce(t, n, i), n.apply(new S("Regenerate products with styles"))), o == null || o();
191
+ let a = ie(c, i);
192
+ return a = j(c, i) || a, a && (ce(t, n, l), n.apply(new S("Regenerate products with styles"))), o == null || o(), a;
193
193
  }
194
194
  function Re(e, t) {
195
195
  return e.length === t ? e : e.length > t ? e.slice(0, t) : [...e, ...H(t - e.length)];
@@ -213,28 +213,28 @@ function T(e, t = "price") {
213
213
  });
214
214
  }
215
215
  function ue(e) {
216
- var s, i;
217
- const t = F(), n = ((s = e.original_price) == null ? void 0 : s[t.code]) ?? Object.values(e.original_price ?? {})[0] ?? 0, o = ((i = e.price) == null ? void 0 : i[t.code]) ?? Object.values(e.price ?? {})[0] ?? 0, r = n > 0 ? Math.round((n - o) / n * 100) : 0;
216
+ var s, l;
217
+ const t = F(), n = ((s = e.original_price) == null ? void 0 : s[t.code]) ?? Object.values(e.original_price ?? {})[0] ?? 0, o = ((l = e.price) == null ? void 0 : l[t.code]) ?? Object.values(e.price ?? {})[0] ?? 0, r = n > 0 ? Math.round((n - o) / n * 100) : 0;
218
218
  return r > 0 ? `-${r}%` : "0%";
219
219
  }
220
220
  function K(e) {
221
- const { documentModifier: t, product: n, priceEl: o, oldPriceEl: r, omnibusPriceEl: s, omnibusDiscountEl: i } = e;
221
+ const { documentModifier: t, product: n, priceEl: o, oldPriceEl: r, omnibusPriceEl: s, omnibusDiscountEl: l } = e;
222
222
  let u = !1;
223
223
  if (o && "querySelector" in o) {
224
- const l = o.querySelector("strong") ?? o.querySelector("p"), c = T(n, "price");
225
- b(t, l ?? null, c) && (u = !0);
224
+ const i = o.querySelector("strong") ?? o.querySelector("p"), c = T(n, "price");
225
+ b(t, i ?? null, c) && (u = !0);
226
226
  }
227
227
  if (r && "querySelector" in r) {
228
- const l = r.querySelector("strong") ?? r.querySelector("p"), c = T(n, "original_price");
229
- b(t, l ?? null, c) && (u = !0), t.modifyHtml(r).setAttribute("data-same-price", String(Q(n))), u = !0;
228
+ const i = r.querySelector("strong") ?? r.querySelector("p"), c = T(n, "original_price");
229
+ b(t, i ?? null, c) && (u = !0), t.modifyHtml(r).setAttribute("data-same-price", String(Q(n))), u = !0;
230
230
  }
231
231
  if (s && "querySelector" in s) {
232
- const l = s.querySelector(".omnibus-price-value") ?? null, c = T(n, "original_price");
233
- b(t, l, c) && (u = !0);
232
+ const i = s.querySelector(".omnibus-price-value") ?? null, c = T(n, "original_price");
233
+ b(t, i, c) && (u = !0);
234
234
  }
235
- if (i && "querySelector" in i) {
236
- const l = i.querySelector(".omnibus-discount-value") ?? null, c = ue(n);
237
- b(t, l, c) && (u = !0);
235
+ if (l && "querySelector" in l) {
236
+ const i = l.querySelector(".omnibus-discount-value") ?? null, c = ue(n);
237
+ b(t, i, c) && (u = !0);
238
238
  }
239
239
  return u;
240
240
  }
@@ -245,9 +245,9 @@ function se(e) {
245
245
  imageEl: o,
246
246
  nameEl: r,
247
247
  priceEl: s,
248
- oldPriceEl: i,
248
+ oldPriceEl: l,
249
249
  omnibusPriceEl: u,
250
- omnibusDiscountEl: l,
250
+ omnibusDiscountEl: i,
251
251
  buttonEl: c
252
252
  } = e;
253
253
  let a = !1;
@@ -265,9 +265,9 @@ function se(e) {
265
265
  documentModifier: t,
266
266
  product: n,
267
267
  priceEl: s,
268
- oldPriceEl: i,
268
+ oldPriceEl: l,
269
269
  omnibusPriceEl: u,
270
- omnibusDiscountEl: l
270
+ omnibusDiscountEl: i
271
271
  }) && (a = !0), c && "querySelector" in c) {
272
272
  const f = c.querySelector("a.es-button") || c.querySelector("a");
273
273
  f && (t.modifyHtml(f).setAttribute("href", n.url), a = !0);
@@ -296,19 +296,19 @@ function fe(e, t, n) {
296
296
  if (o.length === 0)
297
297
  return !1;
298
298
  const r = /* @__PURE__ */ new Map();
299
- o.forEach((i) => {
300
- if (!("getAttribute" in i))
299
+ o.forEach((l) => {
300
+ if (!("getAttribute" in l))
301
301
  return;
302
- const u = i.getAttribute(Y);
302
+ const u = l.getAttribute(Y);
303
303
  if (!u)
304
304
  return;
305
- const l = r.get(u) ?? [];
306
- l.push(i), r.set(u, l);
305
+ const i = r.get(u) ?? [];
306
+ i.push(l), r.set(u, i);
307
307
  });
308
308
  let s = !1;
309
- return r.forEach((i, u) => {
310
- const l = Math.min(i.length, n.length);
311
- i.slice(0, l).forEach((c, a) => {
309
+ return r.forEach((l, u) => {
310
+ const i = Math.min(l.length, n.length);
311
+ l.slice(0, i).forEach((c, a) => {
312
312
  if (!("querySelector" in c))
313
313
  return;
314
314
  const f = ae(u, n[a]);
@@ -328,11 +328,11 @@ function O(e, t, n) {
328
328
  `[esd-extension-block-id="${m.NAME}"]`
329
329
  ), s = e.querySelectorAll(
330
330
  `[esd-extension-block-id="${m.PRICE}"]`
331
- ), i = e.querySelectorAll(
331
+ ), l = e.querySelectorAll(
332
332
  `[esd-extension-block-id="${m.OLD_PRICE}"]`
333
333
  ), u = e.querySelectorAll(
334
334
  `[esd-extension-block-id="${m.OMNIBUS_PRICE}"]`
335
- ), l = e.querySelectorAll(
335
+ ), i = e.querySelectorAll(
336
336
  `[esd-extension-block-id="${m.OMNIBUS_DISCOUNT}"]`
337
337
  ), c = e.querySelectorAll(
338
338
  `[esd-extension-block-id="${m.BUTTON}"]`
@@ -345,9 +345,9 @@ function O(e, t, n) {
345
345
  imageEl: o[d] ?? null,
346
346
  nameEl: r[d] ?? null,
347
347
  priceEl: s[d] ?? null,
348
- oldPriceEl: i[d] ?? null,
348
+ oldPriceEl: l[d] ?? null,
349
349
  omnibusPriceEl: u[d] ?? null,
350
- omnibusDiscountEl: l[d] ?? null,
350
+ omnibusDiscountEl: i[d] ?? null,
351
351
  buttonEl: c[d] ?? null
352
352
  });
353
353
  f = f || p;
@@ -355,28 +355,28 @@ function O(e, t, n) {
355
355
  return fe(e, t, n) && (f = !0), f;
356
356
  }
357
357
  function qe(e) {
358
- const { currentNode: t, documentModifier: n, products: o } = e;
358
+ const { currentNode: t, documentModifier: n, products: o, onApplied: r } = e;
359
359
  if (!t || !("querySelectorAll" in t))
360
360
  return !1;
361
- const r = V(t);
362
- if (!("querySelectorAll" in r) || r.querySelectorAll(
361
+ const s = V(t);
362
+ if (!("querySelectorAll" in s) || s.querySelectorAll(
363
363
  `[esd-extension-block-id="${m.IMAGE}"]`
364
364
  ).length !== o.length)
365
365
  return !1;
366
- let i = O(r, n, o);
367
- const u = P(t), l = y.getConfig(t);
368
- if (u !== "list" && l.mobileLayoutEnabled && "querySelector" in t) {
369
- const c = t.querySelector(N);
370
- if (c) {
371
- const a = O(
372
- c,
366
+ let u = O(s, n, o);
367
+ const i = P(t), c = y.getConfig(t);
368
+ if (i !== "list" && c.mobileLayoutEnabled && "querySelector" in t) {
369
+ const a = t.querySelector(N);
370
+ if (a) {
371
+ const f = O(
372
+ a,
373
373
  n,
374
374
  o
375
375
  );
376
- i = i || a;
376
+ u = u || f;
377
377
  }
378
378
  }
379
- return i && n.apply(new S("Updated product content in-place")), !0;
379
+ return u && (n.apply(new S("Updated product content in-place")), r == null || r()), !0;
380
380
  }
381
381
  function _(e, t, n) {
382
382
  if (!("querySelectorAll" in e))
@@ -387,10 +387,10 @@ function _(e, t, n) {
387
387
  `[esd-extension-block-id="${m.OLD_PRICE}"]`
388
388
  ), s = e.querySelectorAll(
389
389
  `[esd-extension-block-id="${m.OMNIBUS_PRICE}"]`
390
- ), i = e.querySelectorAll(
390
+ ), l = e.querySelectorAll(
391
391
  `[esd-extension-block-id="${m.OMNIBUS_DISCOUNT}"]`
392
392
  ), u = Math.min(o.length, n.length);
393
- let l = !1;
393
+ let i = !1;
394
394
  for (let c = 0; c < u; c++)
395
395
  K({
396
396
  documentModifier: t,
@@ -398,9 +398,9 @@ function _(e, t, n) {
398
398
  priceEl: o[c] ?? null,
399
399
  oldPriceEl: r[c] ?? null,
400
400
  omnibusPriceEl: s[c] ?? null,
401
- omnibusDiscountEl: i[c] ?? null
402
- }) && (l = !0);
403
- return l;
401
+ omnibusDiscountEl: l[c] ?? null
402
+ }) && (i = !0);
403
+ return i;
404
404
  }
405
405
  function Me(e) {
406
406
  const { currentNode: t, documentModifier: n } = e;
@@ -412,25 +412,25 @@ function Me(e) {
412
412
  if (r.length === 0)
413
413
  return !1;
414
414
  const s = V(t);
415
- let i = _(s, n, r);
416
- const u = P(t), l = y.getConfig(t);
417
- if (u !== "list" && l.mobileLayoutEnabled && "querySelector" in t) {
415
+ let l = _(s, n, r);
416
+ const u = P(t), i = y.getConfig(t);
417
+ if (u !== "list" && i.mobileLayoutEnabled && "querySelector" in t) {
418
418
  const c = t.querySelector(N);
419
419
  if (c) {
420
420
  const a = _(c, n, r);
421
- i = i || a;
421
+ l = l || a;
422
422
  }
423
423
  }
424
- return i && n.apply(new S("Updated price formatting in-place")), i;
424
+ return l && n.apply(new S("Updated price formatting in-place")), l;
425
425
  }
426
426
  function he(e) {
427
427
  const { currentNode: t, documentModifier: n, currency: o } = e, r = C(t);
428
428
  if (!r)
429
429
  return;
430
- const s = o.alignment === "before" ? "0" : "1", i = (u, l) => {
431
- n.modifyHtml(r).setAttribute(u, l);
430
+ const s = o.alignment === "before" ? "0" : "1", l = (u, i) => {
431
+ n.modifyHtml(r).setAttribute(u, i);
432
432
  };
433
- i(g.CURRENCY, o.code), i(g.SYMBOL, o.symbol), i(g.ALIGNMENT, s), i(g.THOUSAND_SEPARATOR, o.thousandSeparator), i(g.DECIMAL_SEPARATOR, o.decimalSeparator), i(g.DECIMAL_COUNT, o.decimalCount.toString()), n.apply(new S("Update currency attributes"));
433
+ l(g.CURRENCY, o.code), l(g.SYMBOL, o.symbol), l(g.ALIGNMENT, s), l(g.THOUSAND_SEPARATOR, o.thousandSeparator), l(g.DECIMAL_SEPARATOR, o.decimalSeparator), l(g.DECIMAL_COUNT, o.decimalCount.toString()), n.apply(new S("Update currency attributes"));
434
434
  }
435
435
  export {
436
436
  Re as adjustProductsToSize,
@@ -11,9 +11,9 @@ import { getPartnerRecommendationParams as O } from "../utils/partnerCustomizati
11
11
  import { sanitizeProductIds as T } from "../utils/productIds.js";
12
12
  import { isFilterValid as z } from "../validation/filterSchema.js";
13
13
  import { getInvalidFields as V, isConfigValid as j } from "../validation/requiredFields.js";
14
- const d = A();
15
- let h = null, g = null, S = null, y = "", b = null, p = 0;
16
- const I = /* @__PURE__ */ new Map();
14
+ const f = A();
15
+ let S = null, p = null, y = null, I = "", R = null, b = 0;
16
+ const h = /* @__PURE__ */ new Map();
17
17
  let l = null;
18
18
  function G() {
19
19
  return {
@@ -247,7 +247,7 @@ const $ = () => ({
247
247
  * `isInitialized`) alone.
248
248
  */
249
249
  seedBlockUrlConfig(t, e) {
250
- const r = (o, c) => o === "." || o === "," || o === " " ? o : c, n = {
250
+ const r = (o, a) => o === "." || o === "," || o === " " ? o : a, n = {
251
251
  name: e.currencyCode,
252
252
  value: e.currencyCode,
253
253
  symbol: e.currencySymbol,
@@ -354,33 +354,33 @@ const $ = () => ({
354
354
  this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId] || (this.blockStates[this.currentRecommendationId].removeStrategyModalStatus = !1);
355
355
  },
356
356
  async fetchStrategies() {
357
- for (; b; )
357
+ for (; R; )
358
358
  try {
359
- await b;
359
+ await R;
360
360
  } catch {
361
361
  }
362
362
  if (this.strategiesFetched)
363
363
  return;
364
- const t = p, e = (async () => {
364
+ const t = b, e = (async () => {
365
365
  this.strategiesLoading = !0;
366
366
  try {
367
- const r = await d.fetchRecommendationStrategies();
368
- if (t !== p)
367
+ const r = await f.fetchRecommendationStrategies();
368
+ if (t !== b)
369
369
  return;
370
370
  this.strategies = r, this.strategiesFetched = !0;
371
371
  } finally {
372
- this.strategiesLoading = !1, t === p && (this.strategiesSettled = !0);
372
+ this.strategiesLoading = !1, t === b && (this.strategiesSettled = !0);
373
373
  }
374
374
  })();
375
- b = e;
375
+ R = e;
376
376
  try {
377
377
  await e;
378
378
  } finally {
379
- b = null;
379
+ R = null;
380
380
  }
381
381
  },
382
382
  invalidateStrategies() {
383
- this.strategiesFetched = !1, this.strategiesSettled = !1, p += 1;
383
+ this.strategiesFetched = !1, this.strategiesSettled = !1, b += 1;
384
384
  },
385
385
  /**
386
386
  * Opens a Smart Recommender strategy page in a new tab and refreshes the list every time
@@ -444,7 +444,7 @@ const $ = () => ({
444
444
  const r = typeof t.updated_at == "string" ? t.updated_at : "", n = r ? `${t.strategy_id}:${r}:${e}` : "", s = n ? this.strategyUrlTemplates[n] : void 0;
445
445
  if (s)
446
446
  return s;
447
- const { full_path: i = "" } = await d.generateStrategyEndpoint(t, e) ?? {};
447
+ const { full_path: i = "" } = await f.generateStrategyEndpoint(t, e) ?? {};
448
448
  return n && i && (this.strategyUrlTemplates = {
449
449
  ...this.strategyUrlTemplates,
450
450
  [n]: i
@@ -468,16 +468,16 @@ const $ = () => ({
468
468
  // ====================================================================
469
469
  async fetchRecommendationCreateData() {
470
470
  if (!this.activePredictiveAlgorithms.length) {
471
- if (h) {
472
- await h;
471
+ if (S) {
472
+ await S;
473
473
  return;
474
474
  }
475
- h = (async () => {
475
+ S = (async () => {
476
476
  const {
477
477
  activePredictiveAlgorithms: t,
478
478
  languages: e,
479
479
  currencies: r
480
- } = await d.fetchRecommendationCreateData();
480
+ } = await f.fetchRecommendationCreateData();
481
481
  if (this.activePredictiveAlgorithms = t, this.languages = e, this.currentRecommendationId !== null && this.blockStates[this.currentRecommendationId]) {
482
482
  const n = this.blockStates[this.currentRecommendationId];
483
483
  n.filterStatus = !!n.recommendationConfigs.filters.length;
@@ -485,26 +485,26 @@ const $ = () => ({
485
485
  this.currencyList = r;
486
486
  })();
487
487
  try {
488
- await h;
488
+ await S;
489
489
  } finally {
490
- h = null;
490
+ S = null;
491
491
  }
492
492
  }
493
493
  },
494
494
  async fetchRecommendationFilters() {
495
495
  if (!Object.keys(this.filterList).length) {
496
- if (g) {
497
- await g;
496
+ if (p) {
497
+ await p;
498
498
  return;
499
499
  }
500
- g = (async () => {
501
- const t = await d.fetchRecommendationFilters();
500
+ p = (async () => {
501
+ const t = await f.fetchRecommendationFilters();
502
502
  this.filterList = t;
503
503
  })();
504
504
  try {
505
- await g;
505
+ await p;
506
506
  } finally {
507
- g = null;
507
+ p = null;
508
508
  }
509
509
  }
510
510
  },
@@ -547,10 +547,10 @@ const $ = () => ({
547
547
  let i = 1;
548
548
  n = n.map((o) => o.filterGroup === t.filterGroup ? { ...o, filterNumber: i++ } : o);
549
549
  } else {
550
- const i = [...new Set(n.map((c) => c.filterGroup))].sort((c, a) => c - a), o = new Map(i.map((c, a) => [c, a + 1]));
551
- n = n.map((c) => ({
552
- ...c,
553
- filterGroup: o.get(c.filterGroup) ?? c.filterGroup
550
+ const i = [...new Set(n.map((a) => a.filterGroup))].sort((a, u) => a - u), o = new Map(i.map((a, u) => [a, u + 1]));
551
+ n = n.map((a) => ({
552
+ ...a,
553
+ filterGroup: o.get(a.filterGroup) ?? a.filterGroup
554
554
  }));
555
555
  }
556
556
  e.recommendationConfigs.filters = n;
@@ -597,32 +597,34 @@ const $ = () => ({
597
597
  const t = [
598
598
  this.currentRecommendationId,
599
599
  this.configVersion,
600
- p
600
+ b
601
601
  ].join(":");
602
- if (S && y === t) {
603
- await S;
602
+ if (y && I === t) {
603
+ await y;
604
604
  return;
605
605
  }
606
- y = t, S = this._doFetchProducts();
606
+ I = t, y = this._doFetchProducts();
607
607
  try {
608
- await S;
608
+ await y;
609
609
  } finally {
610
- y === t && (S = null, y = "");
610
+ I === t && (y = null, I = "");
611
611
  }
612
612
  },
613
613
  async _doFetchProducts() {
614
- var f;
614
+ var g;
615
615
  const t = this.currentRecommendationId, e = this.blockStates[t], { recommendationConfigs: r } = e, n = P();
616
616
  if (r.strategyId && n.isFeatureEnabled("reusableRecommendationStrategy")) {
617
617
  await this._doFetchStrategyProducts(t);
618
618
  return;
619
619
  }
620
- const s = parseInt(r.size) || 6;
620
+ const s = (h.get(t) ?? 0) + 1;
621
+ h.set(t, s);
622
+ const i = parseInt(r.size) || 6;
621
623
  if (!r.strategy) {
622
- this._setBlockProducts(t, [], s);
624
+ this._setBlockProducts(t, [], i);
623
625
  return;
624
626
  }
625
- const i = r.filters.filter((m) => m.isValid), o = F(i), c = ((f = C().find((m) => m.key === r.strategy)) == null ? void 0 : f.path) || "", a = {
627
+ const o = r.filters.filter((d) => d.isValid), a = F(o), u = ((g = C().find((d) => d.key === r.strategy)) == null ? void 0 : g.path) || "", c = {
626
628
  locale: r.language,
627
629
  currency: r.currencySettings.value,
628
630
  partnerName: n.partnerName,
@@ -630,21 +632,21 @@ const $ = () => ({
630
632
  details: !0,
631
633
  campaignId: n.variationId
632
634
  };
633
- r.strategy === "manualMerchandising" ? a.productId = T(r.productIds) : r.strategy === "similarViewed" && (a.productId = "{itemId}"), r.strategy === "userBased" && (a.userId = "{user_id}"), o && (a.filter = o), r.shuffleProducts && (a.shuffle = !0), Object.assign(
634
- a,
635
+ r.strategy === "manualMerchandising" ? c.productId = T(r.productIds) : r.strategy === "similarViewed" && (c.productId = "{itemId}"), r.strategy === "userBased" && (c.userId = "{user_id}"), a && (c.filter = a), r.shuffleProducts && (c.shuffle = !0), Object.assign(
636
+ c,
635
637
  O(n.partnerName, r.strategy)
636
638
  );
637
- let u;
639
+ let m;
638
640
  try {
639
- u = await d.fetchRecommendationProducts(c, a);
641
+ m = await f.fetchRecommendationProducts(u, c);
640
642
  } catch {
641
- u = [];
643
+ m = [];
642
644
  }
643
- this._setBlockProducts(t, u, s);
645
+ h.get(t) === s && this._setBlockProducts(t, m, i);
644
646
  },
645
647
  async _doFetchStrategyProducts(t) {
646
- const e = (I.get(t) ?? 0) + 1;
647
- I.set(t, e);
648
+ const e = (h.get(t) ?? 0) + 1;
649
+ h.set(t, e);
648
650
  const { recommendationConfigs: r } = this.blockStates[t];
649
651
  let n = [], s = parseInt(r.size) || 6;
650
652
  try {
@@ -654,13 +656,13 @@ const $ = () => ({
654
656
  );
655
657
  if (i) {
656
658
  s = parseInt(String(i.size ?? "")) || s;
657
- const o = r.currencySettings.value, a = (await this.resolveStrategyUrlTemplate(i, o)).replaceAll("{locale}", r.language).replaceAll("{currency}", o), u = a.indexOf("?"), f = u === -1 ? a : a.slice(0, u), m = (u === -1 ? "" : a.slice(u + 1)).split("&").filter((k) => k && !k.startsWith("user_id=")), R = m.length ? `${f}?${m.join("&")}` : f;
658
- R && (n = await d.fetchRecommendationProductsByUrl(R));
659
+ const o = r.currencySettings.value, u = (await this.resolveStrategyUrlTemplate(i, o)).replaceAll("{locale}", r.language).replaceAll("{currency}", o), c = u.indexOf("?"), m = c === -1 ? u : u.slice(0, c), g = (c === -1 ? "" : u.slice(c + 1)).split("&").filter((k) => k && !k.startsWith("user_id=")), d = g.length ? `${m}?${g.join("&")}` : m;
660
+ d && (n = await f.fetchRecommendationProductsByUrl(d));
659
661
  }
660
662
  } catch {
661
663
  n = [];
662
664
  }
663
- I.get(t) === e && this._setBlockProducts(t, n, s);
665
+ h.get(t) === e && this._setBlockProducts(t, n, s);
664
666
  },
665
667
  _setBlockProducts(t, e, r) {
666
668
  if (!this.blockStates[t])
@@ -1,22 +1,32 @@
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;
1
+ import { ModificationDescription as g } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { RECOMMENDATION_ID_ATTR as s } from "../constants/selectors.js";
3
+ import { isPartnerManagedBlock as p, updateProductContentInPlace as C, regenerateProductRowsWithStyles as N } from "../controls/main/utils.js";
4
+ import { RecommendationConfigService as m } from "../services/configService.js";
5
+ let o = null;
6
+ function D(n) {
7
+ o = n;
8
8
  }
9
- function D(r, c, i, u) {
10
- const n = e == null ? void 0 : e.getDocumentRootHtmlNode();
11
- if (!e || !n || !("querySelector" in n))
9
+ function P(n, r, c, l) {
10
+ const i = o == null ? void 0 : o.getDocumentRootHtmlNode();
11
+ if (!o || !i || !("querySelector" in i))
12
12
  return !1;
13
- const t = n.querySelector(`[${m}="${r}"]`);
14
- if (!t)
13
+ const e = i.querySelector(`[${s}="${n}"]`);
14
+ if (!e)
15
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);
16
+ const t = o.getDocumentModifier(), a = m.getConfig(e), d = Object.keys(r).some((u) => JSON.stringify(a[u]) !== JSON.stringify(r[u]));
17
+ if (m.stageConfig(t, e, r), p(e))
18
+ return t.apply(new g(l)), !0;
19
+ let f = !1;
20
+ return C({
21
+ currentNode: e,
22
+ documentModifier: t,
23
+ products: c,
24
+ onApplied: () => {
25
+ f = !0;
26
+ }
27
+ }) || (f = N({ currentNode: e, documentModifier: t, products: c })), !f && d && t.apply(new g(l)), !0;
18
28
  }
19
29
  export {
20
- D as commitBlockChangeOutsidePanel,
21
- N as registerNodeConfigWriter
30
+ P as commitBlockChangeOutsidePanel,
31
+ D as registerNodeConfigWriter
22
32
  };
@@ -0,0 +1,24 @@
1
+ import { useRecommendationExtensionStore as s } from "../store/recommendation.js";
2
+ import { commitBlockChangeOutsidePanel as d } from "./nodeConfigWriter.js";
3
+ async function u(e, n) {
4
+ const t = s(), o = t.blockStates[e];
5
+ if (!o)
6
+ return !1;
7
+ const { strategyId: a, strategy: c, size: i } = o.recommendationConfigs;
8
+ if (t.currentRecommendationId === e)
9
+ try {
10
+ await t.fetchRecommendationProducts();
11
+ } catch (m) {
12
+ console.error("[recommendation] product refetch after a strategy change failed", m);
13
+ }
14
+ const r = d(
15
+ e,
16
+ { strategyId: a, strategy: c, size: i },
17
+ o.recommendationProducts,
18
+ n
19
+ );
20
+ return r || console.error("[recommendation] strategy change did not reach a node", { blockId: e }), r;
21
+ }
22
+ export {
23
+ u as commitStrategyChange
24
+ };
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-1ca6baf0]{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-cc5ee925]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-cc5ee925]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-cc5ee925]{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-ec2027ff] .vueperslides__bullets,[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-6c26ded2]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6c26ded2] .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}
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-1ca6baf0]{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-cc5ee925]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-cc5ee925]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-cc5ee925]{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-ec2027ff] .vueperslides__bullets,[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-521cf6b3]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-521cf6b3] .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}