@useinsider/guido 3.18.0 → 3.18.1-beta.0725bd5
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/dist/components/Guido.vue.js +1 -1
- package/dist/components/Guido.vue2.js +86 -82
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +13 -11
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +65 -53
- package/dist/components/organisms/header/EditorActions.vue.js +1 -1
- package/dist/components/organisms/header/EditorActions.vue2.js +54 -41
- package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -18
- package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +21 -0
- package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +47 -0
- package/dist/composables/useActionsApi.js +82 -67
- package/dist/composables/useAutoSave.js +31 -26
- package/dist/composables/useCustomInterfaceAppearance.js +46 -41
- package/dist/composables/useEditorLock.js +20 -0
- package/dist/composables/useGuidoStateBridge.js +37 -31
- package/dist/composables/useHtmlValidator.js +84 -79
- package/dist/composables/useRecommendation.js +21 -18
- package/dist/composables/useSave.js +42 -39
- package/dist/composables/useStripo.js +7 -7
- package/dist/enums/extensions/recommendationBlock.js +38 -31
- package/dist/extensions/Blocks/Recommendation/block.js +43 -39
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +62 -57
- package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +84 -52
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +210 -130
- package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +21 -12
- package/dist/guido.css +1 -1
- package/dist/package.json.js +1 -1
- package/dist/src/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.d.ts +2 -0
- package/dist/src/composables/useEditorLock.d.ts +10 -0
- package/dist/src/enums/extensions/recommendationBlock.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +9 -0
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +74 -0
- package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +4 -0
- package/dist/src/stores/onboarding.d.ts +377 -0
- package/dist/static/styles/components/recommendation-strategy.css.js +51 -4
- package/dist/stores/onboarding.js +41 -36
- package/dist/utils/templatePreparation.js +50 -50
- package/package.json +2 -2
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-
|
|
1
|
+
@charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-1ca6baf0]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-cc5ee925]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-cc5ee925]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-cc5ee925]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-b447f626]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-b447f626] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}
|
package/dist/package.json.js
CHANGED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const isEditorBusy: () => boolean;
|
|
2
|
+
export declare const beginMount: () => number;
|
|
3
|
+
export declare const isCurrentMount: (generation: number) => boolean;
|
|
4
|
+
export declare const runExclusive: <T>(task: () => Promise<T>) => Promise<T>;
|
|
5
|
+
export declare const useEditorLock: () => {
|
|
6
|
+
runExclusive: <T>(task: () => Promise<T>) => Promise<T>;
|
|
7
|
+
isEditorBusy: () => boolean;
|
|
8
|
+
beginMount: () => number;
|
|
9
|
+
isCurrentMount: (generation: number) => boolean;
|
|
10
|
+
};
|
|
@@ -5,7 +5,9 @@ export declare const URLS: {
|
|
|
5
5
|
PRODUCT_ATTRIBUTES_PATH: string;
|
|
6
6
|
RECOMMENDATION_STRATEGIES_PATH: string;
|
|
7
7
|
RECOMMENDATION_STRATEGIES_PANEL_PATH: string;
|
|
8
|
+
RECOMMENDATION_STRATEGY_CREATE_PATH: string;
|
|
8
9
|
};
|
|
10
|
+
export declare const strategyEditPath: (strategyId: string | number) => string;
|
|
9
11
|
export declare const QUERY_PARAMS: {
|
|
10
12
|
CLIENT_ID: string;
|
|
11
13
|
};
|
|
@@ -66,6 +66,8 @@ export declare class RecommendationBlockControl extends CommonControl {
|
|
|
66
66
|
* edits are never clobbered (SD-141049).
|
|
67
67
|
*/
|
|
68
68
|
private _syncNodeConfigIfChanged;
|
|
69
|
+
/** Whether the deferred write would move the node's strategyId — see the caller (SD-149916). */
|
|
70
|
+
private _isPendingStrategyIdChange;
|
|
69
71
|
private _capturePendingNodeConfigWrite;
|
|
70
72
|
/**
|
|
71
73
|
* Accumulates the pending write into `documentModifier` without applying, so the
|
|
@@ -2,6 +2,7 @@ import { CommonControl } from '../../../common-control';
|
|
|
2
2
|
export declare const STRATEGY_CONTROL_ID = "recommendation-strategy-control";
|
|
3
3
|
export declare class StrategyControl extends CommonControl {
|
|
4
4
|
private store;
|
|
5
|
+
private onboardingStore;
|
|
5
6
|
private storeUnsubscription;
|
|
6
7
|
private listeners;
|
|
7
8
|
private lastPaintedState;
|
|
@@ -9,6 +10,14 @@ export declare class StrategyControl extends CommonControl {
|
|
|
9
10
|
getTemplate(): string;
|
|
10
11
|
private _strategyAction;
|
|
11
12
|
onRender(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the document itself says this block has no strategy.
|
|
15
|
+
*
|
|
16
|
+
* Read the node, not the store: when the main control cannot resolve the block id off the
|
|
17
|
+
* node it never syncs the persisted config, so the store still holds defaults (empty
|
|
18
|
+
* strategyId) for an assigned block.
|
|
19
|
+
*/
|
|
20
|
+
private _isNodeUnassigned;
|
|
12
21
|
onDestroy(): void;
|
|
13
22
|
private _teardown;
|
|
14
23
|
private _setupButtonListeners;
|
|
@@ -71,8 +71,11 @@ interface StoreState {
|
|
|
71
71
|
strategies: RrsStrategy[];
|
|
72
72
|
strategiesLoading: boolean;
|
|
73
73
|
strategyUrlTemplates: Record<string, string>;
|
|
74
|
+
strategiesFetched: boolean;
|
|
75
|
+
strategiesSettled: boolean;
|
|
74
76
|
blockStates: Record<number, PerBlockState>;
|
|
75
77
|
currentRecommendationId: number | null;
|
|
78
|
+
strategyPanelOpen: boolean;
|
|
76
79
|
configVersion: number;
|
|
77
80
|
}
|
|
78
81
|
export declare const useRecommendationExtensionStore: import("pinia").StoreDefinition<"guidoRecommendationExtension", StoreState, {
|
|
@@ -99,8 +102,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
99
102
|
}[];
|
|
100
103
|
strategiesLoading: boolean;
|
|
101
104
|
strategyUrlTemplates: Record<string, string>;
|
|
105
|
+
strategiesFetched: boolean;
|
|
106
|
+
strategiesSettled: boolean;
|
|
102
107
|
blockStates: Record<number, PerBlockState>;
|
|
103
108
|
currentRecommendationId: number | null;
|
|
109
|
+
strategyPanelOpen: boolean;
|
|
104
110
|
configVersion: number;
|
|
105
111
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): PerBlockConfigs;
|
|
106
112
|
/**
|
|
@@ -125,8 +131,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
125
131
|
}[];
|
|
126
132
|
strategiesLoading: boolean;
|
|
127
133
|
strategyUrlTemplates: Record<string, string>;
|
|
134
|
+
strategiesFetched: boolean;
|
|
135
|
+
strategiesSettled: boolean;
|
|
128
136
|
blockStates: Record<number, PerBlockState>;
|
|
129
137
|
currentRecommendationId: number | null;
|
|
138
|
+
strategyPanelOpen: boolean;
|
|
130
139
|
configVersion: number;
|
|
131
140
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): RecommendationProduct[];
|
|
132
141
|
/**
|
|
@@ -151,8 +160,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
151
160
|
}[];
|
|
152
161
|
strategiesLoading: boolean;
|
|
153
162
|
strategyUrlTemplates: Record<string, string>;
|
|
163
|
+
strategiesFetched: boolean;
|
|
164
|
+
strategiesSettled: boolean;
|
|
154
165
|
blockStates: Record<number, PerBlockState>;
|
|
155
166
|
currentRecommendationId: number | null;
|
|
167
|
+
strategyPanelOpen: boolean;
|
|
156
168
|
configVersion: number;
|
|
157
169
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
|
|
158
170
|
assignStrategyDrawerStatus(state: {
|
|
@@ -174,8 +186,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
174
186
|
}[];
|
|
175
187
|
strategiesLoading: boolean;
|
|
176
188
|
strategyUrlTemplates: Record<string, string>;
|
|
189
|
+
strategiesFetched: boolean;
|
|
190
|
+
strategiesSettled: boolean;
|
|
177
191
|
blockStates: Record<number, PerBlockState>;
|
|
178
192
|
currentRecommendationId: number | null;
|
|
193
|
+
strategyPanelOpen: boolean;
|
|
179
194
|
configVersion: number;
|
|
180
195
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
|
|
181
196
|
removeStrategyModalStatus(state: {
|
|
@@ -197,8 +212,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
197
212
|
}[];
|
|
198
213
|
strategiesLoading: boolean;
|
|
199
214
|
strategyUrlTemplates: Record<string, string>;
|
|
215
|
+
strategiesFetched: boolean;
|
|
216
|
+
strategiesSettled: boolean;
|
|
200
217
|
blockStates: Record<number, PerBlockState>;
|
|
201
218
|
currentRecommendationId: number | null;
|
|
219
|
+
strategyPanelOpen: boolean;
|
|
202
220
|
configVersion: number;
|
|
203
221
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
|
|
204
222
|
assignedStrategy(state: {
|
|
@@ -220,8 +238,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
220
238
|
}[];
|
|
221
239
|
strategiesLoading: boolean;
|
|
222
240
|
strategyUrlTemplates: Record<string, string>;
|
|
241
|
+
strategiesFetched: boolean;
|
|
242
|
+
strategiesSettled: boolean;
|
|
223
243
|
blockStates: Record<number, PerBlockState>;
|
|
224
244
|
currentRecommendationId: number | null;
|
|
245
|
+
strategyPanelOpen: boolean;
|
|
225
246
|
configVersion: number;
|
|
226
247
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): RrsStrategy | null;
|
|
227
248
|
/**
|
|
@@ -246,8 +267,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
246
267
|
}[];
|
|
247
268
|
strategiesLoading: boolean;
|
|
248
269
|
strategyUrlTemplates: Record<string, string>;
|
|
270
|
+
strategiesFetched: boolean;
|
|
271
|
+
strategiesSettled: boolean;
|
|
249
272
|
blockStates: Record<number, PerBlockState>;
|
|
250
273
|
currentRecommendationId: number | null;
|
|
274
|
+
strategyPanelOpen: boolean;
|
|
251
275
|
configVersion: number;
|
|
252
276
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
|
|
253
277
|
/**
|
|
@@ -272,8 +296,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
272
296
|
}[];
|
|
273
297
|
strategiesLoading: boolean;
|
|
274
298
|
strategyUrlTemplates: Record<string, string>;
|
|
299
|
+
strategiesFetched: boolean;
|
|
300
|
+
strategiesSettled: boolean;
|
|
275
301
|
blockStates: Record<number, PerBlockState>;
|
|
276
302
|
currentRecommendationId: number | null;
|
|
303
|
+
strategyPanelOpen: boolean;
|
|
277
304
|
configVersion: number;
|
|
278
305
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): number;
|
|
279
306
|
hasFilters(): boolean;
|
|
@@ -299,8 +326,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
299
326
|
}[];
|
|
300
327
|
strategiesLoading: boolean;
|
|
301
328
|
strategyUrlTemplates: Record<string, string>;
|
|
329
|
+
strategiesFetched: boolean;
|
|
330
|
+
strategiesSettled: boolean;
|
|
302
331
|
blockStates: Record<number, PerBlockState>;
|
|
303
332
|
currentRecommendationId: number | null;
|
|
333
|
+
strategyPanelOpen: boolean;
|
|
304
334
|
configVersion: number;
|
|
305
335
|
} & import("pinia").PiniaCustomStateProperties<StoreState>) => {
|
|
306
336
|
text: string;
|
|
@@ -325,8 +355,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
325
355
|
}[];
|
|
326
356
|
strategiesLoading: boolean;
|
|
327
357
|
strategyUrlTemplates: Record<string, string>;
|
|
358
|
+
strategiesFetched: boolean;
|
|
359
|
+
strategiesSettled: boolean;
|
|
328
360
|
blockStates: Record<number, PerBlockState>;
|
|
329
361
|
currentRecommendationId: number | null;
|
|
362
|
+
strategyPanelOpen: boolean;
|
|
330
363
|
configVersion: number;
|
|
331
364
|
} & import("pinia").PiniaCustomStateProperties<StoreState>) => {
|
|
332
365
|
text: string;
|
|
@@ -351,8 +384,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
351
384
|
}[];
|
|
352
385
|
strategiesLoading: boolean;
|
|
353
386
|
strategyUrlTemplates: Record<string, string>;
|
|
387
|
+
strategiesFetched: boolean;
|
|
388
|
+
strategiesSettled: boolean;
|
|
354
389
|
blockStates: Record<number, PerBlockState>;
|
|
355
390
|
currentRecommendationId: number | null;
|
|
391
|
+
strategyPanelOpen: boolean;
|
|
356
392
|
configVersion: number;
|
|
357
393
|
} & import("pinia").PiniaCustomStateProperties<StoreState>) => {
|
|
358
394
|
text: string;
|
|
@@ -433,6 +469,39 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
433
469
|
openRemoveStrategyModal(): void;
|
|
434
470
|
closeRemoveStrategyModal(): void;
|
|
435
471
|
fetchStrategies(): Promise<void>;
|
|
472
|
+
invalidateStrategies(): void;
|
|
473
|
+
/**
|
|
474
|
+
* Opens a Smart Recommender strategy page in a new tab and refreshes the list every time
|
|
475
|
+
* the user comes back. `visibilitychange` covers the tab case; `focus` covers the page
|
|
476
|
+
* landing in a separate window, where this document never goes hidden.
|
|
477
|
+
*
|
|
478
|
+
* Deliberately NOT one-shot: the strategy tab stays open, so a user can create a second
|
|
479
|
+
* strategy in it and come back again — a listener that disarmed on the first return would
|
|
480
|
+
* leave that one missing from the list. It disarms on the first return AFTER that tab is
|
|
481
|
+
* closed instead, so an ordinary alt-tab later in the session costs nothing. Armed only
|
|
482
|
+
* once the user actually opens a strategy page, so anyone who never does pays nothing.
|
|
483
|
+
*/
|
|
484
|
+
_armStrategyPageReturn(url: string): void;
|
|
485
|
+
/**
|
|
486
|
+
* Reloads the products of the block the user is on, so an edit made in the strategy tab
|
|
487
|
+
* lands on the canvas instead of waiting for the assign drawer to be reopened.
|
|
488
|
+
*
|
|
489
|
+
* Only the selected block: the canvas regeneration is driven off the active block's
|
|
490
|
+
* product array, so refreshing an unselected block would fetch without redrawing it.
|
|
491
|
+
*/
|
|
492
|
+
_refreshAssignedStrategyProducts(): Promise<void>;
|
|
493
|
+
/** Lets the editor tear the return listeners down when it unmounts. */
|
|
494
|
+
disposeStrategyPageReturn(): void;
|
|
495
|
+
/**
|
|
496
|
+
* Opens Smart Recommender's strategy creation page. Every return refreshes the list so the
|
|
497
|
+
* new strategy is offered; the user picks it themselves.
|
|
498
|
+
*/
|
|
499
|
+
openStrategyCreation(): void;
|
|
500
|
+
/**
|
|
501
|
+
* Opens the strategy's edit page. Every return refreshes the list so the block reflects the
|
|
502
|
+
* edited configuration.
|
|
503
|
+
*/
|
|
504
|
+
openStrategyEdit(strategyId: string | number): void;
|
|
436
505
|
resolveStrategyUrlTemplate(strategy: RrsStrategy, currency: string): Promise<string>;
|
|
437
506
|
assignStrategy(strategy: RrsStrategy): void;
|
|
438
507
|
removeStrategy(): void;
|
|
@@ -450,6 +519,11 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
450
519
|
* every block's recommendationConfigs across user edits.
|
|
451
520
|
*/
|
|
452
521
|
hasInvalidBlock(): boolean;
|
|
522
|
+
/**
|
|
523
|
+
* Which required fields are missing across the design's blocks, so the save
|
|
524
|
+
* toaster can name the cause instead of always showing the generic message.
|
|
525
|
+
*/
|
|
526
|
+
invalidBlockFields(): string[];
|
|
453
527
|
fetchRecommendationProducts(): Promise<void>;
|
|
454
528
|
_doFetchProducts(): Promise<void>;
|
|
455
529
|
_doFetchStrategyProducts(blockId: number): Promise<void>;
|
|
@@ -15,7 +15,11 @@ export interface RequiredField {
|
|
|
15
15
|
getAvailableOptions?: (store: ExtensionStoreSlice) => string[];
|
|
16
16
|
condition?: (config: PerBlockConfigs) => boolean;
|
|
17
17
|
}
|
|
18
|
+
/** Field key of the strategy/algorithm descriptor, used to pick the toaster message. */
|
|
19
|
+
export declare const STRATEGY_FIELD_KEY = "strategy";
|
|
18
20
|
export declare const REQUIRED_RECOMMENDATION_FIELDS: RequiredField[];
|
|
19
21
|
export declare const RecommendationRequiredFieldsKey = "newsletter.recommendation-fill-required-fields";
|
|
22
|
+
/** Shown instead of the generic message when the only thing missing is the strategy. */
|
|
23
|
+
export declare const RecommendationAssignStrategyKey = "newsletter.recommendation-assign-strategy";
|
|
20
24
|
export declare function getInvalidFields(config: PerBlockConfigs, store: ExtensionStoreSlice, fields?: RequiredField[]): string[];
|
|
21
25
|
export declare function isConfigValid(config: PerBlockConfigs, store: ExtensionStoreSlice): boolean;
|