@designcrowd/library.brand-page 5.14.1 → 5.14.2-ml3

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 (55) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-GGeRP-yJ.js → CreatedOnBrandCrowd-de-de-DxLeSo0D.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-D-mcoYKD.js → CreatedOnBrandCrowd-en-us-p9-PKTfD.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-UB-XVZLH.js → CreatedOnBrandCrowd-es-es-Dg1DkZwL.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-BcLwD-Ww.js → CreatedOnBrandCrowd-fr-fr-r6Ers47p.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-pt-pt-DuTtIiT7.js → CreatedOnBrandCrowd-pt-pt-CRvyq6iB.js} +1 -1
  6. package/lib/src/{CreatedOnDcom-de-de-6nOtKdaY.js → CreatedOnDcom-de-de-DfCzyu8K.js} +1 -1
  7. package/lib/src/{CreatedOnDcom-en-us-BlzEFog2.js → CreatedOnDcom-en-us-CP6lT2IJ.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-es-es-B_v3IYem.js → CreatedOnDcom-es-es-CABw9-cD.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-fr-fr-DmWvH9K_.js → CreatedOnDcom-fr-fr-DIN2-W0Q.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-pt-pt-P25mfZVx.js → CreatedOnDcom-pt-pt-BLTdvqrM.js} +1 -1
  11. package/lib/src/brand-page/models/brand-page-context.model.d.ts +2 -0
  12. package/lib/src/brand-page/models/brand-page-context.model.js +2 -1
  13. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +12 -3
  14. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.js +1 -0
  15. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +16 -3
  16. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +12 -3
  17. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +12 -3
  18. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +12 -3
  19. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +12 -3
  20. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +12 -3
  21. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +7 -1
  22. package/lib/src/brand-page-maker/composables/useEventTracker.js +29 -4
  23. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +14 -3
  24. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +56 -9
  25. package/lib/src/brand-page-maker/stores/route/localised-route-store.js +6 -0
  26. package/lib/src/clients/brand-page-client.d.ts +20 -3
  27. package/lib/src/clients/brand-page-client.js +29 -17
  28. package/lib/src/css/library.brand-page-brandCrowd.min.css +14 -11
  29. package/lib/src/css/library.brand-page-brandPage.min.css +14 -11
  30. package/lib/src/css/library.brand-page-designCom.min.css +14 -11
  31. package/lib/src/css/library.brand-page-preview.min.css +14 -11
  32. package/lib/src/index.mjs +35 -34
  33. package/lib/src/{lib-CQSKlB0S.js → lib-OVp_vdPB.js} +20480 -20315
  34. package/lib/src/mockServiceWorker.js +1 -1
  35. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +4 -0
  36. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +4 -0
  37. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +12 -3
  38. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +12 -3
  39. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +16 -3
  40. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +12 -3
  41. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +30 -10
  42. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +25 -2
  43. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +12 -3
  44. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +4 -0
  45. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +16 -3
  46. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +4 -0
  47. package/package.json +2 -2
  48. package/src/brand-page/models/brand-page-context.model.ts +7 -1
  49. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.ts +1 -0
  50. package/src/brand-page-maker/composables/useEventTracker.ts +37 -4
  51. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +96 -9
  52. package/src/brand-page-maker/stores/route/localised-route-store.ts +6 -0
  53. package/src/clients/brand-page-client.ts +55 -20
  54. package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +31 -2
  55. package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.vue +8 -0
@@ -1,7 +1,41 @@
1
- import axios from 'axios';
1
+ import axios, { type AxiosInstance } from 'axios';
2
2
  import type { BrandPageType } from '../brand-page';
3
3
  import { BRAND_PAGE_TYPES } from '../brand-page';
4
4
  import type { WebsiteSlugCheckResponse } from '../brand-page-maker/models/api.model';
