@useinsider/guido 2.1.0-beta.9ba2e9d → 2.1.0-beta.9eddc27

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 (148) hide show
  1. package/README.md +1 -1
  2. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +14 -15
  3. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  4. package/dist/composables/useHtmlValidator.js +84 -106
  5. package/dist/composables/useRecommendation.js +21 -54
  6. package/dist/composables/useSave.js +16 -12
  7. package/dist/composables/useStripo.js +58 -54
  8. package/dist/composables/useStripoEventHandler.js +27 -12
  9. package/dist/composables/useSyncModuleExtractor.js +33 -0
  10. package/dist/config/compiler/recommendationCompilerRules.js +39 -45
  11. package/dist/config/migrator/recommendationMigrator.js +2 -2
  12. package/dist/enums/recommendation.js +15 -16
  13. package/dist/enums/unsubscribe.js +25 -21
  14. package/dist/extensions/Blocks/Recommendation/block.js +9 -130
  15. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +187 -0
  16. package/dist/extensions/Blocks/Recommendation/constants.js +13 -0
  17. package/dist/extensions/Blocks/Recommendation/control.js +336 -0
  18. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +68 -0
  19. package/dist/extensions/Blocks/Recommendation/controls/index.js +245 -0
  20. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +74 -0
  21. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textAfter.js → omnibusDiscountTextAfterControl.js} +14 -16
  22. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textBefore.js → omnibusDiscountTextBeforeControl.js} +14 -16
  23. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textAfter.js → omnibusPriceTextAfterControl.js} +14 -16
  24. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textBefore.js → omnibusPriceTextBeforeControl.js} +12 -14
  25. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +188 -0
  26. package/dist/extensions/Blocks/Recommendation/extension.js +17 -40
  27. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +3 -19
  28. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +4 -13
  29. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +10 -21
  30. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +193 -230
  31. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +181 -0
  32. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +189 -0
  33. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +209 -0
  34. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  35. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +15 -26
  36. package/dist/extensions/Blocks/controlFactories.js +93 -125
  37. package/dist/guido.css +1 -1
  38. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +169 -223
  39. package/dist/services/recommendationApi.js +9 -10
  40. package/dist/services/stripoApi.js +50 -14
  41. package/dist/services/templateLibraryApi.js +13 -16
  42. package/dist/src/@types/events.d.ts +34 -2
  43. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  44. package/dist/src/composables/useRecommendation.d.ts +0 -1
  45. package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
  46. package/dist/src/enums/unsubscribe.d.ts +3 -0
  47. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -67
  48. package/dist/src/extensions/Blocks/Recommendation/{controls/cardComposition/index.d.ts → cardCompositionControl.d.ts} +3 -23
  49. package/dist/src/extensions/Blocks/Recommendation/{constants/controlIds.d.ts → constants.d.ts} +24 -0
  50. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +38 -0
  51. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +589 -21
  52. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  53. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +0 -9
  54. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +468 -131
  55. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  56. package/dist/src/extensions/Blocks/Recommendation/templates/{grid/migration.d.ts → migrationTemplate.d.ts} +4 -11
  57. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +52 -0
  58. package/dist/src/mock/api/settings.d.ts +2 -0
  59. package/dist/src/services/stripoApi.d.ts +5 -0
  60. package/dist/src/stores/editor.d.ts +23 -0
  61. package/dist/static/styles/components/notification.css.js +1 -0
  62. package/dist/static/styles/components/version-history.css.js +10 -2
  63. package/dist/static/styles/components/wide-panel.css.js +18 -2
  64. package/dist/static/styles/customEditorStyle.css.js +2 -25
  65. package/dist/stores/editor.js +2 -1
  66. package/dist/utils/pairProductVariables.js +56 -57
  67. package/dist/utils/templatePreparation.js +14 -15
  68. package/package.json +1 -1
  69. package/dist/config/compiler/utils/recommendationCompilerUtils.js +0 -147
  70. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +0 -4
  71. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +0 -4
  72. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +0 -65
  73. package/dist/extensions/Blocks/Recommendation/constants/layout.js +0 -20
  74. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +0 -19
  75. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +0 -64
  76. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +0 -80
  77. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +0 -232
  78. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +0 -19
  79. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +0 -92
  80. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +0 -102
  81. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +0 -209
  82. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +0 -52
  83. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +0 -217
  84. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +0 -70
  85. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +0 -110
  86. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +0 -67
  87. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -286
  88. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +0 -46
  89. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +0 -108
  90. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +0 -44
  91. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +0 -48
  92. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +0 -48
  93. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +0 -44
  94. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +0 -222
  95. package/dist/extensions/Blocks/Recommendation/services/configService.js +0 -240
  96. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +0 -233
  97. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +0 -251
  98. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +0 -69
  99. package/dist/extensions/Blocks/Recommendation/templates/index.js +0 -12
  100. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +0 -174
  101. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +0 -73
  102. package/dist/extensions/Blocks/Recommendation/templates/utils.js +0 -122
  103. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +0 -6
  104. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +0 -29
  105. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +0 -46
  106. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +0 -17
  107. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +0 -13
  108. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -49
  109. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +0 -13
  110. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +0 -35
  111. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -31
  112. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +0 -143
  113. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -31
  114. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +0 -35
  115. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +0 -37
  116. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -29
  117. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +0 -52
  118. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +0 -22
  119. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -68
  120. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +0 -24
  121. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -42
  122. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -23
  123. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -214
  124. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +0 -97
  125. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -34
  126. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -95
  127. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -100
  128. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -15
  129. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -15
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -100
  131. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -15
  132. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -15
  133. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +0 -95
  134. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +0 -83
  135. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +0 -151
  136. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +0 -6
  137. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +0 -20
  138. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +0 -33
  139. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +0 -39
  140. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +0 -8
  141. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +0 -25
  142. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +0 -18
  143. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +0 -57
  144. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +0 -7
  145. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +0 -160
  146. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +0 -33
  147. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +0 -113
  148. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +0 -77
