@anker-in/campaign-ui 0.5.0-beta.2 → 0.5.0-beta.21

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 (142) hide show
  1. package/dist/cjs/components/credits/context/hooks/useCountries.js +1 -1
  2. package/dist/cjs/components/credits/context/hooks/useCountries.js.map +3 -3
  3. package/dist/cjs/components/memberPopup/MemberPopup.d.ts +1 -1
  4. package/dist/cjs/components/memberPopup/MemberPopup.js +1 -1
  5. package/dist/cjs/components/memberPopup/MemberPopup.js.map +3 -3
  6. package/dist/cjs/components/memberPopup/context/provider.d.ts +3 -3
  7. package/dist/cjs/components/memberPopup/context/provider.js +1 -1
  8. package/dist/cjs/components/memberPopup/context/provider.js.map +3 -3
  9. package/dist/cjs/components/memberPopup/panels/ActivitiesSubscribePanel.d.ts +7 -0
  10. package/dist/cjs/components/memberPopup/panels/ActivitiesSubscribePanel.js +2 -0
  11. package/dist/cjs/components/memberPopup/panels/ActivitiesSubscribePanel.js.map +7 -0
  12. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +9 -7
  13. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +1 -1
  14. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +3 -3
  15. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.d.ts +1 -2
  16. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js +1 -1
  17. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/index.js.map +3 -3
  18. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +1 -2
  19. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js +1 -1
  20. package/dist/cjs/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +3 -3
  21. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +1 -1
  22. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +2 -2
  23. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +1 -3
  24. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +1 -1
  25. package/dist/cjs/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +3 -3
  26. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +1 -2
  27. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +1 -1
  28. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +3 -3
  29. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.d.ts +1 -8
  30. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js +1 -1
  31. package/dist/cjs/components/memberPopup/panels/EarnCredits/index.js.map +3 -3
  32. package/dist/cjs/components/memberPopup/panels/Referral/index.js +1 -1
  33. package/dist/cjs/components/memberPopup/panels/Referral/index.js.map +3 -3
  34. package/dist/cjs/components/memberPopup/type.d.ts +29 -3
  35. package/dist/cjs/components/memberPopup/type.js +1 -1
  36. package/dist/cjs/components/memberPopup/type.js.map +2 -2
  37. package/dist/cjs/templates/Credits.js +1 -1
  38. package/dist/cjs/templates/Credits.js.map +3 -3
  39. package/dist/esm/components/credits/context/hooks/useCountries.js +1 -1
  40. package/dist/esm/components/credits/context/hooks/useCountries.js.map +3 -3
  41. package/dist/esm/components/memberPopup/MemberPopup.d.ts +1 -1
  42. package/dist/esm/components/memberPopup/MemberPopup.js +1 -1
  43. package/dist/esm/components/memberPopup/MemberPopup.js.map +3 -3
  44. package/dist/esm/components/memberPopup/context/provider.d.ts +3 -3
  45. package/dist/esm/components/memberPopup/context/provider.js +1 -1
  46. package/dist/esm/components/memberPopup/context/provider.js.map +3 -3
  47. package/dist/esm/components/memberPopup/panels/ActivitiesSubscribePanel.d.ts +7 -0
  48. package/dist/esm/components/memberPopup/panels/ActivitiesSubscribePanel.js +2 -0
  49. package/dist/esm/components/memberPopup/panels/ActivitiesSubscribePanel.js.map +7 -0
  50. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.d.ts +9 -7
  51. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js +1 -1
  52. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.js.map +3 -3
  53. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.d.ts +1 -2
  54. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js +1 -1
  55. package/dist/esm/components/memberPopup/panels/ConsumeCredits/index.js.map +3 -3
  56. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.d.ts +1 -2
  57. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js +1 -1
  58. package/dist/esm/components/memberPopup/panels/EarnCredits/ActivatePanel.js.map +3 -3
  59. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js +1 -1
  60. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfileModal.js.map +2 -2
  61. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.d.ts +1 -3
  62. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js +1 -1
  63. package/dist/esm/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.js.map +3 -3
  64. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.d.ts +1 -2
  65. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +1 -1
  66. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +3 -3
  67. package/dist/esm/components/memberPopup/panels/EarnCredits/index.d.ts +1 -8
  68. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js +1 -1
  69. package/dist/esm/components/memberPopup/panels/EarnCredits/index.js.map +3 -3
  70. package/dist/esm/components/memberPopup/panels/Referral/index.js +1 -1
  71. package/dist/esm/components/memberPopup/panels/Referral/index.js.map +3 -3
  72. package/dist/esm/components/memberPopup/type.d.ts +29 -3
  73. package/dist/esm/components/memberPopup/type.js +1 -1
  74. package/dist/esm/components/memberPopup/type.js.map +2 -2
  75. package/dist/esm/templates/Credits.js +1 -1
  76. package/dist/esm/templates/Credits.js.map +3 -3
  77. package/package.json +1 -1
  78. package/src/components/credits/context/hooks/useCountries.ts +4 -15
  79. package/src/components/memberPopup/MemberPopup.tsx +170 -177
  80. package/src/components/memberPopup/context/provider.tsx +24 -4
  81. package/src/components/memberPopup/panels/ActivitiesSubscribePanel.tsx +194 -0
  82. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponPanel.tsx +93 -60
  83. package/src/components/memberPopup/panels/ConsumeCredits/index.tsx +200 -87
  84. package/src/components/memberPopup/panels/EarnCredits/ActivatePanel.tsx +30 -15
  85. package/src/components/memberPopup/panels/EarnCredits/CompleteProfileModal.tsx +6 -1
  86. package/src/components/memberPopup/panels/EarnCredits/CompleteProfilePanel.tsx +65 -35
  87. package/src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx +15 -6
  88. package/src/components/memberPopup/panels/EarnCredits/index.tsx +131 -86
  89. package/src/components/memberPopup/panels/Referral/index.tsx +35 -16
  90. package/src/components/memberPopup/type.ts +26 -3
  91. package/src/templates/Credits.tsx +25 -0
  92. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.d.ts +0 -10
  93. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js +0 -2
  94. package/dist/cjs/components/memberPopup/panels/Activity/SubscribeModal.js.map +0 -7
  95. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +0 -7
  96. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +0 -2
  97. package/dist/cjs/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +0 -7
  98. package/dist/cjs/components/memberPopup/panels/Activity/index.d.ts +0 -7
  99. package/dist/cjs/components/memberPopup/panels/Activity/index.js +0 -2
  100. package/dist/cjs/components/memberPopup/panels/Activity/index.js.map +0 -7
  101. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +0 -19
  102. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +0 -2
  103. package/dist/cjs/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +0 -7
  104. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +0 -10
  105. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js +0 -2
  106. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +0 -7
  107. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +0 -9
  108. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js +0 -2
  109. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +0 -7
  110. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +0 -13
  111. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +0 -2
  112. package/dist/cjs/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +0 -7
  113. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.d.ts +0 -10
  114. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js +0 -2
  115. package/dist/esm/components/memberPopup/panels/Activity/SubscribeModal.js.map +0 -7
  116. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.d.ts +0 -7
  117. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js +0 -2
  118. package/dist/esm/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.js.map +0 -7
  119. package/dist/esm/components/memberPopup/panels/Activity/index.d.ts +0 -7
  120. package/dist/esm/components/memberPopup/panels/Activity/index.js +0 -2
  121. package/dist/esm/components/memberPopup/panels/Activity/index.js.map +0 -7
  122. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.d.ts +0 -19
  123. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js +0 -2
  124. package/dist/esm/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.js.map +0 -7
  125. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.d.ts +0 -10
  126. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js +0 -2
  127. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeModal.js.map +0 -7
  128. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.d.ts +0 -9
  129. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js +0 -2
  130. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribePanel.js.map +0 -7
  131. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.d.ts +0 -13
  132. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js +0 -2
  133. package/dist/esm/components/memberPopup/panels/Referral/hooks/useReferralDashboard.js.map +0 -7
  134. package/dist/index.d.mts +0 -1775
  135. package/dist/index.d.ts +0 -1775
  136. package/dist/index.js +0 -18542
  137. package/dist/index.js.map +0 -1
  138. package/dist/index.mjs +0 -18514
  139. package/dist/index.mjs.map +0 -1
  140. package/src/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.tsx +0 -150
  141. package/src/components/memberPopup/panels/EarnCredits/SubscribeModal.tsx +0 -144
  142. package/src/components/memberPopup/panels/EarnCredits/SubscribePanel.tsx +0 -147
