@useinsider/guido 1.0.3-beta.cc03cd5 → 1.0.3-beta.cc614d6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +141 -3
- package/dist/components/Guido.vue.js +11 -9
- package/dist/components/Guido.vue2.js +70 -66
- package/dist/components/organisms/extensions/recommendation/FilterItem.vue.js +28 -0
- package/dist/components/organisms/extensions/recommendation/FilterItem.vue2.js +38 -0
- package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue.js +17 -0
- package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +37 -0
- package/dist/components/organisms/extensions/recommendation/Filters.vue.js +20 -0
- package/dist/components/organisms/extensions/recommendation/Filters.vue2.js +44 -0
- package/dist/components/organisms/extensions/recommendation/LogicAdapter.vue.js +17 -0
- package/dist/components/organisms/extensions/recommendation/LogicAdapter.vue2.js +27 -0
- package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
- package/dist/components/organisms/header/LeftSlot.vue2.js +16 -15
- package/dist/components/organisms/header/RightSlot.vue.js +11 -11
- package/dist/components/organisms/onboarding/NewVersionPopup.vue.js +9 -9
- package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +30 -17
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -10
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +19 -18
- package/dist/composables/useBlocksConfig.js +49 -0
- package/dist/composables/useStripo.js +39 -48
- package/dist/config/migrator/index.js +7 -6
- package/dist/config/migrator/recommendationMigrator.js +293 -0
- package/dist/enums/date.js +6 -0
- package/dist/enums/defaults.js +15 -8
- package/dist/enums/extensions/recommendationBlock.js +80 -0
- package/dist/enums/onboarding.js +2 -1
- package/dist/extensions/Blocks/Checkbox/extension.js +2 -2
- package/dist/extensions/Blocks/CouponBlock/extension.js +2 -2
- package/dist/extensions/Blocks/RadioButton/template.js +6 -6
- package/dist/extensions/Blocks/Recommendation/block.js +30 -0
- package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +103 -0
- package/dist/extensions/Blocks/Recommendation/constants.js +5 -0
- package/dist/extensions/Blocks/Recommendation/control.js +306 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/align.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/border.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/color.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/text.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/image/size.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/align.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/background.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/color.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/size.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/style.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/align.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/background.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/color.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/size.js +13 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/style.js +13 -0
- package/dist/extensions/Blocks/Recommendation/extension.js +45 -0
- package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +51 -0
- package/dist/extensions/Blocks/Recommendation/recommendation.css.js +19 -0
- package/dist/extensions/Blocks/Recommendation/settingsPanel.js +117 -0
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +266 -0
- package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +160 -0
- package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +152 -0
- package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +180 -0
- package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +28 -0
- package/dist/extensions/Blocks/common-control.js +184 -0
- package/dist/extensions/DynamicContent/dynamic-content-modal.js +25 -19
- package/dist/extensions/DynamicContent/dynamic-content.js +128 -33
- package/dist/guido.css +1 -1
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +311 -93
- package/dist/package.json.js +1 -1
- package/dist/services/recommendationApi.js +43 -0
- package/dist/services/stripoApi.js +1 -1
- package/dist/src/@types/generic.d.ts +43 -4
- package/dist/src/components/Guido.vue.d.ts +3 -2
- package/dist/src/components/organisms/extensions/recommendation/FilterItem.vue.d.ts +19 -0
- package/dist/src/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue.d.ts +2 -0
- package/dist/src/components/organisms/extensions/recommendation/Filters.vue.d.ts +2 -0
- package/dist/src/components/organisms/extensions/recommendation/LogicAdapter.vue.d.ts +16 -0
- package/dist/src/components/organisms/onboarding/NewVersionPopup.vue.d.ts +3 -1
- package/dist/src/components/organisms/onboarding/OnboardingWrapper.vue.d.ts +3 -1
- package/dist/src/components/wrappers/WpModal.vue.d.ts +1 -1
- package/dist/src/composables/useBlocksConfig.d.ts +11 -0
- package/dist/src/config/migrator/recommendationMigrator.d.ts +1 -0
- package/dist/src/enums/date.d.ts +4 -0
- package/dist/src/enums/extensions/recommendationBlock.d.ts +16 -0
- package/dist/src/enums/onboarding.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +11 -0
- package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +28 -0
- package/dist/src/extensions/Blocks/Recommendation/constants.d.ts +51 -0
- package/dist/src/extensions/Blocks/Recommendation/control.d.ts +35 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +5 -0
- package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/iconsRegistry.d.ts +4 -0
- package/dist/src/extensions/Blocks/Recommendation/settingsPanel.d.ts +4 -0
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +555 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/migrationTemplate.d.ts +16 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +44 -0
- package/dist/src/extensions/Blocks/Recommendation/utils/filterUtil.d.ts +7 -0
- package/dist/src/extensions/Blocks/common-control.d.ts +87 -0
- package/dist/src/extensions/DynamicContent/dynamic-content-modal.d.ts +9 -2
- package/dist/src/extensions/DynamicContent/dynamic-content.d.ts +52 -2
- package/dist/src/mock/api/recommendation.d.ts +2 -0
- package/dist/src/services/recommendationApi.d.ts +6 -0
- package/dist/src/stores/config.d.ts +8 -1
- package/dist/src/stores/dynamic-content.d.ts +2 -2
- package/dist/src/stores/editor.d.ts +21 -0
- package/dist/src/utils/dateUtil.d.ts +21 -0
- package/dist/src/utils/genericUtil.d.ts +2 -0
- package/dist/static/styles/components/narrow-panel.css.js +10 -0
- package/dist/static/styles/customEditorStyle.css.js +5 -0
- package/dist/stores/dynamic-content.js +1 -1
- package/dist/stores/editor.js +2 -1
- package/dist/utils/dateUtil.js +24 -3
- package/dist/utils/genericUtil.js +23 -11
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -52,6 +52,7 @@ npm install @useinsider/guido
|
|
|
52
52
|
ref="guidoEditor"
|
|
53
53
|
:template-id="templateId"
|
|
54
54
|
:user-id="userId"
|
|
55
|
+
:migration-date="migrationDate"
|
|
55
56
|
:guido-config="guidoConfig"
|
|
56
57
|
:html="initialHtml"
|
|
57
58
|
:css="initialCss"
|
|
@@ -74,16 +75,19 @@ export default {
|
|
|
74
75
|
return {
|
|
75
76
|
templateId: 'template-123',
|
|
76
77
|
userId: 'user-456',
|
|
78
|
+
migrationDate: 1699488000,
|
|
77
79
|
initialHtml: '<p>Initial HTML content</p>',
|
|
78
80
|
initialCss: 'p { color: #333; }',
|
|
79
81
|
guidoConfig: {
|
|
80
82
|
translationsPath: 'window.trans.en',
|
|
81
83
|
htmlCompilerRules: [],
|
|
82
84
|
ignoreDefaultHtmlCompilerRules: false,
|
|
85
|
+
backButtonLabel?: "Back to Design",
|
|
83
86
|
features: {
|
|
84
87
|
dynamicContent: true,
|
|
85
88
|
saveAsTemplate: true,
|
|
86
|
-
versionHistory: true
|
|
89
|
+
versionHistory: true,
|
|
90
|
+
testMessage: true
|
|
87
91
|
}
|
|
88
92
|
},
|
|
89
93
|
dynamicContentModalVisible: false
|
|
@@ -145,6 +149,7 @@ export default {
|
|
|
145
149
|
| `templateId` | `string` | ✅ | - | Unique identifier for the email template |
|
|
146
150
|
| `userId` | `string` | ✅ | - | Unique identifier for the user |
|
|
147
151
|
| `guidoConfig` | `GuidoConfig` | ✅ | - | Configuration object for the editor |
|
|
152
|
+
| `migrationDate` | `number` | ✅ | - | Stripo migration date in Unix timestamp (seconds). Retrieved from backend `/partner-settings` endpoint as `migrationDate`. Used for onboarding process |
|
|
148
153
|
| `partnerName` | `string` | ⚪ | From URL host | Partner identifier |
|
|
149
154
|
| `productType` | `string` | ⚪ | From URL path | Product type identifier |
|
|
150
155
|
| `username` | `string` | ⚪ | `'Guido User'` | Display name for the user |
|
|
@@ -161,6 +166,7 @@ export default {
|
|
|
161
166
|
| `save:complete` | `Omit<Template, 'forceRecreate'>` | Fired when template is successfully saved |
|
|
162
167
|
| `on-change` | void | It Fires once for managing leave modal etc. |
|
|
163
168
|
| `ready` | void | Fired when the editor is ready and template is loaded |
|
|
169
|
+
| `onboarding-finished` | void | Fired when the onboarding popup is dismissed or completed, allowing parent applications to track onboarding state |
|
|
164
170
|
|
|
165
171
|
### Guido Exposed Methods
|
|
166
172
|
```typescript
|
|
@@ -190,6 +196,11 @@ interface GuidoConfig {
|
|
|
190
196
|
dynamicContent: boolean;
|
|
191
197
|
saveAsTemplate: boolean;
|
|
192
198
|
versionHistory: boolean;
|
|
199
|
+
testMessage: boolean;
|
|
200
|
+
};
|
|
201
|
+
blocks?: {
|
|
202
|
+
excludeDefaults?: GuidoBlockType[];
|
|
203
|
+
includeCustoms?: GuidoCustomBlockType[];
|
|
193
204
|
};
|
|
194
205
|
}
|
|
195
206
|
```
|
|
@@ -204,6 +215,9 @@ interface GuidoConfig {
|
|
|
204
215
|
| `features.dynamicContent` | `boolean` | `true` | Enable dynamic content insertion feature |
|
|
205
216
|
| `features.saveAsTemplate` | `boolean` | `true` | Enable save as template feature |
|
|
206
217
|
| `features.versionHistory` | `boolean` | `true` | Enable version history feature |
|
|
218
|
+
| `blocks` | `BlocksConfig` | `{ excludeDefaults: [], includeCustoms: [] }` | Block configuration for excluding default blocks and including custom blocks. See [Blocks Configuration](#-blocks-configuration) section below |
|
|
219
|
+
| `blocks.excludeDefaults` | `GuidoBlockType[]` | `[]` | Array of default Stripo blocks to exclude from the editor |
|
|
220
|
+
| `blocks.includeCustoms` | `GuidoCustomBlockType[]` | `[]` | Array of custom blocks to include in the editor |
|
|
207
221
|
|
|
208
222
|
```typescript
|
|
209
223
|
interface DynamicContent {
|
|
@@ -220,6 +234,128 @@ interface DynamicContent {
|
|
|
220
234
|
| `text` | `string` | '' | Visible value of the dynamic content |
|
|
221
235
|
| `fallback?` | `string` | '' | Fallback value of the dynamic content. Optional |
|
|
222
236
|
|
|
237
|
+
## 🧱 Blocks Configuration
|
|
238
|
+
|
|
239
|
+
Guido allows you to customize which blocks are available in the editor. You can exclude default Stripo blocks and selectively include custom blocks to create tailored editing experiences for different product types.
|
|
240
|
+
|
|
241
|
+
### Block Types
|
|
242
|
+
|
|
243
|
+
#### Default Blocks (GuidoBlockType)
|
|
244
|
+
|
|
245
|
+
These are the standard Stripo email editor blocks that can be excluded:
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
type GuidoBlockType =
|
|
249
|
+
| 'amp-accordion' // AMP accordion component
|
|
250
|
+
| 'amp-carousel' // AMP image carousel
|
|
251
|
+
| 'amp-form-controls' // AMP form elements
|
|
252
|
+
| 'banner-block' // Banner/hero section
|
|
253
|
+
| 'button-block' // Call-to-action buttons
|
|
254
|
+
| 'html-block' // Custom HTML
|
|
255
|
+
| 'image-block' // Image elements
|
|
256
|
+
| 'menu-block' // Navigation menu
|
|
257
|
+
| 'social-block' // Social media links
|
|
258
|
+
| 'spacer-block' // Vertical spacing
|
|
259
|
+
| 'text-block' // Text content
|
|
260
|
+
| 'timer-block' // Countdown timer
|
|
261
|
+
| 'video-block' // Video embeds
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
#### Custom Blocks (GuidoCustomBlockType)
|
|
265
|
+
|
|
266
|
+
These are custom blocks that can be selectively included:
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
type GuidoCustomBlockType =
|
|
270
|
+
| 'dynamic-content' // Dynamic content merge tags
|
|
271
|
+
| 'checkbox-block' // Checkbox form input
|
|
272
|
+
| 'radio-button-block' // Radio button form input
|
|
273
|
+
| 'recommendation-block' // Product recommendations
|
|
274
|
+
| 'unsubscribe-block' // Unsubscribe link
|
|
275
|
+
| 'coupon-block' // Coupon/promo code
|
|
276
|
+
| 'items-block' // Cart items display
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Configuration Examples
|
|
280
|
+
|
|
281
|
+
#### Example 1: Exclude Specific Default Blocks
|
|
282
|
+
|
|
283
|
+
Disable button, image, and video blocks while keeping all custom blocks:
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
const guidoConfig = {
|
|
287
|
+
translationsPath: 'window.trans.en',
|
|
288
|
+
features: {
|
|
289
|
+
dynamicContent: true,
|
|
290
|
+
saveAsTemplate: true,
|
|
291
|
+
versionHistory: true,
|
|
292
|
+
testMessage: true
|
|
293
|
+
},
|
|
294
|
+
blocks: {
|
|
295
|
+
excludeDefaults: ['button-block', 'image-block', 'video-block']
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Result:**
|
|
301
|
+
- Button, Image, Video blocks disabled
|
|
302
|
+
- All other default blocks enabled
|
|
303
|
+
- All custom blocks are disabled.
|
|
304
|
+
|
|
305
|
+
#### Example 2: Include Only Specific Custom Blocks
|
|
306
|
+
|
|
307
|
+
Enable only coupon and recommendation blocks:
|
|
308
|
+
|
|
309
|
+
```typescript
|
|
310
|
+
const guidoConfig = {
|
|
311
|
+
translationsPath: 'window.trans.en',
|
|
312
|
+
features: {
|
|
313
|
+
dynamicContent: true,
|
|
314
|
+
saveAsTemplate: true,
|
|
315
|
+
versionHistory: true,
|
|
316
|
+
testMessage: true
|
|
317
|
+
},
|
|
318
|
+
blocks: {
|
|
319
|
+
includeCustoms: ['coupon-block', 'recommendation-block']
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Result:**
|
|
325
|
+
- All default blocks enabled
|
|
326
|
+
- Only Coupon and Recommendation extensions enabled.
|
|
327
|
+
- Other custom blocks are disabled
|
|
328
|
+
|
|
329
|
+
### Default Behavior
|
|
330
|
+
|
|
331
|
+
When `blocks` is not provided or is `undefined`:
|
|
332
|
+
|
|
333
|
+
```typescript
|
|
334
|
+
const guidoConfig = {
|
|
335
|
+
translationsPath: 'window.trans.en',
|
|
336
|
+
features: {
|
|
337
|
+
dynamicContent: true,
|
|
338
|
+
saveAsTemplate: true,
|
|
339
|
+
versionHistory: true,
|
|
340
|
+
testMessage: true
|
|
341
|
+
},
|
|
342
|
+
// No blocks config
|
|
343
|
+
};
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**Result:**
|
|
347
|
+
- All 13 default Stripo blocks enabled
|
|
348
|
+
- All custom blocks are disabled.
|
|
349
|
+
|
|
350
|
+
### Block Configuration Interface
|
|
351
|
+
|
|
352
|
+
```typescript
|
|
353
|
+
interface BlocksConfig {
|
|
354
|
+
excludeDefaults?: GuidoBlockType[];
|
|
355
|
+
includeCustoms?: GuidoCustomBlockType[];
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
223
359
|
### TypeScript Types
|
|
224
360
|
|
|
225
361
|
The library exports the following TypeScript types:
|
|
@@ -314,7 +450,8 @@ const guidoConfig = {
|
|
|
314
450
|
features: {
|
|
315
451
|
dynamicContent: true,
|
|
316
452
|
saveAsTemplate: true,
|
|
317
|
-
versionHistory: false // Disable version history
|
|
453
|
+
versionHistory: false, // Disable version history
|
|
454
|
+
testMessage: true
|
|
318
455
|
},
|
|
319
456
|
htmlCompilerRules: [
|
|
320
457
|
{
|
|
@@ -347,7 +484,8 @@ const guidoConfig = {
|
|
|
347
484
|
features: {
|
|
348
485
|
dynamicContent: true,
|
|
349
486
|
saveAsTemplate: true,
|
|
350
|
-
versionHistory: true
|
|
487
|
+
versionHistory: true,
|
|
488
|
+
testMessage: true
|
|
351
489
|
},
|
|
352
490
|
ignoreDefaultHtmlCompilerRules: true, // Skip all default rules
|
|
353
491
|
htmlCompilerRules: [
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import i from "./Guido.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import
|
|
4
|
-
var
|
|
3
|
+
import a from "../_virtual/_plugin-vue2_normalizer.js";
|
|
4
|
+
var t = function() {
|
|
5
5
|
var o = this, r = o._self._c, e = o._self._setupProxy;
|
|
6
|
-
return r("div", { staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : o._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? o._e() : r(e.OnboardingWrapper
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
return r("div", { staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : o._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? o._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
|
|
7
|
+
return e.emit("onboarding:finished");
|
|
8
|
+
} } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
|
|
9
|
+
}, n = [], s = /* @__PURE__ */ a(
|
|
10
|
+
i,
|
|
10
11
|
t,
|
|
12
|
+
n,
|
|
11
13
|
!1,
|
|
12
14
|
null,
|
|
13
|
-
"
|
|
15
|
+
"41915b53"
|
|
14
16
|
);
|
|
15
|
-
const v =
|
|
17
|
+
const v = s.exports;
|
|
16
18
|
export {
|
|
17
19
|
v as default
|
|
18
20
|
};
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { provideGuidoActions as
|
|
3
|
-
import { usePartner as
|
|
4
|
-
import { useStripo as
|
|
1
|
+
import { defineComponent as O, defineAsyncComponent as U, ref as z, computed as L, watch as B, onMounted as K, onUnmounted as j } from "vue";
|
|
2
|
+
import { provideGuidoActions as q } from "../composables/useGuidoActions.js";
|
|
3
|
+
import { usePartner as J } from "../composables/usePartner.js";
|
|
4
|
+
import { useStripo as Q } from "../composables/useStripo.js";
|
|
5
5
|
import { migrate as W } from "../config/migrator/index.js";
|
|
6
|
-
import { DefaultUsername as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import
|
|
19
|
-
|
|
6
|
+
import { DefaultUsername as V, DefaultMessageType as X, DefaultGuidoConfig as Y } from "../enums/defaults.js";
|
|
7
|
+
import Z from "./organisms/base/Toaster.vue.js";
|
|
8
|
+
import $ from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
|
|
9
|
+
import ee from "./organisms/header/HeaderWrapper.vue.js";
|
|
10
|
+
import oe from "./organisms/LoadingWrapper.vue.js";
|
|
11
|
+
import te from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
|
|
12
|
+
import ne from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
|
|
13
|
+
import { useStripoApi as re } from "../services/stripoApi.js";
|
|
14
|
+
import { useConfigStore as ie } from "../stores/config.js";
|
|
15
|
+
import { useDynamicContentStore as ae } from "../stores/dynamic-content.js";
|
|
16
|
+
import { useEditorStore as se } from "../stores/editor.js";
|
|
17
|
+
import { usePreviewStore as ce } from "../stores/preview.js";
|
|
18
|
+
import { useUnsubscribeStore as de } from "../stores/unsubscribe.js";
|
|
19
|
+
import me from "../node_modules/lodash-es/merge.js";
|
|
20
|
+
const Le = /* @__PURE__ */ O({
|
|
20
21
|
__name: "Guido",
|
|
21
22
|
props: {
|
|
22
23
|
templateId: null,
|
|
@@ -30,47 +31,47 @@ const Ee = /* @__PURE__ */ x({
|
|
|
30
31
|
guidoConfig: null,
|
|
31
32
|
templateConfig: null
|
|
32
33
|
},
|
|
33
|
-
emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready"],
|
|
34
|
-
setup(_, { expose:
|
|
35
|
-
const
|
|
34
|
+
emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished"],
|
|
35
|
+
setup(_, { expose: k, emit: t }) {
|
|
36
|
+
const l = _, A = U(
|
|
36
37
|
() => import("./organisms/email-preview/PreviewContainer.vue.js")
|
|
37
|
-
),
|
|
38
|
+
), N = U(
|
|
38
39
|
() => import("./organisms/onboarding/OnboardingWrapper.vue.js")
|
|
39
|
-
),
|
|
40
|
+
), p = z(), i = ae(), g = de(), f = ie(), a = se(), F = ce(), n = L(() => a.hasChanges), { getPartnerName: y, getProductType: v, isTestPartner: H } = J(), b = () => {
|
|
40
41
|
var e;
|
|
41
|
-
return (e =
|
|
42
|
+
return (e = p.value) == null ? void 0 : e.handleSave(!0);
|
|
42
43
|
}, {
|
|
43
|
-
templateId:
|
|
44
|
-
userId:
|
|
45
|
-
guidoConfig:
|
|
44
|
+
templateId: s,
|
|
45
|
+
userId: C,
|
|
46
|
+
guidoConfig: h,
|
|
46
47
|
templateConfig: o,
|
|
47
48
|
html: r = "",
|
|
48
|
-
css:
|
|
49
|
-
partnerName:
|
|
50
|
-
productType:
|
|
51
|
-
messageType:
|
|
52
|
-
username:
|
|
53
|
-
} =
|
|
54
|
-
window.GuidoConfig =
|
|
55
|
-
partnerName:
|
|
56
|
-
productType:
|
|
57
|
-
messageType:
|
|
58
|
-
},
|
|
59
|
-
const { initPlugin:
|
|
60
|
-
emailId:
|
|
61
|
-
userId:
|
|
62
|
-
username:
|
|
63
|
-
partnerName:
|
|
64
|
-
productType:
|
|
65
|
-
preselectedDynamicContentList:
|
|
49
|
+
css: S = "",
|
|
50
|
+
partnerName: c = y(),
|
|
51
|
+
productType: d = v(),
|
|
52
|
+
messageType: w = X,
|
|
53
|
+
username: D = V
|
|
54
|
+
} = l, m = (o == null ? void 0 : o.preselectedDynamicContentList) || [];
|
|
55
|
+
a.templateId = s, window.GuidoConfig = me(Y, h), window.GuidoConfig.partner = {
|
|
56
|
+
partnerName: c,
|
|
57
|
+
productType: d,
|
|
58
|
+
messageType: w
|
|
59
|
+
}, f.templateConfig = o;
|
|
60
|
+
const { initPlugin: E } = Q({
|
|
61
|
+
emailId: s,
|
|
62
|
+
userId: C,
|
|
63
|
+
username: D,
|
|
64
|
+
partnerName: c,
|
|
65
|
+
productType: d,
|
|
66
|
+
preselectedDynamicContentList: m,
|
|
66
67
|
onReady: () => {
|
|
67
68
|
console.debug("guido:ready"), t("ready");
|
|
68
69
|
}
|
|
69
|
-
}), { getDefaultTemplate: T } =
|
|
70
|
+
}), { getDefaultTemplate: T } = re(), R = L(() => {
|
|
70
71
|
var e;
|
|
71
72
|
return !((e = window.GuidoConfig) != null && e.useHeader);
|
|
72
73
|
});
|
|
73
|
-
|
|
74
|
+
q({
|
|
74
75
|
onBack: () => {
|
|
75
76
|
console.debug("guido:back"), t("back");
|
|
76
77
|
},
|
|
@@ -81,47 +82,50 @@ const Ee = /* @__PURE__ */ x({
|
|
|
81
82
|
console.debug("guido:save:complete", e), t("save:complete", e);
|
|
82
83
|
}
|
|
83
84
|
});
|
|
84
|
-
const
|
|
85
|
-
console.debug("dynamic-content:close", e),
|
|
86
|
-
},
|
|
85
|
+
const P = (e) => {
|
|
86
|
+
console.debug("dynamic-content:close", e), i.setSelectedDynamicContent(e), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: e }));
|
|
87
|
+
}, G = () => {
|
|
87
88
|
console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
|
|
88
89
|
};
|
|
89
|
-
|
|
90
|
+
B(() => n.value, () => {
|
|
90
91
|
t("on-change", n.value);
|
|
91
|
-
})
|
|
92
|
+
});
|
|
93
|
+
const u = (e) => {
|
|
94
|
+
const I = e, { attribute: x, position: M } = I.detail;
|
|
95
|
+
console.debug("dynamic-content:open", I.detail), t("dynamic-content:open", x, M);
|
|
96
|
+
};
|
|
97
|
+
return K(async () => {
|
|
92
98
|
console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow");
|
|
93
99
|
try {
|
|
94
|
-
|
|
100
|
+
g.selectedUnsubscribePages = (o == null ? void 0 : o.selectedUnsubscribePages) || [];
|
|
95
101
|
let e = {
|
|
96
102
|
html: r && await W(r),
|
|
97
|
-
css:
|
|
103
|
+
css: S,
|
|
98
104
|
forceRecreate: !0
|
|
99
105
|
// TODO: It should be false for old templates. We will communicate with Stripo
|
|
100
106
|
};
|
|
101
|
-
e.html || (e = await T(), e.html = await W(e.html)), await
|
|
107
|
+
e.html || (e = await T(), e.html = await W(e.html)), await E(e), i.selectedDynamicContentList = m;
|
|
102
108
|
} catch (e) {
|
|
103
109
|
console.error("Failed to initialize Stripo editor:", e);
|
|
104
110
|
}
|
|
105
|
-
document.addEventListener("dynamic-content:open",
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
109
|
-
}), B(() => {
|
|
111
|
+
document.addEventListener("dynamic-content:open", u);
|
|
112
|
+
}), j(() => {
|
|
113
|
+
document.removeEventListener("dynamic-content:open", u);
|
|
110
114
|
try {
|
|
111
115
|
window.UIEditor.removeEditor();
|
|
112
116
|
} catch {
|
|
113
117
|
console.debug("Failed to remove Stripo editor: No editor found");
|
|
114
118
|
}
|
|
115
|
-
}),
|
|
119
|
+
}), k({
|
|
116
120
|
dynamicContent: {
|
|
117
|
-
insert:
|
|
118
|
-
close:
|
|
121
|
+
insert: P,
|
|
122
|
+
close: G
|
|
119
123
|
},
|
|
120
124
|
hasChanges: n,
|
|
121
|
-
saveSilent:
|
|
122
|
-
}), { __sfc: !0, PreviewContainer:
|
|
125
|
+
saveSilent: b
|
|
126
|
+
}), { __sfc: !0, PreviewContainer: A, OnboardingWrapper: N, headerWrapperRef: p, dynamicContentStore: i, unsubscribeStore: g, props: l, configStore: f, editorStore: a, previewStore: F, hasChanges: n, getPartnerName: y, getProductType: v, isTestPartner: H, saveSilent: b, templateId: s, userId: C, guidoConfig: h, templateConfig: o, html: r, css: S, partnerName: c, productType: d, messageType: w, username: D, preselectedDynamicContentList: m, emit: t, initPlugin: E, getDefaultTemplate: T, noHeader: R, insertDynamicContent: P, closeDynamicContent: G, handleDynamicContentOpen: u, Toaster: Z, FilterSelectionDrawer: $, HeaderWrapper: ee, LoadingWrapper: oe, SaveAsTemplateDrawer: te, UnsubscribeWrapper: ne };
|
|
123
127
|
}
|
|
124
128
|
});
|
|
125
129
|
export {
|
|
126
|
-
|
|
130
|
+
Le as default
|
|
127
131
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import r from "./FilterItem.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import i from "../../../../_virtual/_plugin-vue2_normalizer.js";
|
|
4
|
+
var l = function() {
|
|
5
|
+
var a = this, e = a._self._c, t = a._self._setupProxy;
|
|
6
|
+
return e("div", { staticClass: "d-f f-d-c w-1 gap-16" }, [e("div", { staticClass: "d-f a-i-c j-c-s-b pt-4", class: { "bor-t-s-s bor-t-w-1 bor-t-c-50": a.index === 0 } }, [e("p", [a._v(" " + a._s(t.trans("newsletter.filter")) + " " + a._s(a.index + 1) + " ")]), e(t.InButtonV2, { attrs: { id: "guido__delete-filter-group-button", "left-icon": "line-delete", styling: "text", type: "danger", "label-text-status": !1 }, on: { click: function(s) {
|
|
7
|
+
return t.emit("delete-filter", t.props.filter);
|
|
8
|
+
} } })], 1), e("div", { staticClass: "w-1 d-f a-i-s j-c-s-b gap-16" }, [e(t.InSelect, { staticClass: "w-2", attrs: { "disabled-status": "", "search-status": "", "button-status": !1, "label-text": t.trans("action-builder.filter-type"), options: t.filterTypeOptions, value: [t.filterTypeOptions[0]] } }), e(t.InSelect, { staticClass: "w-2", attrs: { id: "filter-item-input--attribute-type", "search-status": "", "static-position": "bottom right", "button-status": !1, "label-text": t.trans("condition.attribute"), options: t.store.getFilterList, value: [t.selectedAttributeType] }, on: { select: function(s) {
|
|
9
|
+
return t.updateFilter({ text: "attribute", value: s.value });
|
|
10
|
+
} } })], 1), e("div", { staticClass: "w-1 d-f a-i-s j-c-s-b gap-16" }, [e(t.InSelect, { staticClass: "w-2", attrs: { "button-status": !1, "label-text": t.trans("condition.operator"), options: t.getOperatorOptions(t.selectedAttributeType.type), value: [t.selectedOperatorType] }, on: { select: function(s) {
|
|
11
|
+
return t.updateFilter({ text: "operator", value: s.value });
|
|
12
|
+
} } }), e(t.InBasicTextInput, { staticClass: "w-2", attrs: { id: "filter-item-input--value", name: "imageUrl", type: "text", "character-counter-status": !1, "label-text": t.trans("condition.value"), "max-character-length": 25, "placeholder-text": t.trans("condition.enter-value-placeholder"), "tooltip-status": !1, value: decodeURIComponent(t.props.filter.value) }, on: { input: function(s) {
|
|
13
|
+
t.updateFilter({ text: "value", value: encodeURIComponent(s) });
|
|
14
|
+
} } })], 1), t.props.hasLogicAdapter ? e("div", { staticClass: "w-1 d-f a-i-c j-c-c p-r bor-b-s-s bor-b-w-1 bor-b-c-50 mt-4" }, [e(t.LogicAdapter, { staticClass: "p-a", attrs: { logic: t.props.filter.innerGroupOperator }, on: { change: function(s) {
|
|
15
|
+
return t.updateFilter({ text: "innerGroupOperator", value: s });
|
|
16
|
+
} } })], 1) : a._e()]);
|
|
17
|
+
}, n = [], o = /* @__PURE__ */ i(
|
|
18
|
+
r,
|
|
19
|
+
l,
|
|
20
|
+
n,
|
|
21
|
+
!1,
|
|
22
|
+
null,
|
|
23
|
+
"6562e38c"
|
|
24
|
+
);
|
|
25
|
+
const f = o.exports;
|
|
26
|
+
export {
|
|
27
|
+
f as default
|
|
28
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineComponent as f, computed as i } from "vue";
|
|
2
|
+
import { useTranslations as v } from "../../../../composables/useTranslations.js";
|
|
3
|
+
import { getOperatorOptions as a } from "../../../../enums/extensions/recommendationBlock.js";
|
|
4
|
+
import { useRecommendationExtensionStore as x } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
5
|
+
import { InButtonV2 as y, InSelect as F, InBasicTextInput as T } from "@useinsider/design-system-vue";
|
|
6
|
+
import _ from "./LogicAdapter.vue.js";
|
|
7
|
+
import { useDebounceFn as b } from "../../../../node_modules/@vueuse/shared/index.js";
|
|
8
|
+
const h = /* @__PURE__ */ f({
|
|
9
|
+
__name: "FilterItem",
|
|
10
|
+
props: {
|
|
11
|
+
filter: null,
|
|
12
|
+
index: null,
|
|
13
|
+
hasLogicAdapter: { type: Boolean }
|
|
14
|
+
},
|
|
15
|
+
emits: ["delete-filter"],
|
|
16
|
+
setup(p, { emit: u }) {
|
|
17
|
+
const e = p, n = v(), r = x(), m = [
|
|
18
|
+
{
|
|
19
|
+
text: n("email-editor.standard-filter"),
|
|
20
|
+
value: "standardFilter"
|
|
21
|
+
}
|
|
22
|
+
], s = i(() => e.filter.attribute || ""), l = i(() => r.getFilterList.find((t) => t.value === s.value) || { text: "", value: "", type: "" }), c = i(() => {
|
|
23
|
+
var t;
|
|
24
|
+
return a((t = l.value) == null ? void 0 : t.type).find((o) => o.value === e.filter.operator);
|
|
25
|
+
}), d = b((t) => {
|
|
26
|
+
console.debug("updateFilter: ", t);
|
|
27
|
+
const o = {
|
|
28
|
+
...e.filter,
|
|
29
|
+
[t.text]: t.value
|
|
30
|
+
};
|
|
31
|
+
r.updateFilter(o);
|
|
32
|
+
}, 500);
|
|
33
|
+
return { __sfc: !0, trans: n, store: r, props: e, filterTypeOptions: m, attributeType: s, selectedAttributeType: l, selectedOperatorType: c, emit: u, updateFilter: d, getOperatorOptions: a, InBasicTextInput: T, InSelect: F, InButtonV2: y, LogicAdapter: _ };
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
export {
|
|
37
|
+
h as default
|
|
38
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import o from "./FilterSelectionDrawer.vue2.js";
|
|
2
|
+
import n from "../../../../_virtual/_plugin-vue2_normalizer.js";
|
|
3
|
+
var l = function() {
|
|
4
|
+
var e = this, r = e._self._c, t = e._self._setupProxy;
|
|
5
|
+
return r(t.WpDrawer, { attrs: { id: "recommendation-filter-drawer", "title-text": "Filter Selection", "footer-button-group-options": t.footerButtonGroupOptions, status: t.store.filterSelectionDrawerStatus }, on: { cancelOrBackButtonEvent: t.closeModal, onCloseEvent: t.closeModal, primaryButtonEvent: t.applyFilter } }, [r(t.Filters)], 1);
|
|
6
|
+
}, s = [], a = /* @__PURE__ */ n(
|
|
7
|
+
o,
|
|
8
|
+
l,
|
|
9
|
+
s,
|
|
10
|
+
!1,
|
|
11
|
+
null,
|
|
12
|
+
null
|
|
13
|
+
);
|
|
14
|
+
const p = a.exports;
|
|
15
|
+
export {
|
|
16
|
+
p as default
|
|
17
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { defineComponent as n, ref as a, computed as l } from "vue";
|
|
2
|
+
import i from "../../../wrappers/WpDrawer.vue.js";
|
|
3
|
+
import { useTranslations as p } from "../../../../composables/useTranslations.js";
|
|
4
|
+
import { useRecommendationExtensionStore as c } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
5
|
+
import u from "./Filters.vue.js";
|
|
6
|
+
const b = /* @__PURE__ */ n({
|
|
7
|
+
__name: "FilterSelectionDrawer",
|
|
8
|
+
setup(m) {
|
|
9
|
+
const t = p(), o = c(), e = a(!1), s = l(() => ({
|
|
10
|
+
primaryButton: {
|
|
11
|
+
styling: "solid",
|
|
12
|
+
type: "primary",
|
|
13
|
+
labelText: t(
|
|
14
|
+
e.value ? "unsubscription-preference.selecting-type" : "products.select-and-continue"
|
|
15
|
+
),
|
|
16
|
+
loadingStatus: e.value,
|
|
17
|
+
disabledStatus: !1
|
|
18
|
+
},
|
|
19
|
+
cancelOrBackButton: {
|
|
20
|
+
styling: "ghost",
|
|
21
|
+
type: "secondary",
|
|
22
|
+
labelText: t("products.cancel"),
|
|
23
|
+
disabledStatus: e.value
|
|
24
|
+
}
|
|
25
|
+
})), r = () => {
|
|
26
|
+
o.filterSelectionDrawerStatus = !1;
|
|
27
|
+
};
|
|
28
|
+
return { __sfc: !0, trans: t, store: o, isApplying: e, footerButtonGroupOptions: s, closeModal: r, applyFilter: () => {
|
|
29
|
+
e.value = !0, setTimeout(() => {
|
|
30
|
+
console.debug("Filter applied!"), r(), o.generateFilterQuery();
|
|
31
|
+
}, 2e3);
|
|
32
|
+
}, WpDrawer: i, Filters: u };
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
export {
|
|
36
|
+
b as default
|
|
37
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import s from "./Filters.vue2.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import a from "../../../../_virtual/_plugin-vue2_normalizer.js";
|
|
4
|
+
var o = function() {
|
|
5
|
+
var i = this, e = i._self._c, t = i._self._setupProxy;
|
|
6
|
+
return e("div", { staticClass: "d-f f-d-c gap-16" }, [e("div", { staticClass: "d-f a-i-c j-c-s-b gap-16" }, [e(t.InSegments, { staticClass: "f-g-1 w-1", attrs: { id: "guido__filter-group-segments", "segment-list": t.filterGroupList, selected: t.selectedFilterGroup, "with-icon": !1 }, on: { click: t.changeFilterGroup } }), e(t.InButtonV2, { staticClass: "w-20-s f-g-1", attrs: { id: "guido__add-filter-group-button", "left-icon": "line-plus-netural", type: "secondary", "disabled-status": t.isMaxFilterGroupCount, "label-text": t.trans("smart-recommender.add-filter-group"), "tooltip-text": t.isMaxFilterGroupCount ? t.trans("email-editor.add-filter-tooltip") : "" }, on: { click: t.handleAddFilterGroup } })], 1), e("div", { staticClass: "d-f a-i-c j-c-s-b gap-16" }, [e("div", { staticClass: "d-f a-i-c" }, [t.selectedFilterGroup > 1 ? e(t.LogicAdapter, { staticClass: "mr-2" }) : i._e(), e("p", [i._v(" " + i._s(t.trans("email-editor.filter-group")) + " " + i._s(t.selectedFilterGroup) + " ")])], 1), t.hasRemoveFilterButton ? e(t.InButtonV2, { attrs: { id: "guido__delete-filter-group-button", "left-icon": "line-delete", styling: "text", type: "danger", "label-text-status": !1 }, on: { click: t.handleDeleteFilterGroup } }) : i._e()], 1), e("div", { staticClass: "d-f a-i-c j-c-s-b f-d-c" }, i._l(t.selectedFilterGroupFilters, function(l, r) {
|
|
7
|
+
return e(t.FilterItem, { key: r, attrs: { filter: l, "has-logic-adapter": t.hasLogicAdapter && r !== t.selectedFilterGroupFilters.length - 1, index: r }, on: { "delete-filter": t.handleDeleteFilter } });
|
|
8
|
+
}), 1), e("div", { staticClass: "d-f a-i-c j-c-c mt-3" }, [e(t.InButtonV2, { staticClass: "w-11-s", attrs: { id: "filter-group--add-filter-button", "left-icon": "line-plus-netural", type: "subtle-primary", "label-text": t.trans("smart-recommender.add-filter-condition") }, on: { click: t.handleAddFilter } })], 1)]);
|
|
9
|
+
}, d = [], n = /* @__PURE__ */ a(
|
|
10
|
+
s,
|
|
11
|
+
o,
|
|
12
|
+
d,
|
|
13
|
+
!1,
|
|
14
|
+
null,
|
|
15
|
+
"1ccb6d4a"
|
|
16
|
+
);
|
|
17
|
+
const _ = n.exports;
|
|
18
|
+
export {
|
|
19
|
+
_ as default
|
|
20
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { defineComponent as m, computed as o, ref as h } from "vue";
|
|
2
|
+
import { useTranslations as G } from "../../../../composables/useTranslations.js";
|
|
3
|
+
import { useRecommendationExtensionStore as g } from "../../../../extensions/Blocks/Recommendation/store/recommendation.js";
|
|
4
|
+
import { InButtonV2 as v, InSegments as f } from "@useinsider/design-system-vue";
|
|
5
|
+
import _ from "./FilterItem.vue.js";
|
|
6
|
+
import A from "./LogicAdapter.vue.js";
|
|
7
|
+
const E = /* @__PURE__ */ m({
|
|
8
|
+
__name: "Filters",
|
|
9
|
+
setup(R) {
|
|
10
|
+
const i = G(), l = g(), u = o(() => l.getFilterGroupCount), t = o(() => Array.from({ length: u.value }, (e, a) => ({
|
|
11
|
+
text: (a + 1).toString(),
|
|
12
|
+
value: a + 1
|
|
13
|
+
}))), r = h(1), s = (e) => {
|
|
14
|
+
r.value = e;
|
|
15
|
+
}, d = () => {
|
|
16
|
+
const e = t.value.length + 1;
|
|
17
|
+
console.debug("handleAddFilterGroup", e), t.value.push({
|
|
18
|
+
text: e.toString(),
|
|
19
|
+
value: e
|
|
20
|
+
}), l.addFilterGroup(e);
|
|
21
|
+
}, p = o(() => t.value.length >= 3), n = o(() => l.getSelectedFilterGroup(r.value)), c = o(() => n.value.length > 1), F = o(() => t.value.length > 1);
|
|
22
|
+
return { __sfc: !0, MAX_FILTER_GROUP_COUNT: 3, trans: i, store: l, filterGroupCount: u, filterGroupList: t, selectedFilterGroup: r, changeFilterGroup: s, handleAddFilterGroup: d, isMaxFilterGroupCount: p, selectedFilterGroupFilters: n, hasLogicAdapter: c, hasRemoveFilterButton: F, handleAddFilter: () => {
|
|
23
|
+
l.addFilter({
|
|
24
|
+
type: "standardFilter",
|
|
25
|
+
attribute: "",
|
|
26
|
+
operatorReplace: "",
|
|
27
|
+
operator: "",
|
|
28
|
+
innerGroupOperator: "*",
|
|
29
|
+
outerGroupOperator: "*",
|
|
30
|
+
filterNumber: n.value.length + 1,
|
|
31
|
+
filterGroup: r.value,
|
|
32
|
+
isValid: !1,
|
|
33
|
+
value: ""
|
|
34
|
+
}), console.debug("handleAddFilter");
|
|
35
|
+
}, handleDeleteFilter: (e) => {
|
|
36
|
+
console.debug("handleDeleteFilter: ", e), l.deleteFilter(e);
|
|
37
|
+
}, handleDeleteFilterGroup: () => {
|
|
38
|
+
t.value.length !== 1 && (console.debug("handleDeleteFilterGroup"), t.value.splice(r.value - 1, 1), r.value > 1 && r.value--);
|
|
39
|
+
}, InSegments: f, InButtonV2: v, FilterItem: _, LogicAdapter: A };
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
export {
|
|
43
|
+
E as default
|
|
44
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import s from "./LogicAdapter.vue2.js";
|
|
2
|
+
import n from "../../../../_virtual/_plugin-vue2_normalizer.js";
|
|
3
|
+
var o = function() {
|
|
4
|
+
var t = this, r = t._self._c, e = t._self._setupProxy;
|
|
5
|
+
return r(e.InSegments, { staticClass: "guido__logic-adapter f-g-1", attrs: { "segment-list": e.logicAdapterList, selected: e.selectedLogicAdapter, "with-icon": !1 }, on: { click: e.changeLogicAdapter } });
|
|
6
|
+
}, a = [], c = /* @__PURE__ */ n(
|
|
7
|
+
s,
|
|
8
|
+
o,
|
|
9
|
+
a,
|
|
10
|
+
!1,
|
|
11
|
+
null,
|
|
12
|
+
null
|
|
13
|
+
);
|
|
14
|
+
const p = c.exports;
|
|
15
|
+
export {
|
|
16
|
+
p as default
|
|
17
|
+
};
|