@anker-in/campaign-ui 0.5.25 → 0.5.26

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 (28) hide show
  1. package/dist/cjs/components/credits/modal/SubscribeModal.js +1 -1
  2. package/dist/cjs/components/credits/modal/SubscribeModal.js.map +3 -3
  3. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +1 -1
  4. package/dist/cjs/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +3 -3
  5. package/dist/cjs/lib/registration/hooks/useEmailValidation.js +1 -1
  6. package/dist/cjs/lib/registration/hooks/useEmailValidation.js.map +2 -2
  7. package/dist/cjs/lib/registration/hooks/useSendEmailValidation.js +1 -1
  8. package/dist/cjs/lib/registration/hooks/useSendEmailValidation.js.map +2 -2
  9. package/dist/cjs/lib/utils/fetcher/fetcher.d.ts +1 -1
  10. package/dist/cjs/lib/utils/fetcher/fetcher.js +1 -1
  11. package/dist/cjs/lib/utils/fetcher/fetcher.js.map +3 -3
  12. package/dist/esm/components/credits/modal/SubscribeModal.js +1 -1
  13. package/dist/esm/components/credits/modal/SubscribeModal.js.map +3 -3
  14. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js +1 -1
  15. package/dist/esm/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.js.map +3 -3
  16. package/dist/esm/lib/registration/hooks/useEmailValidation.js +1 -1
  17. package/dist/esm/lib/registration/hooks/useEmailValidation.js.map +2 -2
  18. package/dist/esm/lib/registration/hooks/useSendEmailValidation.js +1 -1
  19. package/dist/esm/lib/registration/hooks/useSendEmailValidation.js.map +2 -2
  20. package/dist/esm/lib/utils/fetcher/fetcher.d.ts +1 -1
  21. package/dist/esm/lib/utils/fetcher/fetcher.js +1 -1
  22. package/dist/esm/lib/utils/fetcher/fetcher.js.map +3 -3
  23. package/package.json +1 -1
  24. package/src/components/credits/modal/SubscribeModal.tsx +3 -3
  25. package/src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx +3 -3
  26. package/src/lib/registration/hooks/useEmailValidation.ts +1 -2
  27. package/src/lib/registration/hooks/useSendEmailValidation.ts +1 -2
  28. package/src/lib/utils/fetcher/fetcher.ts +1 -2
