@anker-in/campaign-ui 0.5.1-beta.3 → 0.5.2

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 (75) hide show
  1. package/dist/cjs/components/credits/context/const.js +1 -1
  2. package/dist/cjs/components/credits/context/const.js.map +2 -2
  3. package/dist/cjs/components/credits/context/hooks/useMyRewards.js +1 -1
  4. package/dist/cjs/components/credits/context/hooks/useMyRewards.js.map +3 -3
  5. package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js +1 -1
  6. package/dist/cjs/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
  7. package/dist/cjs/components/credits/context/hooks/useRedeemGoGift.js +1 -1
  8. package/dist/cjs/components/credits/context/hooks/useRedeemGoGift.js.map +3 -3
  9. package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js +1 -1
  10. package/dist/cjs/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
  11. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js +1 -1
  12. package/dist/cjs/components/credits/context/hooks/useRedeemableList.js.map +3 -3
  13. package/dist/cjs/components/credits/context/hooks/useSubscribed.js.map +2 -2
  14. package/dist/cjs/components/credits/context/provider.d.ts +2 -1
  15. package/dist/cjs/components/credits/context/provider.js +1 -1
  16. package/dist/cjs/components/credits/context/provider.js.map +3 -3
  17. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  18. package/dist/cjs/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
  19. package/dist/cjs/components/index.d.ts +2 -2
  20. package/dist/cjs/components/index.js +1 -1
  21. package/dist/cjs/components/index.js.map +2 -2
  22. package/dist/cjs/components/memberPopup/MemberPopup.js +1 -1
  23. package/dist/cjs/components/memberPopup/MemberPopup.js.map +3 -3
  24. package/dist/cjs/components/memberPopup/type.d.ts +6 -0
  25. package/dist/cjs/components/memberPopup/type.js +1 -1
  26. package/dist/cjs/components/memberPopup/type.js.map +1 -1
  27. package/dist/cjs/templates/Credits.js +1 -1
  28. package/dist/cjs/templates/Credits.js.map +2 -2
  29. package/dist/cjs/templates/Credits.types.d.ts +1 -0
  30. package/dist/cjs/templates/Credits.types.js.map +1 -1
  31. package/dist/esm/components/credits/context/const.js +1 -1
  32. package/dist/esm/components/credits/context/const.js.map +2 -2
  33. package/dist/esm/components/credits/context/hooks/useMyRewards.js +1 -1
  34. package/dist/esm/components/credits/context/hooks/useMyRewards.js.map +3 -3
  35. package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js +1 -1
  36. package/dist/esm/components/credits/context/hooks/useRedeemCoupon.js.map +3 -3
  37. package/dist/esm/components/credits/context/hooks/useRedeemGoGift.js +1 -1
  38. package/dist/esm/components/credits/context/hooks/useRedeemGoGift.js.map +3 -3
  39. package/dist/esm/components/credits/context/hooks/useRedeemProduct.js +1 -1
  40. package/dist/esm/components/credits/context/hooks/useRedeemProduct.js.map +3 -3
  41. package/dist/esm/components/credits/context/hooks/useRedeemableList.js +1 -1
  42. package/dist/esm/components/credits/context/hooks/useRedeemableList.js.map +3 -3
  43. package/dist/esm/components/credits/context/hooks/useSubscribed.js.map +2 -2
  44. package/dist/esm/components/credits/context/provider.d.ts +2 -1
  45. package/dist/esm/components/credits/context/provider.js +1 -1
  46. package/dist/esm/components/credits/context/provider.js.map +3 -3
  47. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js +1 -1
  48. package/dist/esm/components/credits/creditsRedeemList/AddressForm/index.js.map +3 -3
  49. package/dist/esm/components/index.d.ts +2 -2
  50. package/dist/esm/components/index.js +1 -1
  51. package/dist/esm/components/index.js.map +2 -2
  52. package/dist/esm/components/memberPopup/MemberPopup.js +1 -1
  53. package/dist/esm/components/memberPopup/MemberPopup.js.map +3 -3
  54. package/dist/esm/components/memberPopup/type.d.ts +6 -0
  55. package/dist/esm/components/memberPopup/type.js.map +1 -1
  56. package/dist/esm/templates/Credits.js +1 -1
  57. package/dist/esm/templates/Credits.js.map +2 -2
  58. package/dist/esm/templates/Credits.types.d.ts +1 -0
  59. package/dist/esm/templates/Credits.types.js.map +1 -1
  60. package/package.json +1 -2
  61. package/src/components/credits/context/const.ts +1 -0
  62. package/src/components/credits/context/hooks/useMyRewards.ts +2 -2
  63. package/src/components/credits/context/hooks/useRedeemCoupon.ts +2 -2
  64. package/src/components/credits/context/hooks/useRedeemGoGift.ts +2 -2
  65. package/src/components/credits/context/hooks/useRedeemProduct.ts +2 -2
  66. package/src/components/credits/context/hooks/useRedeemableList.ts +2 -2
  67. package/src/components/credits/context/hooks/useSubscribed.ts +0 -1
  68. package/src/components/credits/context/provider.tsx +4 -0
  69. package/src/components/credits/creditsRedeemList/AddressForm/index.tsx +3 -3
  70. package/src/components/index.ts +2 -2
  71. package/src/components/memberPopup/MemberPopup.tsx +14 -3
  72. package/src/components/memberPopup/type.ts +6 -0
  73. package/src/templates/Credits.tsx +1 -0
  74. package/src/templates/Credits.types.ts +1 -0
  75. package/src/stories/CartCard.stories.tsx +0 -459
