@designcrowd/library.brand-page 5.16.2 → 5.16.3-background-1

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 (87) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-Oj_ab97C.js → CreatedOnBrandCrowd-de-de-SsqsrkVk.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-GsCBx_Vo.js → CreatedOnBrandCrowd-en-us-DsGqYTNa.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CWp_kHxD.js → CreatedOnBrandCrowd-es-es-C7s1ZcE5.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-DrPrFgKC.js → CreatedOnBrandCrowd-fr-ca-DsNnq4vF.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-DrPrFgKC.js → CreatedOnBrandCrowd-fr-fr-DsNnq4vF.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-BgvbBOFa.js → CreatedOnBrandCrowd-pt-br-BxAl5qbC.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-BgvbBOFa.js → CreatedOnBrandCrowd-pt-pt-BxAl5qbC.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-BZRXmSAH.js → CreatedOnDcom-de-de-rwohNRHC.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-D_xjisVj.js → CreatedOnDcom-en-us-CvwjVlGZ.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CJzkN8Oq.js → CreatedOnDcom-es-es-X40dNkrj.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-C5ilNf57.js → CreatedOnDcom-fr-ca-DHVcZD4U.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-CZypZWWq.js → CreatedOnDcom-fr-fr-Bx2kBJe8.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-JZXunSWT.js → CreatedOnDcom-pt-br-OFY9pGT7.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-CjL1qKnl.js → CreatedOnDcom-pt-pt-Del779gQ.js} +1 -1
  15. package/lib/src/brand-page/components/page/Page.mixin.js +20 -15
  16. package/lib/src/brand-page/components/page/Page.stories.js +2 -2
  17. package/lib/src/brand-page/models/index.d.ts +1 -0
  18. package/lib/src/brand-page/models/index.js +2 -0
  19. package/lib/src/brand-page/utils/migration/migration-07.js +1 -1
  20. package/lib/src/brand-page/utils/view-model.util.d.ts +2 -1
  21. package/lib/src/brand-page/utils/view-model.util.js +27 -2
  22. package/lib/src/brand-page/view-models.d.ts +17 -2
  23. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +3 -0
  24. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +7 -2
  25. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +4 -0
  26. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +3 -0
  27. package/lib/src/brand-page-maker/components/preview/Preview.stories.js +2 -2
  28. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +244 -1
  29. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +68 -4
  30. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +9 -1
  31. package/lib/src/brand-page-maker/stores/user/user-store.d.ts +4 -0
  32. package/lib/src/brand-page-maker/stores/user/user-store.js +4 -0
  33. package/lib/src/bundled-translations-DEk3SiLd.js +161 -0
  34. package/lib/src/bundles/bundled-translations.json +3 -1
  35. package/lib/src/clients/design-template-client.d.ts +1 -0
  36. package/lib/src/clients/models.d.ts +1 -0
  37. package/lib/src/css/library.brand-page-brandCrowd.min.css +48 -20
  38. package/lib/src/css/library.brand-page-brandPage.min.css +48 -20
  39. package/lib/src/css/library.brand-page-designCom.min.css +48 -20
  40. package/lib/src/css/library.brand-page-preview.min.css +48 -20
  41. package/lib/src/index.mjs +1 -1
  42. package/lib/src/{lib-BCV7U_Bf.js → lib-Dv7p4Gdd.js} +13374 -13187
  43. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +10 -2
  44. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -0
  45. package/lib/src/shared/background-settings/store/background-settings-store.js +34 -2
  46. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +3 -0
  47. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +26 -0
  48. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +6 -1
  49. package/lib/src/shared/content-settings/components/image-field/ImageField.mixin.js +3 -1
  50. package/lib/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.mixin.d.ts +3 -0
  51. package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
  52. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +3 -0
  53. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +3 -0
  54. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +5 -0
  55. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +1 -0
  56. package/lib/src/shared/template-settings/models.d.ts +2 -0
  57. package/lib/src/shared/template-settings/store/template-settings-store.d.ts +6 -0
  58. package/lib/src/shared/template-settings/store/template-settings-store.js +109 -35
  59. package/package.json +1 -1
  60. package/src/brand-page/components/page/Page.mixin.ts +24 -15
  61. package/src/brand-page/components/page/Page.stories.ts +2 -1
  62. package/src/brand-page/components/page/Page.vue +19 -3
  63. package/src/brand-page/models/index.ts +3 -0
  64. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
  65. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  66. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  67. package/src/brand-page/utils/migration/migration-07.ts +6 -4
  68. package/src/brand-page/utils/view-model.util.ts +42 -2
  69. package/src/brand-page/view-models.ts +23 -1
  70. package/src/brand-page-maker/components/preview/Preview.stories.ts +2 -1
  71. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +90 -5
  72. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +41 -4
  73. package/src/brand-page-maker/components/template-preview-with-state/TemplatePreviewWithState.vue +4 -6
  74. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +14 -1
  75. package/src/brand-page-maker/stores/user/user-store.ts +5 -0
  76. package/src/bundles/bundled-translations.json +3 -1
  77. package/src/clients/design-template-client.ts +1 -0
  78. package/src/clients/models.ts +1 -0
  79. package/src/shared/background-settings/components/BackgroundSettings.vue +28 -8
  80. package/src/shared/background-settings/components/ReplaceImageSettingsForBackgroundSettings.vue +9 -0
  81. package/src/shared/background-settings/components/i18n/background-settings.json +3 -1
  82. package/src/shared/background-settings/store/background-settings-store.ts +51 -2
  83. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +9 -3
  84. package/src/shared/content-settings/components/image-field/ImageField.mixin.ts +4 -1
  85. package/src/shared/template-settings/models.ts +2 -0
  86. package/src/shared/template-settings/store/template-settings-store.ts +141 -41
  87. package/lib/src/bundled-translations-D9iHE5G9.js +0 -161