@@ -1,2 +1,2 @@
1
- "use strict";var I=Object.create;var u=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var U=(e,s)=>{for(var r in s)u(e,r,{get:s[r],enumerable:!0})},T=(e,s,r,d)=>{if(s&&typeof s=="object"||typeof s=="function")for(let l of B(s))!z.call(e,l)&&l!==r&&u(e,l,{get:()=>s[l],enumerable:!(d=R(s,l))||d.enumerable});return e};var S=(e,s,r)=>(r=e!=null?I(O(e)):{},T(s||!e||!e.__esModule?u(r,"default",{value:e,enumerable:!0}):r,e)),V=e=>T(u({},"__esModule",{value:!0}),e);var K={};U(K,{CreditsSubscribeModal:()=>J});module.exports=V(K);var t=require("react/jsx-runtime"),i=require("react"),o=require("@anker-in/headless-ui"),a=require("../../../lib"),n=S(require("js-cookie")),M=require("query-string"),k=S(require("crypto-js/sha256")),w=require("../context/provider"),E=require("../../../constants"),A=require("./ModalContainer");const G=()=>{if(typeof window>"u")return{register_source:""};const{search:e,href:s}=window.location||{},r=(0,M.parse)(e);return{fbuy_ref_code:n.default.get("fbuy_ref_code"),affiliate:n.default.get("affiliate"),ref:n.default.get("ref_ads"),inviter_code:r.ic||r.inviter_code||n.default.get("inviter_code"),register_source:r.redirect||n.default.get("reg_source")||s,deals_type:n.default.get("deal"),transfer_id:n.default.get("transfer_id")}};function J({copy:e,onSuccess:s,...r}){const{brand:d,locale:l}=(0,a.useHeadlessContext)(),p=E.ROUNDED_BRANDS.includes(d),[g,P]=(0,i.useState)(!1),[h,L]=(0,i.useState)(!1),[c,v]=(0,i.useState)(""),[_,f]=(0,i.useState)(""),[C,y]=(0,i.useState)(""),[D,N]=(0,i.useState)(!1),{profile:m}=(0,w.useCreditsContext)(),F=(0,i.useCallback)(b=>{f(""),v(b.target?.value?.trim())},[]),H=(0,i.useCallback)(async b=>{b.preventDefault(),f(""),N(!0);const{register_source:q}=G(),x=await(0,a.fetcher)({locale:l,action:"subscribe",url:"/api/multipass/subscribe/subscribe_emails",method:"POST",body:{email:c,register_source:q,brand:d,deals_type:e.dealsType||"vip_subscribe"},headers:{},type:""});N(!1),x.errors?f(x.errors||x.statusText):(y(e.successTips||"Subscribed successfully!"),s&&s(),setTimeout(()=>{y("")},3e3),(0,a.gaTrack)({subscribe_hashed_email:c?(0,k.default)(c):""}),(0,a.gaTrack)({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType||"vip_subscribe",position:"pop_up"}}),(0,a.gaTrack)({event:"uaEvent",eventCategory:"subscribe",eventAction:e.dealsType||"vip_subscribe",eventLabel:"pop_up",nonInteraction:!1}))},[c,l,d,e.dealsType,e.successTips,s]);return(0,i.useEffect)(()=>{m&&m?.email&&v(m?.email)},[m]),(0,t.jsx)(A.CreditsModalContainer,{className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-[48px] md:mb-[24px]",titleClassName:"h-[56px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",...r,children:(0,t.jsxs)("form",{className:"min-l:px-[16px] flex flex-col gap-[16px] text-center",onSubmit:H,noValidate:!1,children:[(0,t.jsx)("div",{children:(0,t.jsx)(o.Text,{className:(0,a.classNames)("mb-[24px] text-[22px] font-bold"),html:e.title})}),e.desc&&(0,t.jsx)(o.Text,{className:"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]",html:e.desc}),(0,t.jsxs)("div",{className:(0,a.classNames)("relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]",!p&&"rounded-none"),children:[(0,t.jsx)("input",{className:(0,a.classNames)("h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]",!p&&"rounded-none"),type:"email",required:!0,placeholder:e.placeholder,value:c,onChange:F}),(0,t.jsx)(o.Button,{type:"submit",variant:"primary",loading:D,className:(0,a.classNames)("legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]",!p&&"rounded-none"),children:(0,t.jsx)(o.Picture,{source:"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383",className:"size-[24px]",alt:"email"})})]}),e?.oneankerSubscribeAgree&&(0,t.jsxs)("div",{className:"flex w-full",children:[(0,t.jsx)(o.Checkbox,{checked:h,onCheckedChange:()=>L(!h),required:!0,className:"border-[#1d1d1f]"}),(0,t.jsx)("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e.oneankerSubscribeAgree}})]}),(0,t.jsxs)("div",{className:"flex w-full",children:[(0,t.jsx)(o.Checkbox,{checked:g,onCheckedChange:()=>P(!g),required:!0,className:"border-[#1d1d1f]"}),(0,t.jsx)("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e?.policy||""}})]}),(0,t.jsx)("div",{className:(0,a.classNames)("w-full text-left text-[16px] font-semibold",_&&"text-[#F84D4F]",C&&"text-[#52C41A]"),children:(0,t.jsx)(o.Text,{html:C||_||""})})]})})}
1
+ "use strict";var I=Object.create;var u=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var V=(e,s)=>{for(var r in s)u(e,r,{get:s[r],enumerable:!0})},S=(e,s,r,d)=>{if(s&&typeof s=="object"||typeof s=="function")for(let l of O(s))!z.call(e,l)&&l!==r&&u(e,l,{get:()=>s[l],enumerable:!(d=R(s,l))||d.enumerable});return e};var M=(e,s,r)=>(r=e!=null?I(U(e)):{},S(s||!e||!e.__esModule?u(r,"default",{value:e,enumerable:!0}):r,e)),$=e=>S(u({},"__esModule",{value:!0}),e);var K={};V(K,{CreditsSubscribeModal:()=>J});module.exports=$(K);var t=require("react/jsx-runtime"),i=require("react"),o=require("@anker-in/headless-ui"),a=require("../../../lib"),n=M(require("js-cookie")),k=require("query-string"),w=M(require("crypto-js/sha256")),E=require("../context/provider"),A=require("../../../constants"),P=require("./ModalContainer");const G=()=>{if(typeof window>"u")return{register_source:""};const{search:e,href:s}=window.location||{},r=(0,k.parse)(e);return{fbuy_ref_code:n.default.get("fbuy_ref_code"),affiliate:n.default.get("affiliate"),ref:n.default.get("ref_ads"),inviter_code:r.ic||r.inviter_code||n.default.get("inviter_code"),register_source:r.redirect||n.default.get("reg_source")||s,deals_type:n.default.get("deal"),transfer_id:n.default.get("transfer_id")}};function J({copy:e,onSuccess:s,...r}){const{brand:d,locale:l}=(0,a.useHeadlessContext)(),p=A.ROUNDED_BRANDS.includes(d),[g,L]=(0,i.useState)(!1),[h,D]=(0,i.useState)(!1),[c,v]=(0,i.useState)(""),[_,f]=(0,i.useState)(""),[C,y]=(0,i.useState)(""),[F,N]=(0,i.useState)(!1),{profile:m,apiBaseUrl:T}=(0,E.useCreditsContext)(),H=(0,i.useCallback)(b=>{f(""),v(b.target?.value?.trim())},[]),q=(0,i.useCallback)(async b=>{b.preventDefault(),f(""),N(!0);const{register_source:B}=G(),x=await(0,a.fetcher)({locale:l,action:"subscribe",url:`${T||""}/api/multipass/subscribe/subscribe_emails`,method:"POST",body:{email:c,register_source:B,brand:d,deals_type:e.dealsType||"vip_subscribe"},headers:{},type:""});N(!1),x.errors?f(x.errors||x.statusText):(y(e.successTips||"Subscribed successfully!"),s&&s(),setTimeout(()=>{y("")},3e3),(0,a.gaTrack)({subscribe_hashed_email:c?(0,w.default)(c):""}),(0,a.gaTrack)({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType||"vip_subscribe",position:"pop_up"}}),(0,a.gaTrack)({event:"uaEvent",eventCategory:"subscribe",eventAction:e.dealsType||"vip_subscribe",eventLabel:"pop_up",nonInteraction:!1}))},[c,l,d,e.dealsType,e.successTips,s,T]);return(0,i.useEffect)(()=>{m&&m?.email&&v(m?.email)},[m]),(0,t.jsx)(P.CreditsModalContainer,{className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-[48px] md:mb-[24px]",titleClassName:"h-[56px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",...r,children:(0,t.jsxs)("form",{className:"min-l:px-[16px] flex flex-col gap-[16px] text-center",onSubmit:q,noValidate:!1,children:[(0,t.jsx)("div",{children:(0,t.jsx)(o.Text,{className:(0,a.classNames)("mb-[24px] text-[22px] font-bold"),html:e.title})}),e.desc&&(0,t.jsx)(o.Text,{className:"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]",html:e.desc}),(0,t.jsxs)("div",{className:(0,a.classNames)("relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]",!p&&"rounded-none"),children:[(0,t.jsx)("input",{className:(0,a.classNames)("h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]",!p&&"rounded-none"),type:"email",required:!0,placeholder:e.placeholder,value:c,onChange:H}),(0,t.jsx)(o.Button,{type:"submit",variant:"primary",loading:F,className:(0,a.classNames)("legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]",!p&&"rounded-none"),children:(0,t.jsx)(o.Picture,{source:"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383",className:"size-[24px]",alt:"email"})})]}),e?.oneankerSubscribeAgree&&(0,t.jsxs)("div",{className:"flex w-full",children:[(0,t.jsx)(o.Checkbox,{checked:h,onCheckedChange:()=>D(!h),required:!0,className:"border-[#1d1d1f]"}),(0,t.jsx)("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e.oneankerSubscribeAgree}})]}),(0,t.jsxs)("div",{className:"flex w-full",children:[(0,t.jsx)(o.Checkbox,{checked:g,onCheckedChange:()=>L(!g),required:!0,className:"border-[#1d1d1f]"}),(0,t.jsx)("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e?.policy||""}})]}),(0,t.jsx)("div",{className:(0,a.classNames)("w-full text-left text-[16px] font-semibold",_&&"text-[#F84D4F]",C&&"text-[#52C41A]"),children:(0,t.jsx)(o.Text,{html:C||_||""})})]})})}
2
2
  //# sourceMappingURL=SubscribeModal.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/modal/SubscribeModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Picture, Text } from '@anker-in/headless-ui'\nimport { classNames, fetcher, gaTrack, useHeadlessContext } from '../../../lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport sha256 from 'crypto-js/sha256'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\n\nexport type CreditsSubscribeModalCopy = {\n title: string\n desc?: string\n placeholder: string\n policy?: string\n oneankerSubscribeAgree?: string\n successTips?: string\n dealsType?: string\n}\n\ninterface CreditsSubscribeModalProps extends ModalContainerProps {\n copy: CreditsSubscribeModalCopy\n onSuccess?: () => void\n}\n\nconst getAdCookie = () => {\n if (typeof window === 'undefined') {\n return { register_source: '' }\n }\n const { search, href } = window.location || {}\n const query = parse(search)\n\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n affiliate: Cookies.get('affiliate'),\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 deals_type: Cookies.get('deal'),\n transfer_id: Cookies.get('transfer_id'),\n }\n}\n\nexport function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubscribeModalProps) {\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [policy, setPolicy] = useState(false)\n const [oneankerSubscribeAgree, setOneankerSubscribeAgree] = useState(false)\n const [email, setEmail] = useState('')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n const { profile } = useCreditsContext()\n\n const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setErrorMessage('')\n setEmail(event.target?.value?.trim())\n }, [])\n\n const handleSubmit = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n setErrorMessage('')\n\n setLoading(true)\n const { register_source } = getAdCookie()\n\n const result = await fetcher({\n locale,\n action: 'subscribe',\n url: '/api/multipass/subscribe/subscribe_emails',\n method: 'POST',\n body: {\n email,\n register_source,\n brand,\n deals_type: copy.dealsType || 'vip_subscribe',\n },\n headers: {},\n type: '',\n })\n setLoading(false)\n\n if (!result.errors) {\n setSuccessMessage(copy.successTips || 'Subscribed successfully!')\n if (onSuccess) {\n onSuccess()\n }\n setTimeout(() => {\n setSuccessMessage('')\n }, 3000)\n gaTrack({\n subscribe_hashed_email: email ? sha256(email) : '',\n })\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType || 'vip_subscribe',\n position: 'pop_up',\n },\n })\n gaTrack({\n event: 'uaEvent',\n eventCategory: 'subscribe',\n eventAction: copy.dealsType || 'vip_subscribe',\n eventLabel: 'pop_up',\n nonInteraction: false,\n })\n } else {\n setErrorMessage(result.errors || result.statusText)\n }\n },\n [email, locale, brand, copy.dealsType, copy.successTips, onSuccess]\n )\n\n useEffect(() => {\n if (profile && profile?.email) {\n setEmail(profile?.email)\n }\n }, [profile])\n\n return (\n <CreditsModalContainer\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-[24px]\"\n titleClassName=\"h-[56px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n {...props}\n >\n <form className=\"min-l:px-[16px] flex flex-col gap-[16px] text-center\" onSubmit={handleSubmit} noValidate={false}>\n <div>\n <Text className={classNames('mb-[24px] text-[22px] font-bold')} html={copy.title}></Text>\n </div>\n {copy.desc && (\n <Text\n className=\"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]\"\n html={copy.desc}\n ></Text>\n )}\n <div\n className={classNames(\n 'relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <input\n className={classNames(\n 'h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]',\n !rounded && 'rounded-none'\n )}\n type=\"email\"\n required\n placeholder={copy.placeholder}\n value={email}\n onChange={handleEmailChange}\n />\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={loading}\n className={classNames(\n 'legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]',\n !rounded && 'rounded-none'\n )}\n >\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383\"\n className=\"size-[24px]\"\n alt=\"email\"\n />\n </Button>\n </div>\n {copy?.oneankerSubscribeAgree && (\n <div className=\"flex w-full\">\n <Checkbox\n checked={oneankerSubscribeAgree}\n onCheckedChange={() => setOneankerSubscribeAgree(!oneankerSubscribeAgree)}\n required\n className=\"border-[#1d1d1f]\"\n />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy.oneankerSubscribeAgree,\n }}\n />\n </div>\n )}\n <div className=\"flex w-full\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(!policy)} required className=\"border-[#1d1d1f]\" />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy?.policy || '',\n }}\n />\n </div>\n <div\n className={classNames(\n 'w-full text-left text-[16px] font-semibold',\n errorMessage && 'text-[#F84D4F]',\n successMessage && 'text-[#52C41A]'\n )}\n >\n <Text html={successMessage || errorMessage || ''} />\n </div>\n </form>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["SubscribeModal_exports", "__export", "CreditsSubscribeModal", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_lib", "import_js_cookie", "import_query_string", "import_sha256", "import_provider", "import_constants", "import_ModalContainer", "getAdCookie", "search", "href", "query", "Cookies", "copy", "onSuccess", "props", "brand", "locale", "rounded", "policy", "setPolicy", "oneankerSubscribeAgree", "setOneankerSubscribeAgree", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "profile", "handleEmailChange", "event", "handleSubmit", "register_source", "result", "sha256"]
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Picture, Text } from '@anker-in/headless-ui'\nimport { classNames, fetcher, gaTrack, useHeadlessContext } from '../../../lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport sha256 from 'crypto-js/sha256'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\n\nexport type CreditsSubscribeModalCopy = {\n title: string\n desc?: string\n placeholder: string\n policy?: string\n oneankerSubscribeAgree?: string\n successTips?: string\n dealsType?: string\n}\n\ninterface CreditsSubscribeModalProps extends ModalContainerProps {\n copy: CreditsSubscribeModalCopy\n onSuccess?: () => void\n}\n\nconst getAdCookie = () => {\n if (typeof window === 'undefined') {\n return { register_source: '' }\n }\n const { search, href } = window.location || {}\n const query = parse(search)\n\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n affiliate: Cookies.get('affiliate'),\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 deals_type: Cookies.get('deal'),\n transfer_id: Cookies.get('transfer_id'),\n }\n}\n\nexport function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubscribeModalProps) {\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [policy, setPolicy] = useState(false)\n const [oneankerSubscribeAgree, setOneankerSubscribeAgree] = useState(false)\n const [email, setEmail] = useState('')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n const { profile, apiBaseUrl } = useCreditsContext()\n\n const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setErrorMessage('')\n setEmail(event.target?.value?.trim())\n }, [])\n\n const handleSubmit = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n setErrorMessage('')\n\n setLoading(true)\n const { register_source } = getAdCookie()\n\n const result = await fetcher({\n locale,\n action: 'subscribe',\n url: `${apiBaseUrl || ''}/api/multipass/subscribe/subscribe_emails`,\n method: 'POST',\n body: {\n email,\n register_source,\n brand,\n deals_type: copy.dealsType || 'vip_subscribe',\n },\n headers: {},\n type: '',\n })\n setLoading(false)\n\n if (!result.errors) {\n setSuccessMessage(copy.successTips || 'Subscribed successfully!')\n if (onSuccess) {\n onSuccess()\n }\n setTimeout(() => {\n setSuccessMessage('')\n }, 3000)\n gaTrack({\n subscribe_hashed_email: email ? sha256(email) : '',\n })\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType || 'vip_subscribe',\n position: 'pop_up',\n },\n })\n gaTrack({\n event: 'uaEvent',\n eventCategory: 'subscribe',\n eventAction: copy.dealsType || 'vip_subscribe',\n eventLabel: 'pop_up',\n nonInteraction: false,\n })\n } else {\n setErrorMessage(result.errors || result.statusText)\n }\n },\n [email, locale, brand, copy.dealsType, copy.successTips, onSuccess, apiBaseUrl]\n )\n\n useEffect(() => {\n if (profile && profile?.email) {\n setEmail(profile?.email)\n }\n }, [profile])\n\n return (\n <CreditsModalContainer\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-[24px]\"\n titleClassName=\"h-[56px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n {...props}\n >\n <form className=\"min-l:px-[16px] flex flex-col gap-[16px] text-center\" onSubmit={handleSubmit} noValidate={false}>\n <div>\n <Text className={classNames('mb-[24px] text-[22px] font-bold')} html={copy.title}></Text>\n </div>\n {copy.desc && (\n <Text\n className=\"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]\"\n html={copy.desc}\n ></Text>\n )}\n <div\n className={classNames(\n 'relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <input\n className={classNames(\n 'h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]',\n !rounded && 'rounded-none'\n )}\n type=\"email\"\n required\n placeholder={copy.placeholder}\n value={email}\n onChange={handleEmailChange}\n />\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={loading}\n className={classNames(\n 'legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]',\n !rounded && 'rounded-none'\n )}\n >\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383\"\n className=\"size-[24px]\"\n alt=\"email\"\n />\n </Button>\n </div>\n {copy?.oneankerSubscribeAgree && (\n <div className=\"flex w-full\">\n <Checkbox\n checked={oneankerSubscribeAgree}\n onCheckedChange={() => setOneankerSubscribeAgree(!oneankerSubscribeAgree)}\n required\n className=\"border-[#1d1d1f]\"\n />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy.oneankerSubscribeAgree,\n }}\n />\n </div>\n )}\n <div className=\"flex w-full\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(!policy)} required className=\"border-[#1d1d1f]\" />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy?.policy || '',\n }}\n />\n </div>\n <div\n className={classNames(\n 'w-full text-left text-[16px] font-semibold',\n errorMessage && 'text-[#F84D4F]',\n successMessage && 'text-[#52C41A]'\n )}\n >\n <Text html={successMessage || errorMessage || ''} />\n </div>\n </form>\n </CreditsModalContainer>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SubscribeModal_exports", "__export", "CreditsSubscribeModal", "__toCommonJS", "import_jsx_runtime", "import_react", "import_headless_ui", "import_lib", "import_js_cookie", "import_query_string", "import_sha256", "import_provider", "import_constants", "import_ModalContainer", "getAdCookie", "search", "href", "query", "Cookies", "copy", "onSuccess", "props", "brand", "locale", "rounded", "policy", "setPolicy", "oneankerSubscribeAgree", "setOneankerSubscribeAgree", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "profile", "apiBaseUrl", "handleEmailChange", "event", "handleSubmit", "register_source", "result", "sha256"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var A=Object.create;var m=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var J=(e,t)=>{for(var s in t)m(e,s,{get:t[s],enumerable:!0})},k=(e,t,s,f)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of R(t))!q.call(e,a)&&a!==s&&m(e,a,{get:()=>t[a],enumerable:!(f=H(t,a))||f.enumerable});return e};var U=(e,t,s)=>(s=e!=null?A(j(e)):{},k(t||!e||!e.__esModule?m(s,"default",{value:e,enumerable:!0}):s,e)),V=e=>k(m({},"__esModule",{value:!0}),e);var F={};J(F,{default:()=>B});module.exports=V(F);var r=require("react/jsx-runtime"),o=require("react"),n=require("@anker-in/headless-ui"),c=require("../../../../lib"),u=U(require("js-cookie")),w=require("query-string"),T=require("../../../credits/context/utils"),M=require("../../context/provider"),P=require("../../../../constants");function z(){if(typeof window>"u")return{register_source:""};const{search:e,href:t}=window.location,s=(0,w.parse)(e);return{fbuy_ref_code:u.default.get("fbuy_ref_code"),ref:u.default.get("ref_ads"),inviter_code:s.ic??s.inviter_code??u.default.get("inviter_code"),register_source:s.redirect??u.default.get("reg_source")??t}}function B({copy:e,email:t,onClose:s}){const{alpcConfig:f,setIsSubscribeSuccess:a,fetchCreditInfo:D,profile:g}=(0,M.useMemberPopupContext)(),{brand:h,locale:_}=f,{brand:E}=(0,c.useHeadlessContext)(),I=P.ROUNDED_BRANDS.includes(E),[x,v]=(0,o.useState)(e.policyDefaultChecked??!1),[d,y]=(0,o.useState)(t??""),[p,i]=(0,o.useState)(""),[b,C]=(0,o.useState)(""),[L,N]=(0,o.useState)(!1);(0,o.useEffect)(()=>{t&&y(t)},[t]);const O=(0,o.useCallback)(async()=>{if(i(""),!d)return i("Please fill in your email");if(!(0,T.emailValidate)(d))return i("Invalid email address");if(!x)return i("Please agree to the policy");N(!0);const{register_source:l}=z();try{const S=await(await fetch("/api/multipass/subscribe/subscribe_emails",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","current-language":_},body:JSON.stringify({email:d,register_source:l,brand:h,deals_type:e.dealsType??"vip_subscribe"})})).json();S.errors?i(S.errors??"Error occurred"):(C(e.successTips??"Subscribed successfully!"),a(!0),g?.user_id&&setTimeout(()=>D(g.user_id),3e3),(0,c.gaTrack)({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType??"",position:"sticky",info:""}}),setTimeout(()=>{C(""),s()},3e3))}catch{i("Network error")}finally{N(!1)}},[d,x,_,h,e,s,a]);return(0,r.jsxs)("div",{className:"flex flex-col gap-[12px]",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-[8px]",children:[e.title&&(0,r.jsx)("h2",{className:"text-[24px] font-[700] leading-[1.2] text-[#080a0f]",children:e.title}),e.desc&&(0,r.jsx)(n.Text,{className:"text-[16px] text-[#1e2024]",html:e.desc})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-[16px]",children:[(0,r.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]",I?"rounded-[4px]":"rounded-none"),placeholder:e.placeholder,value:d,onChange:l=>{i(""),y(l.target.value.trim())}}),(0,r.jsxs)("div",{className:"flex w-full items-start gap-[8px]",children:[(0,r.jsx)(n.Checkbox,{checked:x,onCheckedChange:()=>v(l=>!l),className:"mt-[2px] border-[#1d1d1f]"}),(0,r.jsx)("label",{className:"cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline",onClick:()=>v(l=>!l),dangerouslySetInnerHTML:{__html:e.policy??""}})]}),(p||b)&&(0,r.jsx)("div",{className:(0,c.classNames)("text-[14px] font-[700]",p&&"text-[#f84d4f]",b&&"text-[#52c41a]"),children:(0,r.jsx)(n.Text,{html:b||p})}),(0,r.jsx)(n.Button,{className:"w-full",loading:L,onClick:O,children:e.buttonLabel??"Subscribe"})]})]})}
1
+ "use strict";var H=Object.create;var m=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var J=(e,s)=>{for(var t in s)m(e,t,{get:s[t],enumerable:!0})},w=(e,s,t,f)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of U(s))!q.call(e,a)&&a!==t&&m(e,a,{get:()=>s[a],enumerable:!(f=R(s,a))||f.enumerable});return e};var V=(e,s,t)=>(t=e!=null?H(j(e)):{},w(s||!e||!e.__esModule?m(t,"default",{value:e,enumerable:!0}):t,e)),$=e=>w(m({},"__esModule",{value:!0}),e);var F={};J(F,{default:()=>D});module.exports=$(F);var r=require("react/jsx-runtime"),o=require("react"),n=require("@anker-in/headless-ui"),c=require("../../../../lib"),u=V(require("js-cookie")),T=require("query-string"),M=require("../../../credits/context/utils"),P=require("../../context/provider"),B=require("../../../../constants");function z(){if(typeof window>"u")return{register_source:""};const{search:e,href:s}=window.location,t=(0,T.parse)(e);return{fbuy_ref_code:u.default.get("fbuy_ref_code"),ref:u.default.get("ref_ads"),inviter_code:t.ic??t.inviter_code??u.default.get("inviter_code"),register_source:t.redirect??u.default.get("reg_source")??s}}function D({copy:e,email:s,onClose:t}){const{alpcConfig:f,setIsSubscribeSuccess:a,fetchCreditInfo:E,profile:g}=(0,P.useMemberPopupContext)(),{brand:h,locale:_,apiBaseUrl:v}=f,{brand:I}=(0,c.useHeadlessContext)(),L=B.ROUNDED_BRANDS.includes(I),[x,y]=(0,o.useState)(e.policyDefaultChecked??!1),[d,C]=(0,o.useState)(s??""),[p,i]=(0,o.useState)(""),[b,N]=(0,o.useState)(""),[O,S]=(0,o.useState)(!1);(0,o.useEffect)(()=>{s&&C(s)},[s]);const A=(0,o.useCallback)(async()=>{if(i(""),!d)return i("Please fill in your email");if(!(0,M.emailValidate)(d))return i("Invalid email address");if(!x)return i("Please agree to the policy");S(!0);const{register_source:l}=z();try{const k=await(await fetch(`${v||""}/api/multipass/subscribe/subscribe_emails`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","current-language":_},body:JSON.stringify({email:d,register_source:l,brand:h,deals_type:e.dealsType??"vip_subscribe"})})).json();k.errors?i(k.errors??"Error occurred"):(N(e.successTips??"Subscribed successfully!"),a(!0),g?.user_id&&setTimeout(()=>E(g.user_id),3e3),(0,c.gaTrack)({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType??"",position:"sticky",info:""}}),setTimeout(()=>{N(""),t()},3e3))}catch{i("Network error")}finally{S(!1)}},[d,x,_,h,e,t,a,v]);return(0,r.jsxs)("div",{className:"flex flex-col gap-[12px]",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-[8px]",children:[e.title&&(0,r.jsx)("h2",{className:"text-[24px] font-[700] leading-[1.2] text-[#080a0f]",children:e.title}),e.desc&&(0,r.jsx)(n.Text,{className:"text-[16px] text-[#1e2024]",html:e.desc})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-[16px]",children:[(0,r.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]",L?"rounded-[4px]":"rounded-none"),placeholder:e.placeholder,value:d,onChange:l=>{i(""),C(l.target.value.trim())}}),(0,r.jsxs)("div",{className:"flex w-full items-start gap-[8px]",children:[(0,r.jsx)(n.Checkbox,{checked:x,onCheckedChange:()=>y(l=>!l),className:"mt-[2px] border-[#1d1d1f]"}),(0,r.jsx)("label",{className:"cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline",onClick:()=>y(l=>!l),dangerouslySetInnerHTML:{__html:e.policy??""}})]}),(p||b)&&(0,r.jsx)("div",{className:(0,c.classNames)("text-[14px] font-[700]",p&&"text-[#f84d4f]",b&&"text-[#52c41a]"),children:(0,r.jsx)(n.Text,{html:b||p})}),(0,r.jsx)(n.Button,{className:"w-full",loading:O,onClick:A,children:e.buttonLabel??"Subscribe"})]})]})}
2
2
  //# sourceMappingURL=SubscribeEmailPanel.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { gaTrack, classNames as cn, useHeadlessContext } from '../../../../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}\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\nexport default function SubscribeEmailPanel({ copy, email: initialEmail, onClose }: Props) {\n const { alpcConfig, setIsSubscribeSuccess, fetchCreditInfo, profile } = useMemberPopupContext()\n const { brand, locale } = alpcConfig\n const { brand: headlessBrand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(headlessBrand)\n const [policy, setPolicy] = useState(copy.policyDefaultChecked ?? 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 try {\n const response = await fetch('/api/multipass/subscribe/subscribe_emails', {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n brand,\n deals_type: copy.dealsType ?? 'vip_subscribe',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')\n setIsSubscribeSuccess(true)\n if (profile?.user_id) setTimeout(() => fetchCreditInfo(profile.user_id), 3000)\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType ?? '',\n position: 'sticky',\n info: '',\n },\n })\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, brand, copy, onClose, setIsSubscribeSuccess])\n\n return (\n <div className=\"flex flex-col gap-[12px]\">\n <div className=\"flex flex-col gap-[8px]\">\n {copy.title && <h2 className=\"text-[24px] font-[700] leading-[1.2] text-[#080a0f]\">{copy.title}</h2>}\n {copy.desc && <Text className=\"text-[16px] text-[#1e2024]\" html={copy.desc} />}\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 => {\n setErrorMessage('')\n setEmail(e.target.value.trim())\n }}\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\n className={cn(\n 'text-[14px] font-[700]',\n errorMessage && 'text-[#f84d4f]',\n successMessage && 'text-[#52c41a]'\n )}\n >\n <Text html={successMessage || errorMessage} />\n </div>\n )}\n\n <Button className=\"w-full\" loading={loading} onClick={handleSubmit}>\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["SubscribeEmailPanel_exports", "__export", "SubscribeEmailPanel", "__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", "copy", "initialEmail", "onClose", "alpcConfig", "setIsSubscribeSuccess", "fetchCreditInfo", "profile", "brand", "locale", "headlessBrand", "rounded", "policy", "setPolicy", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "handleSubmit", "register_source", "result", "cn", "e", "v"]
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { gaTrack, classNames as cn, useHeadlessContext } from '../../../../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}\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\nexport default function SubscribeEmailPanel({ copy, email: initialEmail, onClose }: Props) {\n const { alpcConfig, setIsSubscribeSuccess, fetchCreditInfo, profile } = useMemberPopupContext()\n const { brand, locale, apiBaseUrl } = alpcConfig\n const { brand: headlessBrand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(headlessBrand)\n const [policy, setPolicy] = useState(copy.policyDefaultChecked ?? 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 try {\n const response = await fetch(`${apiBaseUrl || ''}/api/multipass/subscribe/subscribe_emails`, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n brand,\n deals_type: copy.dealsType ?? 'vip_subscribe',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')\n setIsSubscribeSuccess(true)\n if (profile?.user_id) setTimeout(() => fetchCreditInfo(profile.user_id), 3000)\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType ?? '',\n position: 'sticky',\n info: '',\n },\n })\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, brand, copy, onClose, setIsSubscribeSuccess, apiBaseUrl])\n\n return (\n <div className=\"flex flex-col gap-[12px]\">\n <div className=\"flex flex-col gap-[8px]\">\n {copy.title && <h2 className=\"text-[24px] font-[700] leading-[1.2] text-[#080a0f]\">{copy.title}</h2>}\n {copy.desc && <Text className=\"text-[16px] text-[#1e2024]\" html={copy.desc} />}\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 => {\n setErrorMessage('')\n setEmail(e.target.value.trim())\n }}\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\n className={cn(\n 'text-[14px] font-[700]',\n errorMessage && 'text-[#f84d4f]',\n successMessage && 'text-[#52c41a]'\n )}\n >\n <Text html={successMessage || errorMessage} />\n </div>\n )}\n\n <Button className=\"w-full\" loading={loading} onClick={handleSubmit}>\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SubscribeEmailPanel_exports", "__export", "SubscribeEmailPanel", "__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", "copy", "initialEmail", "onClose", "alpcConfig", "setIsSubscribeSuccess", "fetchCreditInfo", "profile", "brand", "locale", "apiBaseUrl", "headlessBrand", "rounded", "policy", "setPolicy", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "handleSubmit", "register_source", "result", "cn", "e", "v"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.create;var n=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var y=(t,o)=>{for(var a in o)n(t,a,{get:o[a],enumerable:!0})},i=(t,o,a,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of g(o))!f.call(t,e)&&e!==a&&n(t,e,{get:()=>o[e],enumerable:!(r=m(o,e))||r.enumerable});return t};var R=(t,o,a)=>(a=t!=null?l(p(t)):{},i(o||!t||!t.__esModule?n(a,"default",{value:t,enumerable:!0}):a,t)),S=t=>i(n({},"__esModule",{value:!0}),t);var h={};y(h,{useEmailValidation:()=>_});module.exports=S(h);var s=R(require("swr/mutation")),c=require("../../context"),u=require("../../utils");const _=(t,o)=>{const{locale:a}=(0,c.useHeadlessContext)();return(0,s.default)("emailValidation",(r,{arg:{token:e,code:d}})=>(0,u.fetcher)({url:"/api/multipass/account/users/email_validation",baseUrl:o,method:"POST",body:{activation_code:e,verify_code:d},action:"account",needRecaptcha:!0,locale:a}),t)};
1
+ "use strict";var l=Object.create;var e=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var y=(t,o)=>{for(var n in o)e(t,n,{get:o[n],enumerable:!0})},r=(t,o,n,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of g(o))!f.call(t,a)&&a!==n&&e(t,a,{get:()=>o[a],enumerable:!(i=m(o,a))||i.enumerable});return t};var R=(t,o,n)=>(n=t!=null?l(p(t)):{},r(o||!t||!t.__esModule?e(n,"default",{value:t,enumerable:!0}):n,t)),S=t=>r(e({},"__esModule",{value:!0}),t);var h={};y(h,{useEmailValidation:()=>_});module.exports=S(h);var s=R(require("swr/mutation")),c=require("../../context"),u=require("../../utils");const _=(t,o)=>{const{locale:n}=(0,c.useHeadlessContext)();return(0,s.default)("emailValidation",(i,{arg:{token:a,code:d}})=>(0,u.fetcher)({url:`${o||""}/api/multipass/account/users/email_validation`,method:"POST",body:{activation_code:a,verify_code:d},action:"account",needRecaptcha:!0,locale:n}),t)};
2
2
  //# sourceMappingURL=useEmailValidation.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/registration/hooks/useEmailValidation.ts"],
