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

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.
Files changed (81) hide show
  1. package/README.md +1 -0
  2. package/dist/@types/config/schemas.js +28 -26
  3. package/dist/components/Guido.vue.js +6 -6
  4. package/dist/components/Guido.vue2.js +72 -70
  5. package/dist/components/organisms/AutoSaveController.vue2.js +9 -8
  6. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +11 -13
  7. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +52 -70
  8. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +37 -23
  9. package/dist/components/organisms/header/EditorActions.vue.js +2 -2
  10. package/dist/components/organisms/header/EditorActions.vue2.js +86 -56
  11. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  12. package/dist/components/organisms/header/LeftSlot.vue2.js +16 -12
  13. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +18 -20
  14. package/dist/components/organisms/save-as-template/SaveAsTemplateDrawer.vue2.js +34 -34
  15. package/dist/components/organisms/validation/ValidationErrorDrawer.vue.js +20 -0
  16. package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +48 -0
  17. package/dist/components/wrappers/WpDrawer.vue.js +9 -7
  18. package/dist/components/wrappers/WpDrawer.vue2.js +1 -1
  19. package/dist/composables/useCustomInterfaceAppearance.js +46 -56
  20. package/dist/composables/useHtmlCompiler.js +37 -26
  21. package/dist/composables/useHtmlValidator.js +81 -84
  22. package/dist/composables/useHttp.js +24 -22
  23. package/dist/composables/useRecommendation.js +35 -40
  24. package/dist/composables/useSave.js +90 -45
  25. package/dist/composables/useSaveValidation.js +279 -0
  26. package/dist/composables/useSaveValidationRollout.js +9 -0
  27. package/dist/composables/useStripo.js +30 -30
  28. package/dist/composables/validators/useCouponBlockValidator.js +24 -21
  29. package/dist/composables/validators/useUnsubscribeBlockValidator.js +34 -27
  30. package/dist/enums/extensions/recommendationBlock.js +31 -38
  31. package/dist/enums/save-validation.js +4 -0
  32. package/dist/extensions/Blocks/Recommendation/block.js +39 -43
  33. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +20 -21
  34. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +33 -38
  35. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +52 -84
  36. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +78 -168
  37. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +12 -21
  38. package/dist/guido.css +1 -1
  39. package/dist/services/templateLibraryApi.js +17 -14
  40. package/dist/src/@types/config/schemas.d.ts +4 -0
  41. package/dist/src/@types/save-validation.d.ts +19 -0
  42. package/dist/src/components/Guido.vue.d.ts +17 -1
  43. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +17 -1
  44. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +17 -1
  45. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +17 -1
  46. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +4 -3
  47. package/dist/src/composables/useConfig.d.ts +2 -0
  48. package/dist/src/composables/useHtmlValidator.d.ts +21 -0
  49. package/dist/src/composables/useSave.d.ts +6 -1
  50. package/dist/src/composables/useSaveValidation.d.ts +6 -0
  51. package/dist/src/composables/useSaveValidationRollout.d.ts +3 -0
  52. package/dist/src/composables/validators/useCouponBlockValidator.d.ts +3 -0
  53. package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +10 -0
  54. package/dist/src/enums/extensions/recommendationBlock.d.ts +0 -2
  55. package/dist/src/enums/save-validation.d.ts +27 -0
  56. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -1
  57. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  58. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -2
  59. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +0 -9
  60. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +3 -73
  61. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +0 -4
  62. package/dist/src/stores/config.d.ts +30 -0
  63. package/dist/src/stores/onboarding.d.ts +0 -377
  64. package/dist/src/stores/save-validation.d.ts +22 -0
  65. package/dist/src/utils/genericUtil.d.ts +6 -0
  66. package/dist/src/utils/liquidDynamicContent.d.ts +20 -0
  67. package/dist/src/utils/templatePreparation.d.ts +30 -0
  68. package/dist/static/styles/components/recommendation-strategy.css.js +4 -34
  69. package/dist/stores/config.js +39 -22
  70. package/dist/stores/onboarding.js +36 -41
  71. package/dist/stores/save-validation.js +30 -0
  72. package/dist/utils/genericUtil.js +63 -54
  73. package/dist/utils/liquidDynamicContent.js +15 -0
  74. package/dist/utils/templatePreparation.js +63 -59
  75. package/package.json +1 -1
  76. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +0 -21
  77. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +0 -47
  78. package/dist/extensions/Blocks/Recommendation/utils/strategyDetach.js +0 -19
  79. package/dist/src/extensions/Blocks/Recommendation/utils/strategyDetach.d.ts +0 -12
  80. package/dist/static/styles/components/skeleton.css.js +0 -23
  81. /package/dist/src/components/organisms/{onboarding/RecommendationStrategyOnboarding.vue.d.ts → validation/ValidationErrorDrawer.vue.d.ts} +0 -0