@@ -37,6 +37,8 @@ export enum EarnCreditsTaskType {
37
37
  export enum ConsumeCreditsItemType {
38
38
  Coupon = 'COUPON',
39
39
  RedeemAndBuy = 'REDEEM_AND_BUY',
40
+ GiftCard = 'GIFT_CARD',
41
+ Product = 'PRODUCT',
40
42
  }
41
43
 
42
44
  // ─── 通用 link(统一一种类型) ─────────────────────────
@@ -81,7 +83,7 @@ export type MemberPopupCopy = {
81
83
  shopLabel: string
82
84
  shopUrl?: string
83
85
  }
84
- subscribe?: SubscribeModalCopy
86
+ activitiesSubscribe?: SubscribeModalCopy
85
87
  earnCredits?: EarnCreditsCopy
86
88
  consumeCredits?: ConsumeCreditsopy
87
89
  referral?: ReferralCopy
@@ -136,11 +138,19 @@ export type SubscribeModalCopy = {
136
138
  placeholder: string
137
139
  policy?: string
138
140
  successTips?: string
141
+ subscribedLabel?: string
139
142
  dealsType?: string
140
143
  buttonLabel?: string
141
144
  single_brand_subscribe?: boolean
142
145
  genre?: string
143
146
  sub_brand_type?: string
147
+ promo?: {
148
+ title?: string
149
+ description?: string
150
+ learnMoreLabel?: string
151
+ learnMoreUrl?: string
152
+ image?: { url: string; alt?: string }
153
+ }
144
154
  }
145
155
 
146
156
  // ─── ConsumeCredits Copy ────────────────────────────
@@ -151,14 +161,16 @@ export type ConsumeCreditsopy = {
151
161
  unlockRewards: string
152
162
  btnRedeem: string
153
163
  insufficientCredits?: string
154
- pointUnit?: string
164
+ balanceLabel?: string
165
+ comingSoonLabel?: string
166
+ creditUnit?: string
155
167
  off?: string
156
168
  imageMapping?: {
157
169
  [key in ConsumeCreditsItemType]?: { url: string }
158
170
  }
159
171
  list: ConsumeCreditsItem[]
160
172
  redeemModal: RedeemCouponModalCopy
161
- creditsPage?: { label: string; url: string }
173
+ creditsPage?: { label: string; url: string; redeemListSectionId?: string }
162
174
  }
163
175
 
164
176
  export type ConsumeCreditsItem = {
@@ -176,6 +188,7 @@ export type ConsumeCreditsItem = {
176
188
  export type RedeemCouponModalCopy = {
177
189
  confirmTitle: string
178
190
  confirmButton: string
191
+ off?: string
179
192
  commonError: string
180
193
  redeemLimitError: string
181
194
  inventoryNotEnough: string
@@ -227,4 +240,14 @@ export type MemberPopupContextValue = {
227
240
  openSignInPopup: () => void
228
241
  taskIdToTypeMapping?: Record<string, DTC_TASK_TYPE>
229
242
  alpcConfig: AlpcConfig
243
+ pageHandle?: string
244
+ }
245
+
246
+ export type MemberPopupInternalContextValue = MemberPopupContextValue & {
247
+ isSubscribeSuccess: boolean
248
+ setIsSubscribeSuccess: (v: boolean) => void
249
+ isActivateSuccess: boolean
250
+ setIsActivateSuccess: (v: boolean) => void
251
+ isProfileCompleteSuccess: boolean
252
+ setIsProfileCompleteSuccess: (v: boolean) => void
230
253
  }
@@ -1,4 +1,5 @@
1
1
  import { classNames, HeadlessProvider } from '@anker-in/lib'
2
+ import { useEffect, useRef } from 'react'
2
3
  import { RegistrationProvider } from '../components/registration/context/provider'
3
4
  import { CreditsProvider, useCreditsContext } from '../components/credits/context/provider'
4
5
  import { CreditsBanner } from '../components/credits/creditsBanner'
@@ -32,6 +33,30 @@ import type {
32
33
 
33
34
  const CreditsContent = ({ headlessConfig, pageConfig, userContext }: CreditsContentProps) => {
34
35
  const { openMyRewardsModal, setOpenMyRewardsModal, openActivitiesModal, setOpenActivitiesModal, pageCommon } = useCreditsContext()
36
+ const hasScrolled = useRef(false)
37
+
38
+ useEffect(() => {
39
+ if (hasScrolled.current || typeof window === 'undefined') return
40
+
41
+ const params = new URLSearchParams(window.location.search)
42
+ const section = params.get('section')
43
+ if (!section) return
44
+
45
+ const navHeight = 56
46
+
47
+ const tryScroll = (attempts = 0) => {
48
+ const el = document.getElementById(section)
49
+ if (el) {
50
+ hasScrolled.current = true
51
+ const top = el.getBoundingClientRect().top + window.pageYOffset - navHeight
52
+ window.scrollTo({ top, behavior: 'smooth' })
53
+ } else if (attempts < 10) {
54
+ setTimeout(() => tryScroll(attempts + 1), 300)
55
+ }
56
+ }
57
+
58
+ tryScroll()
59
+ }, [])
35
60
 
36
61
  return (
37
62
  <>
@@ -1,10 +0,0 @@
1
- import type { ActivitySubscribeCopy } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- onSuccess?: () => void;
6
- copy: ActivitySubscribeCopy;
7
- email?: string;
8
- };
9
- export declare function ActivitySubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props): import("react/jsx-runtime").JSX.Element;
10
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";var u=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var _=(l,e)=>{for(var n in e)u(l,n,{get:e[n],enumerable:!0})},B=(l,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of P(e))!T.call(l,s)&&s!==n&&u(l,s,{get:()=>e[s],enumerable:!(o=D(e,s))||o.enumerable});return l};var O=l=>B(u({},"__esModule",{value:!0}),l);var L={};_(L,{ActivitySubscribeModal:()=>H});module.exports=O(L);var t=require("react/jsx-runtime"),a=require("react"),r=require("@anker-in/headless-ui"),d=require("@anker-in/lib"),v=require("../../../credits/modal/ModalContainer"),C=require("./hooks/useActivitySubscribe"),N=require("../../context/provider"),g=require("../../../../constants");function H({isOpen:l,onClose:e,onSuccess:n,copy:o,email:s}){const{alpcConfig:S}=(0,N.useMemberPopupContext)(),{storeDomain:y}=(0,d.useHeadlessContext)(),[m,A]=(0,a.useState)(!1),[c,f]=(0,a.useState)(s??""),{brand:k}=(0,d.useHeadlessContext)(),p=g.ROUNDED_BRANDS.includes(k),{subscribe:b,loading:w,error:h,success:i}=(0,C.useActivitySubscribe)(o,S.locale,y);(0,a.useEffect)(()=>{s&&f(s)},[s]),(0,a.useEffect)(()=>{i&&(n?.(),setTimeout(()=>e(),3e3))},[i,n,e]);const M=(0,a.useCallback)(()=>{b(c,m)},[b,c,m]);return(0,t.jsx)(v.CreditsModalContainer,{isOpen:l,onClose:e,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] md:mb-[24px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:(0,t.jsxs)("div",{className:"flex flex-col gap-[16px] text-center",children:[(0,t.jsx)(r.Text,{className:"text-[22px] font-bold",html:o.title}),o.desc&&(0,t.jsx)(r.Text,{className:"text-left text-[16px] font-semibold text-[#1f2021]",html:o.desc}),(0,t.jsxs)("div",{className:(0,d.classNames)("flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]",p?"rounded-[2px]":"rounded-none"),children:[(0,t.jsx)("input",{className:(0,d.classNames)("h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]",p?"rounded-l-[2px] md:rounded-[2px]":"rounded-none"),placeholder:o.placeholder,value:c,onChange:x=>f(x.target.value.trim())}),(0,t.jsx)(r.Button,{variant:"primary",loading:w,className:(0,d.classNames)("!h-full !min-w-0 !px-[24px] md:!h-[46px]",p?"!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]":"!rounded-none"),onClick:M,children:o.buttonLabel??"Subscribe"})]}),(0,t.jsxs)("div",{className:"flex w-full items-start gap-[8px]",children:[(0,t.jsx)(r.Checkbox,{checked:m,onCheckedChange:()=>A(x=>!x),className:"border-[#1d1d1f]"}),(0,t.jsx)("label",{className:"text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:o.policy??""}})]}),(0,t.jsx)("div",{className:(0,d.classNames)("text-left text-[16px] font-semibold",h&&"text-[#f84d4f]",i&&"text-[#52c41a]"),children:i?o.successTips??"Subscribed!":h})]})})}
2
- //# sourceMappingURL=SubscribeModal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/Activity/SubscribeModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { emailValidate } from '../../../credits/context/utils'\nimport { useActivitySubscribe } from './hooks/useActivitySubscribe'\nimport { useMemberPopupContext } from '../../context/provider'\nimport type { ActivitySubscribeCopy } from '../../type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n onSuccess?: () => void\n copy: ActivitySubscribeCopy\n email?: string\n}\n\nexport function ActivitySubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props) {\n const { alpcConfig } = useMemberPopupContext()\n const { storeDomain } = useHeadlessContext()\n const [policy, setPolicy] = useState(false)\n const [email, setEmail] = useState(initialEmail ?? '')\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const { subscribe, loading, error, success } = useActivitySubscribe(copy, alpcConfig.locale, storeDomain)\n\n useEffect(() => {\n if (initialEmail) setEmail(initialEmail)\n }, [initialEmail])\n\n useEffect(() => {\n if (success) {\n onSuccess?.()\n setTimeout(() => onClose(), 3000)\n }\n }, [success, onSuccess, onClose])\n\n const handleSubmit = useCallback(() => {\n subscribe(email, policy)\n }, [subscribe, email, policy])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] md:mb-[24px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[16px] text-center\">\n <Text className=\"text-[22px] font-bold\" html={copy.title} />\n {copy.desc && (\n <Text className=\"text-left text-[16px] font-semibold text-[#1f2021]\" html={copy.desc} />\n )}\n\n <div className={cn('flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]', rounded ? 'rounded-[2px]' : 'rounded-none')}>\n <input\n className={cn('h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]', rounded ? 'rounded-l-[2px] md:rounded-[2px]' : 'rounded-none')}\n placeholder={copy.placeholder}\n value={email}\n onChange={e => setEmail(e.target.value.trim())}\n />\n <Button\n variant=\"primary\"\n loading={loading}\n className={cn('!h-full !min-w-0 !px-[24px] md:!h-[46px]', rounded ? '!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]' : '!rounded-none')}\n onClick={handleSubmit}\n >\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n\n <div className=\"flex w-full items-start gap-[8px]\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(v => !v)} className=\"border-[#1d1d1f]\" />\n <label\n className=\"text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{ __html: copy.policy ?? '' }}\n />\n </div>\n\n <div className={cn('text-left text-[16px] font-semibold', error && 'text-[#f84d4f]', success && 'text-[#52c41a]')}>\n {success ? (copy.successTips ?? 'Subscribed!') : error}\n </div>\n </div>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAqDQ,IAAAI,EAAA,6BArDRC,EAAiD,iBACjDC,EAAuC,iCACvCC,EAAqD,yBACrDC,EAAsC,iDAEtCC,EAAqC,wCACrCC,EAAsC,kCAEtCC,EAA+B,iCAUxB,SAAST,EAAuB,CAAE,OAAAU,EAAQ,QAAAC,EAAS,UAAAC,EAAW,KAAAC,EAAM,MAAOC,CAAa,EAAU,CACvG,KAAM,CAAE,WAAAC,CAAW,KAAI,yBAAsB,EACvC,CAAE,YAAAC,CAAY,KAAI,sBAAmB,EACrC,CAACC,EAAQC,CAAS,KAAI,YAAS,EAAK,EACpC,CAACC,EAAOC,CAAQ,KAAI,YAASN,GAAgB,EAAE,EAC/C,CAAE,MAAAO,CAAM,KAAI,sBAAmB,EAC/BC,EAAU,iBAAe,SAASD,CAAK,EAEvC,CAAE,UAAAE,EAAW,QAAAC,EAAS,MAAAC,EAAO,QAAAC,CAAQ,KAAI,wBAAqBb,EAAME,EAAW,OAAQC,CAAW,KAExG,aAAU,IAAM,CACVF,GAAcM,EAASN,CAAY,CACzC,EAAG,CAACA,CAAY,CAAC,KAEjB,aAAU,IAAM,CACVY,IACFd,IAAY,EACZ,WAAW,IAAMD,EAAQ,EAAG,GAAI,EAEpC,EAAG,CAACe,EAASd,EAAWD,CAAO,CAAC,EAEhC,MAAMgB,KAAe,eAAY,IAAM,CACrCJ,EAAUJ,EAAOF,CAAM,CACzB,EAAG,CAACM,EAAWJ,EAAOF,CAAM,CAAC,EAE7B,SACE,OAAC,yBACC,OAAQP,EACR,QAASC,EACT,UAAU,sBACV,gBAAgB,yBAChB,aAAY,GACZ,mBAAmB,yBAEnB,oBAAC,OAAI,UAAU,uCACb,oBAAC,QAAK,UAAU,wBAAwB,KAAME,EAAK,MAAO,EACzDA,EAAK,SACJ,OAAC,QAAK,UAAU,qDAAqD,KAAMA,EAAK,KAAM,KAGxF,QAAC,OAAI,aAAW,EAAAe,YAAG,2EAA4EN,EAAU,gBAAkB,cAAc,EACvI,oBAAC,SACC,aAAW,EAAAM,YAAG,+GAAgHN,EAAU,mCAAqC,cAAc,EAC3L,YAAaT,EAAK,YAClB,MAAOM,EACP,SAAUU,GAAKT,EAASS,EAAE,OAAO,MAAM,KAAK,CAAC,EAC/C,KACA,OAAC,UACC,QAAQ,UACR,QAASL,EACT,aAAW,EAAAI,YAAG,2CAA4CN,EAAU,qDAAuD,eAAe,EAC1I,QAASK,EAER,SAAAd,EAAK,aAAe,YACvB,GACF,KAEA,QAAC,OAAI,UAAU,oCACb,oBAAC,YAAS,QAASI,EAAQ,gBAAiB,IAAMC,EAAUY,GAAK,CAACA,CAAC,EAAG,UAAU,mBAAmB,KACnG,OAAC,SACC,UAAU,kEACV,wBAAyB,CAAE,OAAQjB,EAAK,QAAU,EAAG,EACvD,GACF,KAEA,OAAC,OAAI,aAAW,EAAAe,YAAG,sCAAuCH,GAAS,iBAAkBC,GAAW,gBAAgB,EAC7G,SAAAA,EAAWb,EAAK,aAAe,cAAiBY,EACnD,GACF,EACF,CAEJ",
6
- "names": ["SubscribeModal_exports", "__export", "ActivitySubscribeModal", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_lib", "import_ModalContainer", "import_useActivitySubscribe", "import_provider", "import_constants", "isOpen", "onClose", "onSuccess", "copy", "initialEmail", "alpcConfig", "storeDomain", "policy", "setPolicy", "email", "setEmail", "brand", "rounded", "subscribe", "loading", "error", "success", "handleSubmit", "cn", "e", "v"]
7
- }
@@ -1,7 +0,0 @@
1
- import type { ActivitySubscribeCopy } from '../../../type';
2
- export declare function useActivitySubscribe(copy: ActivitySubscribeCopy, locale: string, shopifyDomain: string): {
3
- subscribe: (email: string, policy: boolean) => Promise<boolean>;
4
- loading: boolean;
5
- error: string;
6
- success: boolean;
7
- };
@@ -1,2 +0,0 @@
1
- "use strict";var w=Object.create;var a=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var k=(e,r)=>{for(var s in r)a(e,s,{get:r[s],enumerable:!0})},b=(e,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of S(r))!v.call(e,t)&&t!==s&&a(e,t,{get:()=>r[t],enumerable:!(o=h(r,t))||o.enumerable});return e};var A=(e,r,s)=>(s=e!=null?w(C(e)):{},b(r||!e||!e.__esModule?a(s,"default",{value:e,enumerable:!0}):s,e)),P=e=>b(a({},"__esModule",{value:!0}),e);var E={};k(E,{useActivitySubscribe:()=>q});module.exports=P(E);var n=require("react"),l=require("query-string"),f=A(require("js-cookie")),d=require("../../../../credits/context/utils");function j(){if(typeof window>"u")return{register_source:""};const{search:e,href:r}=window.location;return{register_source:(0,l.parse)(e).redirect??f.default.get("reg_source")??r}}function q(e,r,s){const[o,t]=(0,n.useState)(!1),[g,i]=(0,n.useState)(""),[p,_]=(0,n.useState)(!1);return{subscribe:(0,n.useCallback)(async(u,y)=>{if(i(""),!u)return i("Please fill in your email"),!1;if(!(0,d.emailValidate)(u))return i("Invalid email address"),!1;if(!y)return i("Please agree to the policy"),!1;t(!0);const{register_source:m}=j();try{const c=await(await fetch("/api/multipass/rainbowbridge/activities",{method:"POST",headers:{"Content-Type":"application/json","current-language":r},body:JSON.stringify({email:u,register_source:m,shopify_domain:s,single_brand_subscribe:e.single_brand_subscribe??!0,genre:e.genre??"",sub_brand_type:e.sub_brand_type??""})})).json();return c.errors?(i(c.errors??"Error occurred"),!1):(_(!0),!0)}catch{return i("Network error"),!1}finally{t(!1)}},[r,e.single_brand_subscribe,e.genre,e.sub_brand_type,s]),loading:o,error:g,success:p}}
2
- //# sourceMappingURL=useActivitySubscribe.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.ts"],
4
- "sourcesContent": ["import { useCallback, useState } from 'react'\nimport { parse } from 'query-string'\nimport Cookies from 'js-cookie'\nimport { emailValidate } from '../../../../credits/context/utils'\nimport type { ActivitySubscribeCopy } from '../../../type'\n\nfunction getAdCookie() {\n if (typeof window === 'undefined') return { register_source: '' }\n const { search, href } = window.location\n const query = parse(search)\n return {\n register_source: query.redirect ?? Cookies.get('reg_source') ?? href,\n }\n}\n\nexport function useActivitySubscribe(copy: ActivitySubscribeCopy, locale: string, shopifyDomain: string) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n const [success, setSuccess] = useState(false)\n\n const subscribe = useCallback(\n async (email: string, policy: boolean): Promise<boolean> => {\n setError('')\n if (!email) { setError('Please fill in your email'); return false }\n if (!emailValidate(email)) { setError('Invalid email address'); return false }\n if (!policy) { setError('Please agree to the policy'); return false }\n\n setLoading(true)\n const { register_source } = getAdCookie()\n try {\n const response = await fetch('/api/multipass/rainbowbridge/activities', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n shopify_domain: shopifyDomain,\n single_brand_subscribe: copy.single_brand_subscribe ?? true,\n genre: copy.genre ?? '',\n sub_brand_type: copy.sub_brand_type ?? '',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccess(true)\n return true\n }\n setError(result.errors ?? 'Error occurred')\n return false\n } catch {\n setError('Network error')\n return false\n } finally {\n setLoading(false)\n }\n },\n [locale, copy.single_brand_subscribe, copy.genre, copy.sub_brand_type, shopifyDomain]\n )\n\n return { subscribe, loading, error, success }\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAsC,iBACtCC,EAAsB,wBACtBC,EAAoB,wBACpBC,EAA8B,6CAG9B,SAASC,GAAc,CACrB,GAAI,OAAO,OAAW,IAAa,MAAO,CAAE,gBAAiB,EAAG,EAChE,KAAM,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAI,OAAO,SAEhC,MAAO,CACL,mBAFY,SAAMD,CAAM,EAED,UAAY,EAAAE,QAAQ,IAAI,YAAY,GAAKD,CAClE,CACF,CAEO,SAASR,EAAqBU,EAA6BC,EAAgBC,EAAuB,CACvG,KAAM,CAACC,EAASC,CAAU,KAAI,YAAS,EAAK,EACtC,CAACC,EAAOC,CAAQ,KAAI,YAAS,EAAE,EAC/B,CAACC,EAASC,CAAU,KAAI,YAAS,EAAK,EAyC5C,MAAO,CAAE,aAvCS,eAChB,MAAOC,EAAeC,IAAsC,CAE1D,GADAJ,EAAS,EAAE,EACP,CAACG,EAAS,OAAAH,EAAS,2BAA2B,EAAU,GAC5D,GAAI,IAAC,iBAAcG,CAAK,EAAK,OAAAH,EAAS,uBAAuB,EAAU,GACvE,GAAI,CAACI,EAAU,OAAAJ,EAAS,4BAA4B,EAAU,GAE9DF,EAAW,EAAI,EACf,KAAM,CAAE,gBAAAO,CAAgB,EAAIf,EAAY,EACxC,GAAI,CAaF,MAAMgB,EAAS,MAZE,MAAM,MAAM,0CAA2C,CACtE,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,mBAAoBX,CAAO,EAC1E,KAAM,KAAK,UAAU,CACnB,MAAAQ,EACA,gBAAAE,EACA,eAAgBT,EAChB,uBAAwBF,EAAK,wBAA0B,GACvD,MAAOA,EAAK,OAAS,GACrB,eAAgBA,EAAK,gBAAkB,EACzC,CAAC,CACH,CAAC,GAC6B,KAAK,EACnC,OAAKY,EAAO,QAIZN,EAASM,EAAO,QAAU,gBAAgB,EACnC,KAJLJ,EAAW,EAAI,EACR,GAIX,MAAQ,CACN,OAAAF,EAAS,eAAe,EACjB,EACT,QAAE,CACAF,EAAW,EAAK,CAClB,CACF,EACA,CAACH,EAAQD,EAAK,uBAAwBA,EAAK,MAAOA,EAAK,eAAgBE,CAAa,CACtF,EAEoB,QAAAC,EAAS,MAAAE,EAAO,QAAAE,CAAQ,CAC9C",
6
- "names": ["useActivitySubscribe_exports", "__export", "useActivitySubscribe", "__toCommonJS", "import_react", "import_query_string", "import_js_cookie", "import_utils", "getAdCookie", "search", "href", "Cookies", "copy", "locale", "shopifyDomain", "loading", "setLoading", "error", "setError", "success", "setSuccess", "email", "policy", "register_source", "result"]
7
- }
@@ -1,7 +0,0 @@
1
- import type { ActivityCopy } from '../../type';
2
- type Props = {
3
- copy: ActivityCopy;
4
- onClose: () => void;
5
- };
6
- declare function Activity({ copy, onClose }: Props): import("react/jsx-runtime").JSX.Element;
7
- export default Activity;
@@ -1,2 +0,0 @@
1
- "use strict";var o=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var p=(e,i)=>{for(var r in i)o(e,r,{get:i[r],enumerable:!0})},x=(e,i,r,l)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of c(i))!f.call(e,a)&&a!==r&&o(e,a,{get:()=>i[a],enumerable:!(l=d(i,a))||l.enumerable});return e};var v=e=>x(o({},"__esModule",{value:!0}),e);var N={};p(N,{default:()=>g});module.exports=v(N);var t=require("react/jsx-runtime"),n=require("react"),s=require("@anker-in/headless-ui"),m=require("../../../credits/modal/ModalContainer"),u=require("../../context/provider"),b=require("./SubscribeModal");function C({copy:e,onClose:i}){const{profile:r}=(0,u.useMemberPopupContext)(),[l,a]=(0,n.useState)(!1);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(m.CreditsModalContainer,{isOpen:!0,onClose:i,title:void 0,className:"w-[540px] md:h-auto",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:(0,t.jsxs)("div",{className:"flex flex-col gap-[20px]",children:[e.image?.url&&(0,t.jsx)(s.Picture,{source:e.image.url,alt:e.image.alt??"",className:"w-full rounded-[8px]"}),e.title&&(0,t.jsx)(s.Text,{className:"text-[20px] font-bold",html:e.title}),e.description&&(0,t.jsx)(s.Text,{className:"text-[14px] leading-[1.5] text-[#666]",html:e.description}),(0,t.jsxs)("div",{className:"flex gap-[12px]",children:[e.ctaButton&&(0,t.jsx)(s.Button,{variant:"primary",size:"lg",className:"flex-1",as:e.ctaUrl?"a":"button",...e.ctaUrl?{href:e.ctaUrl,target:"_blank",rel:"noopener noreferrer"}:{},children:e.ctaButton}),e.subscribe&&(0,t.jsx)(s.Button,{variant:"secondary",size:"lg",className:"flex-1",onClick:()=>a(!0),children:e.subscribe.buttonLabel??"Subscribe"})]})]})}),e.subscribe&&(0,t.jsx)(b.ActivitySubscribeModal,{isOpen:l,onClose:()=>a(!1),copy:e.subscribe,email:r?.email})]})}var g=C;
2
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/Activity/index.tsx"],
4
- "sourcesContent": ["import { useState } from 'react'\nimport { Button, Picture, Text } from '@anker-in/headless-ui'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { useMemberPopupContext } from '../../context/provider'\nimport { ActivitySubscribeModal } from './SubscribeModal'\nimport type { ActivityCopy } from '../../type'\n\ntype Props = {\n copy: ActivityCopy\n onClose: () => void\n}\n\nfunction Activity({ copy, onClose }: Props) {\n const { profile } = useMemberPopupContext()\n const [isSubscribeOpen, setIsSubscribeOpen] = useState(false)\n\n return (\n <>\n <CreditsModalContainer\n isOpen\n onClose={onClose}\n title={undefined}\n className=\"w-[540px] md:h-auto\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[20px]\">\n {copy.image?.url && (\n <Picture\n source={copy.image.url}\n alt={copy.image.alt ?? ''}\n className=\"w-full rounded-[8px]\"\n />\n )}\n {copy.title && (\n <Text className=\"text-[20px] font-bold\" html={copy.title} />\n )}\n {copy.description && (\n <Text className=\"text-[14px] leading-[1.5] text-[#666]\" html={copy.description} />\n )}\n <div className=\"flex gap-[12px]\">\n {copy.ctaButton && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"flex-1\"\n as={copy.ctaUrl ? 'a' : 'button'}\n {...(copy.ctaUrl\n ? { href: copy.ctaUrl, target: '_blank', rel: 'noopener noreferrer' }\n : {})}\n >\n {copy.ctaButton}\n </Button>\n )}\n {copy.subscribe && (\n <Button\n variant=\"secondary\"\n size=\"lg\"\n className=\"flex-1\"\n onClick={() => setIsSubscribeOpen(true)}\n >\n {copy.subscribe.buttonLabel ?? 'Subscribe'}\n </Button>\n )}\n </div>\n </div>\n </CreditsModalContainer>\n\n {copy.subscribe && (\n <ActivitySubscribeModal\n isOpen={isSubscribeOpen}\n onClose={() => setIsSubscribeOpen(false)}\n copy={copy.subscribe}\n email={profile?.email}\n />\n )}\n </>\n )\n}\n\nexport default Activity\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAiBI,IAAAI,EAAA,6BAjBJC,EAAyB,iBACzBC,EAAsC,iCACtCC,EAAsC,iDACtCC,EAAsC,kCACtCC,EAAuC,4BAQvC,SAASC,EAAS,CAAE,KAAAC,EAAM,QAAAC,CAAQ,EAAU,CAC1C,KAAM,CAAE,QAAAC,CAAQ,KAAI,yBAAsB,EACpC,CAACC,EAAiBC,CAAkB,KAAI,YAAS,EAAK,EAE5D,SACE,oBACE,oBAAC,yBACC,OAAM,GACN,QAASH,EACT,MAAO,OACP,UAAU,sBACV,aAAY,GACZ,mBAAmB,yBAEnB,oBAAC,OAAI,UAAU,2BACZ,UAAAD,EAAK,OAAO,QACX,OAAC,WACC,OAAQA,EAAK,MAAM,IACnB,IAAKA,EAAK,MAAM,KAAO,GACvB,UAAU,uBACZ,EAEDA,EAAK,UACJ,OAAC,QAAK,UAAU,wBAAwB,KAAMA,EAAK,MAAO,EAE3DA,EAAK,gBACJ,OAAC,QAAK,UAAU,wCAAwC,KAAMA,EAAK,YAAa,KAElF,QAAC,OAAI,UAAU,kBACZ,UAAAA,EAAK,cACJ,OAAC,UACC,QAAQ,UACR,KAAK,KACL,UAAU,SACV,GAAIA,EAAK,OAAS,IAAM,SACvB,GAAIA,EAAK,OACN,CAAE,KAAMA,EAAK,OAAQ,OAAQ,SAAU,IAAK,qBAAsB,EAClE,CAAC,EAEJ,SAAAA,EAAK,UACR,EAEDA,EAAK,cACJ,OAAC,UACC,QAAQ,YACR,KAAK,KACL,UAAU,SACV,QAAS,IAAMI,EAAmB,EAAI,EAErC,SAAAJ,EAAK,UAAU,aAAe,YACjC,GAEJ,GACF,EACF,EAECA,EAAK,cACJ,OAAC,0BACC,OAAQG,EACR,QAAS,IAAMC,EAAmB,EAAK,EACvC,KAAMJ,EAAK,UACX,MAAOE,GAAS,MAClB,GAEJ,CAEJ,CAEA,IAAOX,EAAQQ",
6
- "names": ["Activity_exports", "__export", "Activity_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_ModalContainer", "import_provider", "import_SubscribeModal", "Activity", "copy", "onClose", "profile", "isSubscribeOpen", "setIsSubscribeOpen"]
7
- }
@@ -1,19 +0,0 @@
1
- import type { RedeemCouponModalCopy, AlpcConfig } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- itemTitle: string;
6
- itemCredits: number;
7
- itemImage?: {
8
- url: string;
9
- alt?: string;
10
- };
11
- redeemId: number;
12
- userId?: string;
13
- copy: RedeemCouponModalCopy;
14
- pointUnit?: string;
15
- alpcConfig: AlpcConfig;
16
- onError?: (code: number) => void;
17
- };
18
- export declare function RedeemCouponModal({ isOpen, onClose, itemTitle, itemCredits, itemImage, redeemId, userId, copy, pointUnit, alpcConfig, onError, }: Props): import("react/jsx-runtime").JSX.Element;
19
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";var _=Object.create;var u=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var j=(t,o)=>{for(var r in o)u(t,r,{get:o[r],enumerable:!0})},B=(t,o,r,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of D(o))!P.call(t,i)&&i!==r&&u(t,i,{get:()=>o[i],enumerable:!(c=z(o,i))||c.enumerable});return t};var q=(t,o,r)=>(r=t!=null?_(I(t)):{},B(o||!t||!t.__esModule?u(r,"default",{value:t,enumerable:!0}):r,t)),F=t=>B(u({},"__esModule",{value:!0}),t);var H={};j(H,{RedeemCouponModal:()=>G});module.exports=F(H);var e=require("react/jsx-runtime"),a=require("react"),l=require("@anker-in/headless-ui"),C=require("@anker-in/lib"),R=require("../../../credits/modal/ModalContainer"),p=require("../../../credits/context/const"),M=require("./hooks/useRedeemCoupon"),T=q(require("../../../credits/context/hooks/useCopy"));function G({isOpen:t,onClose:o,itemTitle:r,itemCredits:c,itemImage:i,redeemId:b,userId:g,copy:s,pointUnit:k="pts",alpcConfig:y,onError:N}){const[f,v]=(0,a.useState)(),[h,x]=(0,a.useState)(""),[L,m]=(0,a.useState)(!1),{copy:S,copied:E}=(0,T.default)(),{isMutating:A,trigger:w}=(0,M.useRedeemCoupon)(y),U=(0,a.useCallback)(async()=>{x("");const{data:n}=await w({user_id:g,rule_id:b});if(!n){x(s.commonError);return}if(n.data?.success)v(n.data.coupon_code);else{let d=s.commonError;n.code===p.AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit?(d=s.redeemLimitError,m(!0)):n.code===p.AlpcErrorCode.CodeLpcRuleInventoryNotEnough?(d=s.inventoryNotEnough,m(!0)):n.code===p.AlpcErrorCode.CodeLpcNotEnoughCredits?(d=s.creditsNotEnough,m(!0)):n.code===p.AlpcErrorCode.CodeCrossSiteError&&(d=s.crossSiteError,m(!0)),x(d),N?.(n.code)}},[w,g,b,s,N]);return(0,a.useEffect)(()=>{t||(v(void 0),x(""),m(!1))},[t]),(0,e.jsxs)(R.CreditsModalContainer,{isOpen:t,onClose:o,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] px-0 min-l:px-0 md:mb-[24px]",titleClassName:"h-[56px] bg-[#f5f5f7]",children:[(0,e.jsxs)("div",{className:"bg-[#f5f5f7] px-[48px] pb-[24px] md:px-[16px]",children:[i?.url&&(0,e.jsx)("div",{className:"relative mx-auto h-[164px] w-[324px]",children:(0,e.jsx)("img",{src:i.url,alt:i.alt??"",className:"h-full w-full object-cover"})}),(0,e.jsxs)("p",{className:(0,C.classNames)("mt-[30px] text-center text-[24px] font-bold md:mt-[18px] md:text-[20px]"),children:[c," ",k]})]}),(0,e.jsx)("div",{className:"bg-white px-[48px] pt-[24px] text-center md:px-[16px]",children:f?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)("div",{className:"flex items-center justify-center gap-[10px]",children:[(0,e.jsx)("span",{className:"text-[24px] font-bold",children:f}),(0,e.jsx)("button",{className:(0,C.classNames)("text-[16px] font-bold underline",E&&"pointer-events-none"),onClick:()=>S(f),children:E?"Copied":"Copy"})]}),(0,e.jsx)(l.Text,{className:"mb-[4px] mt-[16px] text-[24px] font-bold md:text-[20px]",html:s.successTitle}),(0,e.jsx)(l.Text,{className:"text-[16px] font-bold text-[#6d6d6f] md:text-[14px]",html:s.successDesc}),(0,e.jsx)(l.Button,{variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:()=>{s.successButtonUrl&&(window.location.href=s.successButtonUrl),o()},children:s.successButton})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l.Text,{className:"block text-[24px] font-bold md:text-[20px]",html:s.confirmTitle}),(0,e.jsx)(l.Button,{loading:A,variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:U,disabled:L,children:s.confirmButton})]})}),h&&(0,e.jsx)("div",{className:"bg-white px-[48px] py-[12px] text-center md:px-[16px]",children:(0,e.jsx)(l.Text,{className:"text-[14px] font-semibold text-[#ff0000]",html:h})})]})}
2
- //# sourceMappingURL=RedeemCouponModal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/ConsumeCredits/RedeemCouponModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Text } from '@anker-in/headless-ui'\nimport { classNames as cn } from '@anker-in/lib'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { AlpcErrorCode } from '../../../credits/context/const'\nimport { useRedeemCoupon } from './hooks/useRedeemCoupon'\nimport useCopy from '../../../credits/context/hooks/useCopy'\nimport type { RedeemCouponModalCopy, AlpcConfig } from '../../type'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n itemTitle: string\n itemCredits: number\n itemImage?: { url: string; alt?: string }\n redeemId: number\n userId?: string\n copy: RedeemCouponModalCopy\n pointUnit?: string\n alpcConfig: AlpcConfig\n onError?: (code: number) => void\n}\n\nexport function RedeemCouponModal({\n isOpen,\n onClose,\n itemTitle,\n itemCredits,\n itemImage,\n redeemId,\n userId,\n copy,\n pointUnit = 'pts',\n alpcConfig,\n onError,\n}: Props) {\n const [couponCode, setCouponCode] = useState<string>()\n const [errorInfo, setErrorInfo] = useState('')\n const [disabled, setDisabled] = useState(false)\n const { copy: copyText, copied } = useCopy()\n\n const { isMutating: loading, trigger } = useRedeemCoupon(alpcConfig)\n\n const handleConfirm = useCallback(async () => {\n setErrorInfo('')\n const { data } = await trigger({ user_id: userId, rule_id: redeemId })\n if (!data) {\n setErrorInfo(copy.commonError)\n return\n }\n if (data.data?.success) {\n setCouponCode(data.data.coupon_code)\n } else {\n let msg = copy.commonError\n if (data.code === AlpcErrorCode.CodeLpcShopifyCouponRuleRedeemLimit) {\n msg = copy.redeemLimitError\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeLpcRuleInventoryNotEnough) {\n msg = copy.inventoryNotEnough\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeLpcNotEnoughCredits) {\n msg = copy.creditsNotEnough\n setDisabled(true)\n } else if (data.code === AlpcErrorCode.CodeCrossSiteError) {\n msg = copy.crossSiteError\n setDisabled(true)\n }\n setErrorInfo(msg)\n onError?.(data.code)\n }\n }, [trigger, userId, redeemId, copy, onError])\n\n useEffect(() => {\n if (!isOpen) {\n setCouponCode(undefined)\n setErrorInfo('')\n setDisabled(false)\n }\n }, [isOpen])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] px-0 min-l:px-0 md:mb-[24px]\"\n titleClassName=\"h-[56px] bg-[#f5f5f7]\"\n >\n <div className=\"bg-[#f5f5f7] px-[48px] pb-[24px] md:px-[16px]\">\n {itemImage?.url && (\n <div className=\"relative mx-auto h-[164px] w-[324px]\">\n <img src={itemImage.url} alt={itemImage.alt ?? ''} className=\"h-full w-full object-cover\" />\n </div>\n )}\n <p className={cn('mt-[30px] text-center text-[24px] font-bold md:mt-[18px] md:text-[20px]')}>\n {itemCredits} {pointUnit}\n </p>\n </div>\n\n <div className=\"bg-white px-[48px] pt-[24px] text-center md:px-[16px]\">\n {!couponCode ? (\n <>\n <Text className=\"block text-[24px] font-bold md:text-[20px]\" html={copy.confirmTitle} />\n <Button\n loading={loading}\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={handleConfirm}\n disabled={disabled}\n >\n {copy.confirmButton}\n </Button>\n </>\n ) : (\n <>\n <div className=\"flex items-center justify-center gap-[10px]\">\n <span className=\"text-[24px] font-bold\">{couponCode}</span>\n <button\n className={cn('text-[16px] font-bold underline', copied && 'pointer-events-none')}\n onClick={() => copyText(couponCode)}\n >\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n <Text className=\"mb-[4px] mt-[16px] text-[24px] font-bold md:text-[20px]\" html={copy.successTitle} />\n <Text className=\"text-[16px] font-bold text-[#6d6d6f] md:text-[14px]\" html={copy.successDesc} />\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"mt-[16px] w-full\"\n onClick={() => {\n if (copy.successButtonUrl) window.location.href = copy.successButtonUrl\n onClose()\n }}\n >\n {copy.successButton}\n </Button>\n </>\n )}\n </div>\n\n {errorInfo && (\n <div className=\"bg-white px-[48px] py-[12px] text-center md:px-[16px]\">\n <Text className=\"text-[14px] font-semibold text-[#ff0000]\" html={errorInfo} />\n </div>\n )}\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["RedeemCouponModal_exports", "__export", "RedeemCouponModal", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_lib", "import_ModalContainer", "import_const", "import_useRedeemCoupon", "import_useCopy", "isOpen", "onClose", "itemTitle", "itemCredits", "itemImage", "redeemId", "userId", "copy", "pointUnit", "alpcConfig", "onError", "couponCode", "setCouponCode", "errorInfo", "setErrorInfo", "disabled", "setDisabled", "copyText", "copied", "useCopy", "loading", "trigger", "handleConfirm", "data", "msg", "cn"]
7
- }
@@ -1,10 +0,0 @@
1
- import type { SubscribeModalCopy } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- onSuccess?: () => void;
6
- copy: SubscribeModalCopy;
7
- email?: string;
8
- };
9
- export declare function EarnCreditsSubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props): import("react/jsx-runtime").JSX.Element;
10
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";var H=Object.create;var p=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var U=(e,t)=>{for(var r in t)p(e,r,{get:t[r],enumerable:!0})},N=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of j(t))!J.call(e,n)&&n!==r&&p(e,n,{get:()=>t[n],enumerable:!(o=I(t,n))||o.enumerable});return e};var V=(e,t,r)=>(r=e!=null?H(q(e)):{},N(t||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),X=e=>N(p({},"__esModule",{value:!0}),e);var K={};U(K,{EarnCreditsSubscribeModal:()=>G});module.exports=X(K);var s=require("react/jsx-runtime"),a=require("react"),i=require("@anker-in/headless-ui"),l=require("@anker-in/lib"),m=V(require("js-cookie")),S=require("query-string"),k=require("../../../credits/modal/ModalContainer"),M=require("../../../credits/context/utils"),T=require("../../context/provider"),P=require("../../../../constants");function z(){if(typeof window>"u")return{register_source:""};const{search:e,href:t}=window.location,r=(0,S.parse)(e);return{fbuy_ref_code:m.default.get("fbuy_ref_code"),ref:m.default.get("ref_ads"),inviter_code:r.ic??r.inviter_code??m.default.get("inviter_code"),register_source:r.redirect??m.default.get("reg_source")??t}}async function F(e){if(typeof window>"u"||!window?.grecaptcha?.execute||!e)return"";try{return await window.grecaptcha.execute(e,{action:"activity"})}catch{return""}}function G({isOpen:e,onClose:t,onSuccess:r,copy:o,email:n}){const{alpcConfig:O}=(0,T.useMemberPopupContext)(),{locale:b}=O,{brand:B,storeDomain:g,recaptchaSitekey:D}=(0,l.useHeadlessContext)(),f=P.ROUNDED_BRANDS.includes(B),[x,R]=(0,a.useState)(!1),[c,h]=(0,a.useState)(n??""),[_,d]=(0,a.useState)(""),[y,v]=(0,a.useState)(""),[A,w]=(0,a.useState)(!1);(0,a.useEffect)(()=>{n&&h(n)},[n]);const E=(0,a.useCallback)(async()=>{if(d(""),!c)return d("Please fill in your email");if(!(0,M.emailValidate)(c))return d("Invalid email address");if(!x)return d("Please agree to the policy");w(!0);const{register_source:u}=z(),L=await F(D||"");try{const C=await(await fetch("/api/multipass/rainbowbridge/activities",{method:"POST",headers:{"Content-Type":"application/json","current-language":b,"X-Recaptcha-Token":L},body:JSON.stringify({email:c,register_source:u,shopify_domain:g,single_brand_subscribe:o.single_brand_subscribe??!0,genre:o.genre??o.dealsType??"",sub_brand_type:o.sub_brand_type??""})})).json();C.errors?d(C.errors??"Error occurred"):(v(o.successTips??"Subscribed successfully!"),r?.(),setTimeout(()=>{v(""),t()},3e3))}catch{d("Network error")}finally{w(!1)}},[c,x,b,g,o,r,t]);return(0,s.jsx)(k.CreditsModalContainer,{isOpen:e,onClose:t,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] md:mb-[24px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:(0,s.jsxs)("div",{className:"flex flex-col gap-[16px] text-center",children:[(0,s.jsx)(i.Text,{className:"text-[22px] font-bold",html:o.title}),o.desc&&(0,s.jsx)(i.Text,{className:"text-left text-[16px] font-semibold text-[#1f2021]",html:o.desc}),(0,s.jsxs)("div",{className:(0,l.classNames)("flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]",f?"rounded-[2px]":"rounded-none"),children:[(0,s.jsx)("input",{className:(0,l.classNames)("h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]",f?"rounded-l-[2px] md:rounded-[2px]":"rounded-none"),placeholder:o.placeholder,value:c,onChange:u=>{d(""),h(u.target.value.trim())}}),(0,s.jsx)(i.Button,{variant:"primary",loading:A,className:(0,l.classNames)("!h-full !min-w-0 !px-[24px] md:!h-[46px]",f?"!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]":"!rounded-none"),onClick:E,children:o.buttonLabel??"Subscribe"})]}),(0,s.jsxs)("div",{className:"flex w-full items-start gap-[8px]",children:[(0,s.jsx)(i.Checkbox,{checked:x,onCheckedChange:()=>R(u=>!u),className:"border-[#1d1d1f]"}),(0,s.jsx)("label",{className:"text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:o.policy??""}})]}),(0,s.jsx)("div",{className:(0,l.classNames)("text-left text-[16px] font-semibold",_&&"text-[#f84d4f]",y&&"text-[#52c41a]"),children:(0,s.jsx)(i.Text,{html:y||_||""})})]})})}
2
- //# sourceMappingURL=SubscribeModal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/SubscribeModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { emailValidate } from '../../../credits/context/utils'\nimport { useMemberPopupContext } from '../../context/provider'\nimport type { SubscribeModalCopy } from '../../type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n onSuccess?: () => void\n copy: SubscribeModalCopy\n email?: string\n}\n\nfunction getAdCookie() {\n if (typeof window === 'undefined') return { register_source: '' }\n const { search, href } = window.location\n const query = parse(search)\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n ref: Cookies.get('ref_ads'),\n inviter_code: query.ic ?? query.inviter_code ?? Cookies.get('inviter_code'),\n register_source: query.redirect ?? Cookies.get('reg_source') ?? href,\n }\n}\n\nasync function getRecaptchaToken(sitekey: string): Promise<string> {\n if (typeof window === 'undefined' || !window?.grecaptcha?.execute) return ''\n if (!sitekey) return ''\n try {\n return await window.grecaptcha.execute(sitekey, { action: 'activity' })\n } catch {\n return ''\n }\n}\n\nexport function EarnCreditsSubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props) {\n const { alpcConfig } = useMemberPopupContext()\n const { locale } = alpcConfig\n const { brand: headlessBrand, storeDomain, recaptchaSitekey } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(headlessBrand)\n const [policy, setPolicy] = useState(false)\n const [email, setEmail] = useState(initialEmail ?? '')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (initialEmail) setEmail(initialEmail)\n }, [initialEmail])\n\n const handleSubmit = useCallback(async () => {\n setErrorMessage('')\n if (!email) return setErrorMessage('Please fill in your email')\n if (!emailValidate(email)) return setErrorMessage('Invalid email address')\n if (!policy) return setErrorMessage('Please agree to the policy')\n\n setLoading(true)\n const { register_source } = getAdCookie()\n const recaptchaToken = await getRecaptchaToken(recaptchaSitekey || '')\n try {\n const response = await fetch('/api/multipass/rainbowbridge/activities', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'current-language': locale,\n 'X-Recaptcha-Token': recaptchaToken,\n },\n body: JSON.stringify({\n email,\n register_source,\n shopify_domain: storeDomain,\n single_brand_subscribe: copy.single_brand_subscribe ?? true,\n genre: copy.genre ?? copy.dealsType ?? '',\n sub_brand_type: copy.sub_brand_type ?? '',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')\n onSuccess?.()\n setTimeout(() => {\n setSuccessMessage('')\n onClose()\n }, 3000)\n } else {\n setErrorMessage(result.errors ?? 'Error occurred')\n }\n } catch {\n setErrorMessage('Network error')\n } finally {\n setLoading(false)\n }\n }, [email, policy, locale, storeDomain, copy, onSuccess, onClose])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] md:mb-[24px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[16px] text-center\">\n <Text className=\"text-[22px] font-bold\" html={copy.title} />\n {copy.desc && (\n <Text className=\"text-left text-[16px] font-semibold text-[#1f2021]\" html={copy.desc} />\n )}\n <div className={cn('flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]', rounded ? 'rounded-[2px]' : 'rounded-none')}>\n <input\n className={cn('h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]', rounded ? 'rounded-l-[2px] md:rounded-[2px]' : 'rounded-none')}\n placeholder={copy.placeholder}\n value={email}\n onChange={e => { setErrorMessage(''); setEmail(e.target.value.trim()) }}\n />\n <Button\n variant=\"primary\"\n loading={loading}\n className={cn('!h-full !min-w-0 !px-[24px] md:!h-[46px]', rounded ? '!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]' : '!rounded-none')}\n onClick={handleSubmit}\n >\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n <div className=\"flex w-full items-start gap-[8px]\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(v => !v)} className=\"border-[#1d1d1f]\" />\n <label\n className=\"text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{ __html: copy.policy ?? '' }}\n />\n </div>\n <div className={cn('text-left text-[16px] font-semibold', errorMessage && 'text-[#f84d4f]', successMessage && 'text-[#52c41a]')}>\n <Text html={successMessage || errorMessage || ''} />\n </div>\n </div>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GA8GQ,IAAAI,EAAA,6BA9GRC,EAAiD,iBACjDC,EAAuC,iCACvCC,EAAqD,yBACrDC,EAAoB,wBACpBC,EAAsB,wBACtBC,EAAsC,iDACtCC,EAA8B,0CAC9BC,EAAsC,kCAEtCC,EAA+B,iCAU/B,SAASC,GAAc,CACrB,GAAI,OAAO,OAAW,IAAa,MAAO,CAAE,gBAAiB,EAAG,EAChE,KAAM,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAI,OAAO,SAC1BC,KAAQ,SAAMF,CAAM,EAC1B,MAAO,CACL,cAAe,EAAAG,QAAQ,IAAI,eAAe,EAC1C,IAAK,EAAAA,QAAQ,IAAI,SAAS,EAC1B,aAAcD,EAAM,IAAMA,EAAM,cAAgB,EAAAC,QAAQ,IAAI,cAAc,EAC1E,gBAAiBD,EAAM,UAAY,EAAAC,QAAQ,IAAI,YAAY,GAAKF,CAClE,CACF,CAEA,eAAeG,EAAkBC,EAAkC,CAEjE,GADI,OAAO,OAAW,KAAe,CAAC,QAAQ,YAAY,SACtD,CAACA,EAAS,MAAO,GACrB,GAAI,CACF,OAAO,MAAM,OAAO,WAAW,QAAQA,EAAS,CAAE,OAAQ,UAAW,CAAC,CACxE,MAAQ,CACN,MAAO,EACT,CACF,CAEO,SAASlB,EAA0B,CAAE,OAAAmB,EAAQ,QAAAC,EAAS,UAAAC,EAAW,KAAAC,EAAM,MAAOC,CAAa,EAAU,CAC1G,KAAM,CAAE,WAAAC,CAAW,KAAI,yBAAsB,EACvC,CAAE,OAAAC,CAAO,EAAID,EACb,CAAE,MAAOE,EAAe,YAAAC,EAAa,iBAAAC,CAAiB,KAAI,sBAAmB,EAC7EC,EAAU,iBAAe,SAASH,CAAa,EAC/C,CAACI,EAAQC,CAAS,KAAI,YAAS,EAAK,EACpC,CAACC,EAAOC,CAAQ,KAAI,YAASV,GAAgB,EAAE,EAC/C,CAACW,EAAcC,CAAe,KAAI,YAAS,EAAE,EAC7C,CAACC,EAAgBC,CAAiB,KAAI,YAAS,EAAE,EACjD,CAACC,EAASC,CAAU,KAAI,YAAS,EAAK,KAE5C,aAAU,IAAM,CACVhB,GAAcU,EAASV,CAAY,CACzC,EAAG,CAACA,CAAY,CAAC,EAEjB,MAAMiB,KAAe,eAAY,SAAY,CAE3C,GADAL,EAAgB,EAAE,EACd,CAACH,EAAO,OAAOG,EAAgB,2BAA2B,EAC9D,GAAI,IAAC,iBAAcH,CAAK,EAAG,OAAOG,EAAgB,uBAAuB,EACzE,GAAI,CAACL,EAAQ,OAAOK,EAAgB,4BAA4B,EAEhEI,EAAW,EAAI,EACf,KAAM,CAAE,gBAAAE,CAAgB,EAAI7B,EAAY,EAClC8B,EAAiB,MAAMzB,EAAkBW,GAAoB,EAAE,EACrE,GAAI,CAiBF,MAAMe,EAAS,MAhBE,MAAM,MAAM,0CAA2C,CACtE,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,mBAAoBlB,EACpB,oBAAqBiB,CACvB,EACA,KAAM,KAAK,UAAU,CACnB,MAAAV,EACA,gBAAAS,EACA,eAAgBd,EAChB,uBAAwBL,EAAK,wBAA0B,GACvD,MAAOA,EAAK,OAASA,EAAK,WAAa,GACvC,eAAgBA,EAAK,gBAAkB,EACzC,CAAC,CACH,CAAC,GAC6B,KAAK,EAC9BqB,EAAO,OAQVR,EAAgBQ,EAAO,QAAU,gBAAgB,GAPjDN,EAAkBf,EAAK,aAAe,0BAA0B,EAChED,IAAY,EACZ,WAAW,IAAM,CACfgB,EAAkB,EAAE,EACpBjB,EAAQ,CACV,EAAG,GAAI,EAIX,MAAQ,CACNe,EAAgB,eAAe,CACjC,QAAE,CACAI,EAAW,EAAK,CAClB,CACF,EAAG,CAACP,EAAOF,EAAQL,EAAQE,EAAaL,EAAMD,EAAWD,CAAO,CAAC,EAEjE,SACE,OAAC,yBACC,OAAQD,EACR,QAASC,EACT,UAAU,sBACV,gBAAgB,yBAChB,aAAY,GACZ,mBAAmB,yBAEnB,oBAAC,OAAI,UAAU,uCACb,oBAAC,QAAK,UAAU,wBAAwB,KAAME,EAAK,MAAO,EACzDA,EAAK,SACJ,OAAC,QAAK,UAAU,qDAAqD,KAAMA,EAAK,KAAM,KAExF,QAAC,OAAI,aAAW,EAAAsB,YAAG,2EAA4Ef,EAAU,gBAAkB,cAAc,EACvI,oBAAC,SACC,aAAW,EAAAe,YAAG,+GAAgHf,EAAU,mCAAqC,cAAc,EAC3L,YAAaP,EAAK,YAClB,MAAOU,EACP,SAAUa,GAAK,CAAEV,EAAgB,EAAE,EAAGF,EAASY,EAAE,OAAO,MAAM,KAAK,CAAC,CAAE,EACxE,KACA,OAAC,UACC,QAAQ,UACR,QAASP,EACT,aAAW,EAAAM,YAAG,2CAA4Cf,EAAU,qDAAuD,eAAe,EAC1I,QAASW,EAER,SAAAlB,EAAK,aAAe,YACvB,GACF,KACA,QAAC,OAAI,UAAU,oCACb,oBAAC,YAAS,QAASQ,EAAQ,gBAAiB,IAAMC,EAAUe,GAAK,CAACA,CAAC,EAAG,UAAU,mBAAmB,KACnG,OAAC,SACC,UAAU,kEACV,wBAAyB,CAAE,OAAQxB,EAAK,QAAU,EAAG,EACvD,GACF,KACA,OAAC,OAAI,aAAW,EAAAsB,YAAG,sCAAuCV,GAAgB,iBAAkBE,GAAkB,gBAAgB,EAC5H,mBAAC,QAAK,KAAMA,GAAkBF,GAAgB,GAAI,EACpD,GACF,EACF,CAEJ",
6
- "names": ["SubscribeModal_exports", "__export", "EarnCreditsSubscribeModal", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_lib", "import_js_cookie", "import_query_string", "import_ModalContainer", "import_utils", "import_provider", "import_constants", "getAdCookie", "search", "href", "query", "Cookies", "getRecaptchaToken", "sitekey", "isOpen", "onClose", "onSuccess", "copy", "initialEmail", "alpcConfig", "locale", "headlessBrand", "storeDomain", "recaptchaSitekey", "rounded", "policy", "setPolicy", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "handleSubmit", "register_source", "recaptchaToken", "result", "cn", "e", "v"]
7
- }
@@ -1,9 +0,0 @@
1
- import type { SubscribeModalCopy } from '../../type';
2
- type Props = {
3
- copy: SubscribeModalCopy;
4
- email?: string;
5
- onClose: () => void;
6
- onSuccess?: () => void;
7
- };
8
- export default function SubscribePanel({ copy, email: initialEmail, onClose, onSuccess }: Props): import("react/jsx-runtime").JSX.Element;
9
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";var E=Object.create;var m=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var J=(e,t)=>{for(var r in t)m(e,r,{get:t[r],enumerable:!0})},S=(e,t,r,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of I(t))!q.call(e,a)&&a!==r&&m(e,a,{get:()=>t[a],enumerable:!(l=H(t,a))||l.enumerable});return e};var U=(e,t,r)=>(r=e!=null?E(j(e)):{},S(t||!e||!e.__esModule?m(r,"default",{value:e,enumerable:!0}):r,e)),V=e=>S(m({},"__esModule",{value:!0}),e);var F={};J(F,{default:()=>D});module.exports=V(F);var s=require("react/jsx-runtime"),o=require("react"),f=require("@anker-in/headless-ui"),c=require("@anker-in/lib"),u=U(require("js-cookie")),k=require("query-string"),T=require("../../../credits/context/utils"),P=require("../../context/provider"),M=require("../../../../constants");function X(){if(typeof window>"u")return{register_source:""};const{search:e,href:t}=window.location,r=(0,k.parse)(e);return{fbuy_ref_code:u.default.get("fbuy_ref_code"),ref:u.default.get("ref_ads"),inviter_code:r.ic??r.inviter_code??u.default.get("inviter_code"),register_source:r.redirect??u.default.get("reg_source")??t}}async function z(e){if(typeof window>"u"||!window?.grecaptcha?.execute||!e)return"";try{return await window.grecaptcha.execute(e,{action:"activity"})}catch{return""}}function D({copy:e,email:t,onClose:r,onSuccess:l}){const{alpcConfig:a}=(0,P.useMemberPopupContext)(),{locale:g}=a,{brand:R,storeDomain:h,recaptchaSitekey:L}=(0,c.useHeadlessContext)(),_=M.ROUNDED_BRANDS.includes(R),[x,y]=(0,o.useState)(!1),[d,v]=(0,o.useState)(t??""),[p,n]=(0,o.useState)(""),[b,w]=(0,o.useState)(""),[O,N]=(0,o.useState)(!1);(0,o.useEffect)(()=>{t&&v(t)},[t]);const A=(0,o.useCallback)(async()=>{if(n(""),!d)return n("Please fill in your email");if(!(0,T.emailValidate)(d))return n("Invalid email address");if(!x)return n("Please agree to the policy");N(!0);const{register_source:i}=X(),B=await z(L||"");try{const C=await(await fetch("/api/multipass/rainbowbridge/activities",{method:"POST",headers:{"Content-Type":"application/json","current-language":g,"X-Recaptcha-Token":B},body:JSON.stringify({email:d,register_source:i,shopify_domain:h,single_brand_subscribe:e.single_brand_subscribe??!0,genre:e.genre??e.dealsType??"",sub_brand_type:e.sub_brand_type??""})})).json();C.errors?n(C.errors??"Error occurred"):(w(e.successTips??"Subscribed successfully!"),l?.(),setTimeout(()=>{w(""),r()},3e3))}catch{n("Network error")}finally{N(!1)}},[d,x,g,h,e,r,l]);return(0,s.jsxs)("div",{className:"flex flex-col gap-[12px]",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-[8px]",children:[e.title&&(0,s.jsx)("h2",{className:"text-[24px] font-[700] leading-[1.2] text-[#080a0f]",children:e.title}),e.desc&&(0,s.jsx)(f.Text,{className:"text-[16px] text-[#1e2024]",html:e.desc})]}),(0,s.jsxs)("div",{className:"flex flex-col gap-[16px]",children:[(0,s.jsx)("input",{className:(0,c.classNames)("h-[46px] w-full border px-[14px] text-[16px] outline-none placeholder:text-[#999]",p?"border-[#f84d4f]":"border-[#d8d8d8]",_?"rounded-[4px]":"rounded-none"),placeholder:e.placeholder,value:d,onChange:i=>{n(""),v(i.target.value.trim())}}),(0,s.jsxs)("div",{className:"flex w-full items-start gap-[8px]",children:[(0,s.jsx)(f.Checkbox,{checked:x,onCheckedChange:()=>y(i=>!i),className:"mt-[2px] border-[#1d1d1f]"}),(0,s.jsx)("label",{className:"cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline",onClick:()=>y(i=>!i),dangerouslySetInnerHTML:{__html:e.policy??""}})]}),(p||b)&&(0,s.jsx)("div",{className:(0,c.classNames)("text-[14px] font-[700]",p&&"text-[#f84d4f]",b&&"text-[#52c41a]"),children:(0,s.jsx)(f.Text,{html:b||p})}),(0,s.jsx)("button",{className:(0,c.classNames)("w-full cursor-pointer bg-[#080a0f] py-[14px] text-[14px] font-[700] text-white disabled:opacity-60",_?"rounded-[4px]":"rounded-none"),disabled:O,onClick:A,children:e.buttonLabel??"Subscribe"})]})]})}
2
- //# sourceMappingURL=SubscribePanel.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/SubscribePanel.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Checkbox, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport { emailValidate } from '../../../credits/context/utils'\nimport { useMemberPopupContext } from '../../context/provider'\nimport type { SubscribeModalCopy } from '../../type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n copy: SubscribeModalCopy\n email?: string\n onClose: () => void\n onSuccess?: () => void\n}\n\nfunction getAdCookie() {\n if (typeof window === 'undefined') return { register_source: '' }\n const { search, href } = window.location\n const query = parse(search)\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n ref: Cookies.get('ref_ads'),\n inviter_code: query.ic ?? query.inviter_code ?? Cookies.get('inviter_code'),\n register_source: query.redirect ?? Cookies.get('reg_source') ?? href,\n }\n}\n\nasync function getRecaptchaToken(sitekey: string): Promise<string> {\n if (typeof window === 'undefined' || !window?.grecaptcha?.execute) return ''\n if (!sitekey) return ''\n try {\n return await window.grecaptcha.execute(sitekey, { action: 'activity' })\n } catch {\n return ''\n }\n}\n\nexport default function SubscribePanel({ copy, email: initialEmail, onClose, onSuccess }: Props) {\n const { alpcConfig } = useMemberPopupContext()\n const { locale } = alpcConfig\n const { brand: headlessBrand, storeDomain, recaptchaSitekey } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(headlessBrand)\n const [policy, setPolicy] = useState(false)\n const [email, setEmail] = useState(initialEmail ?? '')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (initialEmail) setEmail(initialEmail)\n }, [initialEmail])\n\n const handleSubmit = useCallback(async () => {\n setErrorMessage('')\n if (!email) return setErrorMessage('Please fill in your email')\n if (!emailValidate(email)) return setErrorMessage('Invalid email address')\n if (!policy) return setErrorMessage('Please agree to the policy')\n\n setLoading(true)\n const { register_source } = getAdCookie()\n const recaptchaToken = await getRecaptchaToken(recaptchaSitekey || '')\n try {\n const response = await fetch('/api/multipass/rainbowbridge/activities', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'current-language': locale,\n 'X-Recaptcha-Token': recaptchaToken,\n },\n body: JSON.stringify({\n email,\n register_source,\n shopify_domain: storeDomain,\n single_brand_subscribe: copy.single_brand_subscribe ?? true,\n genre: copy.genre ?? copy.dealsType ?? '',\n sub_brand_type: copy.sub_brand_type ?? '',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')\n onSuccess?.()\n setTimeout(() => {\n setSuccessMessage('')\n onClose()\n }, 3000)\n } else {\n setErrorMessage(result.errors ?? 'Error occurred')\n }\n } catch {\n setErrorMessage('Network error')\n } finally {\n setLoading(false)\n }\n }, [email, policy, locale, storeDomain, copy, onClose, onSuccess])\n\n return (\n <div className=\"flex flex-col gap-[12px]\">\n <div className=\"flex flex-col gap-[8px]\">\n {copy.title && (\n <h2 className=\"text-[24px] font-[700] leading-[1.2] text-[#080a0f]\">{copy.title}</h2>\n )}\n {copy.desc && (\n <Text className=\"text-[16px] text-[#1e2024]\" html={copy.desc} />\n )}\n </div>\n\n <div className=\"flex flex-col gap-[16px]\">\n <input\n className={cn(\n 'h-[46px] w-full border px-[14px] text-[16px] outline-none placeholder:text-[#999]',\n errorMessage ? 'border-[#f84d4f]' : 'border-[#d8d8d8]',\n rounded ? 'rounded-[4px]' : 'rounded-none'\n )}\n placeholder={copy.placeholder}\n value={email}\n onChange={e => { setErrorMessage(''); setEmail(e.target.value.trim()) }}\n />\n\n <div className=\"flex w-full items-start gap-[8px]\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(v => !v)} className=\"mt-[2px] border-[#1d1d1f]\" />\n <label\n className=\"cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline\"\n onClick={() => setPolicy(v => !v)}\n dangerouslySetInnerHTML={{ __html: copy.policy ?? '' }}\n />\n </div>\n\n {(errorMessage || successMessage) && (\n <div className={cn('text-[14px] font-[700]', errorMessage && 'text-[#f84d4f]', successMessage && 'text-[#52c41a]')}>\n <Text html={successMessage || errorMessage} />\n </div>\n )}\n\n <button\n className={cn('w-full cursor-pointer bg-[#080a0f] py-[14px] text-[14px] font-[700] text-white disabled:opacity-60', rounded ? 'rounded-[4px]' : 'rounded-none')}\n disabled={loading}\n onClick={handleSubmit}\n >\n {copy.buttonLabel ?? 'Subscribe'}\n </button>\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAoGM,IAAAI,EAAA,6BApGNC,EAAiD,iBACjDC,EAA+B,iCAC/BC,EAAqD,yBACrDC,EAAoB,wBACpBC,EAAsB,wBACtBC,EAA8B,0CAC9BC,EAAsC,kCAEtCC,EAA+B,iCAS/B,SAASC,GAAc,CACrB,GAAI,OAAO,OAAW,IAAa,MAAO,CAAE,gBAAiB,EAAG,EAChE,KAAM,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAI,OAAO,SAC1BC,KAAQ,SAAMF,CAAM,EAC1B,MAAO,CACL,cAAe,EAAAG,QAAQ,IAAI,eAAe,EAC1C,IAAK,EAAAA,QAAQ,IAAI,SAAS,EAC1B,aAAcD,EAAM,IAAMA,EAAM,cAAgB,EAAAC,QAAQ,IAAI,cAAc,EAC1E,gBAAiBD,EAAM,UAAY,EAAAC,QAAQ,IAAI,YAAY,GAAKF,CAClE,CACF,CAEA,eAAeG,EAAkBC,EAAkC,CAEjE,GADI,OAAO,OAAW,KAAe,CAAC,QAAQ,YAAY,SACtD,CAACA,EAAS,MAAO,GACrB,GAAI,CACF,OAAO,MAAM,OAAO,WAAW,QAAQA,EAAS,CAAE,OAAQ,UAAW,CAAC,CACxE,MAAQ,CACN,MAAO,EACT,CACF,CAEe,SAARjB,EAAgC,CAAE,KAAAkB,EAAM,MAAOC,EAAc,QAAAC,EAAS,UAAAC,CAAU,EAAU,CAC/F,KAAM,CAAE,WAAAC,CAAW,KAAI,yBAAsB,EACvC,CAAE,OAAAC,CAAO,EAAID,EACb,CAAE,MAAOE,EAAe,YAAAC,EAAa,iBAAAC,CAAiB,KAAI,sBAAmB,EAC7EC,EAAU,iBAAe,SAASH,CAAa,EAC/C,CAACI,EAAQC,CAAS,KAAI,YAAS,EAAK,EACpC,CAACC,EAAOC,CAAQ,KAAI,YAASZ,GAAgB,EAAE,EAC/C,CAACa,EAAcC,CAAe,KAAI,YAAS,EAAE,EAC7C,CAACC,EAAgBC,CAAiB,KAAI,YAAS,EAAE,EACjD,CAACC,EAASC,CAAU,KAAI,YAAS,EAAK,KAE5C,aAAU,IAAM,CACVlB,GAAcY,EAASZ,CAAY,CACzC,EAAG,CAACA,CAAY,CAAC,EAEjB,MAAMmB,KAAe,eAAY,SAAY,CAE3C,GADAL,EAAgB,EAAE,EACd,CAACH,EAAO,OAAOG,EAAgB,2BAA2B,EAC9D,GAAI,IAAC,iBAAcH,CAAK,EAAG,OAAOG,EAAgB,uBAAuB,EACzE,GAAI,CAACL,EAAQ,OAAOK,EAAgB,4BAA4B,EAEhEI,EAAW,EAAI,EACf,KAAM,CAAE,gBAAAE,CAAgB,EAAI5B,EAAY,EAClC6B,EAAiB,MAAMxB,EAAkBU,GAAoB,EAAE,EACrE,GAAI,CAiBF,MAAMe,EAAS,MAhBE,MAAM,MAAM,0CAA2C,CACtE,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,mBAAoBlB,EACpB,oBAAqBiB,CACvB,EACA,KAAM,KAAK,UAAU,CACnB,MAAAV,EACA,gBAAAS,EACA,eAAgBd,EAChB,uBAAwBP,EAAK,wBAA0B,GACvD,MAAOA,EAAK,OAASA,EAAK,WAAa,GACvC,eAAgBA,EAAK,gBAAkB,EACzC,CAAC,CACH,CAAC,GAC6B,KAAK,EAC9BuB,EAAO,OAQVR,EAAgBQ,EAAO,QAAU,gBAAgB,GAPjDN,EAAkBjB,EAAK,aAAe,0BAA0B,EAChEG,IAAY,EACZ,WAAW,IAAM,CACfc,EAAkB,EAAE,EACpBf,EAAQ,CACV,EAAG,GAAI,EAIX,MAAQ,CACNa,EAAgB,eAAe,CACjC,QAAE,CACAI,EAAW,EAAK,CAClB,CACF,EAAG,CAACP,EAAOF,EAAQL,EAAQE,EAAaP,EAAME,EAASC,CAAS,CAAC,EAEjE,SACE,QAAC,OAAI,UAAU,2BACb,qBAAC,OAAI,UAAU,0BACZ,UAAAH,EAAK,UACJ,OAAC,MAAG,UAAU,sDAAuD,SAAAA,EAAK,MAAM,EAEjFA,EAAK,SACJ,OAAC,QAAK,UAAU,6BAA6B,KAAMA,EAAK,KAAM,GAElE,KAEA,QAAC,OAAI,UAAU,2BACb,oBAAC,SACC,aAAW,EAAAwB,YACT,oFACAV,EAAe,mBAAqB,mBACpCL,EAAU,gBAAkB,cAC9B,EACA,YAAaT,EAAK,YAClB,MAAOY,EACP,SAAUa,GAAK,CAAEV,EAAgB,EAAE,EAAGF,EAASY,EAAE,OAAO,MAAM,KAAK,CAAC,CAAE,EACxE,KAEA,QAAC,OAAI,UAAU,oCACb,oBAAC,YAAS,QAASf,EAAQ,gBAAiB,IAAMC,EAAUe,GAAK,CAACA,CAAC,EAAG,UAAU,4BAA4B,KAC5G,OAAC,SACC,UAAU,sEACV,QAAS,IAAMf,EAAUe,GAAK,CAACA,CAAC,EAChC,wBAAyB,CAAE,OAAQ1B,EAAK,QAAU,EAAG,EACvD,GACF,GAEEc,GAAgBE,OAChB,OAAC,OAAI,aAAW,EAAAQ,YAAG,yBAA0BV,GAAgB,iBAAkBE,GAAkB,gBAAgB,EAC/G,mBAAC,QAAK,KAAMA,GAAkBF,EAAc,EAC9C,KAGF,OAAC,UACC,aAAW,EAAAU,YAAG,qGAAsGf,EAAU,gBAAkB,cAAc,EAC9J,SAAUS,EACV,QAASE,EAER,SAAApB,EAAK,aAAe,YACvB,GACF,GACF,CAEJ",
6
- "names": ["SubscribePanel_exports", "__export", "SubscribePanel", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_lib", "import_js_cookie", "import_query_string", "import_utils", "import_provider", "import_constants", "getAdCookie", "search", "href", "query", "Cookies", "getRecaptchaToken", "sitekey", "copy", "initialEmail", "onClose", "onSuccess", "alpcConfig", "locale", "headlessBrand", "storeDomain", "recaptchaSitekey", "rounded", "policy", "setPolicy", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "handleSubmit", "register_source", "recaptchaToken", "result", "cn", "e", "v"]
7
- }
@@ -1,13 +0,0 @@
1
- type ReferralDashboardResponse = {
2
- data: {
3
- cash_available: number;
4
- cash_pending: number;
5
- };
6
- code: number;
7
- msg: string;
8
- };
9
- export declare function useReferralDashboard({ enabled, locale }: {
10
- enabled: boolean;
11
- locale?: string;
12
- }): import("swr/mutation").SWRMutationResponse<ReferralDashboardResponse, Error, string | null, never>;
13
- export {};
@@ -1,2 +0,0 @@
1
- "use strict";var i=Object.create;var s=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,d=Object.prototype.hasOwnProperty;var c=(e,r)=>{for(var n in r)s(e,n,{get:r[n],enumerable:!0})},t=(e,r,n,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of p(r))!d.call(e,a)&&a!==n&&s(e,a,{get:()=>r[a],enumerable:!(o=u(r,a))||o.enumerable});return e};var h=(e,r,n)=>(n=e!=null?i(b(e)):{},t(r||!e||!e.__esModule?s(n,"default",{value:e,enumerable:!0}):n,e)),f=e=>t(s({},"__esModule",{value:!0}),e);var m={};c(m,{useReferralDashboard:()=>g});module.exports=f(m);var l=h(require("swr/mutation"));function g({enabled:e,locale:r=""}){return(0,l.default)(e?"/api/multipass/mktsrv/v1/referral/dashboard/info":null,async n=>(await fetch(n,{method:"POST",headers:{"Content-Type":"application/json","current-language":r},body:JSON.stringify({channel:"web"})})).json())}
2
- //# sourceMappingURL=useReferralDashboard.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/Referral/hooks/useReferralDashboard.ts"],
4
- "sourcesContent": ["import useSWRMutation from 'swr/mutation'\n\ntype ReferralDashboardResponse = {\n data: {\n cash_available: number\n cash_pending: number\n }\n code: number\n msg: string\n}\n\nexport function useReferralDashboard({ enabled, locale = '' }: { enabled: boolean; locale?: string }) {\n return useSWRMutation<ReferralDashboardResponse, Error, string | null>(\n enabled ? '/api/multipass/mktsrv/v1/referral/dashboard/info' : null,\n async (url: string) => {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'current-language': locale,\n },\n body: JSON.stringify({ channel: 'web' }),\n })\n return response.json()\n }\n )\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA2B,2BAWpB,SAASF,EAAqB,CAAE,QAAAG,EAAS,OAAAC,EAAS,EAAG,EAA0C,CACpG,SAAO,EAAAC,SACLF,EAAU,mDAAqD,KAC/D,MAAOG,IACY,MAAM,MAAMA,EAAK,CAChC,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,mBAAoBF,CACtB,EACA,KAAM,KAAK,UAAU,CAAE,QAAS,KAAM,CAAC,CACzC,CAAC,GACe,KAAK,CAEzB,CACF",
6
- "names": ["useReferralDashboard_exports", "__export", "useReferralDashboard", "__toCommonJS", "import_mutation", "enabled", "locale", "useSWRMutation", "url"]
7
- }
@@ -1,10 +0,0 @@
1
- import type { ActivitySubscribeCopy } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- onSuccess?: () => void;
6
- copy: ActivitySubscribeCopy;
7
- email?: string;
8
- };
9
- export declare function ActivitySubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props): import("react/jsx-runtime").JSX.Element;
10
- export {};
@@ -1,2 +0,0 @@
1
- import{jsx as t,jsxs as m}from"react/jsx-runtime";import{useCallback as w,useEffect as f,useState as b}from"react";import{Button as M,Checkbox as D,Text as h}from"@anker-in/headless-ui";import{classNames as l,useHeadlessContext as v}from"@anker-in/lib";import{CreditsModalContainer as P}from"../../../credits/modal/ModalContainer";import{useActivitySubscribe as T}from"./hooks/useActivitySubscribe";import{useMemberPopupContext as _}from"../../context/provider";import{ROUNDED_BRANDS as B}from"../../../../constants";function E({isOpen:C,onClose:d,onSuccess:c,copy:e,email:o}){const{alpcConfig:N}=_(),{storeDomain:g}=v(),[a,S]=b(!1),[n,p]=b(o??""),{brand:y}=v(),r=B.includes(y),{subscribe:x,loading:A,error:u,success:s}=T(e,N.locale,g);f(()=>{o&&p(o)},[o]),f(()=>{s&&(c?.(),setTimeout(()=>d(),3e3))},[s,c,d]);const k=w(()=>{x(n,a)},[x,n,a]);return t(P,{isOpen:C,onClose:d,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] md:mb-[24px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:m("div",{className:"flex flex-col gap-[16px] text-center",children:[t(h,{className:"text-[22px] font-bold",html:e.title}),e.desc&&t(h,{className:"text-left text-[16px] font-semibold text-[#1f2021]",html:e.desc}),m("div",{className:l("flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]",r?"rounded-[2px]":"rounded-none"),children:[t("input",{className:l("h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]",r?"rounded-l-[2px] md:rounded-[2px]":"rounded-none"),placeholder:e.placeholder,value:n,onChange:i=>p(i.target.value.trim())}),t(M,{variant:"primary",loading:A,className:l("!h-full !min-w-0 !px-[24px] md:!h-[46px]",r?"!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]":"!rounded-none"),onClick:k,children:e.buttonLabel??"Subscribe"})]}),m("div",{className:"flex w-full items-start gap-[8px]",children:[t(D,{checked:a,onCheckedChange:()=>S(i=>!i),className:"border-[#1d1d1f]"}),t("label",{className:"text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e.policy??""}})]}),t("div",{className:l("text-left text-[16px] font-semibold",u&&"text-[#f84d4f]",s&&"text-[#52c41a]"),children:s?e.successTips??"Subscribed!":u})]})})}export{E as ActivitySubscribeModal};
2
- //# sourceMappingURL=SubscribeModal.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/Activity/SubscribeModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { classNames as cn, useHeadlessContext } from '@anker-in/lib'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { emailValidate } from '../../../credits/context/utils'\nimport { useActivitySubscribe } from './hooks/useActivitySubscribe'\nimport { useMemberPopupContext } from '../../context/provider'\nimport type { ActivitySubscribeCopy } from '../../type'\nimport { ROUNDED_BRANDS } from '../../../../constants'\n\ntype Props = {\n isOpen: boolean\n onClose: () => void\n onSuccess?: () => void\n copy: ActivitySubscribeCopy\n email?: string\n}\n\nexport function ActivitySubscribeModal({ isOpen, onClose, onSuccess, copy, email: initialEmail }: Props) {\n const { alpcConfig } = useMemberPopupContext()\n const { storeDomain } = useHeadlessContext()\n const [policy, setPolicy] = useState(false)\n const [email, setEmail] = useState(initialEmail ?? '')\n const { brand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n\n const { subscribe, loading, error, success } = useActivitySubscribe(copy, alpcConfig.locale, storeDomain)\n\n useEffect(() => {\n if (initialEmail) setEmail(initialEmail)\n }, [initialEmail])\n\n useEffect(() => {\n if (success) {\n onSuccess?.()\n setTimeout(() => onClose(), 3000)\n }\n }, [success, onSuccess, onClose])\n\n const handleSubmit = useCallback(() => {\n subscribe(email, policy)\n }, [subscribe, email, policy])\n\n return (\n <CreditsModalContainer\n isOpen={isOpen}\n onClose={onClose}\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] md:mb-[24px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[16px] text-center\">\n <Text className=\"text-[22px] font-bold\" html={copy.title} />\n {copy.desc && (\n <Text className=\"text-left text-[16px] font-semibold text-[#1f2021]\" html={copy.desc} />\n )}\n\n <div className={cn('flex h-[52px] w-full overflow-hidden md:flex-col md:h-auto md:gap-[16px]', rounded ? 'rounded-[2px]' : 'rounded-none')}>\n <input\n className={cn('h-full flex-1 border border-[#d8d8d8] px-[14px] text-[16px] outline-none placeholder:text-[#999] md:h-[52px]', rounded ? 'rounded-l-[2px] md:rounded-[2px]' : 'rounded-none')}\n placeholder={copy.placeholder}\n value={email}\n onChange={e => setEmail(e.target.value.trim())}\n />\n <Button\n variant=\"primary\"\n loading={loading}\n className={cn('!h-full !min-w-0 !px-[24px] md:!h-[46px]', rounded ? '!rounded-l-none !rounded-r-[2px] md:!rounded-[2px]' : '!rounded-none')}\n onClick={handleSubmit}\n >\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n\n <div className=\"flex w-full items-start gap-[8px]\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(v => !v)} className=\"border-[#1d1d1f]\" />\n <label\n className=\"text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{ __html: copy.policy ?? '' }}\n />\n </div>\n\n <div className={cn('text-left text-[16px] font-semibold', error && 'text-[#f84d4f]', success && 'text-[#52c41a]')}>\n {success ? (copy.successTips ?? 'Subscribed!') : error}\n </div>\n </div>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "AAqDQ,cAAAA,EAKA,QAAAC,MALA,oBArDR,OAAS,eAAAC,EAAa,aAAAC,EAAW,YAAAC,MAAgB,QACjD,OAAS,UAAAC,EAAQ,YAAAC,EAAU,QAAAC,MAAY,wBACvC,OAAS,cAAcC,EAAI,sBAAAC,MAA0B,gBACrD,OAAS,yBAAAC,MAA6B,wCAEtC,OAAS,wBAAAC,MAA4B,+BACrC,OAAS,yBAAAC,MAA6B,yBAEtC,OAAS,kBAAAC,MAAsB,wBAUxB,SAASC,EAAuB,CAAE,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,EAAW,KAAAC,EAAM,MAAOC,CAAa,EAAU,CACvG,KAAM,CAAE,WAAAC,CAAW,EAAIR,EAAsB,EACvC,CAAE,YAAAS,CAAY,EAAIZ,EAAmB,EACrC,CAACa,EAAQC,CAAS,EAAInB,EAAS,EAAK,EACpC,CAACoB,EAAOC,CAAQ,EAAIrB,EAASe,GAAgB,EAAE,EAC/C,CAAE,MAAAO,CAAM,EAAIjB,EAAmB,EAC/BkB,EAAUd,EAAe,SAASa,CAAK,EAEvC,CAAE,UAAAE,EAAW,QAAAC,EAAS,MAAAC,EAAO,QAAAC,CAAQ,EAAIpB,EAAqBO,EAAME,EAAW,OAAQC,CAAW,EAExGlB,EAAU,IAAM,CACVgB,GAAcM,EAASN,CAAY,CACzC,EAAG,CAACA,CAAY,CAAC,EAEjBhB,EAAU,IAAM,CACV4B,IACFd,IAAY,EACZ,WAAW,IAAMD,EAAQ,EAAG,GAAI,EAEpC,EAAG,CAACe,EAASd,EAAWD,CAAO,CAAC,EAEhC,MAAMgB,EAAe9B,EAAY,IAAM,CACrC0B,EAAUJ,EAAOF,CAAM,CACzB,EAAG,CAACM,EAAWJ,EAAOF,CAAM,CAAC,EAE7B,OACEtB,EAACU,EAAA,CACC,OAAQK,EACR,QAASC,EACT,UAAU,sBACV,gBAAgB,yBAChB,aAAY,GACZ,mBAAmB,yBAEnB,SAAAf,EAAC,OAAI,UAAU,uCACb,UAAAD,EAACO,EAAA,CAAK,UAAU,wBAAwB,KAAMW,EAAK,MAAO,EACzDA,EAAK,MACJlB,EAACO,EAAA,CAAK,UAAU,qDAAqD,KAAMW,EAAK,KAAM,EAGxFjB,EAAC,OAAI,UAAWO,EAAG,2EAA4EmB,EAAU,gBAAkB,cAAc,EACvI,UAAA3B,EAAC,SACC,UAAWQ,EAAG,+GAAgHmB,EAAU,mCAAqC,cAAc,EAC3L,YAAaT,EAAK,YAClB,MAAOM,EACP,SAAUS,GAAKR,EAASQ,EAAE,OAAO,MAAM,KAAK,CAAC,EAC/C,EACAjC,EAACK,EAAA,CACC,QAAQ,UACR,QAASwB,EACT,UAAWrB,EAAG,2CAA4CmB,EAAU,qDAAuD,eAAe,EAC1I,QAASK,EAER,SAAAd,EAAK,aAAe,YACvB,GACF,EAEAjB,EAAC,OAAI,UAAU,oCACb,UAAAD,EAACM,EAAA,CAAS,QAASgB,EAAQ,gBAAiB,IAAMC,EAAUW,GAAK,CAACA,CAAC,EAAG,UAAU,mBAAmB,EACnGlC,EAAC,SACC,UAAU,kEACV,wBAAyB,CAAE,OAAQkB,EAAK,QAAU,EAAG,EACvD,GACF,EAEAlB,EAAC,OAAI,UAAWQ,EAAG,sCAAuCsB,GAAS,iBAAkBC,GAAW,gBAAgB,EAC7G,SAAAA,EAAWb,EAAK,aAAe,cAAiBY,EACnD,GACF,EACF,CAEJ",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Checkbox", "Text", "cn", "useHeadlessContext", "CreditsModalContainer", "useActivitySubscribe", "useMemberPopupContext", "ROUNDED_BRANDS", "ActivitySubscribeModal", "isOpen", "onClose", "onSuccess", "copy", "initialEmail", "alpcConfig", "storeDomain", "policy", "setPolicy", "email", "setEmail", "brand", "rounded", "subscribe", "loading", "error", "success", "handleSubmit", "e", "v"]
7
- }
@@ -1,7 +0,0 @@
1
- import type { ActivitySubscribeCopy } from '../../../type';
2
- export declare function useActivitySubscribe(copy: ActivitySubscribeCopy, locale: string, shopifyDomain: string): {
3
- subscribe: (email: string, policy: boolean) => Promise<boolean>;
4
- loading: boolean;
5
- error: string;
6
- success: boolean;
7
- };
@@ -1,2 +0,0 @@
1
- import{useCallback as g,useState as n}from"react";import{parse as p}from"query-string";import _ from"js-cookie";import{emailValidate as y}from"../../../../credits/context/utils";function m(){if(typeof window>"u")return{register_source:""};const{search:e,href:s}=window.location;return{register_source:p(e).redirect??_.get("reg_source")??s}}function A(e,s,t){const[u,o]=n(!1),[c,r]=n(""),[b,l]=n(!1);return{subscribe:g(async(i,f)=>{if(r(""),!i)return r("Please fill in your email"),!1;if(!y(i))return r("Invalid email address"),!1;if(!f)return r("Please agree to the policy"),!1;o(!0);const{register_source:d}=m();try{const a=await(await fetch("/api/multipass/rainbowbridge/activities",{method:"POST",headers:{"Content-Type":"application/json","current-language":s},body:JSON.stringify({email:i,register_source:d,shopify_domain:t,single_brand_subscribe:e.single_brand_subscribe??!0,genre:e.genre??"",sub_brand_type:e.sub_brand_type??""})})).json();return a.errors?(r(a.errors??"Error occurred"),!1):(l(!0),!0)}catch{return r("Network error"),!1}finally{o(!1)}},[s,e.single_brand_subscribe,e.genre,e.sub_brand_type,t]),loading:u,error:c,success:b}}export{A as useActivitySubscribe};
2
- //# sourceMappingURL=useActivitySubscribe.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../src/components/memberPopup/panels/Activity/hooks/useActivitySubscribe.ts"],
4
- "sourcesContent": ["import { useCallback, useState } from 'react'\nimport { parse } from 'query-string'\nimport Cookies from 'js-cookie'\nimport { emailValidate } from '../../../../credits/context/utils'\nimport type { ActivitySubscribeCopy } from '../../../type'\n\nfunction getAdCookie() {\n if (typeof window === 'undefined') return { register_source: '' }\n const { search, href } = window.location\n const query = parse(search)\n return {\n register_source: query.redirect ?? Cookies.get('reg_source') ?? href,\n }\n}\n\nexport function useActivitySubscribe(copy: ActivitySubscribeCopy, locale: string, shopifyDomain: string) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n const [success, setSuccess] = useState(false)\n\n const subscribe = useCallback(\n async (email: string, policy: boolean): Promise<boolean> => {\n setError('')\n if (!email) { setError('Please fill in your email'); return false }\n if (!emailValidate(email)) { setError('Invalid email address'); return false }\n if (!policy) { setError('Please agree to the policy'); return false }\n\n setLoading(true)\n const { register_source } = getAdCookie()\n try {\n const response = await fetch('/api/multipass/rainbowbridge/activities', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n shopify_domain: shopifyDomain,\n single_brand_subscribe: copy.single_brand_subscribe ?? true,\n genre: copy.genre ?? '',\n sub_brand_type: copy.sub_brand_type ?? '',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccess(true)\n return true\n }\n setError(result.errors ?? 'Error occurred')\n return false\n } catch {\n setError('Network error')\n return false\n } finally {\n setLoading(false)\n }\n },\n [locale, copy.single_brand_subscribe, copy.genre, copy.sub_brand_type, shopifyDomain]\n )\n\n return { subscribe, loading, error, success }\n}\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,EAAa,YAAAC,MAAgB,QACtC,OAAS,SAAAC,MAAa,eACtB,OAAOC,MAAa,YACpB,OAAS,iBAAAC,MAAqB,oCAG9B,SAASC,GAAc,CACrB,GAAI,OAAO,OAAW,IAAa,MAAO,CAAE,gBAAiB,EAAG,EAChE,KAAM,CAAE,OAAAC,EAAQ,KAAAC,CAAK,EAAI,OAAO,SAEhC,MAAO,CACL,gBAFYL,EAAMI,CAAM,EAED,UAAYH,EAAQ,IAAI,YAAY,GAAKI,CAClE,CACF,CAEO,SAASC,EAAqBC,EAA6BC,EAAgBC,EAAuB,CACvG,KAAM,CAACC,EAASC,CAAU,EAAIZ,EAAS,EAAK,EACtC,CAACa,EAAOC,CAAQ,EAAId,EAAS,EAAE,EAC/B,CAACe,EAASC,CAAU,EAAIhB,EAAS,EAAK,EAyC5C,MAAO,CAAE,UAvCSD,EAChB,MAAOkB,EAAeC,IAAsC,CAE1D,GADAJ,EAAS,EAAE,EACP,CAACG,EAAS,OAAAH,EAAS,2BAA2B,EAAU,GAC5D,GAAI,CAACX,EAAcc,CAAK,EAAK,OAAAH,EAAS,uBAAuB,EAAU,GACvE,GAAI,CAACI,EAAU,OAAAJ,EAAS,4BAA4B,EAAU,GAE9DF,EAAW,EAAI,EACf,KAAM,CAAE,gBAAAO,CAAgB,EAAIf,EAAY,EACxC,GAAI,CAaF,MAAMgB,EAAS,MAZE,MAAM,MAAM,0CAA2C,CACtE,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,mBAAoBX,CAAO,EAC1E,KAAM,KAAK,UAAU,CACnB,MAAAQ,EACA,gBAAAE,EACA,eAAgBT,EAChB,uBAAwBF,EAAK,wBAA0B,GACvD,MAAOA,EAAK,OAAS,GACrB,eAAgBA,EAAK,gBAAkB,EACzC,CAAC,CACH,CAAC,GAC6B,KAAK,EACnC,OAAKY,EAAO,QAIZN,EAASM,EAAO,QAAU,gBAAgB,EACnC,KAJLJ,EAAW,EAAI,EACR,GAIX,MAAQ,CACN,OAAAF,EAAS,eAAe,EACjB,EACT,QAAE,CACAF,EAAW,EAAK,CAClB,CACF,EACA,CAACH,EAAQD,EAAK,uBAAwBA,EAAK,MAAOA,EAAK,eAAgBE,CAAa,CACtF,EAEoB,QAAAC,EAAS,MAAAE,EAAO,QAAAE,CAAQ,CAC9C",
6
- "names": ["useCallback", "useState", "parse", "Cookies", "emailValidate", "getAdCookie", "search", "href", "useActivitySubscribe", "copy", "locale", "shopifyDomain", "loading", "setLoading", "error", "setError", "success", "setSuccess", "email", "policy", "register_source", "result"]
7
- }
@@ -1,7 +0,0 @@
1
- import type { ActivityCopy } from '../../type';
2
- type Props = {
3
- copy: ActivityCopy;
4
- onClose: () => void;
5
- };
6
- declare function Activity({ copy, onClose }: Props): import("react/jsx-runtime").JSX.Element;
7
- export default Activity;
@@ -1,2 +0,0 @@
1
- import{Fragment as p,jsx as t,jsxs as i}from"react/jsx-runtime";import{useState as m}from"react";import{Button as s,Picture as u,Text as r}from"@anker-in/headless-ui";import{CreditsModalContainer as b}from"../../../credits/modal/ModalContainer";import{useMemberPopupContext as d}from"../../context/provider";import{ActivitySubscribeModal as c}from"./SubscribeModal";function f({copy:e,onClose:l}){const{profile:o}=d(),[n,a]=m(!1);return i(p,{children:[t(b,{isOpen:!0,onClose:l,title:void 0,className:"w-[540px] md:h-auto",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",children:i("div",{className:"flex flex-col gap-[20px]",children:[e.image?.url&&t(u,{source:e.image.url,alt:e.image.alt??"",className:"w-full rounded-[8px]"}),e.title&&t(r,{className:"text-[20px] font-bold",html:e.title}),e.description&&t(r,{className:"text-[14px] leading-[1.5] text-[#666]",html:e.description}),i("div",{className:"flex gap-[12px]",children:[e.ctaButton&&t(s,{variant:"primary",size:"lg",className:"flex-1",as:e.ctaUrl?"a":"button",...e.ctaUrl?{href:e.ctaUrl,target:"_blank",rel:"noopener noreferrer"}:{},children:e.ctaButton}),e.subscribe&&t(s,{variant:"secondary",size:"lg",className:"flex-1",onClick:()=>a(!0),children:e.subscribe.buttonLabel??"Subscribe"})]})]})}),e.subscribe&&t(c,{isOpen:n,onClose:()=>a(!1),copy:e.subscribe,email:o?.email})]})}var h=f;export{h as default};
2
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../src/components/memberPopup/panels/Activity/index.tsx"],
4
- "sourcesContent": ["import { useState } from 'react'\nimport { Button, Picture, Text } from '@anker-in/headless-ui'\nimport { CreditsModalContainer } from '../../../credits/modal/ModalContainer'\nimport { useMemberPopupContext } from '../../context/provider'\nimport { ActivitySubscribeModal } from './SubscribeModal'\nimport type { ActivityCopy } from '../../type'\n\ntype Props = {\n copy: ActivityCopy\n onClose: () => void\n}\n\nfunction Activity({ copy, onClose }: Props) {\n const { profile } = useMemberPopupContext()\n const [isSubscribeOpen, setIsSubscribeOpen] = useState(false)\n\n return (\n <>\n <CreditsModalContainer\n isOpen\n onClose={onClose}\n title={undefined}\n className=\"w-[540px] md:h-auto\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n >\n <div className=\"flex flex-col gap-[20px]\">\n {copy.image?.url && (\n <Picture\n source={copy.image.url}\n alt={copy.image.alt ?? ''}\n className=\"w-full rounded-[8px]\"\n />\n )}\n {copy.title && (\n <Text className=\"text-[20px] font-bold\" html={copy.title} />\n )}\n {copy.description && (\n <Text className=\"text-[14px] leading-[1.5] text-[#666]\" html={copy.description} />\n )}\n <div className=\"flex gap-[12px]\">\n {copy.ctaButton && (\n <Button\n variant=\"primary\"\n size=\"lg\"\n className=\"flex-1\"\n as={copy.ctaUrl ? 'a' : 'button'}\n {...(copy.ctaUrl\n ? { href: copy.ctaUrl, target: '_blank', rel: 'noopener noreferrer' }\n : {})}\n >\n {copy.ctaButton}\n </Button>\n )}\n {copy.subscribe && (\n <Button\n variant=\"secondary\"\n size=\"lg\"\n className=\"flex-1\"\n onClick={() => setIsSubscribeOpen(true)}\n >\n {copy.subscribe.buttonLabel ?? 'Subscribe'}\n </Button>\n )}\n </div>\n </div>\n </CreditsModalContainer>\n\n {copy.subscribe && (\n <ActivitySubscribeModal\n isOpen={isSubscribeOpen}\n onClose={() => setIsSubscribeOpen(false)}\n copy={copy.subscribe}\n email={profile?.email}\n />\n )}\n </>\n )\n}\n\nexport default Activity\n"],
5
- "mappings": "AAiBI,mBAAAA,EAWQ,OAAAC,EAYF,QAAAC,MAvBN,oBAjBJ,OAAS,YAAAC,MAAgB,QACzB,OAAS,UAAAC,EAAQ,WAAAC,EAAS,QAAAC,MAAY,wBACtC,OAAS,yBAAAC,MAA6B,wCACtC,OAAS,yBAAAC,MAA6B,yBACtC,OAAS,0BAAAC,MAA8B,mBAQvC,SAASC,EAAS,CAAE,KAAAC,EAAM,QAAAC,CAAQ,EAAU,CAC1C,KAAM,CAAE,QAAAC,CAAQ,EAAIL,EAAsB,EACpC,CAACM,EAAiBC,CAAkB,EAAIZ,EAAS,EAAK,EAE5D,OACED,EAAAF,EAAA,CACE,UAAAC,EAACM,EAAA,CACC,OAAM,GACN,QAASK,EACT,MAAO,OACP,UAAU,sBACV,aAAY,GACZ,mBAAmB,yBAEnB,SAAAV,EAAC,OAAI,UAAU,2BACZ,UAAAS,EAAK,OAAO,KACXV,EAACI,EAAA,CACC,OAAQM,EAAK,MAAM,IACnB,IAAKA,EAAK,MAAM,KAAO,GACvB,UAAU,uBACZ,EAEDA,EAAK,OACJV,EAACK,EAAA,CAAK,UAAU,wBAAwB,KAAMK,EAAK,MAAO,EAE3DA,EAAK,aACJV,EAACK,EAAA,CAAK,UAAU,wCAAwC,KAAMK,EAAK,YAAa,EAElFT,EAAC,OAAI,UAAU,kBACZ,UAAAS,EAAK,WACJV,EAACG,EAAA,CACC,QAAQ,UACR,KAAK,KACL,UAAU,SACV,GAAIO,EAAK,OAAS,IAAM,SACvB,GAAIA,EAAK,OACN,CAAE,KAAMA,EAAK,OAAQ,OAAQ,SAAU,IAAK,qBAAsB,EAClE,CAAC,EAEJ,SAAAA,EAAK,UACR,EAEDA,EAAK,WACJV,EAACG,EAAA,CACC,QAAQ,YACR,KAAK,KACL,UAAU,SACV,QAAS,IAAMW,EAAmB,EAAI,EAErC,SAAAJ,EAAK,UAAU,aAAe,YACjC,GAEJ,GACF,EACF,EAECA,EAAK,WACJV,EAACQ,EAAA,CACC,OAAQK,EACR,QAAS,IAAMC,EAAmB,EAAK,EACvC,KAAMJ,EAAK,UACX,MAAOE,GAAS,MAClB,GAEJ,CAEJ,CAEA,IAAOG,EAAQN",
6
- "names": ["Fragment", "jsx", "jsxs", "useState", "Button", "Picture", "Text", "CreditsModalContainer", "useMemberPopupContext", "ActivitySubscribeModal", "Activity", "copy", "onClose", "profile", "isSubscribeOpen", "setIsSubscribeOpen", "Activity_default"]
7
- }
@@ -1,19 +0,0 @@
1
- import type { RedeemCouponModalCopy, AlpcConfig } from '../../type';
2
- type Props = {
3
- isOpen: boolean;
4
- onClose: () => void;
5
- itemTitle: string;
6
- itemCredits: number;
7
- itemImage?: {
8
- url: string;
9
- alt?: string;
10
- };
11
- redeemId: number;
12
- userId?: string;
13
- copy: RedeemCouponModalCopy;
14
- pointUnit?: string;
15
- alpcConfig: AlpcConfig;
16
- onError?: (code: number) => void;
17
- };
18
- export declare function RedeemCouponModal({ isOpen, onClose, itemTitle, itemCredits, itemImage, redeemId, userId, copy, pointUnit, alpcConfig, onError, }: Props): import("react/jsx-runtime").JSX.Element;
19
- export {};
@@ -1,2 +0,0 @@
1
- import{Fragment as w,jsx as t,jsxs as s}from"react/jsx-runtime";import{useCallback as S,useEffect as A,useState as c}from"react";import{Button as h,Text as l}from"@anker-in/headless-ui";import{classNames as E}from"@anker-in/lib";import{CreditsModalContainer as U}from"../../../credits/modal/ModalContainer";import{AlpcErrorCode as a}from"../../../credits/context/const";import{useRedeemCoupon as _}from"./hooks/useRedeemCoupon";import z from"../../../credits/context/hooks/useCopy";function J({isOpen:m,onClose:x,itemTitle:D,itemCredits:B,itemImage:d,redeemId:u,userId:f,copy:e,pointUnit:R="pts",alpcConfig:M,onError:C}){const[p,b]=c(),[g,n]=c(""),[T,r]=c(!1),{copy:k,copied:N}=z(),{isMutating:y,trigger:v}=_(M),L=S(async()=>{n("");const{data:o}=await v({user_id:f,rule_id:u});if(!o){n(e.commonError);return}if(o.data?.success)b(o.data.coupon_code);else{let i=e.commonError;o.code===a.CodeLpcShopifyCouponRuleRedeemLimit?(i=e.redeemLimitError,r(!0)):o.code===a.CodeLpcRuleInventoryNotEnough?(i=e.inventoryNotEnough,r(!0)):o.code===a.CodeLpcNotEnoughCredits?(i=e.creditsNotEnough,r(!0)):o.code===a.CodeCrossSiteError&&(i=e.crossSiteError,r(!0)),n(i),C?.(o.code)}},[v,f,u,e,C]);return A(()=>{m||(b(void 0),n(""),r(!1))},[m]),s(U,{isOpen:m,onClose:x,className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] px-0 min-l:px-0 md:mb-[24px]",titleClassName:"h-[56px] bg-[#f5f5f7]",children:[s("div",{className:"bg-[#f5f5f7] px-[48px] pb-[24px] md:px-[16px]",children:[d?.url&&t("div",{className:"relative mx-auto h-[164px] w-[324px]",children:t("img",{src:d.url,alt:d.alt??"",className:"h-full w-full object-cover"})}),s("p",{className:E("mt-[30px] text-center text-[24px] font-bold md:mt-[18px] md:text-[20px]"),children:[B," ",R]})]}),t("div",{className:"bg-white px-[48px] pt-[24px] text-center md:px-[16px]",children:p?s(w,{children:[s("div",{className:"flex items-center justify-center gap-[10px]",children:[t("span",{className:"text-[24px] font-bold",children:p}),t("button",{className:E("text-[16px] font-bold underline",N&&"pointer-events-none"),onClick:()=>k(p),children:N?"Copied":"Copy"})]}),t(l,{className:"mb-[4px] mt-[16px] text-[24px] font-bold md:text-[20px]",html:e.successTitle}),t(l,{className:"text-[16px] font-bold text-[#6d6d6f] md:text-[14px]",html:e.successDesc}),t(h,{variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:()=>{e.successButtonUrl&&(window.location.href=e.successButtonUrl),x()},children:e.successButton})]}):s(w,{children:[t(l,{className:"block text-[24px] font-bold md:text-[20px]",html:e.confirmTitle}),t(h,{loading:y,variant:"primary",size:"lg",className:"mt-[16px] w-full",onClick:L,disabled:T,children:e.confirmButton})]})}),g&&t("div",{className:"bg-white px-[48px] py-[12px] text-center md:px-[16px]",children:t(l,{className:"text-[14px] font-semibold text-[#ff0000]",html:g})})]})}export{J as RedeemCouponModal};
2
- //# sourceMappingURL=RedeemCouponModal.js.map