@@ -1,13 +1,13 @@
1
- import { RecommendationFeedSourceMaps as u, PriceAttributes as g } from "../../../../enums/extensions/recommendationBlock.js";
2
- import { useRecommendationApi as S } from "../../../../services/recommendationApi.js";
3
- import { useConfigStore as p } from "../../../../stores/config.js";
4
- import { defineStore as b } from "pinia";
5
- import { DEFAULT_CARDS_IN_ROW as I } from "../constants/layout.js";
6
- import { generateCompleteFilterQuery as d } from "../utils/filterUtil.js";
7
- const l = S();
8
- function f() {
9
- return {
10
- cardsInRow: I,
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,
11
11
  currencySettings: {
12
12
  name: "USD",
13
13
  value: "USD",
@@ -17,217 +17,178 @@ function f() {
17
17
  decimalSeparator: ",",
18
18
  thousandSeparator: "."
19
19
  },
20
- filters: [],
21
- productIds: [],
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"],
22
119
  id: 1,
23
120
  language: "tr_TR",
24
- orientation: "grid",
121
+ orientation: "vertical",
25
122
  recommendedProducts: [],
26
123
  sendProductRequestFlag: !1,
27
124
  shuffleProducts: !1,
28
125
  strategy: "mostPopular",
29
126
  textTrimming: !0,
30
127
  unresponsive: !1,
31
- size: "6"
32
- };
33
- }
34
- function R() {
35
- return {
36
- recommendationConfigs: f(),
37
- recommendationProducts: [],
38
- filterStatus: !1,
39
- filterSelectionDrawerStatus: !1,
40
- filterGroup: 1
41
- };
42
- }
43
- const k = () => ({
44
- recommendationCampaignUrls: {},
128
+ size: "9"
129
+ },
45
130
  activePredictiveAlgorithms: [],
46
131
  languages: {},
47
132
  currencyList: [],
133
+ filterStatus: !1,
134
+ filterSelectionDrawerStatus: !1,
48
135
  filterList: {},
49
- blockStates: {},
50
- currentRecommendationId: null,
51
- configVersion: 0
52
- }), D = b("guidoRecommendationExtension", {
53
- state: () => k(),
136
+ filterGroup: 1
137
+ }), y = p("guidoRecommendationExtension", {
138
+ state: () => d(),
54
139
  getters: {
55
- // ====================================================================
56
- // Proxy Getters — Backward Compatible Access to Current Block State
57
- // ====================================================================
58
- /**
59
- * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationConfigs
60
- * This allows all existing code that reads `store.recommendationConfigs` to work unchanged.
61
- */
62
- recommendationConfigs(e) {
63
- return e.currentRecommendationId !== null && e.blockStates[e.currentRecommendationId] ? e.blockStates[e.currentRecommendationId].recommendationConfigs : f();
64
- },
65
- /**
66
- * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationProducts
67
- */
68
- recommendationProducts(e) {
69
- return e.currentRecommendationId !== null && e.blockStates[e.currentRecommendationId] ? e.blockStates[e.currentRecommendationId].recommendationProducts : [];
70
- },
71
- /**
72
- * Proxy getter: delegates to blockStates[currentRecommendationId].filterSelectionDrawerStatus
73
- */
74
- filterSelectionDrawerStatus(e) {
75
- return e.currentRecommendationId !== null && e.blockStates[e.currentRecommendationId] ? e.blockStates[e.currentRecommendationId].filterSelectionDrawerStatus : !1;
76
- },
77
- /**
78
- * Proxy getter: delegates to blockStates[currentRecommendationId].filterStatus
79
- */
80
- filterStatus(e) {
81
- return e.currentRecommendationId !== null && e.blockStates[e.currentRecommendationId] ? e.blockStates[e.currentRecommendationId].filterStatus : !1;
82
- },
83
- /**
84
- * Proxy getter: delegates to blockStates[currentRecommendationId].filterGroup
85
- */
86
- filterGroup(e) {
87
- return e.currentRecommendationId !== null && e.blockStates[e.currentRecommendationId] ? e.blockStates[e.currentRecommendationId].filterGroup : 1;
88
- },
89
- // ====================================================================
90
- // Existing Getters (now reading through proxy)
91
- // ====================================================================
92
- hasFilters() {
93
- return !!this.recommendationConfigs.filters.length;
94
- },
95
- getFilterGroupCount() {
96
- const { filters: e } = this.recommendationConfigs;
97
- return e.length && e[e.length - 1].filterGroup || 0;
140
+ hasFilters: (e) => !!e.recommendationConfigs.filters.length,
141
+ getFilterGroupCount: (e) => {
142
+ const { filters: t } = e.recommendationConfigs;
143
+ return t.length && t[t.length - 1].filterGroup || 0;
98
144
  },
99
145
  getActivePredictiveAlgorithms: (e) => {
100
- const r = [];
101
- return e.activePredictiveAlgorithms.forEach((t) => {
102
- r.push(...u.filter((n) => n.id === t));
103
- }), r.map((t) => ({
104
- text: t.name,
105
- value: t.key
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
106
152
  }));
107
153
  },
108
- getLanguages: (e) => Object.entries(e.languages).map(([r, t]) => ({
109
- text: t,
110
- value: r
154
+ getLanguages: (e) => Object.entries(e.languages).map(([t, r]) => ({
155
+ text: r,
156
+ value: t
111
157
  })),
112
- getCurrencySymbolList: (e) => e.currencyList.map((r) => ({
113
- text: r.text,
114
- value: r.text
158
+ getCurrencySymbolList: (e) => e.currencyList.map((t) => ({
159
+ text: t.text,
160
+ value: t.text
115
161
  })),
116
- getFilterList() {
117
- return Object.values(this.filterList).map((e) => {
118
- const r = e.type === "defaultAttribute", t = g.includes(e.attributeName);
119
- let n = r ? e.attributeName : `product_attributes.${e.attributeName}`;
120
- return n = t ? `${n}.${this.recommendationConfigs.currencySettings.value}` : n, {
121
- text: e.displayName,
122
- value: n,
123
- type: e.attributeType
124
- };
125
- });
126
- },
127
- getSelectedFilterGroup() {
128
- return (e) => [...this.recommendationConfigs.filters].filter((r) => r.filterGroup === e);
129
- }
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)
130
172
  },
131
173
  actions: {
132
- // ====================================================================
133
- // Block Lifecycle Actions
134
- // ====================================================================
135
- /**
136
- * Sets the currently active block ID.
137
- * Creates a new entry in blockStates if one doesn't exist.
138
- */
139
- setCurrentBlock(e) {
140
- this.blockStates[e] || (this.blockStates = {
141
- ...this.blockStates,
142
- [e]: R()
143
- }), this.currentRecommendationId = e;
144
- },
145
- /**
146
- * Removes a block's state from the store.
147
- * Resets currentRecommendationId if it was the deleted block.
148
- */
149
- removeBlockState(e) {
150
- const r = { ...this.blockStates };
151
- if (delete r[e], this.blockStates = r, this.currentRecommendationId === e) {
152
- const t = Object.keys(this.blockStates).map(Number);
153
- this.currentRecommendationId = t.length > 0 ? t[0] : null;
154
- }
155
- },
156
- /**
157
- * Patches the current block's recommendationConfigs.
158
- * Replaces `store.$patch({ recommendationConfigs: { ... } })` pattern.
159
- */
160
- patchCurrentBlockConfig(e, r = {}) {
161
- if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
162
- return;
163
- const t = this.blockStates[this.currentRecommendationId];
164
- t.recommendationConfigs = {
165
- ...t.recommendationConfigs,
166
- ...e,
167
- currencySettings: {
168
- ...t.recommendationConfigs.currencySettings,
169
- ...e.currencySettings || {}
170
- }
171
- };
172
- const { triggerRefetch: n = !0 } = r;
173
- n && this.configVersion++;
174
- },
175
- /**
176
- * Opens the filter selection drawer for the current block.
177
- * If no filters exist, initializes with a default empty filter
178
- * so the user has a starting point for input.
179
- */
180
- openFilterDrawer() {
181
- if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
182
- return;
183
- const e = this.blockStates[this.currentRecommendationId];
184
- e.recommendationConfigs.filters.length || (e.recommendationConfigs.filters = [{
185
- type: "standardFilter",
186
- attribute: "",
187
- operatorReplace: "",
188
- operator: "",
189
- innerGroupOperator: "*",
190
- outerGroupOperator: "*",
191
- filterNumber: 1,
192
- filterGroup: 1,
193
- isValid: !1,
194
- value: ""
195
- }]), e.filterSelectionDrawerStatus = !0;
196
- },
197
- /**
198
- * Closes the filter selection drawer for the current block
199
- */
200
- closeFilterDrawer() {
201
- this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId] || (this.blockStates[this.currentRecommendationId].filterSelectionDrawerStatus = !1);
202
- },
203
- // ====================================================================
204
- // Shared Data Fetching (fetched once, used by all blocks)
205
- // ====================================================================
206
174
  async fetchRecommendationCreateData() {
207
175
  if (this.activePredictiveAlgorithms.length)
208
176
  return;
209
177
  const {
210
178
  activePredictiveAlgorithms: e,
211
- languages: r,
212
- currencies: t
213
- } = await l.fetchRecommendationCreateData();
214
- this.activePredictiveAlgorithms = e, this.languages = r;
215
- const [n] = t, o = n.value.includes(".") ? n.value.split(".")[1] : n.value;
216
- if (this.currentRecommendationId !== null && this.blockStates[this.currentRecommendationId]) {
217
- const i = this.blockStates[this.currentRecommendationId];
218
- i.recommendationConfigs.currencySettings.name = n.text, i.recommendationConfigs.currencySettings.value = o, i.filterStatus = !!i.recommendationConfigs.filters.length;
219
- }
220
- this.currencyList = t;
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;
221
185
  },
222
186
  async fetchRecommendationFilters() {
223
- const e = await l.fetchRecommendationFilters();
187
+ const e = await a.fetchRecommendationFilters();
224
188
  this.filterList = e;
225
189
  },
226
- // ====================================================================
227
- // Per-Block Filter Actions
228
- // ====================================================================
229
190
  addFilterGroup(e) {
230
- this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId] || this.blockStates[this.currentRecommendationId].recommendationConfigs.filters.push({
191
+ this.recommendationConfigs.filters.push({
231
192
  type: "standardFilter",
232
193
  attribute: "",
233
194
  operatorReplace: "",
@@ -241,64 +202,66 @@ const k = () => ({
241
202
  });
242
203
  },
243
204
  updateFilter(e) {
244
- if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
245
- return;
246
- const r = this.blockStates[this.currentRecommendationId], t = r.recommendationConfigs.filters.findIndex((n) => n.filterNumber === e.filterNumber && n.filterGroup === e.filterGroup);
205
+ const t = this.recommendationConfigs.filters.findIndex((r) => r.filterNumber === e.filterNumber && r.filterGroup === e.filterGroup);
247
206
  if (t !== -1) {
248
- const n = [...r.recommendationConfigs.filters];
249
- n[t] = e, e.value.length && e.operator && e.attribute && e.innerGroupOperator && e.outerGroupOperator ? n[t].isValid = !0 : n[t].isValid = !1, r.recommendationConfigs.filters = n;
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
+ });
250
213
  }
251
214
  },
252
215
  deleteFilter(e) {
253
- if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
254
- return;
255
- const r = this.blockStates[this.currentRecommendationId], t = [...r.recommendationConfigs.filters].findIndex((n) => n.filterNumber === e.filterNumber && n.filterGroup === e.filterGroup);
216
+ const t = [...this.recommendationConfigs.filters].findIndex((r) => r.filterNumber === e.filterNumber && r.filterGroup === e.filterGroup);
256
217
  if (t !== -1) {
257
- const n = [...r.recommendationConfigs.filters];
258
- n.splice(t, 1), r.recommendationConfigs.filters = n;
218
+ const r = [...this.recommendationConfigs.filters];
219
+ r.splice(t, 1), this.$patch({
220
+ recommendationConfigs: {
221
+ filters: r
222
+ }
223
+ });
259
224
  }
260
225
  },
261
226
  addFilter(e) {
262
- if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
263
- return;
264
- const r = this.blockStates[this.currentRecommendationId], t = [...r.recommendationConfigs.filters], o = t.filter(
265
- (c) => c.filterGroup === e.filterGroup
266
- ).length + 1, i = t.findLastIndex((c) => c.filterGroup === e.filterGroup);
267
- i !== -1 ? t.splice(i + 1, 0, {
227
+ const t = [...this.recommendationConfigs.filters], r = t.findLastIndex((i) => i.filterGroup === e.filterGroup);
228
+ r !== -1 ? t.splice(r + 1, 0, {
268
229
  ...e,
269
- filterNumber: o
230
+ filterNumber: r + 2
270
231
  }) : t.push({
271
232
  ...e,
272
- filterNumber: o
273
- }), r.recommendationConfigs.filters = t;
233
+ filterNumber: 1
234
+ }), this.$patch({
235
+ recommendationConfigs: {
236
+ filters: t
237
+ }
238
+ });
274
239
  },
275
240
  generateFilterQuery() {
276
- return d(this.recommendationConfigs.filters);
241
+ return m(this.recommendationConfigs.filters);
277
242
  },
278
- // ====================================================================
279
- // Per-Block Product Fetching
280
- // ====================================================================
281
243
  async fetchRecommendationProducts() {
282
- var m;
283
- if (this.currentRecommendationId === null || !this.blockStates[this.currentRecommendationId])
284
- return;
285
- const e = this.currentRecommendationId, r = this.blockStates[e], { recommendationConfigs: t } = r, n = t.filters.filter((a) => a.isValid), o = d(n), i = ((m = u.find((a) => a.key === t.strategy)) == null ? void 0 : m.path) || "", c = p(), s = {
286
- locale: t.language,
287
- currency: t.currencySettings.value,
288
- partnerName: c.partnerName,
289
- size: t.size,
290
- details: !0,
291
- campaignId: c.variationId
292
- };
293
- t.strategy === "manualMerchandising" ? s.productId = t.productIds.join(",") : t.strategy === "similarViewed" && (s.productId = "{itemId}"), o && (s.filter = o), t.shuffleProducts && (s.shuffle = !0);
294
- const h = await l.fetchRecommendationProducts(
295
- i,
296
- s
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
257
+ }
297
258
  );
298
- this.blockStates[e] && (this.blockStates[e].recommendationProducts = h);
259
+ this.$patch({
260
+ recommendationProducts: i
261
+ });
299
262
  }
300
263
  }
301
264
  });
302
265
  export {
303
- D as useRecommendationExtensionStore
266
+ y as useRecommendationExtensionStore
304
267
  };
@@ -0,0 +1,181 @@
1
+ import { BlockType as e, BlockAttr as o } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { RecommendationBlockId as s, ATTR_PRODUCT_BUTTON as r, ATTR_PRODUCT_OMNIBUS_DISCOUNT as c, ATTR_PRODUCT_OMNIBUS_PRICE as p, ATTR_PRODUCT_OLD_PRICE as i, ATTR_PRODUCT_PRICE as d, ATTR_PRODUCT_NAME as T, ATTR_PRODUCT_IMAGE as b } from "../constants.js";
3
+ import { generateTemplate as _, prepareProductRows as O, spacer as u, DEFAULTS as f, getDefaultProducts as C } from "./templateUtils.js";
4
+ import { DEFAULT_CARD_COMPOSITION as I, DEFAULT_CARD_VISIBILITY as h } from "./templateUtils.js";
5
+ const g = `
6
+ <td align="left" class="ins-recommendation-v3-block-v2 esd-block-recommendation-v3-block es-p20">
7
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
8
+ <tr>
9
+ <td align="center">
10
+ <table
11
+ class="container"
12
+ width="100%"
13
+ cellpadding="0"
14
+ cellspacing="0"
15
+ border="0">
16
+ <tbody>
17
+ <tr>
18
+ <td>
19
+ <table
20
+ width="100%"
21
+ cellpadding="0"
22
+ cellspacing="0"
23
+ border="0">
24
+ <tbody>
25
+ <${e.BLOCK_TEXT}
26
+ class="es-p10t es-p10b es-p20l es-p20r"
27
+ align="center">
28
+ <p path="1" style="font-size: 28px; color: #333333;">
29
+ <strong path="1,0">{-{-TITLE-}-}</strong>
30
+ </p>
31
+ </${e.BLOCK_TEXT}>
32
+ </tbody>
33
+ </table>
34
+ </td>
35
+ </tr>
36
+ ${u}
37
+ <tr>
38
+ <td>
39
+ <table
40
+ class="ins-recommendation-product-container"
41
+ width="100%"
42
+ cellpadding="0"
43
+ cellspacing="0"
44
+ border="0"
45
+ >
46
+ {-{-PRODUCT_ROWS-}-}
47
+ </table>
48
+ </td>
49
+ </tr>
50
+ </tbody>
51
+ </table>
52
+ </td>
53
+ </tr>
54
+ </table>
55
+ </td>
56
+ `, n = {
57
+ [b]: (t) => `
58
+ <${e.BLOCK_IMAGE}
59
+ ${o.BLOCK_IMAGE.src}="${t.image_url}"
60
+ ${o.BLOCK_IMAGE.alt}="${t.name}"
61
+ ${o.BLOCK_IMAGE.href}="#"
62
+ class="product-image"
63
+ align="center"
64
+ style="max-width: 100%; height: auto; margin: 0 auto;"
65
+ esd-extension-block-id="${s.IMAGE}">
66
+ </${e.BLOCK_IMAGE}>
67
+ `,
68
+ [T]: (t) => `
69
+ <${e.BLOCK_TEXT}
70
+ class="product-name es-p10t es-p10b es-p15l es-p15r"
71
+ align="center"
72
+ esd-extension-block-id="${s.NAME}">
73
+ <p path="1" contenteditable="false" style="font-size: 16px; color: #333333;">
74
+ <strong path="1,0">${t.name}</strong>
75
+ </p>
76
+ </${e.BLOCK_TEXT}>
77
+ `,
78
+ [d]: () => `
79
+ <${e.BLOCK_TEXT}
80
+ class="product-price es-p15l es-p15r"
81
+ align="center"
82
+ esd-extension-block-id="${s.PRICE}">
83
+ <p path="1" contenteditable="false" style="font-size: 16px; color: #333333;">
84
+ <strong path="1,0">18,00 TRY</strong>
85
+ </p>
86
+ </${e.BLOCK_TEXT}>
87
+ `,
88
+ [i]: () => `
89
+ <${e.BLOCK_TEXT}
90
+ class="product-old-price es-p15l es-p15r"
91
+ align="center"
92
+ esd-extension-block-id="${s.OLD_PRICE}">
93
+ <p path="1" contenteditable="false" style="font-size: 14px; color: #999999;">
94
+ <s path="1,0">20,00 TRY</s>
95
+ </p>
96
+ </${e.BLOCK_TEXT}>
97
+ `,
98
+ [p]: () => `
99
+ <${e.BLOCK_TEXT}
100
+ class="product-omnibus-price es-p15l es-p15r"
101
+ align="center"
102
+ data-text-before="Lowest 30-day price: "
103
+ data-text-after=""
104
+ esd-extension-block-id="${s.OMNIBUS_PRICE}">
105
+ <p path="1" contenteditable="false" style="font-size: 12px; color: #666666;">
106
+ <span class="omnibus-text-before">Lowest 30-day price: </span>
107
+ <span class="omnibus-price-value">17,00 TRY</span>
108
+ <span class="omnibus-text-after"></span>
109
+ </p>
110
+ </${e.BLOCK_TEXT}>
111
+ `,
112
+ [c]: () => `
113
+ <${e.BLOCK_TEXT}
114
+ class="product-omnibus-discount es-p15l es-p15r"
115
+ align="center"
116
+ data-text-before=""
117
+ data-text-after=""
118
+ esd-extension-block-id="${s.OMNIBUS_DISCOUNT}">
119
+ <p path="1" contenteditable="false" style="font-size: 12px; color: #666666;">
120
+ <span class="omnibus-text-before"></span>
121
+ <span class="omnibus-discount-value">-6%</span>
122
+ <span class="omnibus-text-after"></span>
123
+ </p>
124
+ </${e.BLOCK_TEXT}>
125
+ `,
126
+ [r]: () => `
127
+ <${e.BLOCK_BUTTON}
128
+ ${o.BLOCK_BUTTON.href}="#"
129
+ class="product-button es-p10t es-p10b"
130
+ align="center"
131
+ esd-extension-block-id="${s.BUTTON}">
132
+ <span class="es-button-border">
133
+ <a
134
+ href="#"
135
+ class="es-button buy-button"
136
+ target="_blank"
137
+ style="
138
+ display: inline-block;
139
+ width: 90%;
140
+ max-width: 150px;
141
+ padding: 12px 20px;
142
+ background-color: #ffffff;
143
+ color: #333333;
144
+ text-decoration: none;
145
+ border: 2px solid #cccccc;
146
+ font-size: 16px;
147
+ box-sizing: border-box;
148
+ ">
149
+ Buy
150
+ </a>
151
+ </span>
152
+ </${e.BLOCK_BUTTON}>
153
+ `
154
+ };
155
+ function x() {
156
+ const t = C();
157
+ return _(
158
+ g,
159
+ t,
160
+ 3,
161
+ n,
162
+ f.TITLE
163
+ );
164
+ }
165
+ function E(t, a, l) {
166
+ return O(
167
+ t,
168
+ a,
169
+ n,
170
+ l
171
+ );
172
+ }
173
+ export {
174
+ f as DEFAULTS,
175
+ I as DEFAULT_CARD_COMPOSITION,
176
+ h as DEFAULT_CARD_VISIBILITY,
177
+ g as default,
178
+ C as getDefaultProducts,
179
+ x as getDefaultTemplate,
180
+ E as prepareProductRows
181
+ };