@@ -1,27 +1,27 @@
1
1
  var m = Object.defineProperty;
2
- var C = (g, c, t) => c in g ? m(g, c, { enumerable: !0, configurable: !0, writable: !0, value: t }) : g[c] = t;
3
- var n = (g, c, t) => C(g, typeof c != "symbol" ? c + "" : c, t);
2
+ var C = (h, l, t) => l in h ? m(h, l, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[l] = t;
3
+ var n = (h, l, t) => C(h, typeof l != "symbol" ? l + "" : l, t);
4
4
  import { useConfig as p } from "../../../../../composables/useConfig.js";
5
5
  import { ModificationDescription as y } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
6
  import { CommonControl as N } from "../../../common-control.js";
7
- import { RRS_CONFIG_VERSION as _, DEFAULT_NODE_CONFIG as a } from "../../constants/defaultConfig.js";
7
+ import { CURRENT_CONFIG_VERSION as _, DEFAULT_NODE_CONFIG as a } from "../../constants/defaultConfig.js";
8
8
  import { RECOMMENDATION_ID_ATTR as I } from "../../constants/selectors.js";
9
- import { RecommendationConfigService as l } from "../../services/configService.js";
9
+ import { RecommendationConfigService as c } from "../../services/configService.js";
10
10
  import { useRecommendationExtensionStore as R } from "../../store/recommendation.js";
11
11
  import { registerNodeConfigWriter as b } from "../../utils/nodeConfigWriter.js";
12
12
  import { AlgorithmControl as T } from "./algorithm.js";
13
13
  import { ALGORITHM_CONTROL_ID as ut } from "./algorithm.js";
14
14
  import { CurrencyControl as P } from "./currency.js";
15
- import { CURRENCY_CONTROL_ID as gt } from "./currency.js";
15
+ import { CURRENCY_CONTROL_ID as ht } from "./currency.js";
16
16
  import { FiltersControl as S } from "./filters.js";
17
- import { FILTERS_CONTROL_ID as ft } from "./filters.js";
17
+ import { FILTERS_CONTROL_ID as gt } from "./filters.js";
18
18
  import { LayoutOrientationControl as O } from "./layoutOrientation.js";
19
19
  import { LAYOUT_ORIENTATION_CONTROL_ID as Ct } from "./layoutOrientation.js";
20
20
  import { LocaleControl as L } from "./locale.js";
21
21
  import { LOCALE_CONTROL_ID as yt } from "./locale.js";
22
- import { PricePlacementControl as k } from "./pricePlacement.js";
22
+ import { PricePlacementControl as E } from "./pricePlacement.js";
23
23
  import { PRICE_PLACEMENT_CONTROL_ID as _t } from "./pricePlacement.js";
24
- import { ProductCountControl as E } from "./productCount.js";
24
+ import { ProductCountControl as k } from "./productCount.js";
25
25
  import { PRODUCT_COUNT_CONTROL_ID as Rt } from "./productCount.js";
26
26
  import { ProductLayoutControl as F } from "./productLayout.js";
27
27
  import { PRODUCT_LAYOUT_CONTROL_ID as Tt } from "./productLayout.js";
@@ -30,9 +30,9 @@ import { SHUFFLE_CONTROL_ID as St } from "./shuffle.js";
30
30
  import { StrategyControl as w } from "./strategy.js";
31
31
  import { STRATEGY_CONTROL_ID as Lt } from "./strategy.js";
32
32
  import { setCurrencyAttributes as A, getBlockElement as v, isPartnerManagedBlock as x, updateProductContentInPlace as B, regenerateProductRowsWithStyles as U } from "./utils.js";
33
- import { adjustProductsToSize as Et, formatProductPrice as Ft, getCardComposition as Dt, getCurrentLayout as wt, getMainContainerTbody as At, regenerateMobileProductRows as vt, updatePricesInPlace as xt, updateSingleProductContent as Bt } from "./utils.js";
34
- import { useDebounceFn as h } from "../../../../../node_modules/@vueuse/shared/index.js";
35
- const W = "ui-elements-recommendation-block";
33
+ import { adjustProductsToSize as kt, formatProductPrice as Ft, getCardComposition as Dt, getCurrentLayout as wt, getMainContainerTbody as At, regenerateMobileProductRows as vt, updatePricesInPlace as xt, updateSingleProductContent as Bt } from "./utils.js";
34
+ import { useDebounceFn as f } from "../../../../../node_modules/@vueuse/shared/index.js";
35
+ const $ = "ui-elements-recommendation-block";
36
36
  class at extends N {
37
37
  constructor() {
38
38
  super(...arguments);
@@ -58,7 +58,7 @@ class at extends N {
58
58
  /**
59
59
  * Debounced product fetch to prevent rapid API calls during config changes
60
60
  */
61
- n(this, "_debouncedFetchProducts", h(async () => {
61
+ n(this, "_debouncedFetchProducts", f(async () => {
62
62
  try {
63
63
  await this.store.fetchRecommendationProducts();
64
64
  } finally {
@@ -76,7 +76,7 @@ class at extends N {
76
76
  * count. The store pads products to the configured size, so in-place only
77
77
  * fails when the size actually changed.
78
78
  */
79
- n(this, "_debouncedRegenerateWithProducts", h(() => {
79
+ n(this, "_debouncedRegenerateWithProducts", f(() => {
80
80
  const t = this.store.recommendationProducts;
81
81
  if (!this.currentNode || !this.api)
82
82
  return;
@@ -97,7 +97,7 @@ class at extends N {
97
97
  }, 100));
98
98
  }
99
99
  getId() {
100
- return W;
100
+ return $;
101
101
  }
102
102
  get _subControls() {
103
103
  return [
@@ -118,7 +118,7 @@ class at extends N {
118
118
  return this.rrsEnabled = p().isFeatureEnabled("reusableRecommendationStrategy"), this._subControls.forEach((e) => {
119
119
  var o;
120
120
  return (o = e == null ? void 0 : e.onDestroy) == null ? void 0 : o.call(e);
121
- }), this.algorithmControl = new T(), this.localeControl = new L(), this.currencyControl = new P(), this.productCountControl = new E(), this.productLayoutControl = new F(), this.filtersControl = new S(), this.shuffleControl = new D(), this.pricePlacementControl = new k(), this.layoutOrientationControl = new O(), this.strategyControl = this.rrsEnabled ? new w() : null, this._subControls.forEach((e) => {
121
+ }), this.algorithmControl = new T(), this.localeControl = new L(), this.currencyControl = new P(), this.productCountControl = new k(), this.productLayoutControl = new F(), this.filtersControl = new S(), this.shuffleControl = new D(), this.pricePlacementControl = new E(), this.layoutOrientationControl = new O(), this.strategyControl = this.rrsEnabled ? new w() : null, this._subControls.forEach((e) => {
122
122
  e && (e.api = this.api);
123
123
  }), `
124
124
  <div class="recommendation-controls-container">
@@ -140,14 +140,14 @@ class at extends N {
140
140
  const e = (i = this.getContainer()) == null ? void 0 : i.querySelector(".recommendation-controls-container");
141
141
  if (!e)
142
142
  return;
143
- const o = this._getRecommendationIdFromNode(t) === null ? null : l.getConfig(t), r = this.rrsEnabled && !!o && (!!(o != null && o.strategyId) || ((o == null ? void 0 : o.configVersion) ?? 0) >= _);
143
+ const o = this._getRecommendationIdFromNode(t) === null ? null : c.getConfig(t), r = this.rrsEnabled && !!o && (!!(o != null && o.strategyId) || ((o == null ? void 0 : o.configVersion) ?? 0) >= _);
144
144
  e.classList.toggle("strategy-block", r);
145
145
  }
146
146
  async onRender() {
147
147
  var o;
148
148
  b(this.api);
149
149
  const t = this._getRecommendationIdFromNode(this.currentNode), e = t ?? this.store.currentRecommendationId;
150
- if (e !== null && this.store.setCurrentBlock(e), t !== null && this._syncNodeConfigIfChanged(t), this._listenStateUpdates(), this._showControlsForBlock(this.currentNode), t !== null && this.strategyControl && (this.strategyControl.api = this.api, this.strategyControl.currentNode = this.currentNode, this.strategyControl.onRender()), e !== null && ((o = this.store.blockStates[e]) != null && o.isInitialized)) {
150
+ if (e !== null && this.store.setCurrentBlock(e), t !== null && this._syncNodeConfigIfChanged(t), this._listenStateUpdates(), this._showControlsForBlock(this.currentNode), e !== null && ((o = this.store.blockStates[e]) != null && o.isInitialized)) {
151
151
  this._initializeSubControls();
152
152
  return;
153
153
  }
@@ -209,14 +209,9 @@ class at extends N {
209
209
  const e = this.store.blockStates[t];
210
210
  if (!e)
211
211
  return;
212
- const o = JSON.stringify(l.getConfig(this.currentNode)), r = e.syncedConfigFingerprint;
212
+ const o = JSON.stringify(c.getConfig(this.currentNode)), r = e.syncedConfigFingerprint;
213
213
  e.syncedConfigFingerprint = o, r !== o && (this.pendingNodeConfigWrite || this._syncNodeConfigToStore());
214
214
  }
215
- /** Whether the deferred write would move the node's strategyId — see the caller (SD-149916). */
216
- _isPendingStrategyIdChange() {
217
- const t = this.pendingNodeConfigWrite;
218
- return t ? l.getConfig(this.currentNode).strategyId !== t.updates.strategyId : !1;
219
- }
220
215
  _capturePendingNodeConfigWrite() {
221
216
  const t = this.store.currentRecommendationId;
222
217
  if (!this.currentNode || !this.api || t === null)
@@ -240,7 +235,7 @@ class at extends N {
240
235
  */
241
236
  _stagePendingNodeConfig(t) {
242
237
  const e = this.pendingNodeConfigWrite;
243
- return !e || !this.currentNode ? !1 : (l.stageConfig(t, this.currentNode, e.updates), !0);
238
+ return !e || !this.currentNode ? !1 : (c.stageConfig(t, this.currentNode, e.updates), !0);
244
239
  }
245
240
  /**
246
241
  * Arms the guaranteed fallback write, once the product fetch has settled. The
@@ -264,12 +259,12 @@ class at extends N {
264
259
  const t = this.pendingNodeConfigWrite;
265
260
  if (this.pendingNodeConfigWrite = null, this._clearConfigFlush(), !t || !this.api)
266
261
  return;
267
- const e = t.blockId === this.store.currentRecommendationId && this.currentNode ? this.currentNode : t.node, o = l.getConfig(e);
268
- JSON.stringify(o.filters) === JSON.stringify(t.updates.filters) && o.strategyId === t.updates.strategyId && o.size === t.updates.size || l.updateConfig(this.api, e, t.updates, "Update recommendation filters");
262
+ const e = t.blockId === this.store.currentRecommendationId && this.currentNode ? this.currentNode : t.node, o = c.getConfig(e);
263
+ JSON.stringify(o.filters) === JSON.stringify(t.updates.filters) && o.strategyId === t.updates.strategyId && o.size === t.updates.size || c.updateConfig(this.api, e, t.updates, "Update recommendation filters");
269
264
  }
270
265
  _syncNodeConfigToStore() {
271
266
  var r;
272
- const t = l.getConfig(this.currentNode), e = this.store.currentRecommendationId, o = e !== null && ((r = this.store.blockStates[e]) == null ? void 0 : r.isInitialized);
267
+ const t = c.getConfig(this.currentNode), e = this.store.currentRecommendationId, o = e !== null && ((r = this.store.blockStates[e]) == null ? void 0 : r.isInitialized);
273
268
  this.store.patchCurrentBlockConfig({
274
269
  strategy: t.strategy,
275
270
  strategyId: t.strategyId,
@@ -333,7 +328,7 @@ class at extends N {
333
328
  _applySmartDefaults() {
334
329
  if (!this.currentNode || !this.api)
335
330
  return;
336
- const t = l.getConfig(this.currentNode), e = {};
331
+ const t = c.getConfig(this.currentNode), e = {};
337
332
  let o = null, r = null, i = null;
338
333
  if (t.currency.code === a.currency.code) {
339
334
  const { currencyList: s } = this.store;
@@ -357,7 +352,7 @@ class at extends N {
357
352
  (d) => d.value === a.language
358
353
  ) || (i = s[0].value, e.language = i));
359
354
  }
360
- !o && !r && !i || (l.updateConfig(
355
+ !o && !r && !i || (c.updateConfig(
361
356
  this.api,
362
357
  this.currentNode,
363
358
  e,
@@ -418,19 +413,19 @@ class at extends N {
418
413
  return;
419
414
  }
420
415
  const s = t.$state.configVersion;
421
- s !== o && (o = s, this._capturePendingNodeConfigWrite(), this._isPendingStrategyIdChange() && this._flushPendingNodeConfig(), this._debouncedFetchProducts());
422
- const u = t.recommendationProducts, d = u !== e, f = Array.isArray(u) && u.length > 0;
423
- d && f && (e = u, this._debouncedRegenerateWithProducts());
416
+ s !== o && (o = s, this._capturePendingNodeConfigWrite(), this._debouncedFetchProducts());
417
+ const u = t.recommendationProducts, d = u !== e, g = Array.isArray(u) && u.length > 0;
418
+ d && g && (e = u, this._debouncedRegenerateWithProducts());
424
419
  });
425
420
  }
426
421
  }
427
422
  export {
428
423
  ut as ALGORITHM_CONTROL_ID,
429
424
  T as AlgorithmControl,
430
- W as CONTROL_BLOCK_ID,
431
- gt as CURRENCY_CONTROL_ID,
425
+ $ as CONTROL_BLOCK_ID,
426
+ ht as CURRENCY_CONTROL_ID,
432
427
  P as CurrencyControl,
433
- ft as FILTERS_CONTROL_ID,
428
+ gt as FILTERS_CONTROL_ID,
434
429
  S as FiltersControl,
435
430
  Ct as LAYOUT_ORIENTATION_CONTROL_ID,
436
431
  yt as LOCALE_CONTROL_ID,
@@ -439,15 +434,15 @@ export {
439
434
  _t as PRICE_PLACEMENT_CONTROL_ID,
440
435
  Rt as PRODUCT_COUNT_CONTROL_ID,
441
436
  Tt as PRODUCT_LAYOUT_CONTROL_ID,
442
- k as PricePlacementControl,
443
- E as ProductCountControl,
437
+ E as PricePlacementControl,
438
+ k as ProductCountControl,
444
439
  F as ProductLayoutControl,
445
440
  at as RecommendationBlockControl,
446
441
  St as SHUFFLE_CONTROL_ID,
447
442
  Lt as STRATEGY_CONTROL_ID,
448
443
  D as ShuffleControl,
449
444
  w as StrategyControl,
450
- Et as adjustProductsToSize,
445
+ kt as adjustProductsToSize,
451
446
  Ft as formatProductPrice,
452
447
  v as getBlockElement,
453
448
  Dt as getCardComposition,
@@ -1,25 +1,21 @@
1
- var u = Object.defineProperty;
2
- var S = (o, n, t) => n in o ? u(o, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[n] = t;
3
- var r = (o, n, t) => S(o, typeof n != "symbol" ? n + "" : n, t);
4
- import { ACADEMY_LINKS as _ } from "../../../../../enums/academy.js";
5
- import { useOnboardingStore as f } from "../../../../../stores/onboarding.js";
6
- import { CommonControl as v } from "../../../common-control.js";
7
- import { RRS_CONFIG_VERSION as b } from "../../constants/defaultConfig.js";
8
- import { RecommendationConfigService as h } from "../../services/configService.js";
9
- import { useRecommendationExtensionStore as C } from "../../store/recommendation.js";
10
- const k = "recommendation-strategy-control";
11
- class I extends v {
1
+ var d = Object.defineProperty;
2
+ var y = (r, s, t) => s in r ? d(r, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[s] = t;
3
+ var o = (r, s, t) => y(r, typeof s != "symbol" ? s + "" : s, t);
4
+ import { ACADEMY_LINKS as m } from "../../../../../enums/academy.js";
5
+ import { CommonControl as h } from "../../../common-control.js";
6
+ import { useRecommendationExtensionStore as u } from "../../store/recommendation.js";
7
+ const p = "recommendation-strategy-control";
8
+ class f extends h {
12
9
  constructor() {
13
10
  super(...arguments);
14
- r(this, "store", C());
15
- r(this, "onboardingStore", f());
16
- r(this, "storeUnsubscription", () => {
11
+ o(this, "store", u());
12
+ o(this, "storeUnsubscription", () => {
17
13
  });
18
- r(this, "listeners", []);
19
- r(this, "lastPaintedState", null);
14
+ o(this, "listeners", []);
15
+ o(this, "lastPaintedState", null);
20
16
  }
21
17
  getId() {
22
- return k;
18
+ return p;
23
19
  }
24
20
  getTemplate() {
25
21
  const t = this.api.translate(
@@ -27,34 +23,21 @@ class I extends v {
27
23
  ), e = this.api.translate("For more information, you can"), a = this.api.translate("visit Academy");
28
24
  return `
29
25
  <div class="strategy-control-container">
30
- <div data-strategy-loading-state>
31
- <div class="strategy-control-header">
32
- <span class="guido-skeleton guido-skeleton--strategy-title"></span>
33
- </div>
34
- <div class="strategy-control-description-row">
35
- <span class="guido-skeleton guido-skeleton--strategy-description"></span>
36
- </div>
37
- <div class="strategy-control-skeleton-row">
38
- <span class="guido-skeleton guido-skeleton--strategy-cta"></span>
39
- <span class="guido-skeleton guido-skeleton--strategy-cta"></span>
40
- </div>
26
+ <div class="strategy-control-header">
27
+ <h3 class="strategy-control-title">${this.api.translate("Recommendation Strategy")}</h3>
41
28
  </div>
42
- <div data-strategy-content style="display: none;">
43
- <div class="strategy-control-header">
44
- <h3 class="strategy-control-title">${this.api.translate("Recommendation Strategy")}</h3>
45
- </div>
46
- <div class="strategy-control-description-row">
47
- <p class="strategy-control-description">
48
- ${t}
49
- ${e}
50
- <a
51
- href="${_.EMAIL_RECOMMENDATION_BLOCK}"
52
- target="_blank"
53
- rel="noopener noreferrer">${a}</a>.
54
- </p>
55
- </div>
56
- <div data-strategy-empty-state style="display: none;">
57
- ${this._GuTwoColumns([
29
+ <div class="strategy-control-description-row">
30
+ <p class="strategy-control-description">
31
+ ${t}
32
+ ${e}
33
+ <a
34
+ href="${m.EMAIL_RECOMMENDATION_BLOCK}"
35
+ target="_blank"
36
+ rel="noopener noreferrer">${a}</a>.
37
+ </p>
38
+ </div>
39
+ <div data-strategy-empty-state>
40
+ ${this._GuTwoColumns([
58
41
  this._GuButton({
59
42
  name: "assignStrategy",
60
43
  label: this.api.translate("Assign Strategy"),
@@ -65,28 +48,26 @@ class I extends v {
65
48
  name: "createStrategy",
66
49
  label: this.api.translate("Create New Strategy"),
67
50
  id: "guido__btn-create-strategy",
68
- className: "strategy-control-cta primary"
51
+ className: "strategy-control-cta primary",
52
+ disabled: !0
69
53
  })
70
54
  ], "strategy-control-cta-row")}
55
+ </div>
56
+ <div data-strategy-assigned-state style="display: none;">
57
+ <div class="strategy-control-name-band">
58
+ <span class="strategy-control-name" data-strategy-name></span>
71
59
  </div>
72
- <div data-strategy-assigned-state style="display: none;">
73
- <div class="strategy-control-name-band">
74
- <span class="strategy-control-name" data-strategy-name></span>
75
- <span
76
- class="guido-skeleton guido-skeleton--strategy-name" data-strategy-name-skeleton></span>
77
- </div>
78
- <div class="strategy-control-actions">
79
- ${this._strategyAction({
60
+ <div class="strategy-control-actions">
61
+ ${this._strategyAction({
80
62
  id: "guido__btn-change-strategy",
81
63
  label: this.api.translate("Change"),
82
64
  modifier: "change"
83
65
  })}
84
- ${this._strategyAction({
66
+ ${this._strategyAction({
85
67
  id: "guido__btn-remove-strategy",
86
68
  label: this.api.translate("Remove"),
87
69
  modifier: "remove"
88
70
  })}
89
- </div>
90
71
  </div>
91
72
  </div>
92
73
  </div>
@@ -103,54 +84,41 @@ class I extends v {
103
84
  `;
104
85
  }
105
86
  onRender() {
106
- this._teardown(), this.store.strategyPanelOpen = !0, this._setupButtonListeners(), this._renderState(), this.storeUnsubscription = this.store.$subscribe(() => {
87
+ this._teardown(), this._setupButtonListeners(), this._renderState(), this.storeUnsubscription = this.store.$subscribe(() => {
107
88
  this._renderState();
108
- }), this.store.recommendationConfigs.strategyId && !this.store.strategiesFetched && this.store.fetchStrategies().catch(() => {
89
+ }), this.store.recommendationConfigs.strategyId && !this.store.strategies.length && this.store.fetchStrategies().catch(() => {
109
90
  });
110
91
  }
111
- /**
112
- * Whether the document itself says this block has no strategy.
113
- *
114
- * Read the node, not the store: when the main control cannot resolve the block id off the
115
- * node it never syncs the persisted config, so the store still holds defaults (empty
116
- * strategyId) for an assigned block.
117
- */
118
- _isNodeUnassigned() {
119
- if (!h.hasConfig(this.currentNode))
120
- return !1;
121
- const t = h.getConfig(this.currentNode);
122
- return !t.strategyId && (t.configVersion ?? 0) >= b;
123
- }
124
92
  onDestroy() {
125
93
  this._teardown();
126
94
  }
127
95
  _teardown() {
128
- this.store.strategyPanelOpen = !1, this.storeUnsubscription(), this.storeUnsubscription = () => {
96
+ this.storeUnsubscription(), this.storeUnsubscription = () => {
129
97
  }, this.lastPaintedState = null, this.listeners.forEach(({ element: t, handler: e }) => t.removeEventListener("click", e)), this.listeners = [];
130
98
  }
131
99
  _setupButtonListeners() {
132
100
  const t = this.getContainer();
133
101
  if (!t)
134
102
  return;
135
- const e = (a, i) => {
136
- const s = t.querySelector(a);
137
- s && (s.addEventListener("click", i), this.listeners.push({ element: s, handler: i }));
103
+ const e = (a, n) => {
104
+ const i = t.querySelector(a);
105
+ i && (i.addEventListener("click", n), this.listeners.push({ element: i, handler: n }));
138
106
  };
139
- e("#guido__btn-assign-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-create-strategy", () => this.store.openStrategyCreation()), e("#guido__btn-change-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-remove-strategy", () => this.store.openRemoveStrategyModal());
107
+ e("#guido__btn-assign-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-change-strategy", () => this.store.openAssignStrategyDrawer()), e("#guido__btn-remove-strategy", () => this.store.openRemoveStrategyModal());
140
108
  }
141
109
  _renderState() {
142
- var p;
143
- const { strategyId: t } = this.store.recommendationConfigs, e = t ? ((p = this.store.assignedStrategy) == null ? void 0 : p.name) ?? "" : "", a = !!t && !e && (this.store.strategiesLoading || !this.store.strategiesSettled), i = `${t}\0${e}\0${a}`;
144
- if (i === this.lastPaintedState)
110
+ var l;
111
+ const { strategyId: t } = this.store.recommendationConfigs, e = t ? ((l = this.store.assignedStrategy) == null ? void 0 : l.name) ?? "" : "", a = `${t}\0${e}`;
112
+ if (a === this.lastPaintedState)
145
113
  return;
146
- const s = this.getContainer();
147
- if (!s)
114
+ const n = this.getContainer();
115
+ if (!n)
148
116
  return;
149
- const c = s.querySelector("[data-strategy-empty-state]"), g = s.querySelector("[data-strategy-assigned-state]"), l = s.querySelector("[data-strategy-loading-state]"), y = s.querySelector("[data-strategy-content]"), d = s.querySelector("[data-strategy-name]"), m = s.querySelector("[data-strategy-name-skeleton]");
150
- !c || !g || (l && (l.style.display = "none"), y && (y.style.display = ""), c.style.display = t ? "none" : "", g.style.display = t ? "" : "none", !t && this._isNodeUnassigned() && this.onboardingStore.startOnboarding("recommendationStrategyOnboarding"), d && (d.style.display = a ? "none" : "", t && !a && (d.textContent = e || `#${t}`)), m && (m.style.display = a ? "block" : "none"), this.lastPaintedState = i);
117
+ const i = n.querySelector("[data-strategy-empty-state]"), c = n.querySelector("[data-strategy-assigned-state]"), g = n.querySelector("[data-strategy-name]");
118
+ !i || !c || (i.style.display = t ? "none" : "", c.style.display = t ? "" : "none", g && t && (g.textContent = e || `#${t}`), this.lastPaintedState = a);
151
119
  }
152
120
  }
153
121
  export {
154
- k as STRATEGY_CONTROL_ID,
155
- I as StrategyControl
122
+ p as STRATEGY_CONTROL_ID,
123
+ f as StrategyControl
156
124
  };