4
- "sourcesContent": ["import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\nexport const useEmailValidation = (\n config?: SWRMutationConfiguration<\n any,\n { type: 'responseError'; data: any; response: any },\n string,\n { token: string; code: string }\n >,\n apiBaseUrl?: string\n) => {\n const { locale } = useHeadlessContext()\n return useSWRMutation(\n 'emailValidation',\n (_, { arg: { token, code } }: { arg: { token: string; code: string } }) => {\n return fetcher({\n url: `/api/multipass/account/users/email_validation`,\n baseUrl: apiBaseUrl,\n method: 'POST',\n body: { activation_code: token, verify_code: code },\n action: 'account',\n needRecaptcha: true,\n locale,\n })\n },\n config\n )\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyD,2BACzDC,EAAmC,yBACnCC,EAAwB,uBAEjB,MAAMJ,EAAqB,CAChCK,EAMAC,IACG,CACH,KAAM,CAAE,OAAAC,CAAO,KAAI,sBAAmB,EACtC,SAAO,EAAAC,SACL,kBACA,CAACC,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,KAAAC,CAAK,CAAE,OAClB,WAAQ,CACb,IAAK,gDACL,QAASL,EACT,OAAQ,OACR,KAAM,CAAE,gBAAiBI,EAAO,YAAaC,CAAK,EAClD,OAAQ,UACR,cAAe,GACf,OAAAJ,CACF,CAAC,EAEHF,CACF,CACF",
4
+ "sourcesContent": ["import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\nexport const useEmailValidation = (\n config?: SWRMutationConfiguration<\n any,\n { type: 'responseError'; data: any; response: any },\n string,\n { token: string; code: string }\n >,\n apiBaseUrl?: string\n) => {\n const { locale } = useHeadlessContext()\n return useSWRMutation(\n 'emailValidation',\n (_, { arg: { token, code } }: { arg: { token: string; code: string } }) => {\n return fetcher({\n url: `${apiBaseUrl || ''}/api/multipass/account/users/email_validation`,\n method: 'POST',\n body: { activation_code: token, verify_code: code },\n action: 'account',\n needRecaptcha: true,\n locale,\n })\n },\n config\n )\n}\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyD,2BACzDC,EAAmC,yBACnCC,EAAwB,uBAEjB,MAAMJ,EAAqB,CAChCK,EAMAC,IACG,CACH,KAAM,CAAE,OAAAC,CAAO,KAAI,sBAAmB,EACtC,SAAO,EAAAC,SACL,kBACA,CAACC,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,KAAAC,CAAK,CAAE,OAClB,WAAQ,CACb,IAAK,GAAGL,GAAc,EAAE,gDACxB,OAAQ,OACR,KAAM,CAAE,gBAAiBI,EAAO,YAAaC,CAAK,EAClD,OAAQ,UACR,cAAe,GACf,OAAAJ,CACF,CAAC,EAEHF,CACF,CACF",
6
6
  "names": ["useEmailValidation_exports", "__export", "useEmailValidation", "__toCommonJS", "import_mutation", "import_context", "import_utils", "config", "apiBaseUrl", "locale", "useSWRMutation", "_", "token", "code"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var m=Object.create;var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var f=(a,e)=>{for(var t in e)i(a,t,{get:e[t],enumerable:!0})},s=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of d(e))!R.call(a,n)&&n!==t&&i(a,n,{get:()=>e[n],enumerable:!(o=c(e,n))||o.enumerable});return a};var g=(a,e,t)=>(t=a!=null?m(y(a)):{},s(e||!a||!a.__esModule?i(t,"default",{value:a,enumerable:!0}):t,a)),S=a=>s(i({},"__esModule",{value:!0}),a);var v={};f(v,{useSendEmailValidation:()=>h});module.exports=S(v);var r=g(require("swr/mutation")),p=require("../../context"),u=require("../../utils");function h(a){const{appName:e,locale:t}=(0,p.useHeadlessContext)();return(0,r.default)("send-email-validation",(o,{arg:{email:n,...l}})=>(0,u.fetcher)({locale:t,url:"/api/multipass/account/users/send_validation_email",baseUrl:a,method:"POST",body:{email:n,app:e,...l},needRecaptcha:!0,action:"verifyAccount"}))}
1
+ "use strict";var l=Object.create;var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var f=(a,e)=>{for(var t in e)i(a,t,{get:e[t],enumerable:!0})},s=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of d(e))!R.call(a,n)&&n!==t&&i(a,n,{get:()=>e[n],enumerable:!(o=c(e,n))||o.enumerable});return a};var g=(a,e,t)=>(t=a!=null?l(y(a)):{},s(e||!a||!a.__esModule?i(t,"default",{value:a,enumerable:!0}):t,a)),S=a=>s(i({},"__esModule",{value:!0}),a);var v={};f(v,{useSendEmailValidation:()=>h});module.exports=S(v);var r=g(require("swr/mutation")),p=require("../../context"),u=require("../../utils");function h(a){const{appName:e,locale:t}=(0,p.useHeadlessContext)();return(0,r.default)("send-email-validation",(o,{arg:{email:n,...m}})=>(0,u.fetcher)({locale:t,url:`${a||""}/api/multipass/account/users/send_validation_email`,method:"POST",body:{email:n,app:e,...m},needRecaptcha:!0,action:"verifyAccount"}))}
2
2
  //# sourceMappingURL=useSendEmailValidation.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/registration/hooks/useSendEmailValidation.ts"],
