@useinsider/guido 2.1.0-beta.e2d48fe → 2.1.0-beta.e4c3fa1

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 (183) hide show
  1. package/README.md +36 -0
  2. package/dist/@types/config/schemas.js +70 -65
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +69 -58
  5. package/dist/components/organisms/base/Toaster.vue.js +4 -4
  6. package/dist/components/organisms/base/Toaster.vue2.js +12 -9
  7. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +5 -5
  8. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
  9. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +15 -14
  10. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  11. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
  12. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
  13. package/dist/composables/useActionsApi.js +15 -13
  14. package/dist/composables/useBlocksConfig.js +26 -16
  15. package/dist/composables/useHtmlValidator.js +114 -104
  16. package/dist/composables/useRecommendation.js +54 -21
  17. package/dist/composables/useStripo.js +25 -23
  18. package/dist/composables/useVersionHistoryApi.js +1 -1
  19. package/dist/config/compiler/recommendationCompilerRules.js +45 -39
  20. package/dist/config/compiler/utils/recommendationCompilerUtils.js +121 -0
  21. package/dist/config/i18n/en/index.js +11 -0
  22. package/dist/config/i18n/en/labels.json.js +7 -0
  23. package/dist/config/i18n/en/toasters.json.js +56 -0
  24. package/dist/config/i18n/en/tooltips.json.js +82 -0
  25. package/dist/config/i18n/index.js +7 -0
  26. package/dist/config/migrator/itemsBlockMigrator.js +127 -122
  27. package/dist/config/migrator/recommendationMigrator.js +2 -2
  28. package/dist/enums/defaults.js +8 -4
  29. package/dist/enums/extensions/recommendationBlock.js +1 -1
  30. package/dist/enums/recommendation.js +16 -15
  31. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +29 -29
  32. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +29 -29
  33. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +31 -29
  34. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +0 -1
  35. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +29 -27
  36. package/dist/extensions/Blocks/Items/settingsPanel.js +10 -15
  37. package/dist/extensions/Blocks/Recommendation/block.js +133 -9
  38. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  39. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  40. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +69 -0
  41. package/dist/extensions/Blocks/Recommendation/constants/layout.js +24 -0
  42. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +22 -0
  43. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  44. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  45. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  46. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  47. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +102 -0
  48. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +102 -0
  49. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +207 -0
  50. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +52 -0
  51. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +321 -0
  52. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +70 -0
  53. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +168 -0
  54. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +67 -0
  55. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +361 -0
  56. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +21 -0
  57. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  58. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +108 -0
  59. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  60. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  61. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextAfterControl.js → omnibusDiscount/textAfter.js} +16 -14
  62. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextBeforeControl.js → omnibusDiscount/textBefore.js} +16 -14
  63. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  64. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextAfterControl.js → omnibusPrice/textAfter.js} +16 -14
  65. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextBeforeControl.js → omnibusPrice/textBefore.js} +14 -12
  66. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  67. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +345 -0
  68. package/dist/extensions/Blocks/Recommendation/extension.js +40 -17
  69. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +19 -3
  70. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  71. package/dist/extensions/Blocks/Recommendation/services/configService.js +240 -0
  72. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +21 -10
  73. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +297 -209
  74. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +228 -0
  75. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  76. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +66 -0
  77. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  78. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +169 -0
  79. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  80. package/dist/extensions/Blocks/Recommendation/templates/utils.js +134 -0
  81. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  82. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  83. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +26 -15
  84. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  85. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  86. package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
  87. package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
  88. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
  89. package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
  90. package/dist/extensions/Blocks/controlFactories.js +125 -93
  91. package/dist/extensions/ModulesTabIcons/extension.js +17 -0
  92. package/dist/guido.css +1 -1
  93. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +317 -193
  94. package/dist/services/recommendationApi.js +11 -8
  95. package/dist/services/stripoApi.js +20 -17
  96. package/dist/services/templateLibraryApi.js +16 -13
  97. package/dist/src/@types/config/schemas.d.ts +8 -0
  98. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  99. package/dist/src/composables/useConfig.d.ts +4 -0
  100. package/dist/src/composables/useRecommendation.d.ts +1 -0
  101. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +17 -0
  102. package/dist/src/config/i18n/en/index.d.ts +1 -0
  103. package/dist/src/config/i18n/index.d.ts +16 -0
  104. package/dist/src/enums/defaults.d.ts +4 -0
  105. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +67 -0
  106. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  107. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +0 -24
  108. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +55 -0
  109. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  110. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +45 -0
  111. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +40 -0
  112. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  113. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  114. package/dist/src/extensions/Blocks/Recommendation/{cardCompositionControl.d.ts → controls/cardComposition/index.d.ts} +23 -3
  115. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  116. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +21 -589
  117. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  118. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  119. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +52 -0
  120. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  121. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +102 -0
  122. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  123. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +60 -0
  124. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  125. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +231 -0
  126. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +29 -0
  127. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  128. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +34 -0
  129. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  131. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  132. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  133. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  134. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  135. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  136. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  137. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +115 -0
  138. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  139. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  140. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  141. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +139 -468
  142. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  143. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → grid/migration.d.ts} +11 -4
  144. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  145. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +41 -0
  146. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  147. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  148. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  149. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +66 -0
  150. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  151. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +174 -0
  152. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  153. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  154. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  155. package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
  156. package/dist/src/extensions/ModulesTabIcons/extension.d.ts +2 -0
  157. package/dist/src/stores/config.d.ts +36 -0
  158. package/dist/static/styles/components/notification.css.js +19 -0
  159. package/dist/static/styles/components/tools.css.js +6 -2
  160. package/dist/static/styles/components/version-history.css.js +10 -2
  161. package/dist/static/styles/components/wide-panel.css.js +18 -2
  162. package/dist/static/styles/customEditorStyle.css.js +35 -11
  163. package/dist/static/styles/variables.css.js +2 -0
  164. package/dist/static/templates/empty/index.html.js +74 -0
  165. package/dist/static/templates/empty/style.css.js +779 -0
  166. package/dist/stores/unsubscribe.js +37 -34
  167. package/dist/utils/pairProductVariables.js +57 -56
  168. package/dist/utils/templatePreparation.js +15 -14
  169. package/package.json +1 -1
  170. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -187
  171. package/dist/extensions/Blocks/Recommendation/constants.js +0 -13
  172. package/dist/extensions/Blocks/Recommendation/control.js +0 -336
  173. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  174. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  175. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  176. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  177. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -181
  178. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -189
  179. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -209
  180. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -38
  181. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  182. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  183. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -52
