@designcrowd/library.brand-page 5.15.21 → 5.15.23

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 (57) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DZ5Vucii.js → CreatedOnBrandCrowd-de-de-DVlAk_mx.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DknGL3Zu.js → CreatedOnBrandCrowd-en-us-i2KX3alI.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-NwtO4oKe.js → CreatedOnBrandCrowd-es-es-ClzzzTI3.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-DfUf3ajR.js → CreatedOnBrandCrowd-fr-ca-D6dxQ5KM.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-DfUf3ajR.js → CreatedOnBrandCrowd-fr-fr-D6dxQ5KM.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-TjO5ceZp.js → CreatedOnBrandCrowd-pt-br-DmVuNb2Y.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-TjO5ceZp.js → CreatedOnBrandCrowd-pt-pt-DmVuNb2Y.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-CiEaeern.js → CreatedOnDcom-de-de-BXuZSAv5.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-BsQTy39u.js → CreatedOnDcom-en-us-BUJtytFW.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-BgUs8RD2.js → CreatedOnDcom-es-es-6XTjYuA1.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-5Rt16LTN.js → CreatedOnDcom-fr-ca-DFWSAIta.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DRajgiLq.js → CreatedOnDcom-fr-fr-DKE1TLWp.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-CpGsGCmj.js → CreatedOnDcom-pt-br-C_NMPYYH.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-C1CjD8Ks.js → CreatedOnDcom-pt-pt-CdJEmjZb.js} +1 -1
  15. package/lib/src/brand-page/models/payment.model.d.ts +7 -0
  16. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +1 -0
  17. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +1 -0
  18. package/lib/src/bundled-translations-DfL3kp2E.js +27 -0
  19. package/lib/src/bundled-translations.de-DE-C-Q--DoV.js +27 -0
  20. package/lib/src/bundled-translations.es-ES-C2bDEZN2.js +27 -0
  21. package/lib/src/bundled-translations.fr-CA-BT6vKgDQ.js +27 -0
  22. package/lib/src/bundled-translations.fr-FR-BekT99Kc.js +27 -0
  23. package/lib/src/bundled-translations.pt-BR-DjzgcAmv.js +27 -0
  24. package/lib/src/bundled-translations.pt-PT-ZxaU_1Hw.js +27 -0
  25. package/lib/src/clients/brand-page-client.d.ts +1 -0
  26. package/lib/src/clients/brand-page-client.js +9 -0
  27. package/lib/src/css/library.brand-page-brandCrowd.min.css +2 -5
  28. package/lib/src/css/library.brand-page-brandPage.min.css +2 -5
  29. package/lib/src/css/library.brand-page-designCom.min.css +2 -5
  30. package/lib/src/css/library.brand-page-preview.min.css +2 -5
  31. package/lib/src/index.mjs +1 -1
  32. package/lib/src/{lib-BpQH-xbj.js → lib-D-d2RO3p.js} +15579 -15432
  33. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +1 -0
  34. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +1 -0
  35. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +1 -0
  36. package/lib/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.mixin.d.ts +1 -0
  37. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +79 -1
  38. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.js +16 -0
  39. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +1 -0
  40. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +1 -0
  41. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +1 -0
  42. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +1 -0
  43. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +2 -1
  44. package/lib/src/shared/page-settings/store/page-settings-store.js +35 -0
  45. package/package.json +2 -2
  46. package/src/brand-page/models/payment.model.ts +8 -0
  47. package/src/clients/brand-page-client.ts +18 -0
  48. package/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.ts +34 -0
  49. package/src/shared/content-settings/components/payment-config-field/PaymentConfigField.vue +23 -8
  50. package/src/shared/page-settings/store/page-settings-store.ts +58 -0
  51. package/lib/src/bundled-translations-BMr0LtzI.js +0 -27
  52. package/lib/src/bundled-translations.de-DE-BDSwnN6z.js +0 -27
  53. package/lib/src/bundled-translations.es-ES-B4FHib2V.js +0 -27
  54. package/lib/src/bundled-translations.fr-CA-SQDJwXv_.js +0 -27
  55. package/lib/src/bundled-translations.fr-FR-B84T67W5.js +0 -27
  56. package/lib/src/bundled-translations.pt-BR-C9ZYeoLd.js +0 -27
  57. package/lib/src/bundled-translations.pt-PT-BB4hTIYd.js +0 -27
@@ -659,6 +659,7 @@ declare const _default: import("vue").DefineComponent<{}, {
659
659
  logoImageHeight: string | undefined;
660
660
  logoImageWidth: string | undefined;
661
661
  }): void;