4
- "sourcesContent": ["import useSWRMutation, { type SWRMutationResponse } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\n// data \u53C2\u6570\u4F1A\u88AB stringify \u540E\u653E\u5165\u5230\u90AE\u4EF6\u94FE\u63A5\u53C2\u6570\u4E2D\nexport type RequestData = { email: string; data: any }\n\nexport function useSendEmailValidation(apiBaseUrl?: string): SWRMutationResponse<any, any, string, { email: string } & any> {\n const { appName, locale } = useHeadlessContext()\n\n return useSWRMutation('send-email-validation', (_, { arg: { email, ...rest } }: { arg: RequestData }) =>\n fetcher({\n locale,\n url: '/api/multipass/account/users/send_validation_email',\n baseUrl: apiBaseUrl,\n method: 'POST',\n body: { email: email, app: appName, ...rest },\n needRecaptcha: true,\n action: 'verifyAccount',\n })\n )\n}\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyD,2BACzDC,EAAmC,yBACnCC,EAAwB,uBAKjB,SAASJ,EAAuBK,EAAqF,CAC1H,KAAM,CAAE,QAAAC,EAAS,OAAAC,CAAO,KAAI,sBAAmB,EAE/C,SAAO,EAAAC,SAAe,wBAAyB,CAACC,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,GAAGC,CAAK,CAAE,OAC3E,WAAQ,CACN,OAAAJ,EACA,IAAK,qDACL,QAASF,EACT,OAAQ,OACR,KAAM,CAAE,MAAOK,EAAO,IAAKJ,EAAS,GAAGK,CAAK,EAC5C,cAAe,GACf,OAAQ,eACV,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import useSWRMutation, { type SWRMutationResponse } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\n// data \u53C2\u6570\u4F1A\u88AB stringify \u540E\u653E\u5165\u5230\u90AE\u4EF6\u94FE\u63A5\u53C2\u6570\u4E2D\nexport type RequestData = { email: string; data: any }\n\nexport function useSendEmailValidation(apiBaseUrl?: string): SWRMutationResponse<any, any, string, { email: string } & any> {\n const { appName, locale } = useHeadlessContext()\n\n return useSWRMutation('send-email-validation', (_, { arg: { email, ...rest } }: { arg: RequestData }) =>\n fetcher({\n locale,\n url: `${apiBaseUrl || ''}/api/multipass/account/users/send_validation_email`,\n method: 'POST',\n body: { email: email, app: appName, ...rest },\n needRecaptcha: true,\n action: 'verifyAccount',\n })\n )\n}\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyD,2BACzDC,EAAmC,yBACnCC,EAAwB,uBAKjB,SAASJ,EAAuBK,EAAqF,CAC1H,KAAM,CAAE,QAAAC,EAAS,OAAAC,CAAO,KAAI,sBAAmB,EAE/C,SAAO,EAAAC,SAAe,wBAAyB,CAACC,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,GAAGC,CAAK,CAAE,OAC3E,WAAQ,CACN,OAAAJ,EACA,IAAK,GAAGF,GAAc,EAAE,qDACxB,OAAQ,OACR,KAAM,CAAE,MAAOK,EAAO,IAAKJ,EAAS,GAAGK,CAAK,EAC5C,cAAe,GACf,OAAQ,eACV,CAAC,CACH,CACF",
6
6
  "names": ["useSendEmailValidation_exports", "__export", "useSendEmailValidation", "__toCommonJS", "import_mutation", "import_context", "import_utils", "apiBaseUrl", "appName", "locale", "useSWRMutation", "_", "email", "rest"]
7
7
  }
@@ -1 +1 @@
1
- export declare const fetcher: ({ locale, url, baseUrl, method, headers, repeatKey, body, type, timeout, }: any) => Promise<any>;
1
+ export declare const fetcher: ({ locale, url, method, headers, repeatKey, body, type, timeout, }: any) => Promise<any>;
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var y=(n,e)=>{for(var a in e)c(n,a,{get:e[a],enumerable:!0})},T=(n,e,a,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of h(e))!u.call(n,r)&&r!==a&&c(n,r,{get:()=>e[r],enumerable:!(t=p(e,r))||t.enumerable});return n};var b=n=>T(c({},"__esModule",{value:!0}),n);var F={};y(F,{fetcher:()=>w});module.exports=b(F);var d=require("./fetchResponse");const w=async({locale:n="en",url:e,baseUrl:a,method:t="POST",headers:r={},repeatKey:O,body:l,type:f,timeout:o=9e4})=>{let s="";f==="uploadFile"?s=l:s=l?JSON.stringify(l):"";const i=new AbortController;o&&setTimeout(()=>i.abort(),o);const g=await fetch(`${a||""}${e}`,{method:t,mode:"cors",credentials:"include",headers:{"current-language":n,...r},...o&&{signal:i.signal},...t!=="GET"&&{body:s}});return(0,d.handleFetchResponse)(g)};
1
+ "use strict";var c=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var y=(n,e)=>{for(var r in e)c(n,r,{get:e[r],enumerable:!0})},T=(n,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of h(e))!u.call(n,a)&&a!==r&&c(n,a,{get:()=>e[a],enumerable:!(t=p(e,a))||t.enumerable});return n};var b=n=>T(c({},"__esModule",{value:!0}),n);var F={};y(F,{fetcher:()=>w});module.exports=b(F);var d=require("./fetchResponse");const w=async({locale:n="en",url:e,method:r="POST",headers:t={},repeatKey:a,body:l,type:f,timeout:o=9e4})=>{let s="";f==="uploadFile"?s=l:s=l?JSON.stringify(l):"";const i=new AbortController;o&&setTimeout(()=>i.abort(),o);const g=await fetch(e,{method:r,mode:"cors",credentials:"include",headers:{"current-language":n,...t},...o&&{signal:i.signal},...r!=="GET"&&{body:s}});return(0,d.handleFetchResponse)(g)};
2
2
  //# sourceMappingURL=fetcher.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/utils/fetcher/fetcher.ts"],