@@ -1,13 +1,16 @@
1
- import { RecommendationFeedSourceMaps as n, PriceAttributes as u } from "../../../../enums/extensions/recommendationBlock.js";
2
- import { useRecommendationApi as l } from "../../../../services/recommendationApi.js";
3
- import { useConfigStore as c } from "../../../../stores/config.js";
4
- import { defineStore as p } from "pinia";
5
- import { generateCompleteFilterQuery as m } from "../utils/filterUtil.js";
6
- const a = l(), d = () => ({
7
- recommendationCampaignUrls: {},
8
- recommendationProducts: [],
9
- recommendationConfigs: {
10
- cardsInRow: 3,
1
+ import { RecommendationFeedSourceMaps as S, PriceAttributes as R } from "../../../../enums/extensions/recommendationBlock.js";
2
+ import { useRecommendationApi as k } from "../../../../services/recommendationApi.js";
3
+ import { useConfigStore as y } from "../../../../stores/config.js";
4
+ import { defineStore as C } from "pinia";
5
+ import { DEFAULT_CARDS_IN_ROW as G } from "../constants/layout.js";
6
+ import { EXCLUDED_ALGORITHM_IDS as P } from "../constants/defaultConfig.js";
7
+ import { getDefaultProducts as p } from "../templates/utils.js";
8
+ import { generateCompleteFilterQuery as b } from "../utils/filterUtil.js";
9
+ const h = k();
10
+ let a = null, l = null, u = null;
11
+ function I() {
12
+ return {
13
+ cardsInRow: G,
11
14
  currencySettings: {
12
15
  name: "USD",
13
16
  value: "USD",
@@ -17,178 +20,247 @@ const a = l(), d = () => ({
17
20
  decimalSeparator: ",",
18
21
  thousandSeparator: "."
19
22
  },
20
- filters: [
21
- {
22
- type: "standardFilter",
23
- attribute: "product_attributes.rating_star",
24
- operatorReplace: "=",
25
- operator: "=",
26
- innerGroupOperator: "*",
27
- outerGroupOperator: "*",
28
- value: "5",
29
- filterGroup: 1,
30
- filterNumber: 1,
31
- isValid: !0
32
- },
33
- {
34
- type: "standardFilter",
35
- attribute: "gender",
36
- operatorReplace: "=",
37
- operator: "=",
38
- innerGroupOperator: "|",
39
- outerGroupOperator: "*",
40
- value: "male",
41
- filterGroup: 1,
42
- filterNumber: 2,
43
- isValid: !0
44
- },
45
- {
46
- type: "standardFilter",
47
- attribute: "size",
48
- operatorReplace: "=",
49
- operator: "=",
50
- innerGroupOperator: "*",
51
- outerGroupOperator: "*",
52
- value: "L",
53
- filterGroup: 1,
54
- filterNumber: 3,
55
- isValid: !0
56
- },
57
- {
58
- type: "standardFilter",
59
- attribute: "price.USD",
60
- operatorReplace: ">",
61
- operator: ">",
62
- innerGroupOperator: "*",
63
- outerGroupOperator: "*",
64
- value: "20",
65
- filterGroup: 2,
66
- filterNumber: 1,
67
- isValid: !0
68
- },
69
- {
70
- type: "standardFilter",
71
- attribute: "url",
72
- operatorReplace: "~",
73
- operator: "~",
74
- innerGroupOperator: "|",
75
- outerGroupOperator: "*",
76
- value: "user",
77
- filterGroup: 2,
78
- filterNumber: 2,
79
- isValid: !0
80
- },
81
- {
82
- type: "standardFilter",
83
- attribute: "category",
84
- operatorReplace: "!~",
85
- operator: "!~",
86
- innerGroupOperator: "*",
87
- outerGroupOperator: "|",
88
- value: "t-shirt",
89
- filterGroup: 3,
90
- filterNumber: 1,
91
- isValid: !0
92
- },
93
- {
94
- type: "standardFilter",
95
- attribute: "omnibus_price.USD",
96
- operatorReplace: ">",
97
- operator: ">",
98
- innerGroupOperator: "*",
99
- outerGroupOperator: "|",
100
- value: "31",
101
- filterGroup: 3,
102
- filterNumber: 2,
103
- isValid: !0
104
- },
105
- {
106
- type: "standardFilter",
107
- attribute: "omnibus_discount.USD",
108
- operatorReplace: "<",
109
- operator: "%3C",
110
- innerGroupOperator: "|",
111
- outerGroupOperator: "|",
112
- value: "20",
113
- filterGroup: 3,
114
- filterNumber: 3,
115
- isValid: !0
116
- }
117
- ],
118
- productIds: ["22", "12"],
23
+ filters: [],
24
+ productIds: [],
119
25
  id: 1,
120
- language: "tr_TR",
121
- orientation: "vertical",
26
+ language: "en_US",
27
+ orientation: "grid",
122
28
  recommendedProducts: [],
123
29
  sendProductRequestFlag: !1,
124
30
  shuffleProducts: !1,
125
31
  strategy: "mostPopular",
126
32
  textTrimming: !0,
127
33
  unresponsive: !1,
128
- size: "9"
129
- },
34
+ size: "6"
35
+ };
36
+ }
37
+ function v() {
38
+ return {
39
+ recommendationConfigs: I(),
40
+ recommendationProducts: [],
41
+ filterStatus: !1,
42
+ filterSelectionDrawerStatus: !1,
43
+ filterGroup: 1,
44
+ isInitialized: !1
45
+ };
46
+ }
47
+ const D = () => ({
48
+ recommendationCampaignUrls: {},
130
49
  activePredictiveAlgorithms: [],
131
50
  languages: {},
132
51
  currencyList: [],
133
- filterStatus: !1,
134
- filterSelectionDrawerStatus: !1,
135
52
  filterList: {},
136
- filterGroup: 1
137
- }), y = p("guidoRecommendationExtension", {
138
- state: () => d(),
53
+ blockStates: {},
54
+ currentRecommendationId: null,
55
+ configVersion: 0
56
+ }), _ = C("guidoRecommendationExtension", {
57
+ state: () => D(),
139
58
  getters: {
140
- hasFilters: (e) => !!e.recommendationConfigs.filters.length,
141
- getFilterGroupCount: (e) => {
142
- const { filters: t } = e.recommendationConfigs;
59
+ // ====================================================================
60
+ // Proxy Getters — Backward Compatible Access to Current Block State
61
+ // ====================================================================
62
+ /**
63
+ * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationConfigs
64
+ * This allows all existing code that reads `store.recommendationConfigs` to work unchanged.
65
+ */
66
+ recommendationConfigs(t) {
67
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : I();
68
+ },
69
+ /**
70
+ * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationProducts
71
+ */
72
+ recommendationProducts(t) {
73
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationProducts : [];
74
+ },
75
+ /**
76
+ * Proxy getter: delegates to blockStates[currentRecommendationId].filterSelectionDrawerStatus
77
+ */
78
+ filterSelectionDrawerStatus(t) {
79
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].filterSelectionDrawerStatus : !1;
80
+ },
81
+ /**
82
+ * Proxy getter: delegates to blockStates[currentRecommendationId].filterStatus
83
+ */
84
+ filterStatus(t) {
85
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].filterStatus : !1;
86
+ },
87
+ /**
88
+ * Proxy getter: delegates to blockStates[currentRecommendationId].filterGroup
89
+ */
90
+ filterGroup(t) {
91
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].filterGroup : 1;
92
+ },
93
+ // ====================================================================
94
+ // Existing Getters (now reading through proxy)
95
+ // ====================================================================
96
+ hasFilters() {
97
+ return !!this.recommendationConfigs.filters.length;
98
+ },
99
+ getFilterGroupCount() {
100
+ const { filters: t } = this.recommendationConfigs;
143
101
  return t.length && t[t.length - 1].filterGroup || 0;
144
102
  },
145
- getActivePredictiveAlgorithms: (e) => {
146
- const t = [];
147
- return e.activePredictiveAlgorithms.forEach((r) => {
148
- t.push(...n.filter((i) => i.id === r));
149
- }), t.map((r) => ({
150
- text: r.name,
151
- value: r.key
103
+ getActivePredictiveAlgorithms: (t) => {
104
+ const r = [];
105
+ return t.activePredictiveAlgorithms.filter((e) => !P.includes(e)).forEach((e) => {
106
+ r.push(...S.filter((n) => n.id === e));
107
+ }), r.map((e) => ({
108
+ text: e.name,
109
+ value: e.key
152
110
  }));
153
111
  },
154
- getLanguages: (e) => Object.entries(e.languages).map(([t, r]) => ({
155
- text: r,
156
- value: t
112
+ getLanguages: (t) => Object.entries(t.languages).map(([r, e]) => ({
113
+ text: e,
114
+ value: r
157
115
  })),
158
- getCurrencySymbolList: (e) => e.currencyList.map((t) => ({
159
- text: t.text,
160
- value: t.text
116
+ getCurrencySymbolList: (t) => t.currencyList.map((r) => ({
117
+ text: r.text,
118
+ value: r.text
161
119
  })),
162
- getFilterList: (e) => Object.values(e.filterList).map((t) => {
163
- const r = t.type === "defaultAttribute", i = u.includes(t.attributeName);
164
- let o = r ? t.attributeName : `product_attributes.${t.attributeName}`;
165
- return o = i ? `${o}.${e.recommendationConfigs.currencySettings.value}` : o, {
166
- text: t.displayName,
167
- value: o,
168
- type: t.attributeType
169
- };
170
- }),
171
- getSelectedFilterGroup: (e) => (t) => [...e.recommendationConfigs.filters].filter((r) => r.filterGroup === t)
120
+ getFilterList() {
121
+ return Object.values(this.filterList).map((t) => {
122
+ const r = t.type === "defaultAttribute", e = R.includes(t.attributeName);
123
+ let n = r ? t.attributeName : `product_attributes.${t.attributeName}`;
124
+ return n = e ? `${n}.${this.recommendationConfigs.currencySettings.value}` : n, {
125
+ text: t.displayName,
126
+ value: n,
127
+ type: t.attributeType
128
+ };
129
+ });
130
+ },
131
+ getSelectedFilterGroup() {
132
+ return (t) => [...this.recommendationConfigs.filters].filter((r) => r.filterGroup === t);
133
+ }
172
134
  },
173
135
  actions: {
174
- async fetchRecommendationCreateData() {
175
- if (this.activePredictiveAlgorithms.length)
136
+ // ====================================================================
137
+ // Block Lifecycle Actions
138
+ // ====================================================================
139
+ /**
140
+ * Sets the currently active block ID.
141
+ * Creates a new entry in blockStates if one doesn't exist.
142
+ */
143
+ setCurrentBlock(t) {
144
+ this.blockStates[t] || (this.blockStates = {
145
+ ...this.blockStates,
146
+ [t]: v()
147
+ }), this.currentRecommendationId = t;
148
+ },
149
+ /**
150
+ * Removes a block's state from the store.
151
+ * Resets currentRecommendationId if it was the deleted block.
152
+ */
153
+ removeBlockState(t) {
154
+ const r = { ...this.blockStates };
155
+ if (delete r[t], this.blockStates = r, this.currentRecommendationId === t) {
156
+ const e = Object.keys(this.blockStates).map(Number);
157
+ this.currentRecommendationId = e.length > 0 ? e[0] : null;
158
+ }
159
+ },
160
+ /**
161
+ * Marks a block as initialized (initial API data has been fetched).
162
+ * Automatically cleaned up when removeBlockState deletes the block entry.
163
+ */
164
+ markBlockInitialized(t) {
165
+ this.blockStates[t] && (this.blockStates[t].isInitialized = !0);
166
+ },
167
+ /**
168
+ * Patches the current block's recommendationConfigs.
169
+ * Replaces `store.$patch({ recommendationConfigs: { ... } })` pattern.
170
+ */
171
+ patchCurrentBlockConfig(t, r = {}) {
172
+ if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
173
+ return;
174
+ const e = this.blockStates[this.currentRecommendationId];
175
+ e.recommendationConfigs = {
176
+ ...e.recommendationConfigs,
177
+ ...t,
178
+ currencySettings: {
179
+ ...e.recommendationConfigs.currencySettings,
180
+ ...t.currencySettings || {}
181
+ }
182
+ };
183
+ const { triggerRefetch: n = !0 } = r;
184
+ n && this.configVersion++;
185
+ },
186
+ /**
187
+ * Opens the filter selection drawer for the current block.
188
+ * If no filters exist, initializes with a default empty filter
189
+ * so the user has a starting point for input.
190
+ */
191
+ openFilterDrawer() {
192
+ if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
176
193
  return;
177
- const {
178
- activePredictiveAlgorithms: e,
179
- languages: t,
180
- currencies: r
181
- } = await a.fetchRecommendationCreateData();
182
- this.activePredictiveAlgorithms = e, this.languages = t;
183
- const [i] = r;
184
- this.recommendationConfigs.currencySettings.name = i.text, this.recommendationConfigs.currencySettings.value = i.value, this.currencyList = r, this.filterStatus = !!this.recommendationConfigs.filters.length;
194
+ const t = this.blockStates[this.currentRecommendationId];
195
+ t.recommendationConfigs.filters.length || (t.recommendationConfigs.filters = [{
196
+ type: "standardFilter",
197
+ attribute: "",
198
+ operatorReplace: "",
199
+ operator: "",
200
+ innerGroupOperator: "*",
201
+ outerGroupOperator: "*",
202
+ filterNumber: 1,
203
+ filterGroup: 1,
204
+ isValid: !1,
205
+ value: ""
206
+ }]), t.filterSelectionDrawerStatus = !0;
207
+ },
208
+ /**
209
+ * Closes the filter selection drawer for the current block
210
+ */
211
+ closeFilterDrawer() {
212
+ this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId] || (this.blockStates[this.currentRecommendationId].filterSelectionDrawerStatus = !1);
213
+ },
214
+ // ====================================================================
215
+ // Shared Data Fetching (fetched once, used by all blocks)
216
+ // ====================================================================
217
+ async fetchRecommendationCreateData() {
218
+ if (!this.activePredictiveAlgorithms.length) {
219
+ if (a) {
220
+ await a;
221
+ return;
222
+ }
223
+ a = (async () => {
224
+ const {
225
+ activePredictiveAlgorithms: t,
226
+ languages: r,
227
+ currencies: e
228
+ } = await h.fetchRecommendationCreateData();
229
+ if (this.activePredictiveAlgorithms = t, this.languages = r, this.currentRecommendationId !== null && this.blockStates[this.currentRecommendationId]) {
230
+ const n = this.blockStates[this.currentRecommendationId];
231
+ n.filterStatus = !!n.recommendationConfigs.filters.length;
232
+ }
233
+ this.currencyList = e;
234
+ })();
235
+ try {
236
+ await a;
237
+ } finally {
238
+ a = null;
239
+ }
240
+ }
185
241
  },
186
242
  async fetchRecommendationFilters() {
187
- const e = await a.fetchRecommendationFilters();
188
- this.filterList = e;
243
+ if (!Object.keys(this.filterList).length) {
244
+ if (l) {
245
+ await l;
246
+ return;
247
+ }
248
+ l = (async () => {
249
+ const t = await h.fetchRecommendationFilters();
250
+ this.filterList = t;
251
+ })();
252
+ try {
253
+ await l;
254
+ } finally {
255
+ l = null;
256
+ }
257
+ }
189
258
  },
190
- addFilterGroup(e) {
191
- this.recommendationConfigs.filters.push({
259
+ // ====================================================================
260
+ // Per-Block Filter Actions
261
+ // ====================================================================
262
+ addFilterGroup(t) {
263
+ this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId] || this.blockStates[this.currentRecommendationId].recommendationConfigs.filters.push({
192
264
  type: "standardFilter",
193
265
  attribute: "",
194
266
  operatorReplace: "",
@@ -198,70 +270,86 @@ const a = l(), d = () => ({
198
270
  value: "",
199
271
  filterNumber: 1,
200
272
  isValid: !0,
201
- filterGroup: e
273
+ filterGroup: t
202
274
  });
203
275
  },
204
- updateFilter(e) {
205
- const t = this.recommendationConfigs.filters.findIndex((r) => r.filterNumber === e.filterNumber && r.filterGroup === e.filterGroup);
206
- if (t !== -1) {
207
- const r = [...this.recommendationConfigs.filters];
208
- r[t] = e, e.value.length && e.operator && e.attribute && e.innerGroupOperator && e.outerGroupOperator ? r[t].isValid = !0 : r[t].isValid = !1, this.$patch({
209
- recommendationConfigs: {
210
- filters: r
211
- }
212
- });
276
+ updateFilter(t) {
277
+ if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
278
+ return;
279
+ const r = this.blockStates[this.currentRecommendationId], e = r.recommendationConfigs.filters.findIndex((n) => n.filterNumber === t.filterNumber && n.filterGroup === t.filterGroup);
280
+ if (e !== -1) {
281
+ const n = [...r.recommendationConfigs.filters];
282
+ n[e] = t, t.value.length && t.operator && t.attribute && t.innerGroupOperator && t.outerGroupOperator ? n[e].isValid = !0 : n[e].isValid = !1, r.recommendationConfigs.filters = n;
213
283
  }
214
284
  },
215
- deleteFilter(e) {
216
- const t = [...this.recommendationConfigs.filters].findIndex((r) => r.filterNumber === e.filterNumber && r.filterGroup === e.filterGroup);
217
- if (t !== -1) {
218
- const r = [...this.recommendationConfigs.filters];
219
- r.splice(t, 1), this.$patch({
220
- recommendationConfigs: {
221
- filters: r
222
- }
223
- });
285
+ deleteFilter(t) {
286
+ if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
287
+ return;
288
+ const r = this.blockStates[this.currentRecommendationId], e = [...r.recommendationConfigs.filters].findIndex((n) => n.filterNumber === t.filterNumber && n.filterGroup === t.filterGroup);
289
+ if (e !== -1) {
290
+ const n = [...r.recommendationConfigs.filters];
291
+ n.splice(e, 1), r.recommendationConfigs.filters = n;
224
292
  }
225
293
  },
226
- addFilter(e) {
227
- const t = [...this.recommendationConfigs.filters], r = t.findLastIndex((i) => i.filterGroup === e.filterGroup);
228
- r !== -1 ? t.splice(r + 1, 0, {
229
- ...e,
230
- filterNumber: r + 2
231
- }) : t.push({
232
- ...e,
233
- filterNumber: 1
234
- }), this.$patch({
235
- recommendationConfigs: {
236
- filters: t
237
- }
238
- });
294
+ addFilter(t) {
295
+ if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
296
+ return;
297
+ const r = this.blockStates[this.currentRecommendationId], e = [...r.recommendationConfigs.filters], s = e.filter(
298
+ (o) => o.filterGroup === t.filterGroup
299
+ ).length + 1, m = e.findLastIndex((o) => o.filterGroup === t.filterGroup);
300
+ m !== -1 ? e.splice(m + 1, 0, {
301
+ ...t,
302
+ filterNumber: s
303
+ }) : e.push({
304
+ ...t,
305
+ filterNumber: s
306
+ }), r.recommendationConfigs.filters = e;
239
307
  },
240
308
  generateFilterQuery() {
241
- return m(this.recommendationConfigs.filters);
309
+ return b(this.recommendationConfigs.filters);
242
310
  },
311
+ // ====================================================================
312
+ // Per-Block Product Fetching
313
+ // ====================================================================
243
314
  async fetchRecommendationProducts() {
244
- var o;
245
- const e = this.generateFilterQuery(), t = ((o = n.find((s) => s.key === this.recommendationConfigs.strategy)) == null ? void 0 : o.path) || "", r = c(), i = await a.fetchRecommendationProducts(
246
- t,
247
- {
248
- // TODO: Here will be optimized and filled carefully
249
- locale: this.recommendationConfigs.language,
250
- currency: this.recommendationConfigs.currencySettings.value,
251
- partnerName: r.partnerName,
252
- productId: this.recommendationConfigs.strategy === "manualMerchandising" ? this.recommendationConfigs.productIds.join(",") : "{itemId}",
253
- size: this.recommendationConfigs.size,
254
- details: !0,
255
- campaignId: "{campaignId}",
256
- filter: e
315
+ if (!(this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])) {
316
+ if (u) {
317
+ await u;
318
+ return;
257
319
  }
258
- );
259
- this.$patch({
260
- recommendationProducts: i
261
- });
320
+ u = this._doFetchProducts();
321
+ try {
322
+ await u;
323
+ } finally {
324
+ u = null;
325
+ }
326
+ }
327
+ },
328
+ async _doFetchProducts() {
329
+ var g;
330
+ const t = this.currentRecommendationId, r = this.blockStates[t], { recommendationConfigs: e } = r, n = e.filters.filter((i) => i.isValid), s = b(n), m = ((g = S.find((i) => i.key === e.strategy)) == null ? void 0 : g.path) || "", o = y(), c = {
331
+ locale: e.language,
332
+ currency: e.currencySettings.value,
333
+ partnerName: o.partnerName,
334
+ size: e.size,
335
+ details: !0,
336
+ campaignId: o.variationId
337
+ };
338
+ e.strategy === "manualMerchandising" ? c.productId = e.productIds.join(",") : e.strategy === "similarViewed" && (c.productId = "{itemId}"), e.strategy === "userBased" && (c.userId = "{user_id}"), s && (c.filter = s), e.shuffleProducts && (c.shuffle = !0);
339
+ const f = parseInt(e.size) || 6;
340
+ let d;
341
+ try {
342
+ d = await h.fetchRecommendationProducts(m, c);
343
+ } catch {
344
+ d = [];
345
+ }
346
+ if (this.blockStates[t]) {
347
+ const i = d.length > 0 ? d : p(f);
348
+ this.blockStates[t].recommendationProducts = i.length < f ? [...i, ...p(f - i.length)] : i;
349
+ }
262
350
  }
263
351
  }
264
352
  });
265
353
  export {
266
- y as useRecommendationExtensionStore
354
+ _ as useRecommendationExtensionStore
267
355
  };