662
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
662
663
  setPageTitle({ pageTitle, pageIndex, }: {
663
664
  pageTitle: string;
664
665
  pageIndex: number;
@@ -535,6 +535,7 @@ declare const _default: import("vue").DefineComponent<{}, {
535
535
  logoImageHeight: string | undefined;
536
536
  logoImageWidth: string | undefined;
537
537
  }): void;
538
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
538
539
  setPageTitle({ pageTitle, pageIndex, }: {
539
540
  pageTitle: string;
540
541
  pageIndex: number;
@@ -733,6 +733,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
733
733
  logoImageHeight: string | undefined;
734
734
  logoImageWidth: string | undefined;
735
735
  }): void;
736
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
736
737
  setPageTitle({ pageTitle, pageIndex, }: {
737
738
  pageTitle: string;
738
739
  pageIndex: number;
@@ -76,6 +76,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
76
76
  logoImageHeight: string | undefined;
77
77
  logoImageWidth: string | undefined;
78
78
  }): void;
79
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
79
80
  setPageTitle({ pageTitle, pageIndex, }: {
80
81
  pageTitle: string;
81
82
  pageIndex: number;
@@ -1,5 +1,5 @@
1
1
  import type { PropType } from 'vue';
2
- import type { BrandPagePaymentConfig, PaymentConfig } from '../../../../brand-page';
2
+ import type { BrandPagePaymentConfig, BrandPagePaymentConfigCurrency, PaymentConfig } from '../../../../brand-page';
3
3
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
4
  id: {
5
5
  type: StringConstructor;
@@ -368,8 +368,85 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
368
368
  deleteProduct(id: any): void;
369
369
  getVariantCombinations(variants: import("../../../../brand-page/models/shop.model").VariantModel[]): import("../../../../brand-page/models/shop.model").VariantOptionModel[][];
370
370
  }>;
371
+ uiPageSettingsStore: import("pinia").Store<"uiPageSettings", import("../../../page-settings/store/page-settings-store").PageSettingsState, {
372
+ pageIndex(): number;
373
+ }, {
374
+ setCurrentPageIndex({ pageIndex }: {
375
+ pageIndex: number;
376
+ }): void;
377
+ setState({ newState, }: {
378
+ newState: Omit<import("../../../page-settings/store/page-settings-store").PageSettingsState, "sectionCollapsedStates">;
379
+ }): void;
380
+ setPageContents({ pageIndex, contents, }: {
381
+ pageIndex: number;
382
+ contents: import("../../models").ContentItem<import("../../../../brand-page").Content>[];
383
+ }): void;
384
+ setPages({ pages }: {
385
+ pages: import("../../../page-settings/models").ContentPage[];
386
+ }): void;
387
+ setNewPageModalVisibilityAsync({ isNewPageModalVisible, }: {
388
+ isNewPageModalVisible: boolean;
389
+ }): Promise<void>;
390
+ addPage({ page }: {
391
+ page: import("../../../page-settings/models").ContentPage;
392
+ }): void;
393
+ setPageTitleAndSlug({ title, slug, index, }: {
394
+ title: string;
395
+ slug: string;
396
+ index: number;
397
+ }): void;
398
+ setPageVisibility({ isHidden, index, }: {
399
+ isHidden: boolean;
400
+ index: number;
401
+ }): void;
402
+ setPageSettingsSectionValue({ sectionName, propName, index, value, merge, viewport, }: {
403
+ sectionName: "footer" | "header" | "pages";
404
+ propName: "copyrightStyle" | "style" | "iconStyle" | "displayStyle" | "backgroundStyle" | "logoImage" | "logoImageStyle" | "isLogoOptional" | "viewport" | "isLogoVisible" | "logoTemplateImage" | "logoImageHeight" | "logoImageWidth" | "navigationStyles" | "navigation" | "logoImageUrl" | "logoDraftToken" | "logoVariation" | "logoImageBase64Url" | "backgroundColorEnabled" | "copyrightText" | "socialLinks" | "textFontFamily";
405
+ index?: number | undefined;
406
+ value: string | number | boolean | BrandPageCssStyle | import("../../../../brand-page").LinksItem[] | Partial<import("../../../../brand-page").ImageItem> | null | undefined;
407
+ merge?: boolean | undefined;
408
+ viewport: import("../../../../brand-page").ViewportsType;
409
+ }): void;
410
+ setPageSettingsSectionLogoImage({ sectionName, logoImage, logoTemplateImage, logoImageBase64Url, viewport, keepLogoVariation, logoImageHeight, logoImageWidth, }: {
411
+ logoImage: import("../../../../brand-page").LogoImageModel;
412
+ logoTemplateImage?: import("../../../../brand-page").LogoTemplateImageModel | undefined;
413
+ logoImageBase64Url: string | undefined;
414
+ sectionName: "footer" | "header" | "pages";
415
+ viewport: import("../../../../brand-page").ViewportsType;
416
+ keepLogoVariation?: boolean | undefined;
417
+ logoImageHeight?: string | undefined;
418
+ logoImageWidth?: string | undefined;
419
+ }): void;
420
+ updatePageSettingsSectionLogoImageStyle({ sectionName, viewport, logoImageHeight, logoImageWidth, }: {
421
+ sectionName: string;
422
+ viewport: string;
423
+ logoImageHeight: string | undefined;
424
+ logoImageWidth: string | undefined;
425
+ }): void;
426
+ updatePaymentConfigCurrency(updatedPaymentConfig: BrandPagePaymentConfig, newCurrency: BrandPagePaymentConfigCurrency): void;
427
+ setPageTitle({ pageTitle, pageIndex, }: {
428
+ pageTitle: string;
429
+ pageIndex: number;
430
+ }): void;
431
+ setCurrentPageIndexAndGoToPage({ pageIndex }: {
432
+ pageIndex: number;
433
+ }): void;
434
+ addNewPage(payload: {
435
+ title: string;
436
+ }): void;
437
+ setSelectedSectionName({ sectionName, }: {
438
+ sectionName?: "footer" | "header" | "pages" | undefined;
439
+ }): void;
440
+ setSectionCollapsedState({ sectionName, isCollapsed, }: {
441
+ sectionName: "footer" | "header" | "pages";
442
+ isCollapsed: boolean;
443
+ }): void;
444
+ collapseAllSections(): void;
445
+ setPreviousSelectedDisplayStyle(viewport: string, displayStyle: string): void;
446
+ }>;
371
447
  }, {
372
448
  selectedPaymentConfig: BrandPagePaymentConfig | undefined;
449
+ isCurrencyUpdating: boolean;
373
450
  }, {
374
451
  currencySymbol(): string;
375
452
  isPaymentConfigActive(): boolean;
@@ -382,6 +459,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
382
459
  onAddPaymentProviderClick(): Promise<void>;
383
460
  onPaymentConfigSelected(paymentConfig: BrandPagePaymentConfig): void;
384
461
  updatePaymentConfig(paymentConfig: BrandPagePaymentConfig): void;
462
+ onCurrencySelected(selectedCurrency: BrandPagePaymentConfigCurrency): Promise<void>;
385
463
  }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
386
464
  id: {
387
465
  type: StringConstructor;
@@ -2,6 +2,8 @@ import { computed, defineComponent } from 'vue';
2
2
  import { useBrandPageContainerStore, useEventManagerStore, } from '../../../../brand-page-maker/stores';
3
3
  import { useShopConfigStore } from '../../../../shared/ecommerce-settings/store/shop-settings-store';
4
4
  import { paymentConfigTr } from '../../../../composables/useTranslate';
5
+ import brandPageClient from '../../../../clients/brand-page-client';
6
+ import { useUiPageSettingsStore } from '../../../../shared/page-settings/store';
5
7
  export default defineComponent({
6
8
  props: {
7
9
  id: {
@@ -24,6 +26,7 @@ export default defineComponent({
24
26
  },
25
27
  setup() {
26
28
  const brandPageContainerStore = useBrandPageContainerStore();
29
+ const uiPageSettingsStore = useUiPageSettingsStore();
27
30
  const eventManagerStore = useEventManagerStore();
28
31
  const shopConfigStore = useShopConfigStore();
29
32
  return {
@@ -32,11 +35,13 @@ export default defineComponent({
32
35
  brandPageContainerStore,
33
36
  eventManagerStore,
34
37
  shopConfigStore,
38
+ uiPageSettingsStore,
35
39
  };
36
40
  },
37
41
  emits: ['update:modelValue'],
38
42
  data: () => ({
39
43
  selectedPaymentConfig: undefined,
44
+ isCurrencyUpdating: false,
40
45
  }),
41
46
  computed: {
42
47
  currencySymbol() {
@@ -131,5 +136,16 @@ export default defineComponent({
131
136
  };
132
137
  this.$emit('update:modelValue', payload);
133
138
  },
139
+ async onCurrencySelected(selectedCurrency) {
140
+ if (this.selectedPaymentConfig.defaultCurrency ===
141
+ selectedCurrency.iso4127Code) {
142
+ return;
143
+ }
144
+ this.isCurrencyUpdating = true;
145
+ const updatedPaymentConfig = await brandPageClient.updatePaymentConfigCurrencyAsync(this.brandPageToken, this.selectedPaymentConfig.id, selectedCurrency.id);
146
+ this.uiPageSettingsStore.updatePaymentConfigCurrency(updatedPaymentConfig, selectedCurrency);
147
+ await this.brandPageContainerStore.saveBrandPage();
148
+ this.isCurrencyUpdating = false;
149
+ },
134
150
  },
135
151
  });
@@ -556,6 +556,7 @@ declare const _default: import("vue").DefineComponent<{}, {
556
556
  logoImageHeight: string | undefined;
557
557
  logoImageWidth: string | undefined;
558
558
  }): void;
559
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../brand-page").BrandPagePaymentConfigCurrency): void;
559
560
  setPageTitle({ pageTitle, pageIndex, }: {
560
561
  pageTitle: string;
561
562
  pageIndex: number;
@@ -55,6 +55,7 @@ declare const _default: import("vue").DefineComponent<{}, {
55
55
  logoImageHeight: string | undefined;
56
56
  logoImageWidth: string | undefined;
57
57
  }): void;
58
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
58
59
  setPageTitle({ pageTitle, pageIndex, }: {
59
60
  pageTitle: string;
60
61
  pageIndex: number;
@@ -3948,6 +3948,7 @@ declare const _default: import("vue").DefineComponent<{}, {
3948
3948
  logoImageHeight: string | undefined;
3949
3949
  logoImageWidth: string | undefined;
3950
3950
  }): void;
3951
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
3951
3952
  setPageTitle({ pageTitle, pageIndex, }: {
3952
3953
  pageTitle: string;
3953
3954
  pageIndex: number;
@@ -3267,6 +3267,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
3267
3267
  logoImageHeight: string | undefined;
3268
3268
  logoImageWidth: string | undefined;
3269
3269
  }): void;
3270
+ updatePaymentConfigCurrency(updatedPaymentConfig: import("../../../../brand-page").BrandPagePaymentConfig, newCurrency: import("../../../../brand-page").BrandPagePaymentConfigCurrency): void;
3270
3271
  setPageTitle({ pageTitle, pageIndex, }: {
3271
3272
  pageTitle: string;
3272
3273
  pageIndex: number;
@@ -1,6 +1,6 @@
1
1
  import type { ContentItem } from '../../content-settings/models';
2
2
  import { PageHeaderDesktop, PageHeaderMobile, PageFooterDesktop, PageFooterMobile, VIEWPORTS } from '../../../brand-page';
3
- import type { Content, ImageGalleryItem, LinksItem, LogoImageModel, ViewportsType, LogoTemplateImageModel } from '../../../brand-page';
3
+ import type { Content, ImageGalleryItem, LinksItem, LogoImageModel, ViewportsType, LogoTemplateImageModel, BrandPagePaymentConfig, BrandPagePaymentConfigCurrency } from '../../../brand-page';
4
4
  import type { ContentPage } from '../models';
5
5
  import { PAGE_SECTIONS } from '../models';
6
6
  export type PageSettingsStateSectionStyles = Partial<PageHeaderDesktop & PageHeaderMobile & PageFooterDesktop & PageFooterMobile>;
@@ -88,6 +88,7 @@ export declare const useUiPageSettingsStore: import("pinia").StoreDefinition<"ui
88
88
  logoImageHeight: string | undefined;
89
89
  logoImageWidth: string | undefined;
90
90
  }): void;
91
+ updatePaymentConfigCurrency(updatedPaymentConfig: BrandPagePaymentConfig, newCurrency: BrandPagePaymentConfigCurrency): void;
91
92
  setPageTitle({ pageTitle, pageIndex, }: {
92
93
  pageTitle: string;
93
94
  pageIndex: number;
@@ -7,6 +7,7 @@ import { useUiContentSettingsStore } from '../../content-settings/store';
7
7
  import { useBrandPageMakerStore, useBrandPageMakerUserStore, useBrandPageContainerStore, useUiStore, } from '../../../brand-page-maker/stores';
8
8
  import { useUiLogoSettingsStore } from '../../logo-settings/store';
9
9
  import { TRIGGER_TYPE, UPGRADE_CTA_LOCATIONS, useEventTracker, } from '../../../brand-page-maker/composables/useEventTracker';
10
+ import { useShopConfigStore } from '../../ecommerce-settings/store/shop-settings-store';
10
11
  export const PAGE_SECTIONS_PAGES = 'pages';
11
12
  export const PAGE_SETTINGS_SECTIONS = {
12
13
  ...PAGE_SECTIONS,
@@ -162,6 +163,40 @@ export const useUiPageSettingsStore = defineStore('uiPageSettings', {
162
163
  this.sections[sectionName][viewport].logoImageHeight = logoImageHeight;
163
164
  this.sections[sectionName][viewport].logoImageWidth = logoImageWidth;
164
165
  },
166
+ updatePaymentConfigCurrency(updatedPaymentConfig, newCurrency) {
167
+ const currencyUpdate = {
168
+ name: updatedPaymentConfig.name,
169
+ defaultCurrency: newCurrency.iso4127Code,
170
+ defaultCurrencySymbol: newCurrency.symbol,
171
+ };
172
+ this.pages.forEach((page) => {
173
+ page.contents.forEach((contentItem) => {
174
+ if (contentItem.type === 'support-me') {
175
+ if (contentItem.settings.content.supportMeConfig.paymentConfig?.id ===
176
+ updatedPaymentConfig.id) {
177
+ Object.assign(contentItem.settings.content.supportMeConfig.paymentConfig, currencyUpdate);
178
+ }
179
+ }
180
+ else if (contentItem.type === 'request-payment') {
181
+ if (contentItem.settings.content.requestPaymentConfig.paymentConfig
182
+ ?.id === updatedPaymentConfig.id) {
183
+ Object.assign(contentItem.settings.content.requestPaymentConfig.paymentConfig, currencyUpdate);
184
+ }
185
+ }
186
+ else if (contentItem.type === 'shop-section') {
187
+ if (contentItem.settings.content.shopPaymentConfig.paymentConfig
188
+ ?.id === updatedPaymentConfig.id) {
189
+ Object.assign(contentItem.settings.content.shopPaymentConfig.paymentConfig, currencyUpdate);
190
+ }
191
+ }
192
+ });
193
+ });
194
+ const shopConfigStore = useShopConfigStore();
195
+ if (shopConfigStore.paymentConfig &&
196
+ shopConfigStore.paymentConfig.id === updatedPaymentConfig.id) {
197
+ Object.assign(shopConfigStore.paymentConfig, currencyUpdate);
198
+ }
199
+ },
165
200
  setPageTitle({ pageTitle, pageIndex, }) {
166
201
  const slug = getPageSlugFromPageTitle(pageTitle, this.pages.filter((_p, i) => i !== pageIndex).map((p) => p.slug));
167
202
  this.setPageTitleAndSlug({
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "5.15.21",
4
+ "version": "5.15.23",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "dependencies": {
57
57
  "@ckpack/vue-color": "1.4.1",
58
- "@designcrowd/fe-shared-lib": "1.4.1",
58
+ "@designcrowd/fe-shared-lib": "1.4.3",
59
59
  "@pinia/nuxt": "0.11.0",
60
60
  "@storybook/react": "9.0.4",
61
61
  "@tiptap/extension-bubble-menu": "^2.14.0",
@@ -52,6 +52,14 @@ export interface PaymentConfig {
52
52
  paymentOptions: PaymentOption[];
53
53
  }
54
54
 
55
+ export interface BrandPagePaymentConfigCurrency {
56
+ id: string;
57
+ iso31662Code: string;
58
+ iso4127Code: string;
59
+ name: string;
60
+ symbol: string;
61
+ }
62
+
55
63
  export const PAYMENT_OPTION_DISPLAY_TYPES = {
56
64
  text: 'text',
57
65
  thumbnail: 'thumbnail',
@@ -376,6 +376,23 @@ const sendLogoSearchImpressionClickData = async (
376
376
  }
377
377
  };
378
378
 
379
+ const updatePaymentConfigCurrencyAsync = async (
380
+ brandPageToken: string,
381
+ paymentConfigId: string,
382
+ newCurrencyId: string,
383
+ ) => {
384
+ const url = `${getApiUrlPrefix(
385
+ BRAND_PAGE_TYPES.default,
386
+ )}/${brandPageToken}/payment-configs/update-currency`;
387
+
388
+ const response = await getAxiosInstance().put(url, {
389
+ paymentConfigId,
390
+ newCurrencyId,
391
+ });
392
+
393
+ return response.data;
394
+ };
395
+
379
396
  export default {
380
397
  saveBrandPageAsync,
381
398
  setBrandPageSlugAsync,
@@ -394,4 +411,5 @@ export default {
394
411
  checkWebsiteSlugAsync,
395
412
  searchLogoTemplatesAsync,
396
413
  sendLogoSearchImpressionClickData,
414
+ updatePaymentConfigCurrencyAsync,
397
415
  };
@@ -2,6 +2,7 @@ import type { PropType } from 'vue';
2
2
  import { computed, defineComponent } from 'vue';
3
3
  import type {
4
4
  BrandPagePaymentConfig,
5
+ BrandPagePaymentConfigCurrency,
5
6
  PaymentConfig,
6
7
  RequestPaymentConfig,
7
8
  } from '../../../../brand-page';
@@ -12,6 +13,8 @@ import {
12
13
  } from '../../../../brand-page-maker/stores';
13
14
  import { useShopConfigStore } from '../../../../shared/ecommerce-settings/store/shop-settings-store';
14
15
  import { paymentConfigTr } from '../../../../composables/useTranslate';
16
+ import brandPageClient from '../../../../clients/brand-page-client';
17
+ import { useUiPageSettingsStore } from '../../../../shared/page-settings/store';
15
18
 
16
19
  export default defineComponent({
17
20
  props: {
@@ -35,6 +38,7 @@ export default defineComponent({
35
38
  },
36
39
  setup() {
37
40
  const brandPageContainerStore = useBrandPageContainerStore();
41
+ const uiPageSettingsStore = useUiPageSettingsStore();
38
42
  const eventManagerStore = useEventManagerStore();
39
43
  const shopConfigStore = useShopConfigStore();
40
44
 
@@ -46,11 +50,13 @@ export default defineComponent({
46
50
  brandPageContainerStore,
47
51
  eventManagerStore,
48
52
  shopConfigStore,
53
+ uiPageSettingsStore,
49
54
  };
50
55
  },
51
56
  emits: ['update:modelValue'],
52
57
  data: () => ({
53
58
  selectedPaymentConfig: undefined as BrandPagePaymentConfig | undefined,
59
+ isCurrencyUpdating: false,
54
60
  }),
55
61
  computed: {
56
62
  currencySymbol(): string {
@@ -153,5 +159,33 @@ export default defineComponent({
153
159
 
154
160
  this.$emit('update:modelValue', payload);
155
161
  },
162
+ async onCurrencySelected(
163
+ selectedCurrency: BrandPagePaymentConfigCurrency,
164
+ ): Promise<void> {
165
+ if (
166
+ this.selectedPaymentConfig.defaultCurrency ===
167
+ selectedCurrency.iso4127Code
168
+ ) {
169
+ return;
170
+ }
171
+
172
+ this.isCurrencyUpdating = true;
173
+
174
+ const updatedPaymentConfig =
175
+ await brandPageClient.updatePaymentConfigCurrencyAsync(
176
+ this.brandPageToken,
177
+ this.selectedPaymentConfig.id,
178
+ selectedCurrency.id,
179
+ );
180
+
181
+ this.uiPageSettingsStore.updatePaymentConfigCurrency(
182
+ updatedPaymentConfig,
183
+ selectedCurrency,
184
+ );
185
+
186
+ await this.brandPageContainerStore.saveBrandPage();
187
+
188
+ this.isCurrencyUpdating = false;
189
+ },
156
190
  },
157
191
  });
@@ -10,12 +10,22 @@
10
10
  </p>
11
11
 
12
12
  <!-- Start Payment Config Dropdown -->
13
- <PaymentConfigDropdown
14
- :brand-page-token="brandPageToken"
15
- :payment-config-id="selectedPaymentConfigId"
16
- @on-add-payment-provider-click="onAddPaymentProviderClick"
17
- @on-payment-config-selected="onPaymentConfigSelected"
18
- />
13
+ <div class="tw-relative">
14
+ <PaymentConfigDropdown
15
+ :brand-page-token="brandPageToken"
16
+ :payment-config-id="selectedPaymentConfigId"
17
+ @on-add-payment-provider-click="onAddPaymentProviderClick"
18
+ @on-payment-config-selected="onPaymentConfigSelected"
19
+ @on-currency-selected="onCurrencySelected"
20
+ />
21
+ <div
22
+ v-if="isCurrencyUpdating"
23
+ class="tw-absolute tw-top-0 tw-w-full tw-h-full tw-flex tw-justify-center tw-items-center tw-opacity-50 tw-bg-grayscale-100"
24
+ >
25
+ <Loader />
26
+ </div>
27
+ </div>
28
+
19
29
  <!-- End Payment Config Dropdown -->
20
30
  </template>
21
31
 
@@ -49,8 +59,12 @@
49
59
  </div>
50
60
  </template>
51
61
  <script>
52
- import { Button, HelloBar } from '@designcrowd/fe-shared-lib';
53
- import { PaymentConfigDropdown } from '@designcrowd/fe-shared-lib';
62
+ import {
63
+ Button,
64
+ HelloBar,
65
+ PaymentConfigDropdown,
66
+ Loader,
67
+ } from '@designcrowd/fe-shared-lib';
54
68
  import PaymentConfigFieldMixin from './PaymentConfigField.mixin.ts';
55
69
  import { paymentConfigTr } from '../../../../composables/useTranslate';
56
70
 
@@ -59,6 +73,7 @@ export default {
59
73
  Button,
60
74
  PaymentConfigDropdown,
61
75
  HelloBar,
76
+ Loader,
62
77
  },
63
78
  mixins: [PaymentConfigFieldMixin],
64
79
  setup(props, context) {
@@ -15,6 +15,8 @@ import type {
15
15
  LogoImageModel,
16
16
  ViewportsType,
17
17
  LogoTemplateImageModel,
18
+ BrandPagePaymentConfig,
19
+ BrandPagePaymentConfigCurrency,
18
20
  } from '../../../brand-page';
19
21
  import type { ContentPage } from '../models';
20
22
  import { PAGE_SECTIONS } from '../models';
@@ -33,6 +35,7 @@ import {
33
35
  UPGRADE_CTA_LOCATIONS,
34
36
  useEventTracker,
35
37
  } from '../../../brand-page-maker/composables/useEventTracker';
38
+ import { useShopConfigStore } from '../../ecommerce-settings/store/shop-settings-store';
36
39
 
37
40
  // TODO - double check this is logically correct
38
41
  export type PageSettingsStateSectionStyles = Partial<
@@ -344,6 +347,61 @@ export const useUiPageSettingsStore = defineStore('uiPageSettings', {
344
347
  this.sections[sectionName][viewport].logoImageHeight = logoImageHeight;
345
348
  this.sections[sectionName][viewport].logoImageWidth = logoImageWidth;
346
349
  },
350
+ updatePaymentConfigCurrency(
351
+ updatedPaymentConfig: BrandPagePaymentConfig,
352
+ newCurrency: BrandPagePaymentConfigCurrency,
353
+ ) {
354
+ const currencyUpdate = {
355
+ name: updatedPaymentConfig.name,
356
+ defaultCurrency: newCurrency.iso4127Code,
357
+ defaultCurrencySymbol: newCurrency.symbol,
358
+ };
359
+
360
+ this.pages.forEach((page) => {
361
+ page.contents.forEach((contentItem) => {
362
+ if (contentItem.type === 'support-me') {
363
+ if (
364
+ contentItem.settings.content.supportMeConfig.paymentConfig?.id ===
365
+ updatedPaymentConfig.id
366
+ ) {
367
+ Object.assign(
368
+ contentItem.settings.content.supportMeConfig.paymentConfig,
369
+ currencyUpdate,
370
+ );
371
+ }
372
+ } else if (contentItem.type === 'request-payment') {
373
+ if (
374
+ contentItem.settings.content.requestPaymentConfig.paymentConfig
375
+ ?.id === updatedPaymentConfig.id
376
+ ) {
377
+ Object.assign(
378
+ contentItem.settings.content.requestPaymentConfig.paymentConfig,
379
+ currencyUpdate,
380
+ );
381
+ }
382
+ } else if (contentItem.type === 'shop-section') {
383
+ if (
384
+ contentItem.settings.content.shopPaymentConfig.paymentConfig
385
+ ?.id === updatedPaymentConfig.id
386
+ ) {
387
+ Object.assign(
388
+ contentItem.settings.content.shopPaymentConfig.paymentConfig,
389
+ currencyUpdate,
390
+ );
391
+ }
392
+ }
393
+ });
394
+ });
395
+
396
+ const shopConfigStore = useShopConfigStore();
397
+
398
+ if (
399
+ shopConfigStore.paymentConfig &&
400
+ shopConfigStore.paymentConfig.id === updatedPaymentConfig.id
401
+ ) {
402
+ Object.assign(shopConfigStore.paymentConfig, currencyUpdate);
403
+ }
404
+ },
347
405
  setPageTitle({
348
406
  pageTitle,
349
407
  pageIndex,
@@ -1,27 +0,0 @@
1
- const e = { domainCreditUsed: "Domain credit used", free: "Free" }, o = { onboardingIncomplete: "Onboarding Incomplete", pendingVerification: "Pending Verification", connected: "Connected", inactive: "Inactive", addPaymentProvider: "Add Payment Provider", deletePaymentMethod: "Delete payment method" }, a = { firstTimePublishHeaderLabel: "Set the URL for {{brandPageDisplayName}}", sitePublishedLabel: "Site published!", publishSuccessLabel: "Your {{brandPageDisplayName}} is live! Start using your link:", freePublishCardTitleLabel: "Free Address", freePublishCardDescriptionLabel: "Choose a free address to publish now. You can always edit the URL later", slugInputPlaceholderYourNameLabel: "your-name", slugInputPlaceholderYourBusinessNameLabel: "your-business-name", freeDomainLabel: "Free domain", purchasedDomainLabel: "Purchased domain", setUrlLabel: "Set URL", publishLabel: "Publish", viewMoreDomainLabel: "VIEW MORE DOMAINS", viewMyWebsiteLabel: "View {{brandPageDisplayName}}", copyLabel: "Copy", copySuccessLabel: "Copied!", publishedSuccessDescriptionLabel: "Buy matching domain name for your brand", hasAlreadyPurchasedDomainCloseButtonLabel: "No thanks, maybe later", selectDomainDropdownPlaceholder: "Select domain name", websiteFriendlyName: "Website", digitalBusinessCardFriendlyName: "Digital Business Card" }, r = { freeDomainButtonLabel: "Free Domain", buyNowButtonLabel: "Buy Now", pricePerYearLabel: "/yr", costPriceLabel: "Cost Price:" }, i = { domainSearchHeaderTitle: "Search a domain name", domainSearchHeaderSubtitle: "Buy matching domain name for your brand" }, n = { domainSearchHeaderTitle: "Search a domain name", domainSearchHeaderSubtitle: "Buy matching domain name for your brand" }, l = { searchButtonLabel: "Search", searchBarLabel: "Search", searchBarPlaceholder: "Search domain names", searchBarPreText: "Domain name" }, t = { domainSearchEmptyMessage: `Sorry, we couldn't find any domain for "{{domainNameSearchTerm}}".`, searchAnotherDomainMessage: "Try searching with another domain name." }, s = { searchButtonLabel: "Search", searchBarLabel: "Search", searchBarPlaceholder: "Search domain names", domainSearchOrConnectHeaderSubtitle: "Buy matching domain name for your brand or connect your existing domain" }, c = { uploadYourLogoText: "Upload your logo", disclaimerText: "Please ensure you have the right to use any image you upload.", generatingDesigns: "Generating Designs...", uploadingAndConverting: "Uploading and converting your logo...", stepOf: "Step {{CURRENT}} of {{TOTAL}}", uploadError: "Upload Error", cancel: "Cancel", continue: "Continue", back: "Back", no: "No", yes: "Yes", businessName: "Business Name", businessNameDescription: "Enter your logo text or business name", cropYourLogo: "Crop your logo", cropDescription: "Crop your logo design to fit our logo maker canvas", logoPreview: "Logo preview", logoPreviewDescription: "Your logo looks great! Help us setup your logo by completing the next steps.", primaryTextColor: "Primary text color", primaryTextColorDescription: "Help us setup your logo by confirming the primary text color. Choose from the available colors or click the plus icon to add another.", backgroundColor: "Background color", backgroundColorDescription: "Help us setup your logo by confirming the background color. Choose from the available colors or click the plus icon to add another.", colorsWarning: "Your text and background colors are too similar. Please choose a more distinct pairing to ensure they create quality designs.", exitConfirmationTitle: "Are you sure you want to exit?", exitConfirmationDescription: "Your logo upload progress in this session will be lost", maxByoFileErrorMessage: "Your file exceeds the maximum size of 25MB. Please choose a smaller file.", genericByoErrorMessage: "An unexpected error occured. Please try again.", dropYourFileHere: "Drop your file here or", clickToUpload: "click to upload", acceptedFiles: "We accept PNG, JPG, SVG or EPS files up to 25MB", wrongUploadType: "You can't upload files of this type." }, d = { replace: "Replace", replaceLogo: "Replace Logo", delete: "Delete", deleteLogo: "Delete Logo" }, u = {
2
- price: e,
3
- sharedPaymentConfig: o,
4
- publishBrandPageModal: a,
5
- sellDomainNameList: r,
6
- sellDomainNameListModal: i,
7
- sellDomainNameModalApplication: n,
8
- sellDomainNameSearch: l,
9
- sellDomainNameListSearchResult: t,
10
- sellDomainNameWidget: s,
11
- uploadYourLogo: c,
12
- uploadLogoSearchResultCard: d
13
- };
14
- export {
15
- u as default,
16
- e as price,
17
- a as publishBrandPageModal,
18
- r as sellDomainNameList,
19
- i as sellDomainNameListModal,
20
- t as sellDomainNameListSearchResult,
21
- n as sellDomainNameModalApplication,
22
- l as sellDomainNameSearch,
23
- s as sellDomainNameWidget,
24
- o as sharedPaymentConfig,
25
- d as uploadLogoSearchResultCard,
26
- c as uploadYourLogo
27
- };
@@ -1,27 +0,0 @@
1
- const e = { domainCreditUsed: "Verwendetes Domain-Guthaben", free: "Kostenlos" }, n = { onboardingIncomplete: "Das Onboarding wurde noch nicht abgeschlossen.", pendingVerification: "Ausstehende Verifizierung", connected: "Verbunden", inactive: "Inaktiv", addPaymentProvider: "Zahlungsanbieter hinzufügen", deletePaymentMethod: "Zahlungsmethode löschen" }, i = { firstTimePublishHeaderLabel: "Legen Sie die URL für {{brandPageDisplayName}} fest", sitePublishedLabel: "Seite veröffentlicht!", publishSuccessLabel: "Ihr {{brandPageDisplayName}} ist live! Beginnen Sie mit der Nutzung Ihres Links:", freePublishCardTitleLabel: "Freie Adresse", freePublishCardDescriptionLabel: "Wählen Sie jetzt eine kostenlose Adresse zur Veröffentlichung aus. Sie können die URL später jederzeit bearbeiten", slugInputPlaceholderYourNameLabel: "ihr-name", slugInputPlaceholderYourBusinessNameLabel: "ihr-firmen-name", freeDomainLabel: "Kostenlose Domain", purchasedDomainLabel: "Erworbene Domain", setUrlLabel: "URL festlegen", publishLabel: "Veröffentlichen", viewMoreDomainLabel: "WEITERE DOMAINS ANZEIGEN", viewMyWebsiteLabel: "{{brandPageDisplayName}} anzeigen", copyLabel: "Kopieren", copySuccessLabel: "Kopiert!", publishedSuccessDescriptionLabel: "Kaufen Sie eine passende Domain für Ihre Marke", hasAlreadyPurchasedDomainCloseButtonLabel: "Nein, danke, vielleicht später", selectDomainDropdownPlaceholder: "Domain auswählen", websiteFriendlyName: "Website", digitalBusinessCardFriendlyName: "Digitale Visitenkarte" }, r = { freeDomainButtonLabel: "Kostenlose Domain", buyNowButtonLabel: "Jetzt kaufen", pricePerYearLabel: "/yr", costPriceLabel: "Kostenpreis:" }, a = { domainSearchHeaderTitle: "Domainname suchen", domainSearchHeaderSubtitle: "Kaufen Sie eine passende Domain für Ihre Marke" }, s = { domainSearchHeaderTitle: "Domainname suchen", domainSearchHeaderSubtitle: "Kaufen Sie eine passende Domain für Ihre Marke" }, o = { searchButtonLabel: "Suche", searchBarLabel: "Suche", searchBarPlaceholder: "Domainnamen suchen", searchBarPreText: "Domainname" }, t = { domainSearchEmptyMessage: "Leider konnten wir keine Domain für „{{domainNameSearchTerm}}“ finden.", searchAnotherDomainMessage: "Versuchen Sie, mit einer anderen Domain zu suchen." }, l = { searchButtonLabel: "Suche", searchBarLabel: "Suche", searchBarPlaceholder: "Domainnamen suchen", domainSearchOrConnectHeaderSubtitle: "Kaufen Sie passende Domains für Ihre Marke oder verknüpfen Sie Ihre bestehende Domain" }, d = { uploadYourLogoText: "Laden Sie Ihr Logo hoch", disclaimerText: "Bitte stellen Sie sicher, dass Sie über die Nutzungsrechte für alle hochgeladenen Bilder verfügen.", generatingDesigns: "Designs werden erstellt ...", uploadingAndConverting: "Ihr Logo wird hochgeladen und konvertiert ...", stepOf: "Schritt {{CURRENT}} von {{TOTAL}}", uploadError: "Fehler beim Hochladen", cancel: "Abbrechen", continue: "Weiter", back: "Zurück", no: "Nein", yes: "Ja", businessName: "Name des Unternehmens", businessNameDescription: "Geben Sie Ihren Logotext oder Unternehmensnamen ein", cropYourLogo: "Schneiden Sie Ihr Logo zu", cropDescription: "Schneiden Sie Ihr Logo-Design so zu, dass es auf die Arbeitsfläche unseres Logo-Erstellers passt", logoPreview: "Logo-Vorschau", logoPreviewDescription: "Ihr Logo sieht großartig aus! Helfen Sie uns bei der Einrichtung Ihres Logos, indem Sie die nächsten Schritte ausführen.", primaryTextColor: "Primäre Textfarbe", primaryTextColorDescription: "Helfen Sie uns bei der Einrichtung Ihres Logos, indem Sie die primäre Textfarbe bestätigen. Wählen Sie aus den verfügbaren Farben oder klicken Sie auf das Plus-Symbol, um eine weitere Farbe hinzuzufügen.", backgroundColor: "Hintergrundfarbe", backgroundColorDescription: "Helfen Sie uns bei der Einrichtung Ihres Logos, indem Sie die Hintergrundfarbe bestätigen. Wählen Sie aus den verfügbaren Farben oder klicken Sie auf das Plus-Symbol, um eine weitere Farbe hinzuzufügen.", colorsWarning: "Ihre Text- und Hintergrundfarben sind zu ähnlich. Bitte wählen Sie eine deutlichere Paarung, um sicherzustellen, dass sie hochwertige Designs erstellen.", exitConfirmationTitle: "Möchten Sie die Anwendung wirklich verlassen?", exitConfirmationDescription: "Der Fortschritt Ihres Logo-Uploads in dieser Sitzung geht verloren", maxByoFileErrorMessage: "Ihre Datei überschreitet die maximale Größe von 25 MB. Bitte wählen Sie eine kleinere Datei.", genericByoErrorMessage: "Es ist ein unerwarteter Fehler aufgetreten. Bitte versuchen Sie es erneut.", dropYourFileHere: "Legen Sie Ihre Datei hier ab oder", clickToUpload: "Klicken zum Hochladen", acceptedFiles: "Wir akzeptieren PNG-, JPG-, SVG- und EPS-Dateien bis zu 25 MB.", wrongUploadType: "Sie können Dateien dieses Typs nicht hochladen." }, h = { replace: "Ersetzen", replaceLogo: "Logo ersetzen", delete: "Löschen", deleteLogo: "Logo löschen" }, c = {
2
- price: e,
3
- sharedPaymentConfig: n,
4
- publishBrandPageModal: i,
5
- sellDomainNameList: r,
6
- sellDomainNameListModal: a,
7
- sellDomainNameModalApplication: s,
8
- sellDomainNameSearch: o,
9
- sellDomainNameListSearchResult: t,
10
- sellDomainNameWidget: l,
11
- uploadYourLogo: d,
12
- uploadLogoSearchResultCard: h
13
- };
14
- export {
15
- c as default,
16
- e as price,
17
- i as publishBrandPageModal,
18
- r as sellDomainNameList,
19
- a as sellDomainNameListModal,
20
- t as sellDomainNameListSearchResult,
21
- s as sellDomainNameModalApplication,
22
- o as sellDomainNameSearch,
23
- l as sellDomainNameWidget,
24
- n as sharedPaymentConfig,
25
- h as uploadLogoSearchResultCard,
26
- d as uploadYourLogo
27
- };