@@ -87,6 +87,7 @@ export enum AlpcErrorCode {
87
87
  export const ALPC_COUNTRY_MAP = new Map<string, string>([
88
88
  ['eu-en', 'eu'],
89
89
  ['eu-de', 'de'],
90
+ ['eu-fr', 'fr'],
90
91
  ])
91
92
 
92
93
  export enum ApprovalStatus {
@@ -15,7 +15,7 @@ function useMyRewards({
15
15
  pageSize: number
16
16
  consumeType?: AlpcConsumeType
17
17
  }) {
18
- const { profile, alpcBrand } = useCreditsContext()
18
+ const { profile, alpcBrand, alpcCountry } = useCreditsContext()
19
19
  const { brand: headlessBrand, locale, appName } = useHeadlessContext()
20
20
  const brand = alpcBrand || headlessBrand
21
21
 
@@ -34,7 +34,7 @@ function useMyRewards({
34
34
  url: `/v1/credit/log/coupon`,
35
35
  initData: {
36
36
  brand: brand,
37
- country: ALPC_COUNTRY_MAP.get(locale) || locale,
37
+ country: alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale,
38
38
  app_name: appName,
39
39
  },
40
40
  })
@@ -13,7 +13,7 @@ type RedeemCouponResponse = {
13
13
  }
14
14
 
15
15
  export const useRedeemCoupon = (mutationOptions: UseMutationConfig<RedeemCouponResponse> = {}) => {
16
- const { alpcBrand } = useCreditsContext()
16
+ const { alpcBrand, alpcCountry } = useCreditsContext()
17
17
  const { locale, appName, brand: headlessBrand } = useHeadlessContext()
18
18
  const brand = alpcBrand || headlessBrand
19
19
 
@@ -28,7 +28,7 @@ export const useRedeemCoupon = (mutationOptions: UseMutationConfig<RedeemCouponR
28
28
  url: `/v1/credit/redeem/coupon`,
29
29
  initData: {
30
30
  brand,
31
- country: ALPC_COUNTRY_MAP.get(locale) || locale,
31
+ country: alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale,
32
32
  app_name: appName,
33
33
  },
34
34
  },
@@ -12,7 +12,7 @@ type RedeemGoGiftResponse = {
12
12
  }
13
13
 
14
14
  export const useRedeemGoGift = (mutationOptions: UseMutationConfig<RedeemGoGiftResponse> = {}) => {
15
- const { alpcBrand } = useCreditsContext()
15
+ const { alpcBrand, alpcCountry } = useCreditsContext()
16
16
  const { locale, appName, brand: headlessBrand } = useHeadlessContext()
17
17
  const brand = alpcBrand || headlessBrand
18
18
 
@@ -27,7 +27,7 @@ export const useRedeemGoGift = (mutationOptions: UseMutationConfig<RedeemGoGiftR
27
27
  url: `/v1/credit/redeem/gogift`,
28
28
  initData: {
29
29
  brand,
30
- country: ALPC_COUNTRY_MAP.get(locale) || locale,
30
+ country: alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale,
31
31
  app_name: appName,
32
32
  },
33
33
  },
@@ -11,7 +11,7 @@ type RedeemProductResponse = {
11
11
  }
12
12
 
13
13
  export const useRedeemProduct = (mutationOptions: UseMutationConfig<RedeemProductResponse> = {}) => {
14
- const { alpcBrand } = useCreditsContext()
14
+ const { alpcBrand, alpcCountry } = useCreditsContext()
15
15
  const { storeDomain, locale, appName, brand: headlessBrand } = useHeadlessContext()
16
16
  const brand = alpcBrand || headlessBrand
17
17
 
@@ -27,7 +27,7 @@ export const useRedeemProduct = (mutationOptions: UseMutationConfig<RedeemProduc
27
27
  initData: {
28
28
  quantity: 1,
29
29
  brand,
30
- country: (ALPC_COUNTRY_MAP.get(locale || '') || locale)?.toUpperCase(),
30
+ country: (alpcCountry || ALPC_COUNTRY_MAP.get(locale || '') || locale)?.toUpperCase(),
31
31
  domain: storeDomain,
32
32
  app_name: appName,
33
33
  },
@@ -8,7 +8,7 @@ import { useHeadlessContext } from '@anker-in/lib'
8
8
 
9
9
  function useRedeemableList(props?: { consumeType: AlpcConsumeType }) {
10
10
  let locale = '' as string
11
- const { profile, isLoadingProfile, alpcBrand } = useCreditsContext()
11
+ const { profile, isLoadingProfile, alpcBrand, alpcCountry } = useCreditsContext()
12
12
  const { locale: contextLocale, brand: headlessBrand } = useHeadlessContext()
13
13
  const brand = alpcBrand || headlessBrand
14
14
 
@@ -30,7 +30,7 @@ function useRedeemableList(props?: { consumeType: AlpcConsumeType }) {
30
30
  brand,
31
31
  page: 1,
32
32
  page_size: 999,
33
- country: (ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),
33
+ country: (alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale)?.toUpperCase(),
34
34
  },
35
35
  })
36
36
 
@@ -13,7 +13,6 @@ export const useSubscribed = () => {
13
13
 
14
14
  const { activities } = useActivities(activitiesOptions)
15
15
  const { data: subscription } = useSubscriptions({ email: profile?.email })
16
- //@ts-ignore
17
16
  const subscriptionData = subscription?.data || subscription
18
17
 
19
18
  const isSubscribed = useMemo(() => {
@@ -22,6 +22,7 @@ type Context = {
22
22
  pageCommon: CreditsPageCommon
23
23
  memberPriceDiscount?: FunctionMemberPriceConfig[]
24
24
  alpcBrand?: string
25
+ alpcCountry?: string
25
26
  cartConfig?: {
26
27
  addToCart: (params: {
27
28
  variantList: Array<{
@@ -57,6 +58,7 @@ export const CreditsContext = createContext<Context>({
57
58
  pageCommon: {},
58
59
  memberPriceDiscount: undefined,
59
60
  alpcBrand: undefined,
61
+ alpcCountry: undefined,
60
62
  cartConfig: undefined,
61
63
  openMyRewardsModal: false,
62
64
  setOpenMyRewardsModal: () => {},
@@ -81,6 +83,7 @@ export function CreditsProvider({
81
83
  pageCommon,
82
84
  memberPriceDiscount,
83
85
  alpcBrand,
86
+ alpcCountry,
84
87
  cartConfig,
85
88
  apiBaseUrl,
86
89
  }: PropsWithChildren<Omit<Context, 'openMyRewardsModal' | 'setOpenMyRewardsModal' | 'openActivitiesModal' | 'setOpenActivitiesModal'>>) {
@@ -104,6 +107,7 @@ export function CreditsProvider({
104
107
  pageCommon,
105
108
  memberPriceDiscount,
106
109
  alpcBrand,
110
+ alpcCountry,
107
111
  cartConfig,
108
112
  apiBaseUrl,
109
113
  openMyRewardsModal,
@@ -12,7 +12,7 @@ import { AddressFormProps } from './type'
12
12
  import { ROUNDED_BRANDS } from '../../../../constants'
13
13
 
14
14
  export const AddressForm = ({ countries, countriesLoading, form, validate, errors, onChange }: AddressFormProps) => {
15
- const { profile, customer } = useCreditsContext()
15
+ const { profile, customer, alpcCountry } = useCreditsContext()
16
16
  const { locale, brand } = useHeadlessContext()
17
17
  const rounded = ROUNDED_BRANDS.includes(brand)
18
18
  const [address, setAddress] = useState<Record<string, any>>()
@@ -45,7 +45,7 @@ export const AddressForm = ({ countries, countriesLoading, form, validate, error
45
45
  zip: customer?.defaultAddress.zip,
46
46
  }
47
47
  } else {
48
- let defaultCountry = ALPC_COUNTRY_MAP.get(locale) || locale
48
+ let defaultCountry = alpcCountry || ALPC_COUNTRY_MAP.get(locale) || locale
49
49
  if (defaultCountry === 'UK') {
50
50
  defaultCountry = 'GB'
51
51
  }
@@ -57,7 +57,7 @@ export const AddressForm = ({ countries, countriesLoading, form, validate, error
57
57
  country: defaultCountry,
58
58
  }
59
59
  }
60
- }, [customer, profile?.email, locale])
60
+ }, [customer, profile?.email, locale, alpcCountry])
61
61
 
62
62
  useEffect(() => {
63
63
  const defaultAddress = getDefaultAddress()
@@ -1,4 +1,4 @@
1
- export { default as Chat } from './chat/index.js'
1
+ export { default as Chat } from './chat/index'
2
2
 
3
3
  export {
4
4
  Role,
@@ -7,7 +7,7 @@ export {
7
7
  useCopilotChat,
8
8
  useCopilotAction,
9
9
  useCopilotReadable,
10
- } from './chat/utils.js'
10
+ } from './chat/utils'
11
11
 
12
12
  export * from './credits/index.js'
13
13
 
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
 
3
- import { lazy, Suspense, useState, useCallback, useEffect } from 'react'
3
+ import { lazy, Suspense, useState, useCallback, useEffect, type CSSProperties } from 'react'
4
4
  import { Picture } from '@anker-in/headless-ui'
5
5
  import { gaTrack, type HeadlessConfig, useHeadlessContext, classNames as cn } from '@anker-in/lib'
6
6
  import {
@@ -34,6 +34,7 @@ type MemberPopupProps = MemberPopupContextValue & {
34
34
 
35
35
  export function MemberPopup({ copy, bottomOffset = '24px', ...providerProps }: MemberPopupProps) {
36
36
  const [isVisible, setIsVisible] = useState(false)
37
+ const effectiveBottomOffset = copy.bottomOffset ?? bottomOffset
37
38
 
38
39
  useEffect(() => {
39
40
  const config = copy.pageConfig
@@ -57,7 +58,7 @@ export function MemberPopup({ copy, bottomOffset = '24px', ...providerProps }: M
57
58
 
58
59
  return isVisible ? (
59
60
  <MemberPopupProvider {...providerProps} earnCreditsCopy={copy.earnCredits}>
60
- <MemberPopupContent copy={copy} bottomOffset={bottomOffset} />
61
+ <MemberPopupContent copy={copy} bottomOffset={effectiveBottomOffset} />
61
62
  </MemberPopupProvider>
62
63
  ) : null
63
64
  }
@@ -267,7 +268,17 @@ function MemberPopupContent({ copy, bottomOffset }: MemberPopupContentProps) {
267
268
  }}
268
269
  aria-label={copy.triggerImg.alt ?? 'Open member popup'}
269
270
  >
270
- <Picture source={copy.triggerImg.url} alt={copy.triggerImg.alt ?? ''} className="size-[58px]" />
271
+ <div
272
+ className="size-[var(--member-popup-pc-icon-size)] md:size-[var(--member-popup-mobile-icon-size)]"
273
+ style={
274
+ {
275
+ '--member-popup-pc-icon-size': copy.pcIconSize ?? '58px',
276
+ '--member-popup-mobile-icon-size': copy.mobileIconSize ?? copy.pcIconSize ?? '58px',
277
+ } as CSSProperties
278
+ }
279
+ >
280
+ <Picture source={copy.triggerImg.url} alt={copy.triggerImg.alt ?? ''} className="size-full" />
281
+ </div>
271
282
  </button>
272
283
  </div>
273
284
  </ViewStackContext.Provider>
@@ -89,6 +89,12 @@ export type MemberPopupCopy = {
89
89
  referral?: ReferralCopy
90
90
  /** 页面覆盖范围配置,默认全局展示 */
91
91
  pageConfig?: MemberPopupPageConfig
92
+ /** 悬浮窗距离底部的距离,设置后优先于组件 bottomOffset prop(默认 '24px') */
93
+ bottomOffset?: string
94
+ /** 触发按钮图标尺寸(PC 端,默认 '58px') */
95
+ pcIconSize?: string
96
+ /** 触发按钮图标尺寸(移动端,默认 '58px') */
97
+ mobileIconSize?: string
92
98
  }
93
99
 
94
100
  // ─── EarnCredits Copy ────────────────────────────────
@@ -166,6 +166,7 @@ export const CreditsTemplate = ({
166
166
  pageCommon={pageConfig.common}
167
167
  memberPriceDiscount={siteConfig.memberPriceDiscount}
168
168
  alpcBrand={creditsConfig?.alpcBrand}
169
+ alpcCountry={creditsConfig?.alpcCountry}
169
170
  cartConfig={cartConfig}
170
171
  apiBaseUrl={userContext?.apiBaseUrl}
171
172
  >
@@ -55,6 +55,7 @@ export type CreditsTemplateProps = {
55
55
  }
56
56
  creditsConfig?: {
57
57
  alpcBrand?: string
58
+ alpcCountry?: string
58
59
  }
59
60
  pageConfig: {
60
61
  order: ComponentKey[]