@@ -1,7 +1,7 @@
1
1
  /// <reference types="types/lodash-shims" />
2
2
  import type { PropType } from 'vue';
3
3
  import type { BrandPageContext, BrandPageViewModel, LogoImageModel, LogoTemplateImageModel, LogoTheme, UserPersonalisation } from '../../../brand-page';
4
- import type { TemplateSettingsTemplate } from '../../../shared/template-settings/models';
4
+ import { type TemplateSettingsTemplate } from '../../../shared/template-settings/models';
5
5
  import type { DebounceHandle } from 'lodash.debounce';
6
6
  interface TemplatePreviewData {
7
7
  containerStyle: BrandPageCssStyle;
@@ -15,6 +15,8 @@ interface TemplatePreviewData {
15
15
  renderHeight: number;
16
16
  renderWidth: number;
17
17
  rootStyles: BrandPageCssStyle;
18
+ imageLoadError: boolean;
19
+ imageLoading: boolean;
18
20
  }
19
21
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
20
22
  logoImage: {
@@ -61,6 +63,243 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
61
63
  };
62
64
  }>, {
63
65
  selectedTemplateId: import("vue").ComputedRef<string | false>;
66
+ isPrePurchase: import("vue").ComputedRef<boolean>;
67
+ runtimeEnvironment: import("vue").ComputedRef<string>;
68
+ isAdmin: import("vue").ComputedRef<boolean>;
69
+ userToken: import("vue").ComputedRef<string | undefined>;
70
+ isBrandSite: import("vue").ComputedRef<boolean>;
71
+ selectedTab: import("vue").ComputedRef<string>;
72
+ renderAsImage: import("vue").ComputedRef<boolean>;
73
+ brandPageMakerUserStore: import("pinia").Store<"brandPageMakerUser", import("../../stores").UserState, {}, {
74
+ setEmailAddress(payload: string): void;
75
+ setFeatures(payload: Partial<import("../../../constants/ui").UIUserFeatures>): void;
76
+ setHasBrandPagePremiumSubscription(payload: boolean): void;
77
+ setIsAdmin(payload: {
78
+ isAdmin: boolean;
79
+ }): void;
80
+ setBrandPageCommissionPercentage(payload: number): void;
81
+ setUserToken(payload: {
82
+ userToken: string;
83
+ }): void;
84
+ }>;
85
+ brandPageContainerStore: import("pinia").Store<"brandPageContainer", import("../../stores").BrandPageContainerState, {
86
+ brandPageContentTypes(): string[];
87
+ isAdmin(): boolean;
88
+ isPublished: (state: {
89
+ availableTaxes: any[];
90
+ brandPageBaseUrl: string;
91
+ baseFabricRenderUrl: string;
92
+ brandPageDescription: string;
93
+ brandPageDisplayName: string;
94
+ sensitiveContent: number;
95
+ brandPageSlug: string;
96
+ brandPageStatus: string;
97
+ brandPageToken: string | undefined;
98
+ brandPageTitle: string;
99
+ customDomain: {
100
+ id: string;
101
+ created: Date;
102
+ updated: Date;
103
+ brandPageToken: string;
104
+ domainName: string;
105
+ status: "active" | "pending" | "failed" | "renewFailed" | "deleted";
106
+ dnsConfigurationStatus: "request_expired" | "missing_expected_dns_records" | "invalid_multiple_dns_records_exist" | "unexpected_aaaa_record" | "completed";
107
+ triggerOrigin?: string | undefined;
108
+ } | null;
109
+ createCustomDomainErrorMessage: string | null;
110
+ customDomainConfig?: {
111
+ dns: {
112
+ ipAddresses: string[];
113
+ };
114
+ } | undefined;
115
+ designDraftToken?: string | undefined;
116
+ designTemplateToken: string;
117
+ isCustomDomainEnabled: boolean;
118
+ isBrandPageSlugEditMode: boolean;
119
+ isPublishModalVisible: boolean;
120
+ isUpgradeModalVisible: boolean;
121
+ isPublishing: boolean;
122
+ isProduction: boolean;
123
+ isSellDomainNameEnabled: boolean;
124
+ isStripeOnboardingModalVisible: boolean;
125
+ isReactivationModal: boolean;
126
+ isPublishUpgradeModal: boolean;
127
+ isSaving: boolean;
128
+ backButtonLabel: string;
129
+ manageWebsiteDesignsUrl: string;
130
+ publishErrorMessage: string;
131
+ upgradeUrl: string;
132
+ reactivationUrl: string;
133
+ runtimeEnvironment: string;
134
+ selectedTaxId: number | undefined;
135
+ slug: string;
136
+ standalone: boolean;
137
+ triggerSaveSuccessMessage: boolean;
138
+ isDesignCom: boolean;
139
+ isPrePurchase: boolean;
140
+ makerFonts: any[];
141
+ eventButtonLocation?: string | undefined;
142
+ websiteUpsellModalViewModel?: any;
143
+ showPublishOptionModal?: boolean | undefined;
144
+ abTests: Record<string, string>;
145
+ isSubsequentPublish: boolean;
146
+ } & import("pinia").PiniaCustomStateProperties<import("../../stores").BrandPageContainerState>) => boolean;
147
+ isUserDraft: (state: {
148
+ availableTaxes: any[];
149
+ brandPageBaseUrl: string;
150
+ baseFabricRenderUrl: string;
151
+ brandPageDescription: string;
152
+ brandPageDisplayName: string;
153
+ sensitiveContent: number;
154
+ brandPageSlug: string;
155
+ brandPageStatus: string;
156
+ brandPageToken: string | undefined;
157
+ brandPageTitle: string;
158
+ customDomain: {
159
+ id: string;
160
+ created: Date;
161
+ updated: Date;
162
+ brandPageToken: string;
163
+ domainName: string;
164
+ status: "active" | "pending" | "failed" | "renewFailed" | "deleted";
165
+ dnsConfigurationStatus: "request_expired" | "missing_expected_dns_records" | "invalid_multiple_dns_records_exist" | "unexpected_aaaa_record" | "completed";
166
+ triggerOrigin?: string | undefined;
167
+ } | null;
168
+ createCustomDomainErrorMessage: string | null;
169
+ customDomainConfig?: {
170
+ dns: {
171
+ ipAddresses: string[];
172
+ };
173
+ } | undefined;
174
+ designDraftToken?: string | undefined;
175
+ designTemplateToken: string;
176
+ isCustomDomainEnabled: boolean;
177
+ isBrandPageSlugEditMode: boolean;
178
+ isPublishModalVisible: boolean;
179
+ isUpgradeModalVisible: boolean;
180
+ isPublishing: boolean;
181
+ isProduction: boolean;
182
+ isSellDomainNameEnabled: boolean;
183
+ isStripeOnboardingModalVisible: boolean;
184
+ isReactivationModal: boolean;
185
+ isPublishUpgradeModal: boolean;
186
+ isSaving: boolean;
187
+ backButtonLabel: string;
188
+ manageWebsiteDesignsUrl: string;
189
+ publishErrorMessage: string;
190
+ upgradeUrl: string;
191
+ reactivationUrl: string;
192
+ runtimeEnvironment: string;
193
+ selectedTaxId: number | undefined;
194
+ slug: string;
195
+ standalone: boolean;
196
+ triggerSaveSuccessMessage: boolean;
197
+ isDesignCom: boolean;
198
+ isPrePurchase: boolean;
199
+ makerFonts: any[];
200
+ eventButtonLocation?: string | undefined;
201
+ websiteUpsellModalViewModel?: any;
202
+ showPublishOptionModal?: boolean | undefined;
203
+ abTests: Record<string, string>;
204
+ isSubsequentPublish: boolean;
205
+ } & import("pinia").PiniaCustomStateProperties<import("../../stores").BrandPageContainerState>) => boolean;
206
+ }, {
207
+ initialise(payload: import("../../stores/brandpage-container").InitialisePayload): void;
208
+ setDesignTemplateToken(payload: any): void;
209
+ setDesignDraftToken(payload: any): void;
210
+ setIsBrandPageSlugEditMode(payload: any): void;
211
+ setIsPublishing(payload: any): void;
212
+ setIsPublishModalVisible(payload: any): void;
213
+ setIsPublishUpgradeModal(payload: any): void;
214
+ setIsSaving(payload: any): void;
215
+ setIsUpgradeModalVisible(payload: any): void;
216
+ setPublishErrorMessage(payload: any): void;
217
+ setTriggerSaveSuccessMessage(payload: any): void;
218
+ setSlug(payload: any): void;
219
+ updateBrandPageMeta(payload: any): void;
220
+ updateBrandPageSensitiveContent(payload: any): void;
221
+ setLogoDraftToken(payload: {
222
+ logoDraftToken: string;
223
+ }): void;
224
+ setBackUrl(payload: any): void;
225
+ setIsStripeOnboardingModalVisible(payload: any): void;
226
+ setSelectedTaxId(payload: any): void;
227
+ setBrandPageCustomDomainConfig({ customDomainConfig }: {
228
+ customDomainConfig: any;
229
+ }): void;
230
+ setBrandPageCustomDomain(payload: {
231
+ customDomain: import("../../models").CustomDomainModel | null;
232
+ }): void;
233
+ setCreateCustomDomainErrorMessage(payload: any): void;
234
+ setBrandPageIsCustomDomainEnabled(payload: any): void;
235
+ setIsSubsequentPublish(payload: any): void;
236
+ clearPublishErrorMessage(): void;
237
+ closePublishModal(payload?: {
238
+ skipShowNextNotificationMessage?: boolean | undefined;
239
+ }): Promise<void>;
240
+ closeUpgradeModal(): Promise<void>;
241
+ endBrandPageSlugEditMode(): void;
242
+ publishBrandPage({ shouldPublish, slug }: {
243
+ shouldPublish: any;
244
+ slug: any;
245
+ }): Promise<false | {
246
+ success: boolean;
247
+ websiteUpsellModalViewModel: any;
248
+ }>;
249
+ publishBrandPageWithCustomDomainAsync({ shouldPublish, slug, domain, isPurchasedDomain, }: {
250
+ shouldPublish: any;
251
+ slug: any;
252
+ domain: any;
253
+ isPurchasedDomain: any;
254
+ }): Promise<boolean | undefined>;
255
+ checkWebsiteSlugAsync(slug: string): Promise<import("../../models/api.model").WebsiteSlugCheckResponse | null>;
256
+ redirectToLogoEditPage(logoEditUrl: string, locale: string): Promise<void>;
257
+ redirectToCreateNewDesignPage(): Promise<void>;
258
+ redirectToStripeOnboarding(): Promise<void>;
259
+ exportDesignAsync(): Promise<any>;
260
+ saveBrandPage(payload?: {
261
+ isPublish?: boolean | undefined;
262
+ eventButtonLocation?: string | undefined;
263
+ }): Promise<false | {
264
+ saved: boolean;
265
+ canPublish: boolean;
266
+ websiteUpsellModalViewModel: any;
267
+ }>;
268
+ saveAndPublishBrandPage(eventButtonLocation: string): Promise<void>;
269
+ saveTemplate(): Promise<void>;
270
+ setBrandPageStatus(status: any): Promise<void>;
271
+ showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
272
+ showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
273
+ showUpgradeModalAndSaveAsync(): Promise<void>;
274
+ showStripeOnboardingModal(): void;
275
+ closeStripeOnboardingModal(): void;
276
+ showSaveSuccessMessage(): Promise<void>;
277
+ startBrandPageSlugEditMode(): void;
278
+ triggerLockedContentClickedEvent(contentType: string): Promise<void>;
279
+ unpublishBrandPage(): Promise<void>;
280
+ updateBrandPageSettings({ description, title }: {
281
+ description: any;
282
+ title: any;
283
+ }): Promise<void>;
284
+ updateSensitiveContent({ sensitiveContent }: {
285
+ sensitiveContent: any;
286
+ }): Promise<void>;
287
+ createBrandPageCustomDomain({ domainName }: {
288
+ domainName: any;
289
+ }): Promise<false | undefined>;
290
+ createBrandPageWithPurchasedDomain({ domainName }: {
291
+ domainName: any;
292
+ }): Promise<false | undefined>;
293
+ deleteBrandPageCustomDomain({ designDraftToken, customDomainId }: {
294
+ designDraftToken: any;
295
+ customDomainId: any;
296
+ }): Promise<void>;
297
+ refreshBrandPageCustomDomainConfig(): Promise<void>;
298
+ refreshBrandPageCustomDomain(): Promise<void>;
299
+ updateBrandPageIsCustomDomainEnabled({ isCustomDomainEnabled }: {
300
+ isCustomDomainEnabled: any;
301
+ }): Promise<void>;
302
+ }>;
64
303
  brandPageMakerStore: import("pinia").Store<"brandPageMaker", import("../../stores").BrandPageMakerState, {
65
304
  contentErrorCount(): number;
66
305
  brandPageBaseUrl(): string;
@@ -194,10 +433,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
194
433
  innerContainerStyle(): BrandPageCssStyle;
195
434
  isPersonalisable(): boolean;
196
435
  cssVariablesStyle(): Record<string, string>;
436
+ previewImageUrl(): string;
197
437
  }, {
198
438
  onOverlayClicked(): void;
199
439
  onResize(): void;
200
440
  onSetPreviewStyles(styles: BrandPageCssStyle): void;
441
+ onImageError(): void;
442
+ onImageLoad(): void;
443
+ regeneratePreview(): void;
201
444
  updateViewModel(forceUpdate?: boolean): Promise<void>;
202
445
  }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "template-selected"[], "template-selected", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
203
446
  logoImage: {
@@ -2,9 +2,11 @@ import { computed, defineComponent } from 'vue';
2
2
  import { BRAND_PAGE_TYPES, MEDIA_SIZES, VIEWPORTS } from '../../../brand-page';
3
3
  import { applyLogoThemeToBrandPageModel, applyUserPersonalisationToBrandPageModelAsync, getBrandPageViewModelFromBrandPageModel, } from '../../../brand-page/utils';
4
4
  import { STYLE_THEME_KEYS } from '../../../brand-page/constants';
5
+ import { TEMPLATE_TABS, } from '../../../shared/template-settings/models';
5
6
  import debounce from 'lodash.debounce';
6
7
  import { MOBILE_HEIGHT, MOBILE_WIDTH } from '../../constants';
7
- import { useBrandPageMakerStore } from '../../stores';
8
+ import { useBrandPageContainerStore, useBrandPageMakerStore, useBrandPageMakerUserStore, } from '../../stores';
9
+ import { useUiTemplateSettingsStore } from '../../../shared/template-settings/store';
8
10
  import { applyLogoImageBase64UrlToBrandPageTemplateModel, applyLogoImageToBrandPageTemplateModel, applyLogoTemplateImageToBrandPageTemplateModel, } from '../../../brand-page/utils/logo.util';
9
11
  import { useVideoStore } from '../../../lib';
10
12
  const DEBOUNCE_IN_MS = 250;
@@ -12,8 +14,20 @@ export default defineComponent({
12
14
  emits: ['template-selected'],
13
15
  setup() {
14
16
  const brandPageMakerStore = useBrandPageMakerStore();
17
+ const brandPageContainerStore = useBrandPageContainerStore();
18
+ const brandPageMakerUserStore = useBrandPageMakerUserStore();
19
+ const templateSettingsStore = useUiTemplateSettingsStore();
15
20
  return {
16
21
  selectedTemplateId: computed(() => brandPageMakerStore.selectedTemplateId),
22
+ isPrePurchase: computed(() => brandPageContainerStore.isPrePurchase),
23
+ runtimeEnvironment: computed(() => brandPageContainerStore.runtimeEnvironment),
24
+ isAdmin: computed(() => brandPageMakerUserStore.isAdmin),
25
+ userToken: computed(() => brandPageMakerUserStore.userToken),
26
+ isBrandSite: computed(() => brandPageMakerStore.brandPageType === BRAND_PAGE_TYPES.brandSite),
27
+ selectedTab: computed(() => templateSettingsStore.selectedTab.key),
28
+ renderAsImage: computed(() => templateSettingsStore.renderAsImage),
29
+ brandPageMakerUserStore,
30
+ brandPageContainerStore,
17
31
  brandPageMakerStore,
18
32
  };
19
33
  },
@@ -73,6 +87,8 @@ export default defineComponent({
73
87
  renderWidth: 400,
74
88
  rootStyles: {},
75
89
  viewModel: undefined,
90
+ imageLoadError: false,
91
+ imageLoading: true,
76
92
  };
77
93
  return data;
78
94
  },
@@ -147,16 +163,47 @@ export default defineComponent({
147
163
  });
148
164
  return cssVariables;
149
165
  },
166
+ previewImageUrl() {
167
+ let previewImageUrl = this.template.previewImageUrl;
168
+ if (!previewImageUrl) {
169
+ return '';
170
+ }
171
+ if (this.selectedTab === TEMPLATE_TABS.AI &&
172
+ this.template.contentKey &&
173
+ this.userToken) {
174
+ previewImageUrl += `&contentKey=${this.template.contentKey}&userToken=${this.userToken}`;
175
+ }
176
+ if (this.logoImage?.logoVariation !== undefined) {
177
+ previewImageUrl += `&logoVariation=${this.logoImage.logoVariation}`;
178
+ }
179
+ return previewImageUrl;
180
+ },
150
181
  },
151
182
  watch: {
183
+ template() {
184
+ if (this.isAdmin || this.isPrePurchase) {
185
+ this.updateViewModel();
186
+ }
187
+ else {
188
+ // Reset loading state when template changes for image-based previews
189
+ this.imageLoading = true;
190
+ this.imageLoadError = false;
191
+ }
192
+ },
152
193
  logoTheme: {
153
194
  handler() {
154
- this.updateViewModel();
195
+ if (this.isAdmin || this.isPrePurchase) {
196
+ this.updateViewModel();
197
+ }
155
198
  },
156
199
  deep: true,
157
200
  },
158
- template() {
159
- this.updateViewModel();
201
+ previewImageUrl() {
202
+ // Reset loading state whenever the preview URL changes
203
+ if (!this.isAdmin && !this.isPrePurchase) {
204
+ this.imageLoading = true;
205
+ this.imageLoadError = false;
206
+ }
160
207
  },
161
208
  },
162
209
  created() {
@@ -197,7 +244,24 @@ export default defineComponent({
197
244
  onSetPreviewStyles(styles) {
198
245
  this.rootStyles = styles;
199
246
  },
247
+ onImageError() {
248
+ this.imageLoadError = true;
249
+ this.imageLoading = false;
250
+ },
251
+ onImageLoad() {
252
+ this.imageLoadError = false;
253
+ this.imageLoading = false;
254
+ },
255
+ regeneratePreview() {
256
+ this.imageLoadError = false;
257
+ this.imageLoading = true;
258
+ this.$forceUpdate();
259
+ },
200
260
  async updateViewModel(forceUpdate = true) {
261
+ // Only update view model for admin or pre-purchase mode
262
+ if (!this.isAdmin && !this.isPrePurchase) {
263
+ return;
264
+ }
201
265
  const videoStore = useVideoStore();
202
266
  let model = this.template.brandPageModel;
203
267
  if (this.logoImageBase64Url) {
@@ -178,13 +178,21 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
178
178
  if (!this.selectedTemplateId) {
179
179
  return;
180
180
  }
181
- const template = templateSettingsStore.getTemplateByTemplateId(this.selectedTemplateId);
181
+ let template = templateSettingsStore.getTemplateByTemplateId(this.selectedTemplateId);
182
182
  if (!template) {
183
183
  if (process.env.NODE_ENV !== 'production') {
184
184
  throw new Error('template should not be falsy');
185
185
  }
186
186
  return;
187
187
  }
188
+ // If template doesn't have brandPageModel (post-purchase mode), fetch it
189
+ if (!template.brandPageModel) {
190
+ template = await templateSettingsStore.getCachedTemplateByTokenAsync(this.selectedTemplateId);
191
+ }
192
+ if (!template?.brandPageModel) {
193
+ console.error('Failed to fetch template brandPageModel');
194
+ return;
195
+ }
188
196
  this.isApplyingTemplate = true;
189
197
  let brandPageModel = cloneDeep(template.brandPageModel);
190
198
  // Apply selected logo image to logo contents
@@ -6,6 +6,7 @@ export interface UserState extends UIUserState {
6
6
  emailAddress: string;
7
7
  hasBrandPagePremiumSubscription: boolean;
8
8
  brandPageCommissionPercentage: number | undefined;
9
+ userToken?: string;
9
10
  }
10
11
  export declare const DEFAULT_MAX_NUM_OF_PAGES = 2;
11
12
  export declare const UNLIMITED_MAX_NUM_OF_PAGES = -1;
@@ -17,4 +18,7 @@ export declare const useBrandPageMakerUserStore: import("pinia").StoreDefinition
17
18
  isAdmin: boolean;
18
19
  }): void;
19
20
  setBrandPageCommissionPercentage(payload: number): void;
21
+ setUserToken(payload: {
22
+ userToken: string;
23
+ }): void;
20
24
  }>;
@@ -24,6 +24,7 @@ export const useBrandPageMakerUserStore = defineStore('brandPageMakerUser', {
24
24
  hasBrandPagePremiumSubscription: false,
25
25
  brandPageCommissionPercentage: undefined,
26
26
  isAdmin: false, // this is currently used as way to identify admin maker mode
27
+ userToken: undefined,
27
28
  }),
28
29
  actions: {
29
30
  setEmailAddress(payload) {
@@ -41,5 +42,8 @@ export const useBrandPageMakerUserStore = defineStore('brandPageMakerUser', {
41
42
  setBrandPageCommissionPercentage(payload) {
42
43
  this.brandPageCommissionPercentage = payload;
43
44
  },
45
+ setUserToken(payload) {
46
+ this.userToken = payload.userToken;
47
+ },
44
48
  },
45
49
  });