5
+ import { getCurrentLocale } from '../composables/useTranslate';
6
+
7
+ export interface SaveBrandPageResponse {
8
+ designDraftToken: string;
9
+ status: string;
10
+ slug: string;
11
+ canPublish: boolean;
12
+ websiteUpsellAbTestKey: string;
13
+ websiteUpsellAbTestValue: string;
14
+ websiteUpsellModalViewModel: any;
15
+ }
16
+
17
+ export interface PublishBrandPageResponse {
18
+ designDraftToken: string;
19
+ status: string;
20
+ slug: string;
21
+ websiteUpsellAbTestKey: string;
22
+ websiteUpsellAbTestValue: string;
23
+ websiteUpsellModalViewModel: any;
24
+ }
25
+
26
+ let AXIOS_INSTANCE: AxiosInstance;
27
+
28
+ const getAxiosInstance = () => {
29
+ if (!AXIOS_INSTANCE) {
30
+ AXIOS_INSTANCE = axios.create({
31
+ headers: {
32
+ 'Accept-Language': getCurrentLocale(),
33
+ },
34
+ });
35
+ }
36
+
37
+ return AXIOS_INSTANCE;
38
+ };
5
39
 
6
40
  const getApiUrlPrefix = (brandPageType: BrandPageType) => {
7
41
  switch (brandPageType) {
@@ -20,12 +54,12 @@ const saveBrandPageAsync = async (
20
54
  brandPageType: BrandPageType,
21
55
  request: any,
22
56
  designDraftToken?: string,
23
- ) => {
57
+ ): Promise<SaveBrandPageResponse | null> => {
24
58
  const url = `${getApiUrlPrefix(brandPageType)}${
25
59
  designDraftToken ? `/${designDraftToken}` : ''
26
60
  }`;
27
61
 
28
- const response = await axios.post(url, request);
62
+ const response = await getAxiosInstance().post(url, request);
29
63
 
30
64
  if (response.status === 200) {
31
65
  return response.data;
@@ -38,12 +72,12 @@ const setBrandPageSlugAsync = async (
38
72
  brandPageType: BrandPageType,
39
73
  designDraftToken,
40
74
  options,
41
- ) => {
75
+ ): Promise<PublishBrandPageResponse | null> => {
42
76
  const { slug, shouldPublish, brandPageContentTypes } = options;
43
77
 
44
78
  const url = `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/publish`;
45
79
 
46
- const response = await axios.post(url, {
80
+ const response = await getAxiosInstance().post(url, {
47
81
  slug,
48
82
  shouldPublish,
49
83
  brandPageContentTypes: brandPageContentTypes || [],
@@ -65,7 +99,7 @@ const createDefaultBrandPage = async (
65
99
  brandPageType,
66
100
  )}/${slug}/default/${logoDraftToken}`;
67
101
 
68
- const response = await axios.get(url);
102
+ const response = await getAxiosInstance().get(url);
69
103
 
70
104
  if (response.status !== 200) {
71
105
  return null;
@@ -77,10 +111,10 @@ const createDefaultBrandPage = async (
77
111
  const unpublishBrandPageAsync = async (
78
112
  brandPageType: BrandPageType,
79
113
  designDraftToken,
80
- ) => {
114
+ ): Promise<PublishBrandPageResponse | null> => {
81
115
  const url = `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/unpublish`;
82
116
 
83
- const response = await axios.post(url);
117
+ const response = await getAxiosInstance().post(url);
84
118
 
85
119
  if (response.status !== 200) {
86
120
  return null;
@@ -96,7 +130,7 @@ const updateBrandPageMetaAsync = async (
96
130
  ) => {
97
131
  const url = `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/meta`;
98
132
 
99
- const response = await axios.put(url, request);
133
+ const response = await getAxiosInstance().put(url, request);
100
134
 
101
135
  if (response.status !== 200) {
102
136
  return null;
@@ -112,7 +146,7 @@ const updateSensitiveContentAsync = async (
112
146
  ) => {
113
147
  const url = `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/updateSensitiveContent`;
114
148
 
115
- const response = await axios.put(url, request);
149
+ const response = await getAxiosInstance().put(url, request);
116
150
 
117
151
  if (response.status !== 200) {
118
152
  return null;
@@ -130,7 +164,7 @@ const triggerBrandPageSavedEvent = async (
130
164
  brandPageType,
131
165
  )}/${designDraftToken}/events/saved`;
132
166
 
133
- await axios.post(url, request);
167
+ await getAxiosInstance().post(url, request);
134
168
  };
135
169
 
136
170
  const getStripeOnboardingUrl = async (
@@ -145,7 +179,7 @@ const getStripeOnboardingUrl = async (
145
179
  taxId ? `?taxId=${taxId}` : ''
146
180
  }`;
147
181
 
148
- const response = await axios.post(url, options);
182
+ const response = await getAxiosInstance().post(url, options);
149
183
 
150
184
  if (response.status !== 200) {
151
185
  return null;
@@ -162,7 +196,7 @@ const getBrandPageCustomDomainStatusAsync = async (
162
196
  brandPageType,
163
197
  )}/${designDraftToken}/custom-domains/latest`;
164
198
 
165
- const response = await axios.get(url);
199
+ const response = await getAxiosInstance().get(url);
166
200
 
167
201
  return response.data;
168
202
  };
@@ -177,7 +211,7 @@ const createBrandPageCustomDomainAsync = async (
177
211
  ? `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/purchased-domains`
178
212
  : `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/custom-domains`;
179
213
 
180
- const response = await axios.post(
214
+ const response = await getAxiosInstance().post(
181
215
  url,
182
216
  { domainName },
183
217
  {
@@ -196,7 +230,8 @@ const checkWebsiteSlugAsync = async (
196
230
  const url = `${getApiUrlPrefix(brandPageType)}/${designDraftToken}/slug-check?slug=${encodeURIComponent(slug)}`;
197
231
 
198
232
  try {
199
- const response = await axios.get<WebsiteSlugCheckResponse>(url);
233
+ const response =
234
+ await getAxiosInstance().get<WebsiteSlugCheckResponse>(url);
200
235
 
201
236
  return response.data;
202
237
  } catch (error) {
@@ -218,7 +253,7 @@ const deleteBrandPageCustomDomainByCustomDomainIdAsync = async (
218
253
  brandPageType,
219
254
  )}/${designDraftToken}/custom-domains/${customDomainId}`;
220
255
 
221
- await axios.delete(url);
256
+ await getAxiosInstance().delete(url);
222
257
  };
223
258
 
224
259
  const getBrandPageCustomDomainConfigAsync = async (
@@ -228,7 +263,7 @@ const getBrandPageCustomDomainConfigAsync = async (
228
263
  brandPageType,
229
264
  )}/custom-domains/configs/default`;
230
265
 
231
- const response = await axios.get(url);
266
+ const response = await getAxiosInstance().get(url);
232
267
 
233
268
  return response.data;
234
269
  };
@@ -242,7 +277,7 @@ const updateBrandPageIsCustomDomainEnabledAsync = async (
242
277
  brandPageType,
243
278
  )}/${designDraftToken}/is-custom-domain-enabled`;
244
279
 
245
- const response = await axios.put(url, { isCustomDomainEnabled });
280
+ const response = await getAxiosInstance().put(url, { isCustomDomainEnabled });
246
281
 
247
282
  return response.data;
248
283
  };
@@ -255,7 +290,7 @@ const getBrandPageIsCustomDomainEnabledAsync = async (
255
290
  brandPageType,
256
291
  )}/${designDraftToken}/is-custom-domain-enabled`;
257
292
 
258
- const response = await axios.get(url);
293
+ const response = await getAxiosInstance().get(url);
259
294
 
260
295
  return response.data;
261
296
  };
@@ -268,7 +303,7 @@ const getBrandPageCustomDomainAsync = async (
268
303
  brandPageType,
269
304
  )}/${designDraftToken}/custom-domains/latest`;
270
305
 
271
- const response = await axios.get(url, {
306
+ const response = await getAxiosInstance().get(url, {
272
307
  validateStatus: (status) => status === 200 || status === 404,
273
308
  });
274
309
 
@@ -17,6 +17,7 @@ import {
17
17
  useEventTracker,
18
18
  } from '../../brand-page-maker/composables/useEventTracker';
19
19
  import { publishBrandPageModalWithStateTr } from '../../composables/useTranslate';
20
+ import { BRAND_PAGE_TYPES } from '../../brand-page/models';
20
21
 
21
22
  export default defineComponent({
22
23
  props: {
@@ -40,7 +41,13 @@ export default defineComponent({
40
41
  default: false,
41
42
  },
42
43
  },
43
- emits: ['on-close', 'on-publish', 'on-slug-changed', 'on-publish-options'],
44
+ emits: [
45
+ 'on-close',
46
+ 'on-publish',
47
+ 'on-slug-changed',
48
+ 'on-publish-options',
49
+ 'upsell-offered',
50
+ ],
44
51
  setup() {
45
52
  const brandPageMakerStore = useBrandPageMakerStore();
46
53
  const brandPageContainerStore = useBrandPageContainerStore();
@@ -98,7 +105,11 @@ export default defineComponent({
98
105
  isBrandPageSlugEditMode: computed(
99
106
  () => brandPageContainerStore.isBrandPageSlugEditMode,
100
107
  ),
108
+ abTests: computed(() => brandPageContainerStore.abTests),
101
109
  brandPageType: computed(() => brandPageMakerStore.brandPageType),
110
+ isSubsequentPublish: computed(
111
+ () => brandPageContainerStore.isSubsequentPublish,
112
+ ),
102
113
  brandPageMakerStore,
103
114
  brandPageContainerStore,
104
115
  eventTracker,
@@ -166,6 +177,13 @@ export default defineComponent({
166
177
  CUSTOM_DOMAIN_STATUSES.active
167
178
  );
168
179
  },
180
+ showUpsellRotation(): boolean {
181
+ return (
182
+ this.abTests.bp_4092_rotating_upsells_at_publish &&
183
+ this.abTests.bp_4092_rotating_upsells_at_publish.isVariation &&
184
+ this.brandPageMakerStore.brandPageType === BRAND_PAGE_TYPES.brandSite
185
+ );
186
+ },
169
187
  },
170
188
  watch: {
171
189
  customDomain(newCustomDomain) {
@@ -275,11 +293,22 @@ export default defineComponent({
275
293
  domain: domain,
276
294
  isPurchasedDomain: this.hasPurchasedDomains,
277
295
  });
296
+
297
+ this.brandPageContainerStore.setIsPublishModalVisible({
298
+ isVisible: true,
299
+ });
278
300
  } else {
279
- await this.publishBrandPage({
301
+ const response = await this.publishBrandPage({
280
302
  shouldPublish: this.shouldPublish,
281
303
  slug: slug,
282
304
  });
305
+
306
+ this.brandPageContainerStore.setIsPublishModalVisible({
307
+ isVisible: true,
308
+ websiteUpsellModalViewModel: response?.websiteUpsellModalViewModel
309
+ ? response.websiteUpsellModalViewModel
310
+ : undefined,
311
+ });
283
312
  }
284
313
 
285
314
  this.eventTracker.sendPublishContinuationEvent(
@@ -26,6 +26,8 @@
26
26
  :is-busy="false"
27
27
  :is-custom-domain-active="isCustomDomainActive"
28
28
  :brand-page-type="brandPageType"
29
+ :show-upsell-rotation="showUpsellRotation"
30
+ :is-subsequent-publish="isSubsequentPublish"
29
31
  @close-modal="closeModal"
30
32
  @on-slug-changed="onSlugChanged"
31
33
  @internal-publish-brand-page="onPublish"
@@ -50,6 +52,12 @@
50
52
  @on-show-domain-list-modal="onShowDomainListModal"
51
53
  />
52
54
  </template>
55
+
56
+ <template #upsellContainer>
57
+ <div @on-show-domain-modal="onShowDomainListModal">
58
+ <slot name="upsell" />
59
+ </div>
60
+ </template>
53
61
  </PublishBrandPageModal>
54
62
  </template>
55
63
  <script>