4
- "sourcesContent": ["import { handleFetchResponse } from './fetchResponse'\n\nexport const fetcher = async ({\n locale = 'en',\n url,\n baseUrl,\n method = 'POST',\n headers = {},\n repeatKey,\n body,\n type,\n timeout = 90000,\n}: any) => {\n // \u6DFB\u52A0\u8C37\u6B4C\u9A8C\u8BC1\n let bodyData = ''\n if (type === 'uploadFile') {\n bodyData = body\n } else {\n bodyData = body ? JSON.stringify(body) : ''\n }\n\n const controller = new AbortController()\n if (timeout) {\n // \u8D85\u65F6\u62A5\u9519\n setTimeout(() => controller.abort(), timeout)\n }\n\n const data = await fetch(`${baseUrl || ''}${url}`, {\n method,\n mode: 'cors',\n credentials: 'include',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...(timeout && { signal: controller.signal }),\n ...(method !== 'GET' && { body: bodyData }),\n })\n return handleFetchResponse(data)\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAoC,2BAE7B,MAAMF,EAAU,MAAO,CAC5B,OAAAG,EAAS,KACT,IAAAC,EACA,QAAAC,EACA,OAAAC,EAAS,OACT,QAAAC,EAAU,CAAC,EACX,UAAAC,EACA,KAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACZ,IAAW,CAET,IAAIC,EAAW,GACXF,IAAS,aACXE,EAAWH,EAEXG,EAAWH,EAAO,KAAK,UAAUA,CAAI,EAAI,GAG3C,MAAMI,EAAa,IAAI,gBACnBF,GAEF,WAAW,IAAME,EAAW,MAAM,EAAGF,CAAO,EAG9C,MAAMG,EAAO,MAAM,MAAM,GAAGT,GAAW,EAAE,GAAGD,CAAG,GAAI,CACjD,OAAAE,EACA,KAAM,OACN,YAAa,UACb,QAAS,CACP,mBAAoBH,EACpB,GAAGI,CACL,EACA,GAAII,GAAW,CAAE,OAAQE,EAAW,MAAO,EAC3C,GAAIP,IAAW,OAAS,CAAE,KAAMM,CAAS,CAC3C,CAAC,EACD,SAAO,uBAAoBE,CAAI,CACjC",
6
- "names": ["fetcher_exports", "__export", "fetcher", "__toCommonJS", "import_fetchResponse", "locale", "url", "baseUrl", "method", "headers", "repeatKey", "body", "type", "timeout", "bodyData", "controller", "data"]
4
+ "sourcesContent": ["import { handleFetchResponse } from './fetchResponse'\n\nexport const fetcher = async ({\n locale = 'en',\n url,\n method = 'POST',\n headers = {},\n repeatKey,\n body,\n type,\n timeout = 90000,\n}: any) => {\n // \u6DFB\u52A0\u8C37\u6B4C\u9A8C\u8BC1\n let bodyData = ''\n if (type === 'uploadFile') {\n bodyData = body\n } else {\n bodyData = body ? JSON.stringify(body) : ''\n }\n\n const controller = new AbortController()\n if (timeout) {\n // \u8D85\u65F6\u62A5\u9519\n setTimeout(() => controller.abort(), timeout)\n }\n\n const data = await fetch(url, {\n method,\n mode: 'cors',\n credentials: 'include',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...(timeout && { signal: controller.signal }),\n ...(method !== 'GET' && { body: bodyData }),\n })\n return handleFetchResponse(data)\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAoC,2BAE7B,MAAMF,EAAU,MAAO,CAC5B,OAAAG,EAAS,KACT,IAAAC,EACA,OAAAC,EAAS,OACT,QAAAC,EAAU,CAAC,EACX,UAAAC,EACA,KAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACZ,IAAW,CAET,IAAIC,EAAW,GACXF,IAAS,aACXE,EAAWH,EAEXG,EAAWH,EAAO,KAAK,UAAUA,CAAI,EAAI,GAG3C,MAAMI,EAAa,IAAI,gBACnBF,GAEF,WAAW,IAAME,EAAW,MAAM,EAAGF,CAAO,EAG9C,MAAMG,EAAO,MAAM,MAAMT,EAAK,CAC5B,OAAAC,EACA,KAAM,OACN,YAAa,UACb,QAAS,CACP,mBAAoBF,EACpB,GAAGG,CACL,EACA,GAAII,GAAW,CAAE,OAAQE,EAAW,MAAO,EAC3C,GAAIP,IAAW,OAAS,CAAE,KAAMM,CAAS,CAC3C,CAAC,EACD,SAAO,uBAAoBE,CAAI,CACjC",
6
+ "names": ["fetcher_exports", "__export", "fetcher", "__toCommonJS", "import_fetchResponse", "locale", "url", "method", "headers", "repeatKey", "body", "type", "timeout", "bodyData", "controller", "data"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as d}from"react/jsx-runtime";import{useCallback as S,useEffect as D,useState as r}from"react";import{Button as F,Checkbox as M,Picture as H,Text as b}from"@anker-in/headless-ui";import{classNames as l,fetcher as q,gaTrack as x,useHeadlessContext as I}from"../../../lib";import s from"js-cookie";import{parse as R}from"query-string";import B from"crypto-js/sha256";import{useCreditsContext as O}from"../context/provider";import{ROUNDED_BRANDS as z}from"../../../constants";import{CreditsModalContainer as U}from"./ModalContainer";const V=()=>{if(typeof window>"u")return{register_source:""};const{search:e,href:a}=window.location||{},i=R(e);return{fbuy_ref_code:s.get("fbuy_ref_code"),affiliate:s.get("affiliate"),ref:s.get("ref_ads"),inviter_code:i.ic||i.inviter_code||s.get("inviter_code"),register_source:i.redirect||s.get("reg_source")||a,deals_type:s.get("deal"),transfer_id:s.get("transfer_id")}};function j({copy:e,onSuccess:a,...i}){const{brand:c,locale:g}=I(),m=z.includes(c),[h,k]=r(!1),[v,w]=r(!1),[o,_]=r(""),[C,u]=r(""),[y,N]=r(""),[E,T]=r(!1),{profile:n}=O(),A=S(p=>{u(""),_(p.target?.value?.trim())},[]),P=S(async p=>{p.preventDefault(),u(""),T(!0);const{register_source:L}=V(),f=await q({locale:g,action:"subscribe",url:"/api/multipass/subscribe/subscribe_emails",method:"POST",body:{email:o,register_source:L,brand:c,deals_type:e.dealsType||"vip_subscribe"},headers:{},type:""});T(!1),f.errors?u(f.errors||f.statusText):(N(e.successTips||"Subscribed successfully!"),a&&a(),setTimeout(()=>{N("")},3e3),x({subscribe_hashed_email:o?B(o):""}),x({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType||"vip_subscribe",position:"pop_up"}}),x({event:"uaEvent",eventCategory:"subscribe",eventAction:e.dealsType||"vip_subscribe",eventLabel:"pop_up",nonInteraction:!1}))},[o,g,c,e.dealsType,e.successTips,a]);return D(()=>{n&&n?.email&&_(n?.email)},[n]),t(U,{className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-[48px] md:mb-[24px]",titleClassName:"h-[56px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",...i,children:d("form",{className:"min-l:px-[16px] flex flex-col gap-[16px] text-center",onSubmit:P,noValidate:!1,children:[t("div",{children:t(b,{className:l("mb-[24px] text-[22px] font-bold"),html:e.title})}),e.desc&&t(b,{className:"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]",html:e.desc}),d("div",{className:l("relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]",!m&&"rounded-none"),children:[t("input",{className:l("h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]",!m&&"rounded-none"),type:"email",required:!0,placeholder:e.placeholder,value:o,onChange:A}),t(F,{type:"submit",variant:"primary",loading:E,className:l("legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]",!m&&"rounded-none"),children:t(H,{source:"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383",className:"size-[24px]",alt:"email"})})]}),e?.oneankerSubscribeAgree&&d("div",{className:"flex w-full",children:[t(M,{checked:v,onCheckedChange:()=>w(!v),required:!0,className:"border-[#1d1d1f]"}),t("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e.oneankerSubscribeAgree}})]}),d("div",{className:"flex w-full",children:[t(M,{checked:h,onCheckedChange:()=>k(!h),required:!0,className:"border-[#1d1d1f]"}),t("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e?.policy||""}})]}),t("div",{className:l("w-full text-left text-[16px] font-semibold",C&&"text-[#F84D4F]",y&&"text-[#52C41A]"),children:t(b,{html:y||C||""})})]})})}export{j as CreditsSubscribeModal};
1
+ import{jsx as t,jsxs as d}from"react/jsx-runtime";import{useCallback as M,useEffect as F,useState as r}from"react";import{Button as H,Checkbox as k,Picture as q,Text as b}from"@anker-in/headless-ui";import{classNames as l,fetcher as B,gaTrack as x,useHeadlessContext as I}from"../../../lib";import s from"js-cookie";import{parse as R}from"query-string";import O from"crypto-js/sha256";import{useCreditsContext as U}from"../context/provider";import{ROUNDED_BRANDS as z}from"../../../constants";import{CreditsModalContainer as V}from"./ModalContainer";const $=()=>{if(typeof window>"u")return{register_source:""};const{search:e,href:a}=window.location||{},i=R(e);return{fbuy_ref_code:s.get("fbuy_ref_code"),affiliate:s.get("affiliate"),ref:s.get("ref_ads"),inviter_code:i.ic||i.inviter_code||s.get("inviter_code"),register_source:i.redirect||s.get("reg_source")||a,deals_type:s.get("deal"),transfer_id:s.get("transfer_id")}};function ee({copy:e,onSuccess:a,...i}){const{brand:c,locale:g}=I(),m=z.includes(c),[h,w]=r(!1),[v,E]=r(!1),[o,_]=r(""),[C,u]=r(""),[y,N]=r(""),[A,T]=r(!1),{profile:n,apiBaseUrl:S}=U(),P=M(p=>{u(""),_(p.target?.value?.trim())},[]),L=M(async p=>{p.preventDefault(),u(""),T(!0);const{register_source:D}=$(),f=await B({locale:g,action:"subscribe",url:`${S||""}/api/multipass/subscribe/subscribe_emails`,method:"POST",body:{email:o,register_source:D,brand:c,deals_type:e.dealsType||"vip_subscribe"},headers:{},type:""});T(!1),f.errors?u(f.errors||f.statusText):(N(e.successTips||"Subscribed successfully!"),a&&a(),setTimeout(()=>{N("")},3e3),x({subscribe_hashed_email:o?O(o):""}),x({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType||"vip_subscribe",position:"pop_up"}}),x({event:"uaEvent",eventCategory:"subscribe",eventAction:e.dealsType||"vip_subscribe",eventLabel:"pop_up",nonInteraction:!1}))},[o,g,c,e.dealsType,e.successTips,a,S]);return F(()=>{n&&n?.email&&_(n?.email)},[n]),t(V,{className:"w-[540px] md:h-auto",scrollClassName:"mb-[40px] min-l:px-[48px] md:mb-[24px]",titleClassName:"h-[56px]",useAnimation:!0,animationClassName:"md:translate-y-[100vh]",...i,children:d("form",{className:"min-l:px-[16px] flex flex-col gap-[16px] text-center",onSubmit:L,noValidate:!1,children:[t("div",{children:t(b,{className:l("mb-[24px] text-[22px] font-bold"),html:e.title})}),e.desc&&t(b,{className:"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]",html:e.desc}),d("div",{className:l("relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]",!m&&"rounded-none"),children:[t("input",{className:l("h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]",!m&&"rounded-none"),type:"email",required:!0,placeholder:e.placeholder,value:o,onChange:P}),t(H,{type:"submit",variant:"primary",loading:A,className:l("legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]",!m&&"rounded-none"),children:t(q,{source:"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383",className:"size-[24px]",alt:"email"})})]}),e?.oneankerSubscribeAgree&&d("div",{className:"flex w-full",children:[t(k,{checked:v,onCheckedChange:()=>E(!v),required:!0,className:"border-[#1d1d1f]"}),t("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e.oneankerSubscribeAgree}})]}),d("div",{className:"flex w-full",children:[t(k,{checked:h,onCheckedChange:()=>w(!h),required:!0,className:"border-[#1d1d1f]"}),t("label",{className:"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline",dangerouslySetInnerHTML:{__html:e?.policy||""}})]}),t("div",{className:l("w-full text-left text-[16px] font-semibold",C&&"text-[#F84D4F]",y&&"text-[#52C41A]"),children:t(b,{html:y||C||""})})]})})}export{ee as CreditsSubscribeModal};
2
2
  //# sourceMappingURL=SubscribeModal.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/credits/modal/SubscribeModal.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Picture, Text } from '@anker-in/headless-ui'\nimport { classNames, fetcher, gaTrack, useHeadlessContext } from '../../../lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport sha256 from 'crypto-js/sha256'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\n\nexport type CreditsSubscribeModalCopy = {\n title: string\n desc?: string\n placeholder: string\n policy?: string\n oneankerSubscribeAgree?: string\n successTips?: string\n dealsType?: string\n}\n\ninterface CreditsSubscribeModalProps extends ModalContainerProps {\n copy: CreditsSubscribeModalCopy\n onSuccess?: () => void\n}\n\nconst getAdCookie = () => {\n if (typeof window === 'undefined') {\n return { register_source: '' }\n }\n const { search, href } = window.location || {}\n const query = parse(search)\n\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n affiliate: Cookies.get('affiliate'),\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 deals_type: Cookies.get('deal'),\n transfer_id: Cookies.get('transfer_id'),\n }\n}\n\nexport function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubscribeModalProps) {\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [policy, setPolicy] = useState(false)\n const [oneankerSubscribeAgree, setOneankerSubscribeAgree] = useState(false)\n const [email, setEmail] = useState('')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n const { profile } = useCreditsContext()\n\n const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setErrorMessage('')\n setEmail(event.target?.value?.trim())\n }, [])\n\n const handleSubmit = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n setErrorMessage('')\n\n setLoading(true)\n const { register_source } = getAdCookie()\n\n const result = await fetcher({\n locale,\n action: 'subscribe',\n url: '/api/multipass/subscribe/subscribe_emails',\n method: 'POST',\n body: {\n email,\n register_source,\n brand,\n deals_type: copy.dealsType || 'vip_subscribe',\n },\n headers: {},\n type: '',\n })\n setLoading(false)\n\n if (!result.errors) {\n setSuccessMessage(copy.successTips || 'Subscribed successfully!')\n if (onSuccess) {\n onSuccess()\n }\n setTimeout(() => {\n setSuccessMessage('')\n }, 3000)\n gaTrack({\n subscribe_hashed_email: email ? sha256(email) : '',\n })\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType || 'vip_subscribe',\n position: 'pop_up',\n },\n })\n gaTrack({\n event: 'uaEvent',\n eventCategory: 'subscribe',\n eventAction: copy.dealsType || 'vip_subscribe',\n eventLabel: 'pop_up',\n nonInteraction: false,\n })\n } else {\n setErrorMessage(result.errors || result.statusText)\n }\n },\n [email, locale, brand, copy.dealsType, copy.successTips, onSuccess]\n )\n\n useEffect(() => {\n if (profile && profile?.email) {\n setEmail(profile?.email)\n }\n }, [profile])\n\n return (\n <CreditsModalContainer\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-[24px]\"\n titleClassName=\"h-[56px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n {...props}\n >\n <form className=\"min-l:px-[16px] flex flex-col gap-[16px] text-center\" onSubmit={handleSubmit} noValidate={false}>\n <div>\n <Text className={classNames('mb-[24px] text-[22px] font-bold')} html={copy.title}></Text>\n </div>\n {copy.desc && (\n <Text\n className=\"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]\"\n html={copy.desc}\n ></Text>\n )}\n <div\n className={classNames(\n 'relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <input\n className={classNames(\n 'h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]',\n !rounded && 'rounded-none'\n )}\n type=\"email\"\n required\n placeholder={copy.placeholder}\n value={email}\n onChange={handleEmailChange}\n />\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={loading}\n className={classNames(\n 'legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]',\n !rounded && 'rounded-none'\n )}\n >\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383\"\n className=\"size-[24px]\"\n alt=\"email\"\n />\n </Button>\n </div>\n {copy?.oneankerSubscribeAgree && (\n <div className=\"flex w-full\">\n <Checkbox\n checked={oneankerSubscribeAgree}\n onCheckedChange={() => setOneankerSubscribeAgree(!oneankerSubscribeAgree)}\n required\n className=\"border-[#1d1d1f]\"\n />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy.oneankerSubscribeAgree,\n }}\n />\n </div>\n )}\n <div className=\"flex w-full\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(!policy)} required className=\"border-[#1d1d1f]\" />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy?.policy || '',\n }}\n />\n </div>\n <div\n className={classNames(\n 'w-full text-left text-[16px] font-semibold',\n errorMessage && 'text-[#F84D4F]',\n successMessage && 'text-[#52C41A]'\n )}\n >\n <Text html={successMessage || errorMessage || ''} />\n </div>\n </form>\n </CreditsModalContainer>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Checkbox", "Picture", "Text", "classNames", "fetcher", "gaTrack", "useHeadlessContext", "Cookies", "parse", "sha256", "useCreditsContext", "ROUNDED_BRANDS", "CreditsModalContainer", "getAdCookie", "search", "href", "query", "CreditsSubscribeModal", "copy", "onSuccess", "props", "brand", "locale", "rounded", "policy", "setPolicy", "oneankerSubscribeAgree", "setOneankerSubscribeAgree", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "profile", "handleEmailChange", "event", "handleSubmit", "register_source", "result"]
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Picture, Text } from '@anker-in/headless-ui'\nimport { classNames, fetcher, gaTrack, useHeadlessContext } from '../../../lib'\nimport Cookies from 'js-cookie'\nimport { parse } from 'query-string'\nimport sha256 from 'crypto-js/sha256'\nimport { useCreditsContext } from '../context/provider'\nimport { ROUNDED_BRANDS } from '../../../constants'\nimport { CreditsModalContainer, type ModalContainerProps } from './ModalContainer'\n\nexport type CreditsSubscribeModalCopy = {\n title: string\n desc?: string\n placeholder: string\n policy?: string\n oneankerSubscribeAgree?: string\n successTips?: string\n dealsType?: string\n}\n\ninterface CreditsSubscribeModalProps extends ModalContainerProps {\n copy: CreditsSubscribeModalCopy\n onSuccess?: () => void\n}\n\nconst getAdCookie = () => {\n if (typeof window === 'undefined') {\n return { register_source: '' }\n }\n const { search, href } = window.location || {}\n const query = parse(search)\n\n return {\n fbuy_ref_code: Cookies.get('fbuy_ref_code'),\n affiliate: Cookies.get('affiliate'),\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 deals_type: Cookies.get('deal'),\n transfer_id: Cookies.get('transfer_id'),\n }\n}\n\nexport function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubscribeModalProps) {\n const { brand, locale } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(brand)\n const [policy, setPolicy] = useState(false)\n const [oneankerSubscribeAgree, setOneankerSubscribeAgree] = useState(false)\n const [email, setEmail] = useState('')\n const [errorMessage, setErrorMessage] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n const [loading, setLoading] = useState(false)\n const { profile, apiBaseUrl } = useCreditsContext()\n\n const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setErrorMessage('')\n setEmail(event.target?.value?.trim())\n }, [])\n\n const handleSubmit = useCallback(\n async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n setErrorMessage('')\n\n setLoading(true)\n const { register_source } = getAdCookie()\n\n const result = await fetcher({\n locale,\n action: 'subscribe',\n url: `${apiBaseUrl || ''}/api/multipass/subscribe/subscribe_emails`,\n method: 'POST',\n body: {\n email,\n register_source,\n brand,\n deals_type: copy.dealsType || 'vip_subscribe',\n },\n headers: {},\n type: '',\n })\n setLoading(false)\n\n if (!result.errors) {\n setSuccessMessage(copy.successTips || 'Subscribed successfully!')\n if (onSuccess) {\n onSuccess()\n }\n setTimeout(() => {\n setSuccessMessage('')\n }, 3000)\n gaTrack({\n subscribe_hashed_email: email ? sha256(email) : '',\n })\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType || 'vip_subscribe',\n position: 'pop_up',\n },\n })\n gaTrack({\n event: 'uaEvent',\n eventCategory: 'subscribe',\n eventAction: copy.dealsType || 'vip_subscribe',\n eventLabel: 'pop_up',\n nonInteraction: false,\n })\n } else {\n setErrorMessage(result.errors || result.statusText)\n }\n },\n [email, locale, brand, copy.dealsType, copy.successTips, onSuccess, apiBaseUrl]\n )\n\n useEffect(() => {\n if (profile && profile?.email) {\n setEmail(profile?.email)\n }\n }, [profile])\n\n return (\n <CreditsModalContainer\n className=\"w-[540px] md:h-auto\"\n scrollClassName=\"mb-[40px] min-l:px-[48px] md:mb-[24px]\"\n titleClassName=\"h-[56px]\"\n useAnimation\n animationClassName=\"md:translate-y-[100vh]\"\n {...props}\n >\n <form className=\"min-l:px-[16px] flex flex-col gap-[16px] text-center\" onSubmit={handleSubmit} noValidate={false}>\n <div>\n <Text className={classNames('mb-[24px] text-[22px] font-bold')} html={copy.title}></Text>\n </div>\n {copy.desc && (\n <Text\n className=\"mb-[8px] text-left text-[16px] font-semibold leading-[1.4] text-[#1F2021]\"\n html={copy.desc}\n ></Text>\n )}\n <div\n className={classNames(\n 'relative flex h-[52px] w-full overflow-hidden rounded-[2px] md:grid md:h-auto md:grid-rows-1 md:gap-[16px]',\n !rounded && 'rounded-none'\n )}\n >\n <input\n className={classNames(\n 'h-full flex-1 rounded-l-[2px] border-[1px] border-[#d8d8d8] px-[14px] py-[17px] text-[16px] font-semibold leading-[1] outline-none placeholder:text-[#999] md:h-[52px] md:rounded-[2px]',\n !rounded && 'rounded-none'\n )}\n type=\"email\"\n required\n placeholder={copy.placeholder}\n value={email}\n onChange={handleEmailChange}\n />\n <Button\n type=\"submit\"\n variant=\"primary\"\n loading={loading}\n className={classNames(\n 'legacy-headless-ui-primary-button !h-full !min-w-0 !rounded-l-none !rounded-r-[2px] !px-[40px] !py-[13px]',\n !rounded && 'rounded-none'\n )}\n >\n <Picture\n source=\"https://cdn.shopify.com/s/files/1/0512/8568/8505/files/icon_email.png?v=1697527383\"\n className=\"size-[24px]\"\n alt=\"email\"\n />\n </Button>\n </div>\n {copy?.oneankerSubscribeAgree && (\n <div className=\"flex w-full\">\n <Checkbox\n checked={oneankerSubscribeAgree}\n onCheckedChange={() => setOneankerSubscribeAgree(!oneankerSubscribeAgree)}\n required\n className=\"border-[#1d1d1f]\"\n />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy.oneankerSubscribeAgree,\n }}\n />\n </div>\n )}\n <div className=\"flex w-full\">\n <Checkbox checked={policy} onCheckedChange={() => setPolicy(!policy)} required className=\"border-[#1d1d1f]\" />\n <label\n className=\"ml-2 text-left text-[14px] font-semibold text-[#777] [&_a]:underline\"\n dangerouslySetInnerHTML={{\n __html: copy?.policy || '',\n }}\n />\n </div>\n <div\n className={classNames(\n 'w-full text-left text-[16px] font-semibold',\n errorMessage && 'text-[#F84D4F]',\n successMessage && 'text-[#52C41A]'\n )}\n >\n <Text html={successMessage || errorMessage || ''} />\n </div>\n </form>\n </CreditsModalContainer>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Checkbox", "Picture", "Text", "classNames", "fetcher", "gaTrack", "useHeadlessContext", "Cookies", "parse", "sha256", "useCreditsContext", "ROUNDED_BRANDS", "CreditsModalContainer", "getAdCookie", "search", "href", "query", "CreditsSubscribeModal", "copy", "onSuccess", "props", "brand", "locale", "rounded", "policy", "setPolicy", "oneankerSubscribeAgree", "setOneankerSubscribeAgree", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "profile", "apiBaseUrl", "handleEmailChange", "event", "handleSubmit", "register_source", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as d}from"react/jsx-runtime";import{useCallback as B,useEffect as D,useState as l}from"react";import{Button as E,Checkbox as I,Text as C}from"@anker-in/headless-ui";import{gaTrack as L,classNames as N,useHeadlessContext as O}from"../../../../lib";import c from"js-cookie";import{parse as A}from"query-string";import{emailValidate as H}from"../../../credits/context/utils";import{useMemberPopupContext as R}from"../../context/provider";import{ROUNDED_BRANDS as j}from"../../../../constants";function q(){if(typeof window>"u")return{register_source:""};const{search:e,href:o}=window.location,a=A(e);return{fbuy_ref_code:c.get("fbuy_ref_code"),ref:c.get("ref_ads"),inviter_code:a.ic??a.inviter_code??c.get("inviter_code"),register_source:a.redirect??c.get("reg_source")??o}}function J({copy:e,email:o,onClose:a}){const{alpcConfig:S,setIsSubscribeSuccess:p,fetchCreditInfo:k,profile:m}=R(),{brand:x,locale:b}=S,{brand:w}=O(),T=j.includes(w),[u,g]=l(e.policyDefaultChecked??!1),[i,h]=l(o??""),[n,s]=l(""),[f,_]=l(""),[M,v]=l(!1);D(()=>{o&&h(o)},[o]);const P=B(async()=>{if(s(""),!i)return s("Please fill in your email");if(!H(i))return s("Invalid email address");if(!u)return s("Please agree to the policy");v(!0);const{register_source:r}=q();try{const y=await(await fetch("/api/multipass/subscribe/subscribe_emails",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","current-language":b},body:JSON.stringify({email:i,register_source:r,brand:x,deals_type:e.dealsType??"vip_subscribe"})})).json();y.errors?s(y.errors??"Error occurred"):(_(e.successTips??"Subscribed successfully!"),p(!0),m?.user_id&&setTimeout(()=>k(m.user_id),3e3),L({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType??"",position:"sticky",info:""}}),setTimeout(()=>{_(""),a()},3e3))}catch{s("Network error")}finally{v(!1)}},[i,u,b,x,e,a,p]);return d("div",{className:"flex flex-col gap-[12px]",children:[d("div",{className:"flex flex-col gap-[8px]",children:[e.title&&t("h2",{className:"text-[24px] font-[700] leading-[1.2] text-[#080a0f]",children:e.title}),e.desc&&t(C,{className:"text-[16px] text-[#1e2024]",html:e.desc})]}),d("div",{className:"flex flex-col gap-[16px]",children:[t("input",{className:N("h-[46px] w-full border px-[14px] text-[16px] outline-none placeholder:text-[#999]",n?"border-[#f84d4f]":"border-[#d8d8d8]",T?"rounded-[4px]":"rounded-none"),placeholder:e.placeholder,value:i,onChange:r=>{s(""),h(r.target.value.trim())}}),d("div",{className:"flex w-full items-start gap-[8px]",children:[t(I,{checked:u,onCheckedChange:()=>g(r=>!r),className:"mt-[2px] border-[#1d1d1f]"}),t("label",{className:"cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline",onClick:()=>g(r=>!r),dangerouslySetInnerHTML:{__html:e.policy??""}})]}),(n||f)&&t("div",{className:N("text-[14px] font-[700]",n&&"text-[#f84d4f]",f&&"text-[#52c41a]"),children:t(C,{html:f||n})}),t(E,{className:"w-full",loading:M,onClick:P,children:e.buttonLabel??"Subscribe"})]})]})}export{J as default};
1
+ import{jsx as s,jsxs as d}from"react/jsx-runtime";import{useCallback as D,useEffect as E,useState as l}from"react";import{Button as I,Checkbox as L,Text as N}from"@anker-in/headless-ui";import{gaTrack as O,classNames as S,useHeadlessContext as A}from"../../../../lib";import c from"js-cookie";import{parse as H}from"query-string";import{emailValidate as R}from"../../../credits/context/utils";import{useMemberPopupContext as U}from"../../context/provider";import{ROUNDED_BRANDS as j}from"../../../../constants";function q(){if(typeof window>"u")return{register_source:""};const{search:e,href:o}=window.location,a=H(e);return{fbuy_ref_code:c.get("fbuy_ref_code"),ref:c.get("ref_ads"),inviter_code:a.ic??a.inviter_code??c.get("inviter_code"),register_source:a.redirect??c.get("reg_source")??o}}function J({copy:e,email:o,onClose:a}){const{alpcConfig:k,setIsSubscribeSuccess:p,fetchCreditInfo:w,profile:m}=U(),{brand:x,locale:b,apiBaseUrl:g}=k,{brand:T}=A(),M=j.includes(T),[u,h]=l(e.policyDefaultChecked??!1),[i,_]=l(o??""),[n,t]=l(""),[f,v]=l(""),[P,y]=l(!1);E(()=>{o&&_(o)},[o]);const B=D(async()=>{if(t(""),!i)return t("Please fill in your email");if(!R(i))return t("Invalid email address");if(!u)return t("Please agree to the policy");y(!0);const{register_source:r}=q();try{const C=await(await fetch(`${g||""}/api/multipass/subscribe/subscribe_emails`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json","current-language":b},body:JSON.stringify({email:i,register_source:r,brand:x,deals_type:e.dealsType??"vip_subscribe"})})).json();C.errors?t(C.errors??"Error occurred"):(v(e.successTips??"Subscribed successfully!"),p(!0),m?.user_id&&setTimeout(()=>w(m.user_id),3e3),O({event:"ga4Event",event_name:"subscribe",event_parameters:{page_group:e.dealsType??"",position:"sticky",info:""}}),setTimeout(()=>{v(""),a()},3e3))}catch{t("Network error")}finally{y(!1)}},[i,u,b,x,e,a,p,g]);return d("div",{className:"flex flex-col gap-[12px]",children:[d("div",{className:"flex flex-col gap-[8px]",children:[e.title&&s("h2",{className:"text-[24px] font-[700] leading-[1.2] text-[#080a0f]",children:e.title}),e.desc&&s(N,{className:"text-[16px] text-[#1e2024]",html:e.desc})]}),d("div",{className:"flex flex-col gap-[16px]",children:[s("input",{className:S("h-[46px] w-full border px-[14px] text-[16px] outline-none placeholder:text-[#999]",n?"border-[#f84d4f]":"border-[#d8d8d8]",M?"rounded-[4px]":"rounded-none"),placeholder:e.placeholder,value:i,onChange:r=>{t(""),_(r.target.value.trim())}}),d("div",{className:"flex w-full items-start gap-[8px]",children:[s(L,{checked:u,onCheckedChange:()=>h(r=>!r),className:"mt-[2px] border-[#1d1d1f]"}),s("label",{className:"cursor-pointer text-left text-[14px] text-[#1e2024] [&_a]:underline",onClick:()=>h(r=>!r),dangerouslySetInnerHTML:{__html:e.policy??""}})]}),(n||f)&&s("div",{className:S("text-[14px] font-[700]",n&&"text-[#f84d4f]",f&&"text-[#52c41a]"),children:s(N,{html:f||n})}),s(I,{className:"w-full",loading:P,onClick:B,children:e.buttonLabel??"Subscribe"})]})]})}export{J as default};
2
2
  //# sourceMappingURL=SubscribeEmailPanel.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/memberPopup/panels/EarnCredits/SubscribeEmailPanel.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { gaTrack, classNames as cn, useHeadlessContext } from '../../../../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}\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\nexport default function SubscribeEmailPanel({ copy, email: initialEmail, onClose }: Props) {\n const { alpcConfig, setIsSubscribeSuccess, fetchCreditInfo, profile } = useMemberPopupContext()\n const { brand, locale } = alpcConfig\n const { brand: headlessBrand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(headlessBrand)\n const [policy, setPolicy] = useState(copy.policyDefaultChecked ?? 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 try {\n const response = await fetch('/api/multipass/subscribe/subscribe_emails', {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n brand,\n deals_type: copy.dealsType ?? 'vip_subscribe',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')\n setIsSubscribeSuccess(true)\n if (profile?.user_id) setTimeout(() => fetchCreditInfo(profile.user_id), 3000)\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType ?? '',\n position: 'sticky',\n info: '',\n },\n })\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, brand, copy, onClose, setIsSubscribeSuccess])\n\n return (\n <div className=\"flex flex-col gap-[12px]\">\n <div className=\"flex flex-col gap-[8px]\">\n {copy.title && <h2 className=\"text-[24px] font-[700] leading-[1.2] text-[#080a0f]\">{copy.title}</h2>}\n {copy.desc && <Text className=\"text-[16px] text-[#1e2024]\" html={copy.desc} />}\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 => {\n setErrorMessage('')\n setEmail(e.target.value.trim())\n }}\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\n className={cn(\n 'text-[14px] font-[700]',\n errorMessage && 'text-[#f84d4f]',\n successMessage && 'text-[#52c41a]'\n )}\n >\n <Text html={successMessage || errorMessage} />\n </div>\n )}\n\n <Button className=\"w-full\" loading={loading} onClick={handleSubmit}>\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "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",
6
- "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Checkbox", "Text", "gaTrack", "cn", "useHeadlessContext", "Cookies", "parse", "emailValidate", "useMemberPopupContext", "ROUNDED_BRANDS", "getAdCookie", "search", "href", "query", "SubscribeEmailPanel", "copy", "initialEmail", "onClose", "alpcConfig", "setIsSubscribeSuccess", "fetchCreditInfo", "profile", "brand", "locale", "headlessBrand", "rounded", "policy", "setPolicy", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "handleSubmit", "register_source", "result", "e", "v"]
4
+ "sourcesContent": ["import { useCallback, useEffect, useState } from 'react'\nimport { Button, Checkbox, Text } from '@anker-in/headless-ui'\nimport { gaTrack, classNames as cn, useHeadlessContext } from '../../../../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}\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\nexport default function SubscribeEmailPanel({ copy, email: initialEmail, onClose }: Props) {\n const { alpcConfig, setIsSubscribeSuccess, fetchCreditInfo, profile } = useMemberPopupContext()\n const { brand, locale, apiBaseUrl } = alpcConfig\n const { brand: headlessBrand } = useHeadlessContext()\n const rounded = ROUNDED_BRANDS.includes(headlessBrand)\n const [policy, setPolicy] = useState(copy.policyDefaultChecked ?? 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 try {\n const response = await fetch(`${apiBaseUrl || ''}/api/multipass/subscribe/subscribe_emails`, {\n method: 'POST',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json', 'current-language': locale },\n body: JSON.stringify({\n email,\n register_source,\n brand,\n deals_type: copy.dealsType ?? 'vip_subscribe',\n }),\n })\n const result = await response.json()\n if (!result.errors) {\n setSuccessMessage(copy.successTips ?? 'Subscribed successfully!')\n setIsSubscribeSuccess(true)\n if (profile?.user_id) setTimeout(() => fetchCreditInfo(profile.user_id), 3000)\n gaTrack({\n event: 'ga4Event',\n event_name: 'subscribe',\n event_parameters: {\n page_group: copy.dealsType ?? '',\n position: 'sticky',\n info: '',\n },\n })\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, brand, copy, onClose, setIsSubscribeSuccess, apiBaseUrl])\n\n return (\n <div className=\"flex flex-col gap-[12px]\">\n <div className=\"flex flex-col gap-[8px]\">\n {copy.title && <h2 className=\"text-[24px] font-[700] leading-[1.2] text-[#080a0f]\">{copy.title}</h2>}\n {copy.desc && <Text className=\"text-[16px] text-[#1e2024]\" html={copy.desc} />}\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 => {\n setErrorMessage('')\n setEmail(e.target.value.trim())\n }}\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\n className={cn(\n 'text-[14px] font-[700]',\n errorMessage && 'text-[#f84d4f]',\n successMessage && 'text-[#52c41a]'\n )}\n >\n <Text html={successMessage || errorMessage} />\n </div>\n )}\n\n <Button className=\"w-full\" loading={loading} onClick={handleSubmit}>\n {copy.buttonLabel ?? 'Subscribe'}\n </Button>\n </div>\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "useCallback", "useEffect", "useState", "Button", "Checkbox", "Text", "gaTrack", "cn", "useHeadlessContext", "Cookies", "parse", "emailValidate", "useMemberPopupContext", "ROUNDED_BRANDS", "getAdCookie", "search", "href", "query", "SubscribeEmailPanel", "copy", "initialEmail", "onClose", "alpcConfig", "setIsSubscribeSuccess", "fetchCreditInfo", "profile", "brand", "locale", "apiBaseUrl", "headlessBrand", "rounded", "policy", "setPolicy", "email", "setEmail", "errorMessage", "setErrorMessage", "successMessage", "setSuccessMessage", "loading", "setLoading", "handleSubmit", "register_source", "result", "e", "v"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import r from"swr/mutation";import{useHeadlessContext as i}from"../../context";import{fetcher as s}from"../../utils";const g=(t,o)=>{const{locale:a}=i();return r("emailValidation",(c,{arg:{token:e,code:n}})=>s({url:"/api/multipass/account/users/email_validation",baseUrl:o,method:"POST",body:{activation_code:e,verify_code:n},action:"account",needRecaptcha:!0,locale:a}),t)};export{g as useEmailValidation};
1
+ import i from"swr/mutation";import{useHeadlessContext as r}from"../../context";import{fetcher as s}from"../../utils";const g=(t,o)=>{const{locale:n}=r();return i("emailValidation",(c,{arg:{token:a,code:e}})=>s({url:`${o||""}/api/multipass/account/users/email_validation`,method:"POST",body:{activation_code:a,verify_code:e},action:"account",needRecaptcha:!0,locale:n}),t)};export{g as useEmailValidation};
2
2
  //# sourceMappingURL=useEmailValidation.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/registration/hooks/useEmailValidation.ts"],
4
- "sourcesContent": ["import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\nexport const useEmailValidation = (\n config?: SWRMutationConfiguration<\n any,\n { type: 'responseError'; data: any; response: any },\n string,\n { token: string; code: string }\n >,\n apiBaseUrl?: string\n) => {\n const { locale } = useHeadlessContext()\n return useSWRMutation(\n 'emailValidation',\n (_, { arg: { token, code } }: { arg: { token: string; code: string } }) => {\n return fetcher({\n url: `/api/multipass/account/users/email_validation`,\n baseUrl: apiBaseUrl,\n method: 'POST',\n body: { activation_code: token, verify_code: code },\n action: 'account',\n needRecaptcha: true,\n locale,\n })\n },\n config\n )\n}\n"],
5
- "mappings": "AAAA,OAAOA,MAAkD,eACzD,OAAS,sBAAAC,MAA0B,gBACnC,OAAS,WAAAC,MAAe,cAEjB,MAAMC,EAAqB,CAChCC,EAMAC,IACG,CACH,KAAM,CAAE,OAAAC,CAAO,EAAIL,EAAmB,EACtC,OAAOD,EACL,kBACA,CAACO,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,KAAAC,CAAK,CAAE,IAClBP,EAAQ,CACb,IAAK,gDACL,QAASG,EACT,OAAQ,OACR,KAAM,CAAE,gBAAiBG,EAAO,YAAaC,CAAK,EAClD,OAAQ,UACR,cAAe,GACf,OAAAH,CACF,CAAC,EAEHF,CACF,CACF",
4
+ "sourcesContent": ["import useSWRMutation, { SWRMutationConfiguration } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\nexport const useEmailValidation = (\n config?: SWRMutationConfiguration<\n any,\n { type: 'responseError'; data: any; response: any },\n string,\n { token: string; code: string }\n >,\n apiBaseUrl?: string\n) => {\n const { locale } = useHeadlessContext()\n return useSWRMutation(\n 'emailValidation',\n (_, { arg: { token, code } }: { arg: { token: string; code: string } }) => {\n return fetcher({\n url: `${apiBaseUrl || ''}/api/multipass/account/users/email_validation`,\n method: 'POST',\n body: { activation_code: token, verify_code: code },\n action: 'account',\n needRecaptcha: true,\n locale,\n })\n },\n config\n )\n}\n"],
5
+ "mappings": "AAAA,OAAOA,MAAkD,eACzD,OAAS,sBAAAC,MAA0B,gBACnC,OAAS,WAAAC,MAAe,cAEjB,MAAMC,EAAqB,CAChCC,EAMAC,IACG,CACH,KAAM,CAAE,OAAAC,CAAO,EAAIL,EAAmB,EACtC,OAAOD,EACL,kBACA,CAACO,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,KAAAC,CAAK,CAAE,IAClBP,EAAQ,CACb,IAAK,GAAGG,GAAc,EAAE,gDACxB,OAAQ,OACR,KAAM,CAAE,gBAAiBG,EAAO,YAAaC,CAAK,EAClD,OAAQ,UACR,cAAe,GACf,OAAAH,CACF,CAAC,EAEHF,CACF,CACF",
6
6
  "names": ["useSWRMutation", "useHeadlessContext", "fetcher", "useEmailValidation", "config", "apiBaseUrl", "locale", "_", "token", "code"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import o from"swr/mutation";import{useHeadlessContext as s}from"../../context";import{fetcher as r}from"../../utils";function c(a){const{appName:e,locale:t}=s();return o("send-email-validation",(p,{arg:{email:n,...i}})=>r({locale:t,url:"/api/multipass/account/users/send_validation_email",baseUrl:a,method:"POST",body:{email:n,app:e,...i},needRecaptcha:!0,action:"verifyAccount"}))}export{c as useSendEmailValidation};
1
+ import o from"swr/mutation";import{useHeadlessContext as s}from"../../context";import{fetcher as r}from"../../utils";function c(a){const{appName:e,locale:t}=s();return o("send-email-validation",(p,{arg:{email:n,...i}})=>r({locale:t,url:`${a||""}/api/multipass/account/users/send_validation_email`,method:"POST",body:{email:n,app:e,...i},needRecaptcha:!0,action:"verifyAccount"}))}export{c as useSendEmailValidation};
2
2
  //# sourceMappingURL=useSendEmailValidation.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/registration/hooks/useSendEmailValidation.ts"],
4
- "sourcesContent": ["import useSWRMutation, { type SWRMutationResponse } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\n// data \u53C2\u6570\u4F1A\u88AB stringify \u540E\u653E\u5165\u5230\u90AE\u4EF6\u94FE\u63A5\u53C2\u6570\u4E2D\nexport type RequestData = { email: string; data: any }\n\nexport function useSendEmailValidation(apiBaseUrl?: string): SWRMutationResponse<any, any, string, { email: string } & any> {\n const { appName, locale } = useHeadlessContext()\n\n return useSWRMutation('send-email-validation', (_, { arg: { email, ...rest } }: { arg: RequestData }) =>\n fetcher({\n locale,\n url: '/api/multipass/account/users/send_validation_email',\n baseUrl: apiBaseUrl,\n method: 'POST',\n body: { email: email, app: appName, ...rest },\n needRecaptcha: true,\n action: 'verifyAccount',\n })\n )\n}\n"],
5
- "mappings": "AAAA,OAAOA,MAAkD,eACzD,OAAS,sBAAAC,MAA0B,gBACnC,OAAS,WAAAC,MAAe,cAKjB,SAASC,EAAuBC,EAAqF,CAC1H,KAAM,CAAE,QAAAC,EAAS,OAAAC,CAAO,EAAIL,EAAmB,EAE/C,OAAOD,EAAe,wBAAyB,CAACO,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,GAAGC,CAAK,CAAE,IAC3EP,EAAQ,CACN,OAAAI,EACA,IAAK,qDACL,QAASF,EACT,OAAQ,OACR,KAAM,CAAE,MAAOI,EAAO,IAAKH,EAAS,GAAGI,CAAK,EAC5C,cAAe,GACf,OAAQ,eACV,CAAC,CACH,CACF",
4
+ "sourcesContent": ["import useSWRMutation, { type SWRMutationResponse } from 'swr/mutation'\nimport { useHeadlessContext } from '../../context'\nimport { fetcher } from '../../utils'\n\n// data \u53C2\u6570\u4F1A\u88AB stringify \u540E\u653E\u5165\u5230\u90AE\u4EF6\u94FE\u63A5\u53C2\u6570\u4E2D\nexport type RequestData = { email: string; data: any }\n\nexport function useSendEmailValidation(apiBaseUrl?: string): SWRMutationResponse<any, any, string, { email: string } & any> {\n const { appName, locale } = useHeadlessContext()\n\n return useSWRMutation('send-email-validation', (_, { arg: { email, ...rest } }: { arg: RequestData }) =>\n fetcher({\n locale,\n url: `${apiBaseUrl || ''}/api/multipass/account/users/send_validation_email`,\n method: 'POST',\n body: { email: email, app: appName, ...rest },\n needRecaptcha: true,\n action: 'verifyAccount',\n })\n )\n}\n"],
5
+ "mappings": "AAAA,OAAOA,MAAkD,eACzD,OAAS,sBAAAC,MAA0B,gBACnC,OAAS,WAAAC,MAAe,cAKjB,SAASC,EAAuBC,EAAqF,CAC1H,KAAM,CAAE,QAAAC,EAAS,OAAAC,CAAO,EAAIL,EAAmB,EAE/C,OAAOD,EAAe,wBAAyB,CAACO,EAAG,CAAE,IAAK,CAAE,MAAAC,EAAO,GAAGC,CAAK,CAAE,IAC3EP,EAAQ,CACN,OAAAI,EACA,IAAK,GAAGF,GAAc,EAAE,qDACxB,OAAQ,OACR,KAAM,CAAE,MAAOI,EAAO,IAAKH,EAAS,GAAGI,CAAK,EAC5C,cAAe,GACf,OAAQ,eACV,CAAC,CACH,CACF",
6
6
  "names": ["useSWRMutation", "useHeadlessContext", "fetcher", "useSendEmailValidation", "apiBaseUrl", "appName", "locale", "_", "email", "rest"]
7
7
  }
@@ -1 +1 @@
1
- export declare const fetcher: ({ locale, url, baseUrl, method, headers, repeatKey, body, type, timeout, }: any) => Promise<any>;
1
+ export declare const fetcher: ({ locale, url, method, headers, repeatKey, body, type, timeout, }: any) => Promise<any>;
@@ -1,2 +1,2 @@
1
- import{handleFetchResponse as f}from"./fetchResponse";const h=async({locale:l="en",url:o,baseUrl:s,method:a="POST",headers:c={},repeatKey:g,body:e,type:i,timeout:n=9e4})=>{let r="";i==="uploadFile"?r=e:r=e?JSON.stringify(e):"";const t=new AbortController;n&&setTimeout(()=>t.abort(),n);const d=await fetch(`${s||""}${o}`,{method:a,mode:"cors",credentials:"include",headers:{"current-language":l,...c},...n&&{signal:t.signal},...a!=="GET"&&{body:r}});return f(d)};export{h as fetcher};
1
+ import{handleFetchResponse as d}from"./fetchResponse";const p=async({locale:l="en",url:o,method:a="POST",headers:s={},repeatKey:f,body:e,type:c,timeout:n=9e4})=>{let r="";c==="uploadFile"?r=e:r=e?JSON.stringify(e):"";const t=new AbortController;n&&setTimeout(()=>t.abort(),n);const i=await fetch(o,{method:a,mode:"cors",credentials:"include",headers:{"current-language":l,...s},...n&&{signal:t.signal},...a!=="GET"&&{body:r}});return d(i)};export{p as fetcher};
2
2
  //# sourceMappingURL=fetcher.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/utils/fetcher/fetcher.ts"],
4
- "sourcesContent": ["import { handleFetchResponse } from './fetchResponse'\n\nexport const fetcher = async ({\n locale = 'en',\n url,\n baseUrl,\n method = 'POST',\n headers = {},\n repeatKey,\n body,\n type,\n timeout = 90000,\n}: any) => {\n // \u6DFB\u52A0\u8C37\u6B4C\u9A8C\u8BC1\n let bodyData = ''\n if (type === 'uploadFile') {\n bodyData = body\n } else {\n bodyData = body ? JSON.stringify(body) : ''\n }\n\n const controller = new AbortController()\n if (timeout) {\n // \u8D85\u65F6\u62A5\u9519\n setTimeout(() => controller.abort(), timeout)\n }\n\n const data = await fetch(`${baseUrl || ''}${url}`, {\n method,\n mode: 'cors',\n credentials: 'include',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...(timeout && { signal: controller.signal }),\n ...(method !== 'GET' && { body: bodyData }),\n })\n return handleFetchResponse(data)\n}\n"],
5
- "mappings": "AAAA,OAAS,uBAAAA,MAA2B,kBAE7B,MAAMC,EAAU,MAAO,CAC5B,OAAAC,EAAS,KACT,IAAAC,EACA,QAAAC,EACA,OAAAC,EAAS,OACT,QAAAC,EAAU,CAAC,EACX,UAAAC,EACA,KAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACZ,IAAW,CAET,IAAIC,EAAW,GACXF,IAAS,aACXE,EAAWH,EAEXG,EAAWH,EAAO,KAAK,UAAUA,CAAI,EAAI,GAG3C,MAAMI,EAAa,IAAI,gBACnBF,GAEF,WAAW,IAAME,EAAW,MAAM,EAAGF,CAAO,EAG9C,MAAMG,EAAO,MAAM,MAAM,GAAGT,GAAW,EAAE,GAAGD,CAAG,GAAI,CACjD,OAAAE,EACA,KAAM,OACN,YAAa,UACb,QAAS,CACP,mBAAoBH,EACpB,GAAGI,CACL,EACA,GAAII,GAAW,CAAE,OAAQE,EAAW,MAAO,EAC3C,GAAIP,IAAW,OAAS,CAAE,KAAMM,CAAS,CAC3C,CAAC,EACD,OAAOX,EAAoBa,CAAI,CACjC",
6
- "names": ["handleFetchResponse", "fetcher", "locale", "url", "baseUrl", "method", "headers", "repeatKey", "body", "type", "timeout", "bodyData", "controller", "data"]
4
+ "sourcesContent": ["import { handleFetchResponse } from './fetchResponse'\n\nexport const fetcher = async ({\n locale = 'en',\n url,\n method = 'POST',\n headers = {},\n repeatKey,\n body,\n type,\n timeout = 90000,\n}: any) => {\n // \u6DFB\u52A0\u8C37\u6B4C\u9A8C\u8BC1\n let bodyData = ''\n if (type === 'uploadFile') {\n bodyData = body\n } else {\n bodyData = body ? JSON.stringify(body) : ''\n }\n\n const controller = new AbortController()\n if (timeout) {\n // \u8D85\u65F6\u62A5\u9519\n setTimeout(() => controller.abort(), timeout)\n }\n\n const data = await fetch(url, {\n method,\n mode: 'cors',\n credentials: 'include',\n headers: {\n 'current-language': locale,\n ...headers,\n },\n ...(timeout && { signal: controller.signal }),\n ...(method !== 'GET' && { body: bodyData }),\n })\n return handleFetchResponse(data)\n}\n"],
5
+ "mappings": "AAAA,OAAS,uBAAAA,MAA2B,kBAE7B,MAAMC,EAAU,MAAO,CAC5B,OAAAC,EAAS,KACT,IAAAC,EACA,OAAAC,EAAS,OACT,QAAAC,EAAU,CAAC,EACX,UAAAC,EACA,KAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACZ,IAAW,CAET,IAAIC,EAAW,GACXF,IAAS,aACXE,EAAWH,EAEXG,EAAWH,EAAO,KAAK,UAAUA,CAAI,EAAI,GAG3C,MAAMI,EAAa,IAAI,gBACnBF,GAEF,WAAW,IAAME,EAAW,MAAM,EAAGF,CAAO,EAG9C,MAAMG,EAAO,MAAM,MAAMT,EAAK,CAC5B,OAAAC,EACA,KAAM,OACN,YAAa,UACb,QAAS,CACP,mBAAoBF,EACpB,GAAGG,CACL,EACA,GAAII,GAAW,CAAE,OAAQE,EAAW,MAAO,EAC3C,GAAIP,IAAW,OAAS,CAAE,KAAMM,CAAS,CAC3C,CAAC,EACD,OAAOV,EAAoBY,CAAI,CACjC",
6
+ "names": ["handleFetchResponse", "fetcher", "locale", "url", "method", "headers", "repeatKey", "body", "type", "timeout", "bodyData", "controller", "data"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anker-in/campaign-ui",
3
- "version": "0.5.25",
3
+ "version": "0.5.26",
4
4
  "description": "Campaign UI components and utilities for Anker projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -50,7 +50,7 @@ export function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubs
50
50
  const [errorMessage, setErrorMessage] = useState('')
51
51
  const [successMessage, setSuccessMessage] = useState('')
52
52
  const [loading, setLoading] = useState(false)
53
- const { profile } = useCreditsContext()
53
+ const { profile, apiBaseUrl } = useCreditsContext()
54
54
 
55
55
  const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {
56
56
  setErrorMessage('')
@@ -68,7 +68,7 @@ export function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubs
68
68
  const result = await fetcher({
69
69
  locale,
70
70
  action: 'subscribe',
71
- url: '/api/multipass/subscribe/subscribe_emails',
71
+ url: `${apiBaseUrl || ''}/api/multipass/subscribe/subscribe_emails`,
72
72
  method: 'POST',
73
73
  body: {
74
74
  email,
@@ -111,7 +111,7 @@ export function CreditsSubscribeModal({ copy, onSuccess, ...props }: CreditsSubs
111
111
  setErrorMessage(result.errors || result.statusText)
112
112
  }
113
113
  },
114
- [email, locale, brand, copy.dealsType, copy.successTips, onSuccess]
114
+ [email, locale, brand, copy.dealsType, copy.successTips, onSuccess, apiBaseUrl]
115
115
  )
116
116
 
117
117
  useEffect(() => {
@@ -28,7 +28,7 @@ function getAdCookie() {
28
28
 
29
29
  export default function SubscribeEmailPanel({ copy, email: initialEmail, onClose }: Props) {
30
30
  const { alpcConfig, setIsSubscribeSuccess, fetchCreditInfo, profile } = useMemberPopupContext()
31
- const { brand, locale } = alpcConfig
31
+ const { brand, locale, apiBaseUrl } = alpcConfig
32
32
  const { brand: headlessBrand } = useHeadlessContext()
33
33
  const rounded = ROUNDED_BRANDS.includes(headlessBrand)
34
34
  const [policy, setPolicy] = useState(copy.policyDefaultChecked ?? false)
@@ -50,7 +50,7 @@ export default function SubscribeEmailPanel({ copy, email: initialEmail, onClose
50
50
  setLoading(true)
51
51
  const { register_source } = getAdCookie()
52
52
  try {
53
- const response = await fetch('/api/multipass/subscribe/subscribe_emails', {
53
+ const response = await fetch(`${apiBaseUrl || ''}/api/multipass/subscribe/subscribe_emails`, {
54
54
  method: 'POST',
55
55
  credentials: 'include',
56
56
  headers: { 'Content-Type': 'application/json', 'current-language': locale },
@@ -87,7 +87,7 @@ export default function SubscribeEmailPanel({ copy, email: initialEmail, onClose
87
87
  } finally {
88
88
  setLoading(false)
89
89
  }
90
- }, [email, policy, locale, brand, copy, onClose, setIsSubscribeSuccess])
90
+ }, [email, policy, locale, brand, copy, onClose, setIsSubscribeSuccess, apiBaseUrl])
91
91
 
92
92
  return (
93
93
  <div className="flex flex-col gap-[12px]">
@@ -16,8 +16,7 @@ export const useEmailValidation = (
16
16
  'emailValidation',
17
17
  (_, { arg: { token, code } }: { arg: { token: string; code: string } }) => {
18
18
  return fetcher({
19
- url: `/api/multipass/account/users/email_validation`,
20
- baseUrl: apiBaseUrl,
19
+ url: `${apiBaseUrl || ''}/api/multipass/account/users/email_validation`,
21
20
  method: 'POST',
22
21
  body: { activation_code: token, verify_code: code },
23
22
  action: 'account',
@@ -11,8 +11,7 @@ export function useSendEmailValidation(apiBaseUrl?: string): SWRMutationResponse
11
11
  return useSWRMutation('send-email-validation', (_, { arg: { email, ...rest } }: { arg: RequestData }) =>
12
12
  fetcher({
13
13
  locale,
14
- url: '/api/multipass/account/users/send_validation_email',
15
- baseUrl: apiBaseUrl,
14
+ url: `${apiBaseUrl || ''}/api/multipass/account/users/send_validation_email`,
16
15
  method: 'POST',
17
16
  body: { email: email, app: appName, ...rest },
18
17
  needRecaptcha: true,
@@ -3,7 +3,6 @@ import { handleFetchResponse } from './fetchResponse'
3
3
  export const fetcher = async ({
4
4
  locale = 'en',
5
5
  url,
6
- baseUrl,
7
6
  method = 'POST',
8
7
  headers = {},
9
8
  repeatKey,
@@ -25,7 +24,7 @@ export const fetcher = async ({
25
24
  setTimeout(() => controller.abort(), timeout)
26
25
  }
27
26
 
28
- const data = await fetch(`${baseUrl || ''}${url}`, {
27
+ const data = await fetch(url, {
29
28
  method,
30
29
  mode: 'cors',
31
30
  credentials: 'include',