{"version":3,"sources":["utils/env.ts","utils/storage-keys.ts","utils/local-storage.ts","hooks/useSession.ts","utils/helpers.ts","assets/img/combo_ielts_thumb.jpg","assets/img/ielts-6-thumb.jpg","assets/img/ielts-7-thumb.jpg","assets/img/ielts-9-thumb.jpg","stores/globalStore.ts","hoc/withSession.tsx","assets/img/Logo.svg","components/user/UserImageProfile.tsx","stores/cart-context.ts","components/Cart/CartItem.tsx","hooks/useSaveLead.ts","apis/common.ts","apis/userApi.ts","hooks/base/useAsync.ts","pages/dashboard/user/useUserApi.ts","hooks/useBuildMembership.ts","components/Cart/Cart.tsx","components/Header/Header.tsx","assets/img/icon-elsa.svg","assets/img/icon-redeem.svg","assets/img/icon-logout.svg","assets/img/icon-upgrade.svg","components/Sidebar/Sidebar.tsx","pages/dashboard/dashboard.tsx","assets/img/premium/comparison-nova.jpg","assets/img/premium/comparison-nova-sm.jpg","components/user/dashboard/FreePremium.tsx","assets/img/open-app-qr.jpg","components/Loading/Loading.tsx","pages/dashboard/user/profileUser.tsx","hooks/base/useAPIService.ts","pages/dashboard/user/changePasswordUser.tsx","pages/dashboard/user/changeProfileUser.tsx","assets/img/icon-lightning-circle.svg","assets/img/icon-lessons.svg","assets/img/icon-clock.svg","apis/scoringVoucherAPI.ts","pages/dashboard/score/getAchievementApi.ts","pages/dashboard/score/getLeaderBoardApi.ts","pages/dashboard/score/getStateApi.ts","components/charts/PentagonScore.tsx","pages/dashboard/score/scoringUser.tsx","assets/img/thumb-redeem-success.png","apis/redeemVoucherAPI.ts","pages/dashboard/redeem/redeemVoucherPostApi.ts","pages/dashboard/redeem/redeemVoucher.tsx","pages/dashboard/bill/BillList.tsx","assets/img/icon-check-1.svg","components/Cards/OxfordBusiness.tsx","pages/dashboard/course/Oxford.tsx","apis/loginApi.ts","pages/login/useLoginApi.ts","hooks/useLoginV2.ts","assets/img/google-icon.svg","components/Authentication/GoogleSignin/GoogleSignin.tsx","firebaseConfig.ts","firebase.js","pages/login/login.tsx","stores/CartProvider.tsx","pages/login/signup.tsx","pages/login/forgetPassword.tsx","components/NavCourse/NavCourse.tsx","pages/dashboard/course/ELSACourse.tsx","pages/404/Page404.tsx","components/Cards/courseHPC.tsx","assets/img/banner-hpc.png","pages/dashboard/course/HarperCollins.tsx","assets/img/premium/icon-thumb-new.svg","pages/dashboard/course/blocks/PackageBenefit.tsx","components/Popup/Popup.tsx","components/Popup/UpgradePopup.tsx","assets/img/icon-stars.svg","pages/dashboard/course/UpgradePackage.tsx","assets/img/banner-ielts.jpg","components/Cards/courseIelts.tsx","pages/dashboard/course/Ielts.tsx","pages/routes.tsx","App.tsx","index.tsx"],"names":["CONFIG","elsaIcon","production","captchaSiteKey","internalApiUrl","userServerApiUrl","baseApiUrl","paymentApiURL","backendPaymentApiUrl","env","ACCESS_TOKEN","USER_PROFILE","URL_QUERY_STRING","DISCOUNT_CODE","getItem","key","localStorage","setItem","value","removeItem","getSiteCode","query","url","URLSearchParams","Object","fromEntries","SESSION_KEY","SESSION_KEY_EXPIRY","useSession","React","useState","session","setSession","bootstrap","setBootstrap","navigate","useNavigate","siteCode","useEffect","sessionToken","sessionTokenExpiry","isNil","Number","parseInt","toString","Date","now","loadSession","a","config","axios","get","data","name","getDiscountCode","storeSession","useCallback","expiry","getTime","signOut","window","location","reload","getCurrentSubscription","entitlements","membership","code","tier","expireAt","expire_at","getDuration","transactions","filter","item","catalog","status","sort","b","created_at","duration","map","length","GlobalStore","createContainer","isNavOpened","setIsNavOpened","currentSessionLanguage","sessionStorage","currentLanguage","setCurrentLanguage","setEntitlements","oxford","harper","ielts","bookData","headers","getUserTier","toggleNav","switchLanguage","withSession","WrappedComponent","props","useContainer","search","trim","isEmpty","to","pathname","split","UserImageProfile","image","setImage","file","setFile","fileList","setFileList","isModalVisible","setIsModalVisible","isPreviewVisible","setIsPreviewVisible","loading","setLoading","handleCancel","token","responseType","then","res","imgBlob","imageObjectURL","URL","createObjectURL","catch","err","console","log","menu","Item","onClick","EyeOutlined","EditOutlined","className","overlay","trigger","placement","arrow","size","xs","sm","md","lg","xl","xxl","src","alt","style","display","preview","visible","onVisibleChange","title","onCancel","footer","type","fmData","FormData","append","post","message","error","multiple","maxCount","listType","accept","onChange","newFileList","customRequest","options","onSuccess","onProgress","onError","Error","percent","setTimeout","icon","UploadOutlined","CartContext","createContext","items","totalAmount","membershipString","CartItem","onAdd","onRemove","formatPrice","price","amount","toLocaleString","MinusOutlined","PlusOutlined","useSaveLead","getUTM","href","utmObject","utm_source","utm_content","utm_term","utm_medium","utm_campaign","isPhoneValid","number","test","getDateOfBirth","date","slice","saveLead","profileObject","tracking","upgradeOption","discount_code","currentPackages","utm","formdata","fullname","username","phone","email","lead_source","DOB","date_of_birth","Street","address","old_package","origin","assign","discountCode","utmMedium","includes","form","document","createElement","method","action","hasOwnProperty","hiddenField","appendChild","body","submit","handleError","errorMessage","isString","statusCode","doPost","doGet","doGetClubsServer","doUpdateUserProfile","formData","JSON","stringify","updateUserApi","password","new_password","getUserProfile","accessToken","useAsync","asyncFunction","immediate","setStatus","setValue","setError","execute","response","useGetUserProfileApi","t","useTranslation","getUserProfileApi","params","isLoading","useBuildMembership","buildMembership","products","memOrderString","Cart","setVisible","setIsLoading","useContext","addItem","addItemToCartHandler","deleteItemFromCartHandler","memebership","bind","WarningOutlined","e","LoadingOutlined","flag","count","ShoppingCartOutlined","fontSize","Header","cartCtx","target","Logo","emptyCart","Sidebar","selectedMenuItem","setSelectedMenuItem","SubMenu","Menu","useLocation","isNova","nova_mode","locationActive","lastIndexOf","theme","selectedKeys","mode","handleMenuClick","UserOutlined","IconElsa","IconUpgrade","IconRedeem","IconLogout","backgroundColor","FreePremium","srcSet","ImgComparisonNova","media","ImgComparisonNovaSM","Loading","color","width","height","ProfileUser","isProLifetime","isConversationBundle","Helmet","content","justify","inputDate","isNaN","getDate","getMonth","getFullYear","formatDateOfBirth","toUpperCase","toLocaleDateString","QR","BASE_URL","handleApiError","apiInstance","create","baseURL","useApiService","patch","ChangePasswordUser","Form","useForm","apiService","wrapperCol","span","labelCol","layout","initialValues","onFinish","values","fetchData","indexOf","success","toLowerCase","label","rules","required","dependencies","getFieldValue","validator","_","Promise","reject","resolve","htmlType","ChangeProfileUser","Option","Select","update","useUpdateUserApi","part","birthday","birthmonth","birthyear","dataForm","placeholder","pattern","RegExp","maxLength","id","getAchievement","getLeaderBoard","userId","getStateInformation","ScoringGetAchievementApi","scoringGetAchievementApi","achievement","GetLeaderBoardApi","userProfile","parse","external_id","getLeaderBoardApi","leaderBoard","GetStateApi","getStateApi","state","PentagonScore","score","chartSize","rounded","valueToPoint","index","total","angle","Math","PI","cos","sin","x","round","y","generatePathPoints","stats","borderRadius","_lens","lines","_p","stat","i","xy","sqrt","_line","v","push","first_lines","last_line","l","join","generatePentagonPath","radius","scale","translate","points","points_1","points_2","points_3","points_4","points_8","ons","fls","sis","wss","lis","transform","d","stroke","strokeWidth","fill","fillOpacity","strokeOpacity","opacity","fillRule","clipRule","x1","y1","x2","y2","gradientUnits","stopColor","offset","textAnchor","dominantBaseline","fontWeight","maskUnits","mask","filterUnits","colorInterpolationFilters","floodOpacity","result","in","dy","stdDeviation","in2","PostList","IeltsBandLevel","streak","setStreak","yLesson7Days","setYLesson7Days","yLesson12Months","setYLesson12Months","yMinutes7Days","setYMinutes7Days","yMinutes12Months","setYMinutes12Months","maxLessonLast7Days","setMaxLessonLast7Days","maxLessonLast12Months","setMaxLessonLast12Months","maxMinutesLast7Days","setMaxMinutesLast7Days","maxMinutesLast12Months","setMaxMinutesLast12Months","isFilter7Days","setIsFilter7Days","isFilter12Month","setIsFilter12Month","daysOfWeek","today","getDay","getListDay","monthsOfYear","thisMonth","getListMonth","streak_day","getMaxValue","arr","max","apply","roundMax","generateAxisY","dataSet","axisY","roundedMax","divide","lessonsLearned","lessons_learned","minutesSpent","minutes_spent","lessonLast7Days","last_7_days","daily","minutesLast7Days","lessonLast12Months","last_12_months","monthly","minutesLast12Months","eps","text","styles","buildStyles","pathColor","textColor","trailColor","tag","start_score","end_score","find","level","num","start","end","circleRatio","rotation","textSize","didNotAttempt","non","intermittent","extremelyLimited","limited","modest","competent","good","veryGood","expert","bandLevelTitle","LessonIcon","ClockIcon","gutter","column","day","dangerouslySetInnerHTML","__html","StrickIcon","USER_REDEEM_URL","replace","redeemVoucherAPI","RedeemVoucherPostApi","redeemVoucher","Text","Typography","isResultRedeem","setIsResultRedeem","profileLoading","direction","marginTop","viewBox","xmlns","ThumbRedeem","BillList","OxfordBusiness","product","active","setActive","genSaleTags","is_featured","thumbnail","discount_percent","meta","unit","IconCheck","book","lesson","base_price","discount_price","addToCart","Oxford","gCaptcha","facebook_token","apple_token","google_token","google_email","apple_client_id","google_client_id","loginURL","getElementById","loginApi","useLoginApi","adminLoginApi","login","moment","add","toDate","profile","redirect","useLoginV2","script","dispatchEvent","Event","removeChild","GoogleLoginButton","children","GoogleIcon","firebaseConfig","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","measurementId","app","initializeApp","auth","getAuth","googleProvider","GoogleAuthProvider","addScope","CartActionKind","Login","recaptchaRef","useRef","onSubmitWithReCAPTCHA","current","executeAsync","responseGoogle","signInWithPopup","user","getIdToken","additionalUserInfo","getAdditionalUserInfo","fields","scope","cssClass","callback","textButton","authOptions","clientId","redirectURI","nonce","usePopup","uiType","noDefaultStyle","authorization","responseAppleID","GoogleSignin","ref","sitekey","Password","Signup","signUpLoading","setSignUpLoading","signupURL","ForgetPassword","resetLoading","setResetLoading","NavCourse","ELSACourse","Page404","CourseHPC","include","HarperCollins","Banner","hpc","PackageBenefit","benefit","photo","icon_url","is_new","ThumbNew","description","Popup","UpgradePopup","money","setShowPopup","phoneValid","setPhoneValid","setPhone","site_code","unused_money","session_token","is_upgrade","user_id","handleSubmitPhone","newProfile","htmlFor","UpgradePackage","upgradeType","metadata","userInfo","setUserInfo","showPopup","setMembership","benefits","packages","upgradeInfo","setUpgradeInfo","requestConfig","all","unusedMoney","catalogRes","catalogs","premiumPackages","bundlePackage","benefitList","benefitName","benefitPhoto","photo_url","packagesInfo","reduce","prev","temp","variants","interface","package","package_name","substring","IconStart","checked","disabled","IELTS","AppRoutes","isLoggedIn","path","element","defaultCartState","cartReducer","ADD","updatedItems","updatedItem","existingCartItemIndex","findIndex","payload","existingCartItem","concat","REMOVE","existingItemIndex","existingItem","updatedTotalAmount","EMPTY","CartProvider","useReducer","cartState","dispatch","cartContext","Provider","App","rel","i18n","use","initReactI18next","LanguageDetector","init","lng","supportedLngs","resources","en","translation","translationEN","vi","translationTH","fallbackLng","debug","detection","order","caches","lookupLocalStorage","ReactDOM","render","basename"],"mappings":"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","file":"static/js/main.d7f709a4.chunk.js","sourcesContent":["const CONFIG = {\n dev: {\n elsaIcon: \"https://d3oc9469khle5q.cloudfront.net/ELSA/elsa-logo-01.png\",\n production: false,\n captchaSiteKey: '6LerZhsiAAAAAMjF79HlfVerlMMN73pbeIKFQdTE',\n internalApiUrl: 'https://th.elsaspeak.com',\n userServerApiUrl: 'https://staging.elsanow.co',\n baseApiUrl: 'https://staging.elsanow.co',\n paymentApiURL: 'https://web-stag.elsanow.co',\n backendPaymentApiUrl: 'https://payment-stag.elsanow.io',\n },\n staging: {\n elsaIcon: \"https://d3oc9469khle5q.cloudfront.net/ELSA/elsa-logo-01.png\",\n production: false,\n captchaSiteKey: '6LerZhsiAAAAAMjF79HlfVerlMMN73pbeIKFQdTE',\n internalApiUrl: 'https://th-stag.elsaspeak.com',\n userServerApiUrl: 'https://staging.elsanow.co',\n baseApiUrl: 'https://staging.elsanow.co',\n paymentApiURL: 'https://web-stag.elsanow.co',\n backendPaymentApiUrl: 'https://payment-stag.elsanow.io',\n },\n production: {\n elsaIcon: \"https://d38mu8cimsbtsp.cloudfront.net/ELSA/elsa-logo-01.png\",\n production: true,\n captchaSiteKey: '6LerZhsiAAAAAMjF79HlfVerlMMN73pbeIKFQdTE',\n internalApiUrl: 'https://th.elsaspeak.com',\n userServerApiUrl: 'https://pool.elsanow.io',\n baseApiUrl: 'https://pool.elsanow.io',\n paymentApiURL: 'https://elsaspeak.com',\n backendPaymentApiUrl: 'https://pool.elsanow.io/payment',\n },\n};\n\nexport default function env() {\n const currentStage = process.env.REACT_APP_ENV || \"dev\";\n\n switch (currentStage) {\n case \"production\":\n return CONFIG.production;\n case \"staging\":\n return CONFIG.staging;\n default:\n return CONFIG.dev;\n }\n}\n","export const ACCESS_TOKEN = 'access-token';\nexport const USER_PROFILE = 'user-profile';\nexport const URL_QUERY_STRING = 'url-query-string';\nexport const DISCOUNT_CODE = 'discount-code';\n","import { URL_QUERY_STRING } from \"./storage-keys\";\n\nexport const getItem = (key: string) => {\n return localStorage.getItem(key);\n};\n\nexport const setItem = (key: string, value: string): void => {\n localStorage.setItem(key, value);\n};\n\nexport const removeItem = (key: string): void => {\n localStorage.removeItem(key);\n};\n\nexport const getSiteCode = () => {\n const query = getItem(URL_QUERY_STRING);\n const url = new URLSearchParams(query ? query : '');\n const queryObject = Object.fromEntries(url);\n const siteCode = queryObject['site-code'] || 'th-profile';\n return siteCode;\n};","import axios from 'axios';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport env from 'utils/env';\nimport { setItem, removeItem, getSiteCode } from 'utils/local-storage';\nimport { ACCESS_TOKEN, DISCOUNT_CODE, URL_QUERY_STRING, USER_PROFILE } from 'utils/storage-keys';\n\nconst SESSION_KEY = 'sessionToken';\nconst SESSION_KEY_EXPIRY = 'sessionTokenExpiry';\n\ndeclare const window : any\n\nexport const loadSession = () => {\n const sessionToken = localStorage.getItem(SESSION_KEY);\n const sessionTokenExpiry = localStorage.getItem(SESSION_KEY_EXPIRY);\n\n if (isNil(sessionToken)) {\n return null;\n }\n\n if (isNil(sessionTokenExpiry)) {\n removeItem(SESSION_KEY);\n removeItem(SESSION_KEY_EXPIRY);\n removeItem(ACCESS_TOKEN);\n removeItem(USER_PROFILE);\n return null;\n }\n\n const expiredDate = Number.parseInt(sessionTokenExpiry.toString(), 10);\n if (expiredDate <= Date.now()) {\n removeItem(SESSION_KEY);\n removeItem(SESSION_KEY_EXPIRY);\n removeItem(ACCESS_TOKEN);\n removeItem(USER_PROFILE);\n return null;\n }\n\n return sessionToken;\n};\n\nconst useSession = () => {\n const [session, setSession] = React.useState(null);\n const [bootstrap, setBootstrap] = React.useState(true);\n const navigate = useNavigate();\n const siteCode = getSiteCode();\n\n React.useEffect(() => {\n const sessionToken = loadSession();\n setBootstrap(false);\n setSession(sessionToken);\n }, []);\n\n React.useEffect(()=> {\n async function getDiscountCode() {\n const config = env();\n const { data } = await axios.get(`${config.userServerApiUrl}/product-catalog/v1/site/${siteCode}/paywall?country=TH&language=th`);\n if (data?.name) {\n setItem(DISCOUNT_CODE, data.name);\n } else {\n setItem(DISCOUNT_CODE, 'THTEL');\n }\n }\n getDiscountCode();\n }, [siteCode]);\n\n const storeSession = React.useCallback(\n (sessionToken: string, expiry: Date) => {\n setItem(SESSION_KEY, sessionToken);\n setItem(SESSION_KEY_EXPIRY, expiry.getTime().toString());\n\n setSession(sessionToken);\n },\n []\n );\n\n const signOut = () => {\n removeItem(SESSION_KEY);\n removeItem(ACCESS_TOKEN);\n removeItem(URL_QUERY_STRING);\n removeItem(USER_PROFILE);\n setSession(null);\n navigate('/login');\n window.location.reload();\n };\n\n return {\n session,\n bootstrap,\n storeSession,\n signOut\n };\n};\n\nexport default useSession;\n","import type { Entitlements, Transactions } from 'utils/types';\nimport ComboThumb from 'assets/img/combo_ielts_thumb.jpg';\nimport Ielts6Thumb from 'assets/img/ielts-6-thumb.jpg';\nimport Ielts7Thumb from 'assets/img/ielts-7-thumb.jpg';\nimport Ielts9Thumb from 'assets/img/ielts-9-thumb.jpg';\nimport env from './env';\n\nexport const getCurrentSubscription = (entitlements: Entitlements) => {\n let membership = '';\n const code = entitlements.tier.code;\n const expireAt = entitlements.tier.expire_at;\n\n const getDuration = (transactions: Transactions[]) => {\n const latestTrans : Transactions[] = transactions.filter(item => item.catalog === 'elsa_speak' && item.status === 'granted').sort((a, b) => b.created_at - a.created_at);\n return latestTrans[0].duration;\n }\n\n if (code === 'pro') {\n if (expireAt === null) {\n membership = 'lifetime_membership'\n const isConversationBundle = entitlements.transactions.map(item => item.catalog === 'ai_role_play_sa' && item.status === 'granted');\n if (isConversationBundle.length) {\n membership = 'lifetime_membership_ai_role_play_sa';\n }\n } else {\n const duration = getDuration(entitlements.transactions);\n membership = `${duration}_credit`;\n }\n } else if (code === 'premium') {\n const duration = getDuration(entitlements.transactions);\n membership = `${duration}_credit_premium`;\n } else if (code === 'free') {\n membership = 'free';\n }\n\n return membership;\n}\n\nexport const bookMapping = (book: string) => {\n const bookList: { [key: string]: string } = {\n lifetime_membership_harcoltoeic: 'book_1_lifetime_toeic_hpc',\n lifetime_membership_harcoltoefl: 'book_2_lifetime_toefl_hpc',\n lifetime_membership_harcolielts1: 'book_3_lifetime_ready_ielts_hpc',\n lifetime_membership_harcolielts2: 'book_4_lifetime_speaking_ielts_hpc',\n lifetime_membership_harpercollins_full_course: 'hpc_all_books',\n lifetime_membership_ielts6: 'ielts_band_6',\n lifetime_membership_ielts7: 'ielts_band_7',\n lifetime_membership_ielts9: 'ielts_band_9',\n lifetime_membership_ielts_band_679: 'combo_ielts_band_6_7_9',\n lifetime_membership_oxford_all_books: 'oxford_all_books',\n lifetime_membership_oxford_starter: 'oxford_starter',\n lifetime_membership_oxford_elementary: 'oxford_elementary',\n lifetime_membership_oxford_pre_intermediate: 'oxford_pre_intermediate',\n lifetime_membership_oxford_intermediate: 'oxford_intermediate',\n lifetime_membership_oxford_upper_intermediate: 'oxford_upper_intermediate',\n lifetime_membership_oxford_advanced: 'oxford_advanced',\n };\n\n if(bookList.hasOwnProperty(book)) \n return bookList[book];\n \n return \"\";\n};\n\nexport const bookImage = (book: string) => {\n const config = env();\n\n const bookImage:{ [key: string]: string } = {\n oxford_all_books: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_all_books.jpeg',\n oxford_starter: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_starter.jpeg',\n oxford_elementary: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_elementary.jpeg',\n oxford_pre_intermediate: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_pre_intermediate.jpeg',\n oxford_intermediate: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_intermediate.jpeg',\n oxford_upper_intermediate: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_upper_intermediate.jpeg',\n oxford_advanced: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/book-oxford/oxford_advanced.jpeg',\n hpc_all_books: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/harper-collins/hpc_all_books.jpg',\n book_4_lifetime_speaking_ielts_hpc: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/harper-collins/hpc_book_4.jpg',\n book_3_lifetime_ready_ielts_hpc: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/harper-collins/hpc_book_3.jpg',\n book_2_lifetime_toefl_hpc: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/harper-collins/hpc_book_2.jpg',\n book_1_lifetime_toeic_hpc: config.internalApiUrl + '/wp-content/themes/theme-user/assets/images/harper-collins/hpc_book_1.jpg',\n combo_ielts_band_6_7_9: ComboThumb,\n ielts_band_6: Ielts6Thumb,\n ielts_band_7: Ielts7Thumb,\n ielts_band_9: Ielts9Thumb,\n };\n\n if(bookImage.hasOwnProperty(book)) \n return bookImage[book];\n \n return \"\";\n}","export default __webpack_public_path__ + \"static/media/combo_ielts_thumb.dd687baa.jpg\";","export default __webpack_public_path__ + \"static/media/ielts-6-thumb.d1121cf7.jpg\";","export default __webpack_public_path__ + \"static/media/ielts-7-thumb.3e03f93e.jpg\";","export default __webpack_public_path__ + \"static/media/ielts-9-thumb.7d5d0c82.jpg\";","import type { Entitlements } from 'utils/types';\nimport useSession from 'hooks/useSession';\nimport { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { createContainer } from 'unstated-next';\nimport env from 'utils/env';\nimport axios from 'axios';\nimport { Benefit } from 'pages/dashboard/course/blocks/PackageBenefit';\nimport { bookImage, bookMapping } from 'utils/helpers';\n\nexport type Book = {\n membership: string;\n thumbnail: string;\n name: string;\n base_price: number;\n discount_price: number;\n discount_percent: number;\n is_featured: boolean;\n meta: {\n lesson: number,\n unit: number,\n book?: number,\n level?: string,\n include?: string[]\n }\n}\n\ntype CatalogVariant = {\n base_price: number;\n price: number;\n discount_percent: number;\n interface: {\n package: string;\n package_name: string;\n is_featured: boolean;\n };\n};\n\ntype CatalogResponse = {\n code: string;\n name: string;\n photo_url: string;\n metadata: {\n lesson: number,\n unit: number,\n book?: number,\n level?: string,\n };\n benefits: Benefit[];\n variants: CatalogVariant[];\n};\n\nconst useGlobalStore = () => {\n const { session, bootstrap, storeSession, signOut } = useSession();\n const [isNavOpened, setIsNavOpened] = useState(false);\n const currentSessionLanguage = sessionStorage.getItem('i18nextLng') || 'vi';\n const [currentLanguage, setCurrentLanguage] = useState(currentSessionLanguage);\n const [entitlements, setEntitlements] = useState();\n const [bookData, setBookData] = useState<{[key: string]: Book[]}>({\n oxford: [],\n harper: [],\n ielts: [],\n });\n const navigate = useNavigate();\n \n const toggleNav = () => setIsNavOpened(!isNavOpened);\n \n const switchLanguage = (code: string) => {\n navigate('/');\n if (code === 'vi') {\n setCurrentLanguage('vi');\n } else if (code === 'en') {\n setCurrentLanguage('en');\n };\n };\n\n useEffect( () => {\n async function getUserTier() {\n if (session) {\n const config = env();\n const { data } = await axios.get(\n `${config.userServerApiUrl}/entitlement/api/v1/user/entitlements?encrypt=false`,\n {\n headers: {\n 'x-session-token': session\n }\n }\n );\n if (data) {\n setEntitlements(data);\n }\n }\n }\n\n getUserTier();\n }, [session] );\n\n useEffect(()=> {\n async function fetchData() {\n const config = env();\n const { data } = await axios.get(\n `${config.baseApiUrl}/product-catalog/v1/site/th-profile/paywall?country=TH`\n );\n if(data.catalogs) {\n const oxford : Book[] = [];\n const harper : Book[] = [];\n const ielts : Book[] = [];\n const catalogs: CatalogResponse[] = data.catalogs;\n catalogs.forEach(catalog => {\n const code = catalog.code;\n const variant = catalog.variants;\n const isOxford = code.includes('oxford');\n const isHarper = code.includes('harcol') || code.includes('harpercollins');\n const isIelts = code.includes('ielts');\n const isBook = isOxford || isHarper || isIelts;\n\n if( !isBook ) return;\n const membership = bookMapping(variant[0].interface.package);\n const bookItem: Book = {\n membership,\n name: variant[0].interface.package_name,\n base_price: variant[0].base_price,\n discount_price: variant[0].price,\n discount_percent: variant[0].discount_percent,\n is_featured: variant[0].interface.is_featured,\n thumbnail: bookImage(membership),\n meta: catalog.metadata\n };\n if( isOxford ) {\n if(bookItem.is_featured) {\n oxford.unshift(bookItem);\n } else {\n oxford.push(bookItem)\n }\n } else if ( isHarper ) {\n if(bookItem.is_featured) {\n harper.unshift(bookItem);\n } else {\n harper.push(bookItem)\n }\n } else if ( isIelts ) {\n if(bookItem.is_featured) {\n ielts.unshift(bookItem);\n } else {\n ielts.push(bookItem)\n }\n }\n });\n // Update meta for Harper All Book and IELTS All Book\n if(harper.length) {\n harper[0].meta.include = []\n harper.forEach((item, index) => {\n if(index !== 0) {\n harper[0].meta.include?.push(item.name);\n }\n })\n }\n\n if(ielts.length) {\n ielts[0].meta.include = []\n ielts.forEach((item, index) => {\n if(index !== 0) {\n ielts[0].meta.include?.push(item.name);\n }\n })\n }\n\n setBookData({\n oxford,\n harper,\n ielts\n });\n }\n }\n // fetchData();\n }, [])\n\n return {\n session,\n bootstrap,\n storeSession,\n signOut,\n isNavOpened,\n toggleNav,\n currentLanguage,\n switchLanguage,\n entitlements,\n bookData\n };\n};\n\nconst GlobalStore = createContainer(useGlobalStore);\nexport default GlobalStore;\n","import { isEmpty } from 'lodash';\nimport React from 'react';\nimport { Navigate } from 'react-router-dom';\nimport GlobalStore from 'stores/globalStore';\nimport { setItem } from 'utils/local-storage';\nimport { URL_QUERY_STRING } from 'utils/storage-keys';\n\nfunction withSession(WrappedComponent: React.ComponentType) {\n const Wrapped: React.FC = (props) => {\n const { session, bootstrap } = GlobalStore.useContainer();\n\n const search = window.location.search;\n if (search && search.trim() !== '') {\n setItem(URL_QUERY_STRING, search);\n }\n\n if (!bootstrap && isEmpty(session)) {\n return ;\n }\n\n return ;\n };\n\n return Wrapped;\n}\n\nexport default withSession;\n","export default __webpack_public_path__ + \"static/media/Logo.6df9917f.svg\";","import React, { useEffect, useState } from 'react';\nimport {\n Avatar,\n Space,\n Modal,\n Button,\n Upload,\n UploadProps,\n message,\n Image,\n Dropdown,\n Menu\n} from 'antd';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { EditOutlined, EyeOutlined, UploadOutlined } from '@ant-design/icons';\nimport axios from 'axios';\nimport env from 'utils/env';\nimport { getItem } from 'utils/local-storage';\nimport './UserImageProfile.css';\n\nconst UserImageProfile: React.FC = () => {\n const [image, setImage] = useState('');\n const [file, setFile] = useState('');\n const [fileList, setFileList] = useState([]);\n const [isModalVisible, setIsModalVisible] = useState(false);\n const [isPreviewVisible, setIsPreviewVisible] = useState(false);\n const [loading, setLoading] = useState(false);\n const handleOk = () => {\n if (file !== '') {\n setLoading(true);\n const token = getItem('sessionToken');\n if (!token) return;\n const config = {\n headers: {\n 'content-type': 'multipart/form-data',\n 'x-session-token': token\n }\n };\n const fmData = new FormData();\n fmData.append('picture', file);\n axios\n .post(`${env().userServerApiUrl}/user/api/v1/picture`, fmData, config)\n .then((res) => {\n if (typeof file === 'object') {\n const imageObjectURL = URL.createObjectURL(file);\n setImage(imageObjectURL);\n }\n setFile('');\n setFileList([]);\n setIsModalVisible(false);\n setLoading(false);\n })\n .catch((err) => {\n message.error(err.message);\n setFile('');\n setFileList([]);\n setIsModalVisible(false);\n setLoading(false);\n });\n } else {\n setIsModalVisible(false);\n setFile('');\n setFileList([]);\n setIsModalVisible(false);\n setLoading(false);\n }\n };\n\n const handleCancel = () => {\n setFileList([]);\n setFile('');\n setIsModalVisible(false);\n };\n\n const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) =>\n setFileList(newFileList);\n\n const handleSubmit: UploadProps['customRequest'] = (options) => {\n const { onSuccess, onProgress, onError, file } = options;\n if (typeof file === 'object' && file.size > 2000000) {\n if (onError) {\n const error = new Error(\n 'The file is too big. Maximum file size is 2MB.'\n );\n onError(error);\n message.error('The file is too big. Maximum file size is 2MB.');\n }\n } else {\n if (onProgress) {\n setFile(file);\n onProgress({ percent: 50 });\n }\n if (onSuccess) {\n setTimeout(() => {\n onSuccess('ok');\n }, 1000);\n }\n }\n };\n\n useEffect(() => {\n const token = getItem('sessionToken');\n if (!token) return;\n axios\n .get(`${env().userServerApiUrl}/user/api/v1/picture`, {\n headers: {\n 'x-session-token': token\n },\n responseType: 'blob'\n })\n .then((res) => {\n const imgBlob = res.data;\n const imageObjectURL = URL.createObjectURL(imgBlob);\n setImage(imageObjectURL);\n })\n .catch((err) => {\n console.log('error', err);\n });\n }, []);\n\n const menu = (\n \n setIsPreviewVisible(true)}>\n \n \n Xem ảnh đại diện\n \n \n setIsModalVisible(true)}>\n \n \n Cập nhật ảnh đại diện\n \n \n \n );\n\n return (\n
\n \n }\n />\n \n {\n setIsPreviewVisible(value);\n }\n }}\n />\n \n Cancel\n ,\n \n Save\n \n ]}\n >\n \n {fileList.length === 0 && (\n \n \n

Upload your image

\n
\n )}\n \n \n
\n );\n};\n\nexport default UserImageProfile;\n","import React from 'react';\n\nexport type CartItemProps = {\n membership: string;\n name: string;\n price: number;\n amount: number;\n};\n\nexport type CartContextType = {\n items: CartItemProps[],\n totalAmount: number,\n membershipString: string,\n addItem?: (item: CartItemProps) => void,\n removeItem?: (id: string) => void,\n emptyCart?: () => void\n}\n\nconst CartContext = React.createContext({\n items: [],\n totalAmount: 0,\n membershipString: ''\n});\n\nexport default CartContext;\n","import { MinusOutlined, PlusOutlined } from '@ant-design/icons';\nimport React from 'react';\nimport { CartItemProps } from 'stores/cart-context';\nimport './CartItem.css';\n\ninterface Props {\n item: CartItemProps;\n onAdd: () => void;\n onRemove: () => void;\n};\n\nconst CartItem: React.FC = ({ item, onAdd, onRemove }) => {\n const formatPrice = (item.price * item.amount).toLocaleString('it-IT');\n\n return (\n
  • \n

    {item.name}

    \n
    \n
    \n \n x{item.amount}\n \n
    \n
    {formatPrice} บาท
    \n
    \n
  • \n )\n}\n\nexport default CartItem","import { getItem } from 'utils/local-storage';\nimport { DISCOUNT_CODE, URL_QUERY_STRING } from 'utils/storage-keys';\nimport { message } from 'antd';\nimport GlobalStore from 'stores/globalStore';\nimport { getCurrentSubscription } from 'utils/helpers';\n\ntype UTMSource = {\n utm_source?: string;\n utm_content?: string;\n utm_term?: string;\n utm_medium?: string;\n utm_campaign?: string;\n placement?: string;\n};\n\ntype UpgradeOption = {\n site_code: string;\n session_token: string;\n unused_money: number;\n is_upgrade: boolean;\n user_id: string;\n};\n\nconst useSaveLead = () => {\n const { entitlements } = GlobalStore.useContainer();\n\n const getUTM = () => {\n const href = getItem(URL_QUERY_STRING);\n const url = new URLSearchParams(href ? href : '');\n const utmObject = Object.fromEntries(url);\n const utmSource: UTMSource = {\n utm_source: utmObject['utm_source'] || '',\n utm_content: utmObject['utm_content'] || '',\n utm_term: utmObject['utm_term'] || '',\n utm_medium: utmObject['utm_medium'] || '',\n utm_campaign: utmObject['utm_campaign'] || '',\n placement: utmObject['placement'] || ''\n };\n return utmSource;\n };\n\n const isPhoneValid = (number: string) => {\n return /^(\\+66|0)\\d{9}$/.test(number);\n };\n\n const getDateOfBirth = (date: string) => {\n // 2006-10-25\n if (!date || date.length !== 10) {\n return '';\n }\n return date.slice(8, 10) + '/' + date.slice(5, 7) + '/' + date.slice(0, 4);\n };\n\n const saveLead = (profileObject: any, membershipString = 'lifetime_membership', tracking?: UTMSource, upgradeOption?: UpgradeOption) => {\n let discount_code = 'VNTEL';\n if (!entitlements) {\n return;\n }\n const currentPackages = getCurrentSubscription(entitlements);\n discount_code = currentPackages === 'one_year_credit'\n ? 'THEXT1Y'\n : currentPackages === 'three_months_credit'\n ? 'THEXT3M'\n : currentPackages === 'six_months_credit'\n ? 'THEXT6M'\n : 'THTEL';\n\n const utm = getUTM();\n\n const formdata: any = {\n fullname: profileObject?.data?.username,\n phone: profileObject?.data?.phone,\n email: profileObject?.data?.email || 'crm@elsanow.io',\n membership: membershipString,\n lead_source: 'subscribes',\n DOB: getDateOfBirth(profileObject?.data?.date_of_birth),\n Street: profileObject?.data?.address,\n old_package: currentPackages || 'free',\n discount_code: discount_code,\n utm_source: tracking?.utm_source ? tracking.utm_source : utm.utm_source,\n utm_medium: tracking?.utm_medium ? tracking.utm_medium : utm.utm_medium,\n utm_content: utm.utm_content,\n utm_campaign: utm.utm_campaign,\n utm_term: utm.utm_term,\n search: `?placement=${tracking?.placement ? tracking.placement : ''}`,\n 'referrer-url': window.location.origin + window.location.pathname\n };\n\n if(upgradeOption) {\n Object.assign(formdata, upgradeOption);\n const discountCode = getItem(DISCOUNT_CODE) || 'THTEL';\n formdata.discount_code = discountCode === 'VNKOLUPBF' ? discountCode + 'TH' : discountCode;\n formdata.search = \"?placement=Upgrade\";\n const utmMedium = membershipString.includes('premium') ? 'Premium-subscribes' : 'Subscribes';\n formdata.utm_medium = formdata.utm_medium || utmMedium;\n }\n\n if (!isPhoneValid(profileObject?.data?.phone)) {\n message.error('กรุณาใส่เบอร์โทรที่ถูกต้อง');\n } else if(!profileObject?.data?.username){\n message.error('กรุณากรอกชื่อของคุณ');\n } else {\n const form = document.createElement('form');\n form.method = 'POST';\n form.action = `${window.location.origin}/payment`;\n\n for (const key in formdata) {\n if (formdata.hasOwnProperty(key)) {\n const hiddenField = document.createElement('input');\n hiddenField.type = 'hidden';\n hiddenField.name = key;\n hiddenField.value = formdata[key];\n\n form.appendChild(hiddenField);\n }\n }\n\n document.body.appendChild(form);\n form.submit();\n }\n }\n return { saveLead };\n};\n\nexport default useSaveLead;\n","/* eslint-disable import/prefer-default-export */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from 'axios';\nimport { get, isString } from 'lodash';\nimport env from 'utils/env';\n\ninterface BaseResponse {\n data: T | null;\n statusCode: number;\n error: boolean;\n errorMessage?: string;\n}\n\nfunction handleError(err: any) {\n const status = get(err, 'response.status') as number;\n const data = get(err, 'response.data');\n\n if (status >= 500) {\n throw new Error('Server Error');\n }\n\n let errorMessage = get(data, 'detail', `Unknown Error: ${status}`);\n if (!isString(errorMessage)) {\n errorMessage = 'Bad Request';\n }\n\n return {\n data: null,\n statusCode: status,\n errorMessage,\n error: true\n };\n}\n\nexport async function doPost(\n url: string,\n body: Body,\n headers: any = {}\n): Promise> {\n try {\n const { data, status } = await axios.post(url, body, {\n headers: {\n ...headers\n }\n });\n\n return {\n error: false,\n data,\n statusCode: status\n };\n } catch (err) {\n return handleError(err);\n }\n}\n\nexport async function doGet(\n url: string,\n query: Query,\n headers: any = {}\n): Promise> {\n try {\n const config = env();\n const { data, status } = await axios.get(\n `${config.userServerApiUrl}/user/${url}`,\n {\n data: query,\n headers: {\n ...headers\n }\n }\n );\n\n return {\n error: false,\n data,\n statusCode: status\n };\n } catch (err) {\n return handleError(err);\n }\n}\n\nexport async function doGetClubsServer(\n url: string,\n query: Query,\n headers: any = {}\n): Promise> {\n try {\n const config = env();\n const { data, status } = await axios.get(\n `${config.baseApiUrl}/${url}`,\n {\n data: query,\n headers: {\n ...headers,\n },\n }\n );\n\n return {\n error: false,\n data,\n statusCode: status,\n };\n } catch (err) {\n return handleError(err);\n }\n}\n\nexport async function doPostForm(\n url: string,\n formData: FormData,\n headers: any = {}\n): Promise> {\n try {\n const config = env();\n\n const { data, status } = await axios({\n method: 'post',\n url: `${config.userServerApiUrl}/user/${url}`,\n data: formData,\n headers: {\n ...headers,\n 'Content-Type': 'multipart/form-data'\n }\n });\n\n return {\n error: false,\n data,\n statusCode: status\n };\n } catch (err) {\n return handleError(err);\n }\n}\n\nexport async function doDelete(\n url: string,\n query: Query,\n headers: any = {}\n): Promise> {\n try {\n const config = env();\n const { data, status } = await axios.delete(\n `${config.userServerApiUrl}/user/${url}`,\n {\n data: query,\n headers: {\n ...headers\n }\n }\n );\n\n return {\n error: false,\n data,\n statusCode: status\n };\n } catch (err) {\n return handleError(err);\n }\n}\n\nexport async function doUpdateUserProfile(\n url: string,\n formData: {},\n headers: any = {}\n): Promise> {\n try {\n const { data, status } = await axios({\n method: 'patch',\n url: url,\n data: JSON.stringify(formData),\n headers: {\n ...headers,\n 'Content-Type': 'application/json'\n }\n });\n\n return {\n error: false,\n data,\n statusCode: status\n };\n } catch (err) {\n return handleError(err);\n }\n}\n","import { doGet, doUpdateUserProfile } from './common';\nimport env from 'utils/env';\nimport { getItem } from 'utils/local-storage';\nimport { ACCESS_TOKEN } from 'utils/storage-keys';\n\nexport async function updateUserApi(\n username: string,\n password: string,\n new_password: string,\n phone: string,\n date_of_birth: string,\n address: string\n) {\n const config = env();\n const url = `${config.userServerApiUrl}/user/api/v1/account`;\n return doUpdateUserProfile(\n url,\n {\n username,\n password,\n new_password,\n phone,\n date_of_birth,\n address\n },\n {\n 'X-Session-Token': getItem(ACCESS_TOKEN)\n }\n );\n}\n\nexport async function getUserProfile(accessToken: string | null) {\n const url = `api/v1/account`;\n if (accessToken) {\n return doGet(\n url,\n {},\n {\n 'X-Session-Token': accessToken\n }\n );\n }\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nexport type PromiseCall = (...args: any[]) => Promise;\n\nconst useAsync = (\n asyncFunction: PromiseCall,\n immediate = true\n) => {\n const [status, setStatus] = useState<\n \"idle\" | \"pending\" | \"success\" | \"error\"\n >(\"idle\");\n const [value, setValue] = useState(null);\n const [error, setError] = useState(null);\n\n const execute = useCallback(\n async (...args: any[]) => {\n setStatus(\"pending\");\n setValue(null);\n setError(null);\n try {\n const response = await asyncFunction(...args);\n setValue(response);\n setStatus(\"success\");\n } catch (err: any) {\n setError(err.message);\n setStatus(\"error\");\n }\n },\n [asyncFunction]\n );\n\n useEffect(() => {\n if (immediate) {\n execute();\n }\n }, [execute, immediate]);\n\n return { execute, status, value, error };\n};\n\nexport default useAsync;\n","import { updateUserApi, getUserProfile } from 'apis/userApi';\nimport useAsync from 'hooks/base/useAsync';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { message } from 'antd';\nimport GlobalStore from 'stores/globalStore';\nimport { useTranslation } from 'react-i18next';\n\ninterface UserUpdateParam {\n username: string;\n password?: string;\n new_password?: string;\n phone: string;\n address: string;\n date_of_birth: string;\n}\ninterface TokenParam {\n token: string;\n}\n\nexport const useUpdateUserApi = () => {\n const { status, execute, value } = useAsync(updateUserApi, false);\n\n const update = React.useCallback(\n ({\n username,\n password,\n new_password,\n phone,\n date_of_birth,\n address\n }: UserUpdateParam) => {\n execute(username, password, new_password, phone, date_of_birth, address);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n console.log(value)\n message.error(value.errorMessage);\n return;\n }\n\n if (isNil(value.data)) {\n // message.warn('Empty Body');\n return;\n }\n\n // message.success('Cập nhật thành công');\n window.location.href = ('/user');\n }, [value]);\n\n return {\n isLoading: status === 'pending',\n update,\n response: value\n };\n};\n\nexport const useGetUserProfileApi = () => {\n const { status, execute, value } = useAsync(getUserProfile, false);\n const { session, signOut } = GlobalStore.useContainer();\n const { t } = useTranslation();\n React.useEffect(() => {\n execute(session);\n }, [execute, session]);\n\n const getUserProfileApi = React.useCallback(\n (params: TokenParam) => {\n execute(params.token);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n switch(value.statusCode) {\n case 400:\n message.error(t('update.status_400'));\n break;\n case 401:\n message.error(t('update.status_401'));\n signOut();\n break;\n case 500:\n message.error(t('update.status_500'));\n break;\n }\n return;\n }\n }, [value, t, signOut]);\n\n return {\n isLoading: status === 'pending',\n getUserProfileApi,\n profileObject: value\n };\n};\n","import React from 'react';\nimport { CartItemProps } from '../stores/cart-context';\n\nconst useBuildMembership = () => {\n\n const buildMembership = React.useCallback((products: CartItemProps[]) => {\n let memOrderString = '';\n if (products.length === 1) {\n if (products[0].amount === 1) {\n return products[0].membership;\n }\n }\n products.map(item => {\n return memOrderString += memOrderString ? ` and ${item.amount} x ${item.membership}` : `${item.amount} x ${item.membership}`;\n });\n return memOrderString\n }, []);\n\n return {\n buildMembership\n }\n};\n\nexport default useBuildMembership;","import React, { useState, useContext } from 'react';\nimport { Badge, Dropdown } from 'antd';\nimport { LoadingOutlined, ShoppingCartOutlined, WarningOutlined } from '@ant-design/icons';\nimport CartContext, { CartItemProps } from 'stores/cart-context';\nimport CartItem from './CartItem';\nimport './Cart.css';\nimport useSaveLead from 'hooks/useSaveLead';\nimport { useGetUserProfileApi } from 'pages/dashboard/user/useUserApi';\nimport useBuildMembership from 'hooks/useBuildMembership';\nimport { useTranslation } from 'react-i18next';\n\nconst Cart: React.FC = () => {\n const [visible, setVisible] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const { saveLead } = useSaveLead();\n const { profileObject } = useGetUserProfileApi();\n const { items, totalAmount, addItem, removeItem } = useContext(CartContext);\n const { buildMembership } = useBuildMembership();\n const { t } = useTranslation();\n\n const addItemToCartHandler = (item: CartItemProps) => {\n if (addItem) {\n addItem(item)\n }\n };\n \n const deleteItemFromCartHandler = (memebership: string) => {\n if (removeItem) {\n removeItem(memebership);\n }\n };\n \n const saveLeadHandler = () => {\n const membership = buildMembership(items);\n try {\n setIsLoading(true);\n saveLead(profileObject, membership);\n } catch(e) {\n setIsLoading(false);\n }\n };\n\n const handleVisibleChange = (flag: boolean) => {\n setVisible(flag);\n }\n\n const menu = (\n
    \n {items.length > 0 && (\n
      \n {items.map(item => (\n \n ))}\n
    \n )}\n {items.length === 0 &&

    {t('cart.empty_cart')}

    }\n {items.length > 0 && (\n
    \n {t('cart.total')}: {totalAmount.toLocaleString('it-IT')} บาท\n
    \n \n {t('cart.payment')}\n {isLoading && }\n \n
    \n
    \n )}\n
    \n );\n \n return (\n \n \n \n )\n}\n\nexport default Cart;\n","import Logo from 'assets/img/Logo.svg';\nimport React, { useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport UserImageProfile from '../user/UserImageProfile';\nimport GlobalStore from 'stores/globalStore';\nimport CartContext from 'stores/cart-context';\nimport Cart from '../Cart/Cart';\nimport './Header.css';\nimport { useTranslation } from 'react-i18next';\n// import LanguageSwitcher from './LanguageSwitcher';\n\nconst Header: React.FC = () => {\n const { isNavOpened, toggleNav, signOut } = GlobalStore.useContainer();\n const { t } = useTranslation();\n const cartCtx = useContext(CartContext);\n\n const handleNavToggle = () => {\n toggleNav();\n };\n\n const logOutHandler = () => {\n if (cartCtx.emptyCart) {\n cartCtx.emptyCart();\n }\n signOut();\n };\n\n return (\n
    \n
    \n
    \n \n \"ELSA\"\n \n
    \n\n
    \n
    \n \n {t('logout')}\n \n
    \n\n \n
    \n \n
    \n\n {/* */}\n \n \n
    \n
    \n
    \n );\n};\n\nexport default Header;\n","export default __webpack_public_path__ + \"static/media/icon-elsa.10cba4d0.svg\";","export default __webpack_public_path__ + \"static/media/icon-redeem.37eba09f.svg\";","export default __webpack_public_path__ + \"static/media/icon-logout.9b56c80e.svg\";","export default __webpack_public_path__ + \"static/media/icon-upgrade.926b2bab.svg\";","import IconElsa from 'assets/img/icon-elsa.svg';\n// import IconCourse from 'assets/img/icon-course.svg';\n// import IconBill from 'assets/img/icon-bill.svg';\nimport IconRedeem from 'assets/img/icon-redeem.svg';\nimport IconLogout from 'assets/img/icon-logout.svg';\nimport IconUpgrade from 'assets/img/icon-upgrade.svg';\nimport React, { useEffect } from 'react';\nimport { UserOutlined } from '@ant-design/icons';\nimport { Link, useLocation} from 'react-router-dom';\nimport { Menu } from 'antd';\nimport UserImageProfile from 'components/user/UserImageProfile';\nimport GlobalStore from 'stores/globalStore';\nimport { removeItem } from 'utils/local-storage';\nimport { URL_QUERY_STRING } from 'utils/storage-keys';\nimport { useTranslation } from 'react-i18next';\nimport { useGetUserProfileApi } from 'pages/dashboard/user/useUserApi';\n\nconst Sidebar: React.FC = () => {\n const { profileObject } = useGetUserProfileApi();\n const { t } = useTranslation();\n const { signOut, isNavOpened, toggleNav, entitlements, bookData } = GlobalStore.useContainer();\n const [selectedMenuItem, setSelectedMenuItem] =\n React.useState('profile');\n const { SubMenu } = Menu;\n const location = useLocation().pathname;\n const isNova = profileObject?.data?.nova_mode;\n \n const locationActive = location.slice(location.lastIndexOf('/') + 1);\n \n const handleMenuClick = (e: any) => {\n if (e.key === 'SignOut') {\n signOut();\n removeItem(URL_QUERY_STRING);\n }\n setSelectedMenuItem(e.key);\n toggleNav();\n };\n useEffect(() => {\n setSelectedMenuItem(locationActive);\n }, [locationActive]);\n\n return (\n \n );\n};\n\nexport default Sidebar;\n\n","import React from 'react';\nimport { Layout } from 'antd';\nimport withSession from 'hoc/withSession';\nimport { Outlet, useLocation } from 'react-router-dom';\nimport Header from '../../components/Header/Header';\nimport Sidebar from '../../components/Sidebar/Sidebar';\nimport './dashboard.css';\n\nconst Dashboard: React.FC = () => {\n const location = useLocation();\n\n return (\n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n );\n};\n\nexport default withSession(Dashboard);\n","export default __webpack_public_path__ + \"static/media/comparison-nova.8363fa8f.jpg\";","export default __webpack_public_path__ + \"static/media/comparison-nova-sm.cdf13427.jpg\";","import React from 'react';\nimport ImgComparison from 'assets/img/premium/comparison.jpg';\nimport ImgComparisonSM from 'assets/img/premium/comparison-sm.jpg';\nimport ImgComparisonNova from 'assets/img/premium/comparison-nova.jpg';\nimport ImgComparisonNovaSM from 'assets/img/premium/comparison-nova-sm.jpg';\nimport './FreePremium.css';\nimport { Link } from 'react-router-dom';\n\ntype Props = {\n isNova?: boolean;\n tier?: string;\n};\n\nconst FreePremium: React.FC = ({isNova = true, tier = 'free'}) => {\n return (\n <>\n

    อัปเกรดELSA Premium เวอร์ชั่นใหม่ล่าสุด
    เพื่อเข้าถึงทุกฟีเจอร์และพัฒนาทักษะภาษาอังกฤษของคุณอย่างรวดเร็ว!

    \n
    \n
    \n
    \n \n \n \"Comparison\"\n \n
    \n\n
    \n

    สัมผัสประสบการณ์ ELSA เวอร์ชั่นใหม่ล่าสุด

    \n

    สนทนาโดยตรงกับ AI

    \n ลงทะเบียนทันที\n
    \n
    \n
    \n \n );\n}\n\nexport default FreePremium;\n","export default __webpack_public_path__ + \"static/media/open-app-qr.d7c558c8.jpg\";","import './Loading.css';\n\nfunction Loading({ color = '#fff', size = 13 }) {\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n )\n}\n\nexport default Loading;\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { EditOutlined } from \"@ant-design/icons\";\nimport { Link } from \"react-router-dom\";\nimport { useGetUserProfileApi } from \"./useUserApi\";\nimport { getItem } from \"utils/local-storage\";\nimport { useTranslation } from \"react-i18next\";\nimport GlobalStore from \"stores/globalStore\";\nimport FreePremium from \"components/user/dashboard/FreePremium\";\nimport QR from \"../../../assets/img/open-app-qr.jpg\";\nimport \"./profileUser.css\";\nimport { Row } from \"antd\";\nimport Loading from \"components/Loading/Loading\";\n\nconst ProfileUser: React.FC = () => {\n const { profileObject, isLoading } = useGetUserProfileApi();\n const { t } = useTranslation();\n const { currentLanguage, entitlements } = GlobalStore.useContainer();\n const isProLifetime = entitlements?.tier?.code !== \"free\" && !entitlements?.tier?.expire_at;\n const isConversationBundle = entitlements?.transactions ? entitlements.transactions.filter((item) => item.catalog === \"ai_role_play_sa\") : [];\n const isNova = profileObject?.data?.nova_mode;\n\n const formatDateOfBirth = (inputDate: string) => {\n if (inputDate) {\n var date = new Date(inputDate);\n if (!isNaN(date.getTime())) {\n return date.getDate() + \"/\" + +(date.getMonth() + 1) + \"/\" + date.getFullYear();\n }\n } else {\n return \"--\";\n }\n };\n\n return (\n
    \n {currentLanguage === \"vi\" ? (\n \n บัญชี ELSA Speak\n \n \n ) : (\n \n User Account - ELSA Speak\n \n \n )}\n

    {t(\"homepage.page_title\")}

    \n {isLoading ? (\n \n \n \n ) : (\n
    \n
    \n

    \n {t(\"profile.account_info\")}\n \n \n \n

    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {t(\"profile.user_name\")}{profileObject?.data?.username}
    {t(\"profile.phone_number\")}{profileObject?.data?.phone}
    {t(\"profile.email\")}{getItem(\"email-login\")}
    {t(\"profile.date_of_birth\")}{formatDateOfBirth(profileObject?.data?.date_of_birth)}
    {t(\"profile.address\")}{profileObject?.data?.address || \"--\"}
    \n
    \n\n
    \n {entitlements?.tier?.code !== \"free\" && (\n
    \n
    \n
    \n {entitlements?.tier && (\n
    \n แพคเกจการเรียนตอนนี้: ELSA {entitlements?.tier?.code[0].toUpperCase() + entitlements?.tier?.code.slice(1)}\n
    \n {isProLifetime ? (\n <>\n {t(\"packages.using_unlimited\")}\n {isConversationBundle.length ?

    {t(\"and\")} Conversation Bundle: ELSA AI & Speech Analyzer

    : \"\"}\n \n ) : (\n

    \n {t(\"courses.expired_date\")}:{\" \" + new Date(entitlements?.tier.expire_at * 1000).toLocaleDateString(\"en-GB\")}\n

    \n )}\n
    \n
    \n )}\n
    \n
    \n
    \n )}\n {entitlements?.tier?.code !== \"premium\" || !isNova ? (\n \n ) : (\n
    \n

    สแกนรหัส QR เพื่อเปิดแอปและเริ่มฝึกซ้อมได้ทันที!

    \n \"\"\n
    \n )}\n
    \n
    \n )}\n
    \n );\n};\n\nexport default ProfileUser;\n","import axios, { AxiosResponse, AxiosError } from 'axios';\nimport env from 'utils/env';\nimport { getItem } from 'utils/local-storage';\nimport { ACCESS_TOKEN } from 'utils/storage-keys';\n\nconst config = env();\nconst BASE_URL = config.userServerApiUrl + '/user';\n\n// Define a custom error type for API errors\ninterface ApiError {\n message: string;\n status: number;\n}\n\n// Create a function to handle API errors\nconst handleApiError = (error: AxiosError): ApiError => {\n if (error.response) {\n return {\n message: error.response.data.message || 'An error occurred',\n status: error.response.status,\n };\n } else {\n return {\n message: 'An error occurred',\n status: 500,\n };\n }\n};\n\n// Create an instance of Axios with the base URL\nconst apiInstance = axios.create({\n baseURL: BASE_URL\n});\n\n// Define API methods\nconst useApiService = () => {\n const get = async (url: string): Promise => {\n try {\n const response: AxiosResponse = await apiInstance.get(url);\n return response.data;\n } catch (error: any) {\n throw handleApiError(error);\n }\n };\n\n const post = async (url: string, data: T): Promise => {\n try {\n const response: AxiosResponse = await apiInstance.post(url, data, {\n headers: {\n 'X-Session-Token': getItem(ACCESS_TOKEN) || ''\n }\n });\n return response.data;\n } catch (error: any) {\n throw handleApiError(error);\n }\n };\n\n const patch = async (url: string, data: T): Promise => {\n try {\n const response: AxiosResponse = await apiInstance.patch(url, data, {\n headers: {\n 'X-Session-Token': getItem(ACCESS_TOKEN) || ''\n }\n });\n return response.data;\n } catch (error: any) {\n throw handleApiError(error);\n }\n };\n\n return { get, post, patch };\n};\n\nexport default useApiService;\n","import React from 'react';\nimport { Input, Button, Form } from 'antd';\nimport { useNavigate } from 'react-router-dom';\nimport { message } from 'antd';\nimport { useTranslation } from 'react-i18next';\nimport { Helmet } from 'react-helmet';\nimport GlobalStore from 'stores/globalStore';\nimport useApiService from 'hooks/base/useAPIService';\n\nconst ChangePasswordUser: React.FC = () => {\n const [form] = Form.useForm();\n const navigate = useNavigate();\n const apiService = useApiService();\n const { t } = useTranslation();\n const { currentLanguage, signOut } = GlobalStore.useContainer();\n\n const onUpdatePassword = (values: any) => {\n const form = { ...values };\n const fetchData = async () => {\n try {\n const response: any = await apiService.patch('/api/v1/account', form);\n if (response?.message && response?.message.indexOf('updated') > -1) {\n message.success(t('update.change_password_success'));\n signOut();\n }\n } catch (error: any) {\n if (error.message && error.message.toLowerCase().indexOf('password must contain') > -1) {\n message.error(t('update.change_password_fail'));\n }\n }\n };\n\n fetchData();\n };\n\n return (\n
    \n {currentLanguage === 'vi' ? (\n Đổi mật khẩu đăng nhập ELSA Speak\n \n ) :\n \n Change Password - ELSA Speak\n \n }\n

    {t('profile.update_password')}

    \n \n \n \n \n \n \n \n ({\n validator(_, value) {\n if (!value || getFieldValue('new_password') === value) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error('Nhập lại mật khẩu không khớp')\n );\n }\n })\n ]}\n >\n \n \n\n
    \n navigate('/')}\n >\n {t('profile.cancel')}\n \n \n {t('profile.save_password')}\n \n
    \n \n
    \n );\n};\n\nexport default ChangePasswordUser;\n","import React from 'react';\nimport { Input, Button, Form, Select } from 'antd';\nimport 'pages/dashboard/user/changeProfileUser.css';\nimport { useNavigate } from 'react-router-dom';\nimport { useGetUserProfileApi, useUpdateUserApi } from './useUserApi';\nimport { useTranslation } from 'react-i18next';\nimport { Helmet } from 'react-helmet';\nimport GlobalStore from 'stores/globalStore';\n\ninterface dataForm {\n username: string;\n phone: string;\n date_of_birth: string;\n address: string;\n}\n\nconst ChangeProfileUser: React.FC = () => {\n const [form] = Form.useForm();\n const { Option } = Select;\n let navigate = useNavigate();\n const { update } = useUpdateUserApi();\n const { profileObject } = useGetUserProfileApi();\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n\n const onUpdateUser = (values: any) => {\n const dataForm: dataForm = {\n username: values.username,\n phone: values.phone,\n date_of_birth:\n values.birthyear + '-' + values.birthmonth + '-' + values.birthday,\n address: values.address\n };\n update(dataForm);\n };\n\n const getDateOfBirth = (date: string, part: string) => {\n // 2006-10-25\n if (!date || date.length !== 10) {\n return;\n }\n switch (part) {\n case 'day':\n return date.slice(8, 10);\n case 'month':\n return date.slice(5, 7);\n case 'year':\n return date.slice(0, 4);\n }\n };\n\n return (\n
    \n {currentLanguage === 'vi' ? (\n Sửa thông tin đăng nhập ELSA Speak\n \n ) :\n \n Profile Update - ELSA Speak\n \n }\n

    {t('profile.update_profile')}

    \n
    \n {profileObject && (\n \n \n \n \n\n \n \n \n\n \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n\n \n \n \n
    \n navigate('/')}\n >\n {t('profile.cancel')}\n \n \n {t('profile.save_profile')}\n \n
    \n \n )}\n
    \n
    \n );\n};\n\nexport default ChangeProfileUser;\n","export default __webpack_public_path__ + \"static/media/icon-lightning-circle.e231b8dd.svg\";","export default __webpack_public_path__ + \"static/media/icon-lessons.459d6166.svg\";","export default __webpack_public_path__ + \"static/media/icon-clock.67c21d24.svg\";","import { getItem } from \"utils/local-storage\";\nimport { ACCESS_TOKEN } from \"utils/storage-keys\";\nimport { doGet, doGetClubsServer } from \"./common\";\n\nexport async function getAchievement(accessToken: string | null) {\n const url = `api/v2/account/achievement`;\n if (accessToken) {\n return doGet(\n url,\n {},\n {\n 'X-Session-Token': accessToken\n }\n );\n }\n}\n\nexport async function getLeaderBoard(userId: string) {\n if (userId) {\n const url = `clubs-server/v1/leaderboards/global/${userId}`;\n const accessToken = getItem(ACCESS_TOKEN);\n if (accessToken) {\n return doGetClubsServer(\n url,\n {},\n {\n 'X-Session-Token': accessToken\n }\n );\n }\n }\n}\n\nexport async function getStateInformation(accessToken: string | null) {\n const url = `api/v2/account/state`;\n if (accessToken) {\n return doGet(\n url,\n {},\n {\n 'X-Session-Token': accessToken\n }\n );\n }\n}\n","import { getAchievement } from 'apis/scoringVoucherAPI';\nimport useAsync from 'hooks/base/useAsync';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport GlobalStore from 'stores/globalStore';\n\ninterface TokenParam {\n token: string;\n}\n\nconst ScoringGetAchievementApi = () => {\n const { status, execute, value } = useAsync(getAchievement, false);\n const { session } = GlobalStore.useContainer();\n const navigate = useNavigate();\n\n React.useEffect(() => {\n execute(session);\n }, [execute, session]);\n\n const scoringGetAchievementApi = React.useCallback(\n (params: TokenParam) => {\n execute(params.token);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n // message.error(value.errorMessage);\n return;\n }\n\n // message.success(\"Load achievement success\");\n }, [navigate, value]);\n\n return {\n isLoading: status === 'pending',\n scoringGetAchievementApi,\n achievement: value\n };\n};\n\nexport default ScoringGetAchievementApi;\n","import { getLeaderBoard } from 'apis/scoringVoucherAPI';\nimport useAsync from 'hooks/base/useAsync';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { getItem } from 'utils/local-storage';\nimport { USER_PROFILE } from 'utils/storage-keys';\n\ninterface TokenParam {\n token: string;\n}\n\nconst GetLeaderBoardApi = () => {\n const { status, execute, value } = useAsync(getLeaderBoard, false);\n const userProfile = !isNil(getItem(USER_PROFILE)) ? JSON.parse(getItem(USER_PROFILE) || '') : '';\n const navigate = useNavigate();\n\n React.useEffect(() => {\n execute(userProfile?.external_id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [execute]);\n\n const getLeaderBoardApi = React.useCallback(\n (params: TokenParam) => {\n execute(params.token);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n // message.error(value.errorMessage);\n return;\n }\n\n // message.success('Load lessons and minutes success');\n }, [navigate, value]);\n\n return {\n isLoading: status === 'pending',\n getLeaderBoardApi,\n leaderBoard: value\n };\n};\n\nexport default GetLeaderBoardApi;\n","import { getStateInformation } from 'apis/scoringVoucherAPI';\nimport useAsync from 'hooks/base/useAsync';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport GlobalStore from 'stores/globalStore';\n\ninterface TokenParam {\n token: string;\n}\n\nconst GetStateApi = () => {\n const { status, execute, value } = useAsync(getStateInformation, false);\n const { session } = GlobalStore.useContainer();\n const navigate = useNavigate();\n\n React.useEffect(() => {\n execute(session);\n }, [execute, session]);\n\n const getStateApi = React.useCallback(\n (params: TokenParam) => {\n execute(params.token);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n // message.error(value.errorMessage);\n return;\n }\n }, [navigate, value]);\n\n return {\n isLoading: status === 'pending',\n getStateApi,\n state: value\n };\n};\n\nexport default GetStateApi;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\ntype PropTypes = {\n score: {\n ons: number,\n lis: number,\n wss: number,\n fls: number,\n sis: number\n };\n chartSize: number;\n rounded: number;\n}\n \nconst PentagonScore: React.FC = ({ score, chartSize = 300, rounded = 2 }) => {\n const { t } = useTranslation();\n const valueToPoint = (value: number, index: number, total: number) => {\n const angle = ((Math.PI * 2) / total) * index;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const tx = Math.round(value * sin * 10000) / 10000;\n const ty = Math.round(-value * cos * 10000) / 10000;\n return { x: tx, y: ty };\n };\n\n const generatePathPoints = (stats: number[], borderRadius = 4) => {\n const _lens = borderRadius;\n const lines = [];\n const total = stats.length;\n const _p = stats.map((stat: number, index: number) => {\n return valueToPoint(stat, index, total);\n });\n for (let i = _p.length - 1; i >= 0; i--) {\n const x = _p[i];\n let y: {\n x: number;\n y: number;\n };\n if (i === 0) {\n y = _p[_p.length - 1];\n } else {\n y = _p[i - 1];\n }\n const xy = Math.sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y));\n const _rates = [\n Math.round((_lens / xy) * 100) / 100,\n Math.round(((2 * _lens) / xy) * 100) / 100,\n 1 - Math.round(((2 * _lens) / xy) * 100) / 100,\n 1 - Math.round((_lens / xy) * 100) / 100,\n ];\n\n const _line = _rates.map(function (v, i) {\n return {\n x: Math.round((x.x * (1 - v) + y.x * v) * 1000) / 1000,\n y: Math.round((x.y * (1 - v) + y.y * v) * 1000) / 1000,\n };\n });\n lines.push(_line);\n }\n const first_lines = lines.slice(0, -1);\n const last_line = lines.slice(-1)[0];\n return (\n 'M' +\n last_line[2].x +\n ' ' +\n last_line[2].y +\n 'C' +\n last_line[3].x +\n ' ' +\n last_line[3].y +\n ' ' +\n first_lines.map((l, i) => {\n return (\n l[0].x +\n ' ' +\n l[0].y +\n ' ' +\n l[1].x +\n ' ' +\n l[1].y +\n 'L' +\n l[2].x +\n ' ' +\n l[2].y +\n 'C' +\n l[3].x +\n ' ' +\n l[3].y\n );\n }).join(' ') +\n ' ' +\n last_line[0].x +\n ' ' +\n last_line[0].y +\n ' ' +\n last_line[1].x +\n ' ' +\n last_line[1].y +\n 'L' +\n last_line[2].x +\n ' ' +\n last_line[2].y +\n 'Z'\n );\n };\n\n const generatePentagonPath = (radius: number, borderRadius = 4) => {\n return generatePathPoints([radius, radius, radius, radius, radius], (borderRadius = 4));\n };\n\n const scale = chartSize / 300;\n const translate = 'translate(' + chartSize / 2 + \", \" + (chartSize / 2 + chartSize / 10) + ')';\n const points = generatePentagonPath(chartSize / 3, rounded);\n const points_1 = generatePentagonPath(chartSize / 3 - chartSize / 15, rounded);\n const points_2 = generatePentagonPath(chartSize / 3 - (2 * chartSize) / 15, rounded);\n const points_3 = generatePentagonPath(chartSize / 3 - (3 * chartSize) / 15, rounded);\n const points_4 = generatePentagonPath(chartSize / 3 - (4 * chartSize) / 15, rounded);\n const points_8 = generatePathPoints(\n [\n (score.ons * chartSize) / 300,\n (score.fls * chartSize) / 300,\n (score.sis * chartSize) / 300,\n (score.wss * chartSize) / 300,\n (score.lis * chartSize) / 300,\n ],\n rounded\n );\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n {/* Sound */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t('pentago.pronunciation')}\n \n \n {Math.round(score.ons)}%\n \n \n {/* Fluency */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {t('pentago.fluency')}\n \n \n {Math.round(score.fls)}%\n \n \n {/* intonation */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t('pentago.intonation')}\n \n \n {Math.round(score.sis)}%\n \n \n {/* Nhấn âm */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t('pentago.word_stress')}\n \n \n {Math.round(score.wss)}%\n \n \n {/* Listening */}\n \n \n \n \n \n \n \n \n \n \n \n \n {t('pentago.listen')}\n \n \n {Math.round(score.lis)}%\n \n \n \n \n {/* progress pentagon */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n )\n}\n\nexport default PentagonScore;","import StrickIcon from 'assets/img/icon-lightning-circle.svg';\nimport LessonIcon from 'assets/img/icon-lessons.svg';\nimport ClockIcon from 'assets/img/icon-clock.svg';\n\nimport React, { useState } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { Row, Col, Button } from 'antd';\nimport ScoringGetAchievementApi from './getAchievementApi';\nimport GetLeaderBoardApi from './getLeaderBoardApi';\nimport GetStateApi from './getStateApi';\nimport {\n CircularProgressbar,\n CircularProgressbarWithChildren,\n buildStyles\n} from 'react-circular-progressbar';\n\nimport PentagonScore from 'components/charts/PentagonScore';\nimport 'react-circular-progressbar/dist/styles.css';\nimport './scoring.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore from 'stores/globalStore';\n\n\nfunction getListMonth() {\n const monthsOfYear = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const thisMonth = new Date().getMonth();\n return [...monthsOfYear.slice(thisMonth + 1), ...monthsOfYear.slice(0, thisMonth + 1)];\n}\n\nfunction getListDay() {\n const daysOfWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const today = new Date().getDay();\n return [...daysOfWeek.slice(today + 1), ...daysOfWeek.slice(0, today + 1)];\n}\n\nconst PostList: React.FC = () => {\n const { achievement } = ScoringGetAchievementApi();\n const { leaderBoard } = GetLeaderBoardApi();\n const { state } = GetStateApi();\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n\n const [streak, setStreak] = useState(0);\n\n const [yLesson7Days, setYLesson7Days] = useState([]);\n const [yLesson12Months, setYLesson12Months] = useState([]);\n const [yMinutes7Days, setYMinutes7Days] = useState([]);\n const [yMinutes12Months, setYMinutes12Months] = useState([]);\n\n const [maxLessonLast7Days, setMaxLessonLast7Days] = useState(0);\n const [maxLessonLast12Months, setMaxLessonLast12Months] = useState(0);\n const [maxMinutesLast7Days, setMaxMinutesLast7Days] = useState(0);\n const [maxMinutesLast12Months, setMaxMinutesLast12Months] = useState(0);\n\n const [isFilter7Days, setIsFilter7Days] = useState(true);\n const [isFilter12Month, setIsFilter12Month] = useState(false);\n\n const daysOfWeek = getListDay();\n const monthsOfYear = getListMonth();\n const levelOfScore = [\n {\n tag: 'Beginner',\n start_score: 0,\n end_score: 56\n },\n {\n tag: 'Lower Intermediate',\n start_score: 56,\n end_score: 66\n },\n {\n tag: 'Intermediate',\n start_score: 67,\n end_score: 77\n },\n {\n tag: 'Advanced',\n start_score: 78,\n end_score: 89\n },\n {\n tag: 'Native',\n start_score: 90,\n end_score: 100\n }\n ];\n enum IeltsBandLevel {\n didNotAttempt = 0,\n non = 1,\n intermittent = 2,\n extremelyLimited = 3,\n limited = 4,\n modest = 5,\n competent = 6,\n good = 7,\n veryGood = 8,\n expert = 9\n }\n const bandLevelTitle = (num: number) => {\n switch (num) {\n case IeltsBandLevel.didNotAttempt:\n return 'Did not attempt the test';\n case IeltsBandLevel.non:\n return 'Very Poor';\n case IeltsBandLevel.intermittent:\n return 'Intermittent';\n case IeltsBandLevel.extremelyLimited:\n return 'Extremely Limited';\n case IeltsBandLevel.limited:\n return 'Limited';\n case IeltsBandLevel.modest:\n return 'Modest';\n case IeltsBandLevel.competent:\n return 'Competent';\n case IeltsBandLevel.good:\n return 'Good';\n case IeltsBandLevel.veryGood:\n return 'Very Good';\n case IeltsBandLevel.expert:\n return 'Expert';\n default:\n break;\n }\n };\n React.useEffect(() => {\n setStreak(achievement?.data?.streak_day);\n }, [achievement]);\n const filter7Days = () => {\n setIsFilter7Days(true);\n setIsFilter12Month(false);\n };\n\n const filter12Month = () => {\n setIsFilter7Days(false);\n setIsFilter12Month(true);\n };\n\n const getMaxValue = (arr: Array) => {\n return Math.max.apply(null, arr);\n };\n\n const roundMax = (number: number) => {\n if (number === 0) return 0;\n return number + (5 - (number % 5));\n };\n\n const generateAxisY = React.useCallback((dataSet) => {\n let axisY = [];\n const max = getMaxValue(dataSet);\n const roundedMax: number = roundMax(max);\n const divide = roundedMax / 5;\n if (roundedMax === 0) return [];\n for (let i = 1; i <= 5; i++) {\n axisY.push(divide * i);\n }\n return axisY;\n }, []);\n\n const isInRange = (num: number, start: number, end: number) => {\n return num >= start && num <= end;\n };\n\n React.useEffect(() => {\n const lessonsLearned = achievement?.data?.lessons_learned;\n const minutesSpent = achievement?.data?.minutes_spent;\n\n const lessonLast7Days = generateAxisY(lessonsLearned?.last_7_days.daily);\n const minutesLast7Days = generateAxisY(minutesSpent?.last_7_days.daily);\n const lessonLast12Months = generateAxisY(\n lessonsLearned?.last_12_months.monthly\n );\n const minutesLast12Months = generateAxisY(\n minutesSpent?.last_12_months.monthly\n );\n\n setYLesson7Days(lessonLast7Days);\n setYLesson12Months(lessonLast12Months);\n setYMinutes7Days(minutesLast7Days);\n setYMinutes12Months(minutesLast12Months);\n\n setMaxLessonLast7Days(\n roundMax(getMaxValue(lessonsLearned?.last_7_days.daily))\n );\n setMaxLessonLast12Months(\n roundMax(getMaxValue(lessonsLearned?.last_12_months.monthly))\n );\n setMaxMinutesLast7Days(\n roundMax(getMaxValue(minutesSpent?.last_7_days.daily))\n );\n setMaxMinutesLast12Months(\n roundMax(getMaxValue(minutesSpent?.last_12_months.monthly))\n );\n }, [achievement, generateAxisY]);\n\n return (\n
    \n {currentLanguage === 'vi' ? (\n \n Điểm phát âm tiếng Anh của bạn\n \n ) :\n \n My Pronunciation Score - ELSA Speak\n \n }\n

    {t('score.your_score')}

    \n
    \n

    {t('score.progress')}

    \n
    \n
    \n
    \n {state ? (\n \n ) : (\n

    {t('score.loading')}

    \n )}\n
    \n
    \n

    {t('score.your_level')}

    \n {state ? (\n
    \n {\n levelOfScore.find((level) =>\n isInRange(\n state.data.eps,\n level.start_score,\n level.end_score\n )\n )?.tag\n }\n
    \n ) : (\n
    {t('score.loading')}
    \n )}\n
    \n
    \n
    \n
    \n {state ? (\n \n ) : (\n

    {t('score.loading')}

    \n )}\n
    \n
    \n
    \n

    {t('score.predict_ielts')}

    \n
    \n {state ? (\n \n
    {state?.data?.ielts}
    \n
    \n {bandLevelTitle(Math.round(state?.data?.ielts))}\n
    \n \n ) : (\n

    Đang tải

    \n )}\n
    \n
    \n IELTS Speaking Score Predictor\n \n This score has not been approved or endorsed by IELTS or IDP\n \n
    \n
    \n
    \n
    \n\n
    \n

    {t('score.achievements')}

    \n
    \n
    \n

    {t('score.activity')}

    \n

    {t('score.keep_track')}

    \n
    \n \n \n \n {t('score.last_7_days')}\n \n \n \n \n {t('score.last_12_months')}\n \n \n \n\n
    \n {isFilter7Days &&\n (achievement ? (\n <>\n
    \n
    \n \n \n \"\"\n \n \n {achievement.data.lessons_learned.last_7_days.total ||\n 0}\n \n {t('score.lessons_completed')}\n \n
    \n
    \n \n \n \"\"\n \n \n {achievement.data.minutes_spent.last_7_days.total ||\n 0}\n \n {t('score.minutes_spent')}\n \n
    \n
    \n \n \n
    \n
    \n {yLesson7Days.map((item, index) => (\n
    \n {item}\n
    \n ))}\n
    \n
    \n {achievement?.data?.lessons_learned.last_7_days.daily.map(\n (column: any, index: number) => (\n
    \n
    \n
    \n )\n )}\n
    \n
    \n {daysOfWeek.map((day, index) => (\n
    \n {day}\n
    \n ))}\n
    \n
    \n \n \n
    \n
    \n {yMinutes7Days.map((item, index) => (\n
    \n {item} m\n
    \n ))}\n
    \n
    \n {achievement?.data?.minutes_spent.last_7_days.daily.map(\n (column: any, index: number) => (\n
    \n
    \n
    \n )\n )}\n
    \n
    \n {daysOfWeek.map((day, index) => (\n
    \n {day}\n
    \n ))}\n
    \n
    \n \n \n \n ) : (\n

    {t('score.loading')}

    \n ))}\n\n {isFilter12Month &&\n (achievement ? (\n <>\n
    \n
    \n \n \n \"\"\n \n \n {achievement.data.lessons_learned.last_12_months\n .total || 0}\n \n {t('score.lessons_completed')}\n \n
    \n
    \n \n \n \"\"\n \n \n {achievement.data.minutes_spent.last_12_months\n .total || 0}\n \n {t('score.minutes_spent')}\n \n
    \n
    \n \n \n
    \n
    \n {yLesson12Months.map((item, index) => (\n
    \n {item}\n
    \n ))}\n
    \n
    \n {achievement?.data?.lessons_learned.last_12_months.monthly.map(\n (column: any, index: number) => (\n
    \n
    \n
    \n )\n )}\n
    \n
    \n {monthsOfYear.map((day, index) => (\n
    \n {day}\n
    \n ))}\n
    \n
    \n \n \n
    \n
    \n {yMinutes12Months.map((item, index) => (\n
    \n {item} m\n
    \n ))}\n
    \n
    \n {achievement?.data?.minutes_spent.last_12_months.monthly.map(\n (column: any, index: number) => (\n
    \n
    \n
    \n )\n )}\n
    \n
    \n {monthsOfYear.map((day, index) => (\n
    \n {day}\n
    \n ))}\n
    \n \n \n \n \n ) : (\n

    {t('score.loading')}...

    \n ))}\n \n \n \n\n
    \n \n
    \n
    \n

    {t('score.current_streak')}

    \n

    \n
    \n
    \n
    \n {streak}\n
    \n {achievement && (\n
      \n {achievement.data.lessons_learned.last_7_days.daily.map(\n (day: any, index: number) => (\n
    • \n \"Strick\"\n
    • \n )\n )}\n
    \n )}\n
    \n
    \n
    \n
    \n

    {t('score.achievements')}

    \n

    {t('score.earn_more_stars')}

    \n
    \n
    \n {leaderBoard && (\n
    \n { leaderBoard.data.points || 0 }\n \n

    {t('score.accumulated')}

    \n
    \n )}\n
    \n
    \n
    \n
    \n \n );\n};\n\nexport default PostList;\n","export default __webpack_public_path__ + \"static/media/thumb-redeem-success.c49e1059.png\";","import { doPost } from \"./common\";\nimport env from \"utils/env\";\nimport { getItem } from 'utils/local-storage';\nimport { ACCESS_TOKEN } from 'utils/storage-keys';\n\ninterface Response {\n id: string;\n created_at: number;\n created_at_utc: string;\n updated_at: number;\n updated_at_utc: string;\n author: string;\n description: string;\n}\n\ninterface Params {}\n\nasync function redeemVoucherAPI(code: string) {\n const config = env();\n const BASE_URL = config.baseApiUrl;\n const USER_REDEEM_URL = `${BASE_URL}/voucher/{$CODE$}`;\n const url = USER_REDEEM_URL.replace('{$CODE$}', code);\n \n return doPost(\n url,\n {},\n { 'X-Session-Token': getItem(ACCESS_TOKEN) }\n );\n}\n\nexport default redeemVoucherAPI;\n","import redeemVoucherAPI from 'apis/redeemVoucherAPI';\nimport useAsync from 'hooks/base/useAsync';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { message } from 'antd';\n// import { useNavigate } from 'react-router-dom';\n\ninterface RedeemVoucherParam {\n code: string;\n}\n\nconst RedeemVoucherPostApi = () => {\n const { status, execute, value } = useAsync(redeemVoucherAPI, false);\n\n const redeemVoucher = React.useCallback(\n (params: RedeemVoucherParam) => {\n execute(params.code);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n message.error('Voucher is depleted or expired. Please check your ELSA account or try another voucher');\n return;\n }\n }, [value]);\n\n return {\n isLoading: status === 'pending',\n redeemVoucher,\n value\n };\n};\n\nexport default RedeemVoucherPostApi;\n","import ThumbRedeem from \"../../../assets/img/thumb-redeem-success.png\";\n\nimport React, { useState } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { Input, Button, Form, Modal, Space, Typography, Row } from \"antd\";\nimport RedeemVoucherPostApi from \"./redeemVoucherPostApi\";\nimport { Link } from \"react-router-dom\";\nimport \"./redeemVoucher.css\";\nimport { useTranslation } from \"react-i18next\";\nimport GlobalStore from \"stores/globalStore\";\nimport { useGetUserProfileApi } from \"../user/useUserApi\";\nimport Loading from \"components/Loading/Loading\";\n\nconst { Text } = Typography;\n\nconst PostList: React.FC = () => {\n const { isLoading, redeemVoucher, value } = RedeemVoucherPostApi();\n const [form] = Form.useForm();\n const [isResultRedeem, setIsResultRedeem] = useState(false);\n const { t } = useTranslation();\n const { currentLanguage, entitlements } = GlobalStore.useContainer();\n const { profileObject, isLoading: profileLoading } = useGetUserProfileApi();\n const isNova = profileObject?.data?.nova_mode;\n\n React.useEffect(() => {\n value && value.error === false ? setIsResultRedeem(true) : setIsResultRedeem(false);\n }, [value]);\n\n const handleCloseModal = () => {\n setIsResultRedeem(false);\n };\n\n return (\n
    \n {currentLanguage === \"vi\" ? (\n \n Kích hoạt ELSA Speak\n \n \n ) : (\n \n ELSA Speak Pro Redeem - ELSA Speak\n \n \n )}\n {!isResultRedeem && (\n
    \n

    {t(\"redeem.redeem_code\")}

    \n {profileLoading ? (\n \n \n \n ) : (\n <>\n

    {t(\"redeem.enter_code\")}

    \n
    \n \n \n \n\n \n \n \n \n ในกรณีที่คุณสมัครแพ็คเกจ ELSA โดยตรงผ่าน Google Play/App Store ให้ปิดการต่ออายุอัตโนมัติของแพ็คเกจการเรียนรู้บนแอปผ่าน Google Play/App Store รอจนกว่าแพ็คเกจเก่าจะหมดอายุ จากนั้นคลิกเปิดใช้งานแพ็คเกจใหม่\n \n {!isNova && (\n \n \n \n \n {entitlements?.tier?.code === \"free\" ? \"ยกเว้นแพ็กเกจ ELSA Pro ตลอดชีพ คุณกำลังเตรียมอัปเกรดเป็นเวอร์ชันล่าสุดของ ELSA\" : \"คุณกำลังเตรียมอัปเกรดเป็นเวอร์ชันล่าสุดของ ELSA\"}\n \n )}\n \n \n )}\n
    \n )}\n\n \n
    \n \"Đổi\n
    \n

    {t(\"redeem.change_success\")}

    \n

    \n {t(\"redeem.back_page\")}\n

    \n
    \n
    \n );\n};\n\nexport default PostList;\n","import React from 'react';\n\nconst BillList: React.FC = () => {\n return (\n
    \n Bill List page\n
    \n );\n};\n\nexport default BillList;\n","export default __webpack_public_path__ + \"static/media/icon-check-1.afeb2b3a.svg\";","import React, { useContext, useState } from 'react';\nimport CartContext, { CartItemProps } from 'stores/cart-context';\nimport IconCheck from 'assets/img/icon-check-1.svg';\nimport './OxfordBusiness.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore from 'stores/globalStore';\nimport type { Book } from 'stores/globalStore';\n\ntype PropTypes = {\n product: Book\n};\n\nconst OxfordBusiness: React.FC = ({\n product\n}) => {\n const [active, setActive] = useState(false);\n const cartCtx = useContext(CartContext);\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n\n const handleActive = () => {\n setActive(!active);\n };\n\n const addToCart = (product: any) => {\n const item: CartItemProps = {\n membership: product.membership,\n name: product.name,\n price: product.discount_price,\n amount: 1\n };\n if (cartCtx.addItem) {\n cartCtx.addItem(item)\n }\n }\n\n const genSaleTags = (is_featured: boolean, percent: number, currentLanguage: string) => {\n if( is_featured ) {\n return currentLanguage === 'vi' ? 'ทางเลือกที่ดีที่สุด' : 'Best choice';\n } else {\n return currentLanguage === 'vi' ? `-${percent}%`: `Sale ${percent}%`;\n }\n };\n\n return (\n \n
    \n
    \n {product.name}\n
    \n
    {genSaleTags(product.is_featured, product.discount_percent, currentLanguage)}
    \n

    {product.name}

    \n
      \n {\n product.meta.unit &&
    • \n \"icon\"\n {product.meta.unit} units\n
    • \n }\n {\n product.meta.book &&
    • \n \"icon\"\n {product.meta.book} books\n
    • \n }\n {\n product.meta.lesson &&
    • \n \"icon\"\n {product.meta.lesson} lessons\n
    • \n }\n
    \n
    \n
    \n
    \n
      \n {\n product.meta.unit &&
    • \n \"icon\"\n {product.meta.unit} units\n
    • \n }\n {\n product.meta.book &&
    • \n \"icon\"\n {product.meta.lesson} books\n
    • \n }\n {\n product.meta.lesson &&
    • \n \"icon\"\n {product.meta.lesson} lesson\n
    • \n }\n
    \n

    \n
    \n
    \n
    \n
    \n {product.base_price.toLocaleString('vn-VN')} บาท\n

    {product.discount_price.toLocaleString('vn-VN')} บาท

    \n
    {genSaleTags(product.is_featured, product.discount_percent, currentLanguage)}
    \n
    \n addToCart(product)}\n >\n {t('courses.add_to_cart')}\n \n
    \n

    \n {active ? `${t('courses.back')}` : `${t('courses.view_detail')}`}\n

    \n \n );\n};\nexport default OxfordBusiness;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport OxfordBusiness from 'components/Cards/OxfordBusiness';\nimport './Oxford.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore from 'stores/globalStore';\n\nconst Oxford: React.FC = () => {\n const { bookData } = GlobalStore.useContainer();\n const { t } = useTranslation();\n\n return (\n <>\n

    ELSA Oxford Business Result

    \n
    \n {bookData.oxford.map((oxford, index) => (\n
    \n \n
    \n ))}\n
    \n
    \n

    {t('courses.see_more_package')}:

    \n \n \n \n
    \n \n );\n};\n\nexport default Oxford;\n","import { doPost } from \"./common\";\n\ninterface Response {\n message: string;\n profile: {};\n refresh_token: string;\n session: string;\n}\ninterface Params {\n email?: string;\n password?: string;\n facebook_token?: string;\n apple_token?: string;\n apple_client_id?: string;\n google_token?: string;\n google_client_id?: string;\n google_email?: string;\n}\n\nasync function loginApi(\n email: string,\n password: string,\n gCaptcha: string,\n facebook_token: string,\n apple_token: string,\n google_token: string,\n google_email: string\n) {\n let body;\n if (facebook_token) {\n body = {\n facebook_token\n }\n } else if(apple_token) {\n body = {\n apple_token: apple_token,\n apple_client_id: 'com.elsaspeak.speechanalyzer'\n }\n } else if(google_token) {\n body = {\n google_token,\n google_client_id: '111373558431945137776'\n }\n if (google_email) {\n body = {\n ...body,\n email: google_email\n };\n }\n } else {\n body = {\n email,\n password\n }\n }\n const loginURL = (document.getElementById('login_url') as HTMLInputElement)?.value;\n return doPost(\n loginURL,\n body,\n {\n 'Content-Type': 'application/json'\n }\n );\n}\n\nexport default loginApi;\n","import adminLoginApi from 'apis/loginApi';\nimport useAsync from 'hooks/base/useAsync';\nimport { isNil } from 'lodash';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport GlobalStore from 'stores/globalStore';\nimport moment from 'moment';\nimport { setItem } from 'utils/local-storage';\nimport { ACCESS_TOKEN, USER_PROFILE } from 'utils/storage-keys';\nimport { message } from 'antd';\nimport { useTranslation } from 'react-i18next';\n\ninterface LoginParam {\n email?: string;\n password?: string;\n gCaptcha?: string;\n facebook_token?: string;\n apple_token?: string;\n google_token?: string;\n google_email?: string;\n}\n\nconst useLoginApi = () => {\n const { status, execute, value } = useAsync(adminLoginApi, false);\n const navigate = useNavigate();\n const { storeSession } = GlobalStore.useContainer();\n const { t } = useTranslation();\n\n const login = React.useCallback(\n ({ email, password, gCaptcha, facebook_token, apple_token, google_token, google_email }: LoginParam) => {\n execute(email, password, gCaptcha, facebook_token, apple_token, google_token, google_email);\n },\n [execute]\n );\n\n React.useEffect(() => {\n if (isNil(value)) {\n return;\n }\n\n if (value.error) {\n switch(value.statusCode) {\n case 400:\n message.error(t('login.status_400'));\n break;\n case 404:\n message.error(t('login.status_404'));\n break;\n case 409:\n message.error(t('login.status_409'));\n break;\n case 429:\n message.error(t('login.status_429'));\n break;\n case 441:\n message.error(t('login.status_441'));\n break;\n case 500:\n message.error(t('login.status_500'));\n break;\n }\n return;\n }\n\n if (isNil(value.data)) {\n // message.warn(\"Empty Body\");\n return;\n }\n\n storeSession(value.data.session, moment().add(1, 'days').toDate());\n setItem(ACCESS_TOKEN, value.data.session);\n setItem(USER_PROFILE, JSON.stringify(value.data.profile));\n\n const redirect = new URLSearchParams(window.location.search).get('redirect') || '/';\n navigate(redirect);\n }, [navigate, storeSession, value, t]);\n\n return {\n isLoading: status === 'pending',\n login\n };\n};\n\nexport default useLoginApi;\n","import { useEffect } from \"react\";\nimport env from \"utils/env\";\n\nconst useLoginV2 = () => {\n const { paymentApiURL } = env();\n\n useEffect(() => {\n if(document.getElementById('login_url')) return;\n const script = document.createElement(\"script\");\n script.src = `${paymentApiURL}/api/affwefaascs.js`;\n document.body.appendChild(script);\n setTimeout(() => {\n window.document.dispatchEvent(new Event(\"DOMContentLoaded\"));\n }, 2000);\n return () => {\n document.body.removeChild(script);\n };\n }, [paymentApiURL]);\n};\n\nexport default useLoginV2;","export default __webpack_public_path__ + \"static/media/google-icon.86a4a4f3.svg\";","import React from 'react';\nimport GoogleIcon from 'assets/img/google-icon.svg';\n\ntype PropType = {\n onClick: (response: any) => void\n}\nconst GoogleLoginButton: React.FC = ({ children, onClick }) => {\n\n return (\n \n );\n};\n\nexport default GoogleLoginButton;\n","const firebaseConfig = {\n apiKey: 'AIzaSyAL5KBZcTHro5PyD6pUxouywOHHgryKSwU',\n authDomain: 'elsa-app-bd2f8.firebaseapp.com',\n databaseURL: 'https://elsa-app-bd2f8.firebaseio.com',\n projectId: 'elsa-app-bd2f8',\n storageBucket: 'elsa-app-bd2f8.appspot.com',\n messagingSenderId: '413683105247',\n appId: '1:413683105247:web:9cf0e50e40c199e0df586a',\n measurementId: 'G-QKD8S98M2B',\n};\n\nexport default firebaseConfig;\n","// src/firebase.ts\nimport { initializeApp } from 'firebase/app';\nimport { getAuth, GoogleAuthProvider } from 'firebase/auth';\nimport firebaseConfig from './firebaseConfig';\n\nconst app = initializeApp(firebaseConfig);\n\nexport const auth = getAuth(app);\nexport const googleProvider = new GoogleAuthProvider();\ngoogleProvider.addScope('email');\n","import React from 'react';\nimport FacebookLogin from 'react-facebook-login';\nimport AppleSignin from 'react-apple-signin-auth';\nimport { Button, Form, Input } from 'antd';\nimport env from 'utils/env';\nimport useLoginApi from './useLoginApi';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport { setItem } from 'utils/local-storage';\nimport './login.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore from 'stores/globalStore';\nimport { Helmet } from 'react-helmet';\nimport { Link } from 'react-router-dom';\nimport useLoginV2 from 'hooks/useLoginV2';\nimport GoogleSignin from 'components/Authentication/GoogleSignin/GoogleSignin';\nimport { auth, googleProvider } from '../../firebase';\nimport { signInWithPopup, getAdditionalUserInfo } from 'firebase/auth';\n\nconst Login: React.FC = () => {\n const { isLoading, login } = useLoginApi();\n const { elsaIcon, captchaSiteKey, internalApiUrl } = env();\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n const recaptchaRef: any = React.useRef();\n useLoginV2();\n\n const onSubmitWithReCAPTCHA = async (values: any) => {\n const token = await recaptchaRef.current.executeAsync();\n const form = {\n ...values,\n gCaptcha: token\n };\n login(form);\n setItem('email-login', values.email);\n };\n\n const responseFacebook = (response: any) => {\n const form = {\n facebook_token: response.accessToken\n }\n login(form);\n setItem('email-login', response.email);\n };\n\n const responseAppleID = (response: any) => {\n const form = {\n apple_token: response.authorization.code\n }\n login(form);\n };\n\n const responseGoogle = async () => {\n try {\n const result = await signInWithPopup(auth, googleProvider);\n const user = result.user;\n if (user) {\n const token = await user.getIdToken();\n const additionalUserInfo = getAdditionalUserInfo(result);\n const email = user.email || additionalUserInfo?.profile?.email;\n const form = {\n google_token: token,\n google_email: email && typeof email === 'string' ? email.toString() : ''\n }\n console.log(user, additionalUserInfo);\n login(form);\n if (email && typeof email === 'string') {\n setItem('email-login', email);\n }\n }\n } catch (error) {\n console.error('Error during Google login:', error);\n }\n};\n \n return (\n
    \n {currentLanguage === 'vi' ? (\n เข้าสู่ระบบ - เข้าสู่ระบบบัญชี ELSA Speak ที่เว็บไซต์หลัก\n \n ) :\n \n Login Account - ELSA Speak\n \n }\n
    \n \"logo\"\n
    \n\n
    \n

    {t('login.page_title')}

    \n \n\n responseAppleID(response)}\n onError={(error: any) => console.error(error)}\n />\n\n Login with Google\n\n
    \n OR\n
    \n \n \n \n \n \n \n\n \n \n \n\n \n {t('login.login')}\n \n \n\n
    \n \n \n \n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default Login;\n","import { useReducer } from 'react';\nimport CartContext, { CartContextType, CartItemProps } from \"./cart-context\"\n\nenum CartActionKind {\n ADD = 'ADD',\n REMOVE = 'REMOVE',\n EMPTY = 'EMPTY'\n}\n\ninterface CartAction {\n type: CartActionKind;\n payload: any;\n}\n\nconst defaultCartState: CartContextType = {\n items: [],\n totalAmount: 0,\n membershipString: ''\n};\n\nconst cartReducer = (state: CartContextType, action: CartAction) => {\n\n const buildMembership = (products: CartItemProps[]) => {\n let memOrderString = '';\n if (products.length === 1) {\n if (products[0].amount === 1) {\n return products[0].membership;\n }\n }\n products.map(item => {\n if (item.amount.toString().length > 3) {\n return 'lifetime_membership';\n }\n return memOrderString += memOrderString ? ` and ${item.amount} x ${item.membership}` : `${item.amount} x ${item.membership}`;\n });\n return memOrderString;\n };\n\n if (action.type === CartActionKind.ADD) {\n const existingCartItemIndex = state.items.findIndex(\n (item: CartItemProps) => item.membership === action.payload.membership\n );\n\n const existingCartItem = state.items[existingCartItemIndex];\n\n let updatedItems: CartItemProps[];\n\n if (existingCartItem) {\n let updatedItem;\n updatedItem = {\n ...existingCartItem,\n amount: existingCartItem.amount + action.payload.amount\n };\n updatedItems = [...state.items];\n updatedItems[existingCartItemIndex] = updatedItem;\n } else {\n updatedItems = state.items.concat(action.payload);\n }\n\n const updatedTotalAmount = state.totalAmount + action.payload.amount * action.payload.price;\n\n return {\n items: updatedItems,\n totalAmount: updatedTotalAmount,\n membershipString: buildMembership(updatedItems)\n };\n }\n\n if (action.type === CartActionKind.REMOVE) {\n const existingItemIndex = state.items.findIndex(\n (item: CartItemProps) => item.membership === action.payload\n );\n\n const existingItem = state.items[existingItemIndex];\n const updatedTotalAmount = state.totalAmount - existingItem.price;\n let updatedItems;\n if (existingItem.amount === 1) {\n updatedItems = state.items.filter(item => item.membership !== action.payload)\n } else {\n const updatedItem = { ...existingItem, amount: existingItem.amount - 1 };\n updatedItems = [...state.items];\n updatedItems[existingItemIndex] = updatedItem;\n }\n\n return {\n items: updatedItems,\n totalAmount: updatedTotalAmount,\n membershipString: buildMembership(updatedItems)\n };\n }\n\n if (action.type === CartActionKind.EMPTY) {\n return {\n items: [],\n totalAmount: 0,\n membershipString: ''\n }\n }\n return defaultCartState;\n};\n\nconst CartProvider:React.FC = ({ children }) => {\n\n const [cartState, dispatch] = useReducer(cartReducer, defaultCartState);\n\n const addItemToCartHandler = (item: CartItemProps) => {\n dispatch({\n type: CartActionKind.ADD,\n payload: item\n });\n };\n\n const removeItemToCartHandler = (membership: string) => {\n dispatch({\n type: CartActionKind.REMOVE,\n payload: membership\n });\n };\n\n const emptyCartHandler = () => {\n dispatch({\n type: CartActionKind.EMPTY,\n payload: null\n });\n }\n\n const cartContext = {\n items: cartState.items,\n totalAmount: cartState.totalAmount,\n membershipString: cartState.membershipString,\n addItem: addItemToCartHandler,\n removeItem: removeItemToCartHandler,\n emptyCart: emptyCartHandler\n };\n\n return (\n \n { children }\n \n )\n};\n\nexport default CartProvider;\n","import React, { useState } from 'react';\nimport { Button, Form, Input, message } from 'antd';\nimport FacebookLogin from 'react-facebook-login';\nimport AppleSignin from 'react-apple-signin-auth';\nimport env from 'utils/env';\nimport ReCAPTCHA from 'react-google-recaptcha';\nimport './login.css';\nimport axios from 'axios';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore from 'stores/globalStore';\nimport { setItem } from 'utils/local-storage';\nimport useLoginApi from './useLoginApi';\nimport { Helmet } from 'react-helmet';\nimport { Link, useNavigate } from 'react-router-dom';\nimport useLoginV2 from 'hooks/useLoginV2';\nimport GoogleSignin from 'components/Authentication/GoogleSignin/GoogleSignin';\nimport { auth, googleProvider } from '../../firebase';\nimport { signInWithPopup, getAdditionalUserInfo } from 'firebase/auth';\n\nconst Signup: React.FC = () => {\n const { elsaIcon, captchaSiteKey, internalApiUrl } = env();\n const [signUpLoading, setSignUpLoading] = useState(false);\n const { login } = useLoginApi();\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n const navigate = useNavigate();\n const recaptchaRef: any = React.useRef();\n useLoginV2();\n\n const signUp = (values: any) => {\n const config = {\n headers: {\n 'content-type': 'application/json'\n }\n };\n const { name, email, password } = values;\n const data = {\n username: name,\n email,\n password\n };\n setSignUpLoading(true);\n const signupURL = (document.getElementById('signup_url') as HTMLInputElement)?.value;\n axios\n .post(signupURL, data, config)\n .then((res) => {\n message.success('Your account has successfully created.');\n setSignUpLoading(false);\n navigate(`/${t('slug.login')}`);\n })\n .catch((err) => {\n message.error(err.response?.data?.message || 'There was an error! Please try again later.');\n setSignUpLoading(false);\n });\n };\n\n const responseFacebook = (response: any) => {\n const form = {\n facebook_token: response.accessToken\n }\n login(form);\n setItem('email-login', response.email);\n };\n\n const responseAppleID = (response: any) => {\n const form = {\n apple_token: response.authorization.code\n }\n login(form);\n };\n const responseGoogle = async () => {\n try {\n const result = await signInWithPopup(auth, googleProvider);\n const user = result.user;\n if (user) {\n const token = await user.getIdToken();\n const additionalUserInfo = getAdditionalUserInfo(result);\n const email = user.email || additionalUserInfo?.profile?.email;\n const form = {\n google_token: token,\n google_email: email && typeof email === 'string' ? email.toString() : ''\n }\n console.log(user, additionalUserInfo);\n login(form);\n if (email && typeof email === 'string') {\n setItem('email-login', email);\n }\n }\n } catch (error) {\n console.error('Error during Google login:', error);\n }\n};\n\n return (\n
    \n {currentLanguage === 'vi' ? (\n ข้อมูลการลงทะเบียน | ELSA Speak\n \n ) :\n \n Signup Account - ELSA Speak\n \n }\n
    \n \"logo\"\n
    \n
    \n

    {t('signup.page_title')}

    \n\n \n\n responseAppleID(response)}\n onError={(error: any) => console.error(error)}\n />\n Signup with Google\n\n
    \n OR\n
    \n\n
    \n \n \n \n \n\n \n \n \n\n \n \n \n\n ({\n validator(_, value) {\n if (!value || getFieldValue('password') === value) {\n return Promise.resolve();\n }\n return Promise.reject(\n new Error('ยืนยันรหัสผ่านไม่ตรงกัน')\n );\n }\n })\n ]}\n >\n \n \n\n \n {t('signup.signup')}\n \n \n\n
    \n \n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default Signup;\n","import React, { useState } from 'react';\nimport { Button, Form, Input, message} from 'antd';\nimport env from 'utils/env';\nimport './forgetPassword.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore from 'stores/globalStore';\nimport { Helmet } from 'react-helmet';\nimport axios from 'axios';\nimport { useNavigate } from 'react-router-dom';\n\nconst ForgetPassword: React.FC = () => {\n const { elsaIcon } = env();\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n const [resetLoading, setResetLoading] = useState(false);\n const navigate = useNavigate();\n const onSubmitResetPassword = (values: any) => {\n const config = {\n headers: {\n 'content-type': 'application/json'\n }\n };\n const {email} = values;\n setResetLoading(true);\n axios\n .get(`${env().userServerApiUrl}/user/api/v1/password/reset?e=${email}`, config)\n .then((res) => {\n message.success(`${t('reset.success', {email: email})}`);\n setResetLoading(false);\n navigate(`/${t('slug.login')}`);\n })\n .catch((err) => {\n message.error(err.response?.data?.message || 'There was an error! Please try again later.');\n setResetLoading(false);\n });\n };\n return (\n
    \n {currentLanguage === 'vi' ? (\n ลืมรหัสผ่าน ELSA Speak\n \n ) :\n \n Forget Password - ELSA Speak\n \n }\n
    \n \"logo\"\n
    \n
    \n

    {t('reset.forgot_password')}

    \n
    \n \n \n \n \n {t('reset.send_require')}\n \n \n
    \n
    \n );\n};\n\nexport default ForgetPassword;\n","import React, { useEffect } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Menu } from 'antd';\nimport './NavCourse.css';\nimport { useTranslation } from 'react-i18next';\n\nconst NavCourse: React.FC = () => {\n const location = useLocation().pathname;\n const locationActive = location.slice(location.lastIndexOf('/') + 1);\n const { t } = useTranslation();\n\n const [selectedMenuItem, setSelectedMenuItem] = React.useState('');\n const handleMenuClick = (e: any) => {\n setSelectedMenuItem(e.key);\n };\n\n useEffect(() => {\n setSelectedMenuItem(locationActive);\n }, [locationActive]);\n\n return (\n \n );\n};\n\nexport default NavCourse;\n","import React from 'react';\nimport { Layout } from 'antd';\nimport { Outlet } from 'react-router-dom';\nimport './ELSACourse.css';\nimport NavCourse from 'components/NavCourse/NavCourse';\n\nconst ELSACourse: React.FC = () => {\n return (\n \n \n
    \n \n
    \n
    \n );\n};\n\nexport default ELSACourse;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport Logo from 'assets/img/Logo.svg';\nimport './Page404.css';\n\nconst Page404: React.FC = () => {\n return (\n <>\n
    \n
    \n \n \"ELSA\"\n \n
    \n
    \n
    \n
    \n \n

    Ooops...

    \n

    \n Trang bạn vừa truy cập không tồn tại hoặc đã bị xóa.\n

    \n \n Quay lại\n \n
    \n
    \n \n );\n};\n\nexport default Page404;\n","import React, { useContext, useState } from 'react';\nimport CartContext, { CartItemProps } from 'stores/cart-context';\nimport IconCheck from 'assets/img/icon-check-1.svg';\nimport './courseHPC.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore, { Book } from 'stores/globalStore';\n\ntype PropTypes = {\n product: Book\n};\n\nconst CourseHPC: React.FC = ({\n product\n}) => {\n const [active, setActive] = useState(false);\n const cartCtx = useContext(CartContext);\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n\n const handleActive = () => {\n setActive(!active);\n };\n\n const addToCart = (product: any) => {\n const item: CartItemProps = {\n membership: product.membership,\n name: product.name,\n price: product.discount_price,\n amount: 1\n };\n if (cartCtx.addItem) {\n cartCtx.addItem(item)\n }\n }\n\n const genSaleTags = (is_featured: boolean, percent: number, currentLanguage: string) => {\n if( is_featured ) {\n return currentLanguage === 'vi' ? 'ทางเลือกที่ดีที่สุด' : 'Best choice';\n } else {\n return currentLanguage === 'vi' ? `-${percent}%`: `Sale ${percent}%`;\n }\n };\n\n return (\n \n
    \n
    \n {product.name}\n
    \n { product.is_featured &&
    {genSaleTags(product.is_featured, product.discount_percent, currentLanguage)}
    }\n

    {product.name}

    \n
      \n {product.membership === 'hpc_all_books' ?\n product.meta.include?.map(item =>\n
    • \n \"icon\"\n {item}\n
    • \n ) :\n <>\n {\n product.meta.unit &&
    • \n \"icon\"\n {product.meta.unit} units\n
    • \n }\n {\n product.meta.lesson &&
    • \n \"icon\"\n {product.meta.lesson} lessons\n
    • \n }\n \n }\n
    \n { !!product.meta?.level &&

    {currentLanguage === 'vi' ? 'ระดับปัจจุบัน: ' : 'Level: '} {product.meta.level}

    }\n
    \n
    \n
    \n
      \n {product.membership === 'hpc_all_books' ?\n product.meta.include?.map(item =>\n
    • \n \"icon\"\n {item}\n
    • \n ) :\n <>\n {\n product.meta.unit &&
    • \n \"icon\"\n {product.meta.unit} units\n
    • \n }\n {\n product.meta.lesson &&
    • \n \"icon\"\n {product.meta.lesson} lessons\n
    • \n }\n \n }\n
    \n { !!product.meta?.level &&

    {currentLanguage === 'vi' ? 'ระดับปัจจุบัน: ' : 'Level: '} {product.meta.level}

    }\n
    \n
    \n
    \n
    \n

    {product.discount_price.toLocaleString('vn-VN')} บาท

    \n
    {genSaleTags(product.is_featured, product.discount_percent, currentLanguage)}
    \n
    \n addToCart(product)}\n >\n {t('courses.add_to_cart')}\n \n
    \n

    \n {active ? `${t('courses.back')}` : `${t('courses.view_detail')}`}\n

    \n \n );\n};\nexport default CourseHPC;\n","export default __webpack_public_path__ + \"static/media/banner-hpc.1637a957.png\";","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport CourseHPC from 'components/Cards/courseHPC';\nimport './HarperCollins.css';\nimport { useTranslation } from 'react-i18next';\nimport Banner from 'assets/img/banner-hpc.png';\nimport GlobalStore from 'stores/globalStore';\n\nconst HarperCollins: React.FC = () => {\n const { bookData } = GlobalStore.useContainer();\n const { t } = useTranslation();\n\n return (\n
    \n

    \n ELSA by Harper Collins\n

    \n

    {t('courses.des_harper_collins')}

    \n \"banner\"\n
    \n {bookData.harper.map((hpc, index) => (\n \n \n
    \n ))}\n
    \n
    \n

    {t('courses.see_more_package')}:

    \n \n \n \n
    \n \n );\n};\n\nexport default HarperCollins;\n","export default __webpack_public_path__ + \"static/media/icon-thumb-new.ab53c6d7.svg\";","import React from 'react';\nimport ThumbNew from '../../../../assets/img/premium/icon-thumb-new.svg';\nimport './PackageBenefit.css';\n\nexport type Benefit = {\n icon_url: string;\n is_new: boolean;\n title: string;\n description: string;\n};\n\ntype PropTypes = {\n benefit: Benefit[];\n title: string;\n photo: string;\n isBundleFeatured?: boolean;\n};\n\nconst PackageBenefit: React.FC = ({ title, benefit, photo }) => {\n return benefit.length ? (\n
    \n {photo && \"\"}\n
    \n

    {title}

    \n
      \n {benefit.map((item) => (\n
    • \n {item.icon_url && (\n
      \n \"\"\n
      \n )}\n
      \n \n {item.title} {item.is_new && \"\"}\n \n

      {item.description}

      \n
      \n
    • \n ))}\n
    \n
    \n
    \n ) : (\n <>\n );\n};\n\nexport default PackageBenefit;\n","import Logo from 'assets/img/Logo.svg';\nimport './Popup.css';\n\nconst Popup: React.FC = ({ children }) => {\n return (\n
    \n
    \n
    \n \"ELSA\"\n
    \n
    {children}
    \n
    \n
    \n );\n};\n\nexport default Popup;\n","import React, { useEffect, useState } from 'react';\nimport Popup from './Popup';\nimport { getItem } from 'utils/local-storage';\nimport useSaveLead from 'hooks/useSaveLead';\nimport { ACCESS_TOKEN, USER_PROFILE } from 'utils/storage-keys';\nimport axios from 'axios';\nimport env from 'utils/env';\nimport { Button, message } from 'antd';\nimport { useGetUserProfileApi } from 'pages/dashboard/user/useUserApi';\n\ntype Props = {\n membership: string;\n siteCode: string;\n money: number;\n setShowPopup: (state: boolean) => void;\n};\n\nconst isPhoneValid = (number: string) => {\n return /^(\\+66|0)\\d{9}$/.test(number);\n};\n\nconst UpgradePopup: React.FC = ({\n membership,\n money,\n siteCode,\n setShowPopup\n}) => {\n const [isLoading, setIsLoading] = useState(false);\n const [phoneValid, setPhoneValid] = useState(true);\n const [phone, setPhone] = useState('');\n const config = env();\n const token = getItem(ACCESS_TOKEN);\n const userId = JSON.parse(getItem(USER_PROFILE) || \"{}\")?.external_id || '';\n const { profileObject } = useGetUserProfileApi();\n const { saveLead } = useSaveLead();\n\n useEffect(() => {\n if (!token || !profileObject) return;\n if (!profileObject?.data?.username) {\n message.error('กรุณากรอกชื่อของคุณ!');\n return setShowPopup(false);\n }\n if (!isPhoneValid(profileObject?.data?.phone)) {\n return setPhoneValid(false);\n }\n\n saveLead(profileObject, membership, {}, {\n site_code: siteCode,\n unused_money: money,\n session_token: token,\n is_upgrade: true,\n user_id: userId\n });\n }, [membership, money, profileObject, siteCode, token, saveLead, userId, setShowPopup]);\n\n const handleSubmitPhone = async () => {\n if (!token) return;\n if (!isPhoneValid(phone))\n return message.error('กรุณาใส่เบอร์โทรที่ถูกต้อง!');\n setIsLoading(true);\n try {\n await axios.patch(\n `${config.baseApiUrl}/user/api/v1/account`,\n {\n phone\n },\n {\n headers: {\n 'X-Session-Token': token\n }\n }\n );\n\n const newProfile = {\n ...profileObject,\n data: { ...profileObject?.data, phone }\n }\n saveLead(newProfile, membership, {}, {\n site_code: siteCode,\n unused_money: money,\n session_token: token,\n is_upgrade: true,\n user_id: userId,\n });\n } catch (error) {\n message.error('ระบบไม่ว่าง โปรดลองอีกครั้งในภายหลัง!');\n setIsLoading(false);\n }\n };\n\n return (\n \n {phoneValid ? (\n

    คำขอของคุณอยู่ระหว่างการประมวลผล...

    \n ) : (\n
    \n

    โปรดเพิ่มหมายเลขโทรศัพท์และข้อมูลส่วนบุคคลของคุณเพื่อให้เราสามารถดำเนินการได้ง่ายขึ้น

    \n
    \n \n setPhone(e.target.value)}\n />\n
    \n \n \n
    \n )}\n
    \n );\n};\n\nexport default UpgradePopup;\n","export default __webpack_public_path__ + \"static/media/icon-stars.1a4edaa9.svg\";","import React, { useEffect, useState } from \"react\";\nimport axios from \"axios\";\nimport { ACCESS_TOKEN } from \"utils/storage-keys\";\nimport { getItem, getSiteCode } from \"utils/local-storage\";\nimport env from \"utils/env\";\n\nimport { Col, Row } from \"antd\";\nimport PremiumFeature, { Benefit } from \"./blocks/PackageBenefit\";\nimport UpgradePopup from \"components/Popup/UpgradePopup\";\nimport Loading from \"components/Loading/Loading\";\n\nimport IconStart from \"../../../assets/img/icon-stars.svg\";\nimport QR from \"../../../assets/img/open-app-qr.jpg\";\nimport \"./UpgradePackage.css\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useGetUserProfileApi } from \"../user/useUserApi\";\n\ntype Props = {\n upgradeType?: \"elsa_speak\" | \"premium\";\n};\n\ntype CatalogVariant = {\n base_price: number;\n price: number;\n discount_percent: number;\n interface: {\n package: string;\n package_name: string;\n };\n};\n\ntype CatalogResponse = {\n code: \"elsa_speak\" | \"premium\" | \"ai_role_play_sa\";\n name: string;\n photo_url: string;\n benefits: Benefit[];\n variants: CatalogVariant[];\n};\n\ntype PackageInfo = {\n membership: string;\n package_name: string;\n base_price: number;\n discount_price: number;\n discount_percent: number;\n};\n\ntype UserInfo = {\n total: number;\n metadata: {\n code: string;\n expire_at: number;\n };\n};\n\ntype UpgradeInfo = {\n name: string;\n photo: string;\n packages: PackageInfo[];\n benefits: Benefit[];\n};\n\nconst UpgradePackage: React.FC = ({ upgradeType = \"premium\" }) => {\n const { profileObject, isLoading: profileLoading } = useGetUserProfileApi();\n const config = env();\n const token = getItem(ACCESS_TOKEN);\n const siteCode = getSiteCode();\n const [loading, setLoading] = useState(true);\n const navigate = useNavigate();\n const [userInfo, setUserInfo] = useState({\n total: 0,\n metadata: {\n code: \"free\",\n expire_at: 0,\n },\n });\n const [showPopup, setShowPopup] = useState(false);\n const [membership, setMembership] = useState(\"\");\n const [upgradeInfo, setUpgradeInfo] = useState({\n photo: \"\",\n name: \"\",\n benefits: [],\n packages: [],\n });\n const isProLifetime = userInfo.metadata.code === \"pro\" && !userInfo.metadata.expire_at;\n\n const { t } = useTranslation();\n\n useEffect(() => {\n if (!token || profileLoading) return;\n setLoading(true);\n\n const requestConfig = {\n headers: {\n \"X-Session-Token\": token,\n },\n };\n\n const fetchData = async () => {\n try {\n const [unusedMoney, catalog] = await Promise.all([axios.get(`${config.backendPaymentApiUrl}/account/get-unused-money?currency=thb&site_code=${siteCode}`, requestConfig), axios.get(`${config.baseApiUrl}/product-catalog/v1/site/${siteCode}/upgrade?country=TH&language=th`, requestConfig)]);\n setUserInfo({\n total: unusedMoney.data?.total,\n metadata: unusedMoney.data?.metadata,\n });\n const catalogRes: CatalogResponse[] = catalog.data?.catalogs || [];\n if (!catalogRes.length) {\n setLoading(false);\n return setUpgradeInfo({\n photo: \"\",\n name: \"\",\n benefits: [],\n packages: [],\n });\n }\n const premiumPackages = catalogRes.find((item) => item.code === \"premium\");\n const bundlePackage = catalogRes.find((item) => item.code === \"ai_role_play_sa\");\n let benefitList = bundlePackage ? bundlePackage?.benefits : premiumPackages?.benefits || [];\n let benefitName = bundlePackage ? bundlePackage?.name : premiumPackages?.name || \"\";\n let benefitPhoto = bundlePackage ? bundlePackage?.photo_url : premiumPackages?.photo_url || \"\";\n\n const packagesInfo = catalogRes.reduce((prev: PackageInfo[], item) => {\n const temp: PackageInfo[] = item.variants.map((item) => ({\n membership: item?.interface?.package,\n package_name: item?.interface?.package_name,\n base_price: item?.base_price,\n discount_price: item?.price,\n discount_percent: item?.discount_percent,\n }));\n return [...temp, ...prev];\n }, []);\n\n setUpgradeInfo({\n name: benefitName,\n photo: benefitPhoto,\n benefits: benefitList,\n packages: packagesInfo,\n });\n setLoading(false);\n } catch (error) {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [token, siteCode, config, profileLoading]);\n\n useEffect(() => {\n if (userInfo.metadata.code === \"premium\") {\n navigate(\"/\");\n }\n }, [userInfo, navigate]);\n\n const handleSubmit = () => {\n setShowPopup(true);\n };\n\n return (\n
    \n {loading ? (\n \n \n \n ) : (\n \n \n
    \n

    {t(\"courses.current_package\")}

    \n
    \n

    ELSA {userInfo && userInfo.metadata.code[0].toUpperCase() + userInfo.metadata.code.substring(1)}

    \n
    \n {isProLifetime ? (\n Lifetime\n ) : userInfo.metadata.expire_at ? (\n <>\n

    {t(\"courses.expired_date\")}:

    \n {new Date(userInfo.metadata.expire_at * 1000).toLocaleDateString(\"en-GB\")}\n \n ) : (\n \"\"\n )}\n
    \n
    \n
    \n
    \n

    {isProLifetime ? t(\"courses.get_add_on\") : t(\"courses.upgrade_to\") + (upgradeType === \"premium\" ? \" Premium\" : \" Pro\")}

    \n {userInfo.metadata.code === \"premium\" ? (\n
    \n

    {t(\"courses.scan_qr_code\")}

    \n \"\"\n
    \n ) : !upgradeInfo.packages.length ? (\n

    {t(\"courses.upgrade_not_available\")}

    \n ) : (\n upgradeInfo.packages.length && (\n <>\n
    \n {upgradeInfo.packages.map((item) => (\n \n ))}\n
    \n {userInfo.total &&
    ยอดเงินคงเหลือ {userInfo.total.toLocaleString(\"th-TH\")} บาท จะถูกหักกเมื่ออัปเกรดเป็นแพ็คเกจพรีเมียม
    }\n \n \n )\n )}\n
    \n \n {userInfo.metadata.code !== \"premium\" && (\n \n \n \n )}\n
    \n )}\n {showPopup && }\n
    \n );\n};\n\nexport default UpgradePackage;\n","export default __webpack_public_path__ + \"static/media/banner-ielts.73ff824e.jpg\";","import React, { useContext, useState } from 'react';\nimport CartContext, { CartItemProps } from 'stores/cart-context';\nimport IconCheck from 'assets/img/icon-check-1.svg';\nimport './courseHPC.css';\nimport { useTranslation } from 'react-i18next';\nimport GlobalStore, { Book } from 'stores/globalStore';\n\ntype PropTypes = {\n product: Book\n};\n\nconst CourseHPC: React.FC = ({\n product\n}) => {\n const [active, setActive] = useState(false);\n const cartCtx = useContext(CartContext);\n const { t } = useTranslation();\n const { currentLanguage } = GlobalStore.useContainer();\n\n const handleActive = () => {\n setActive(!active);\n };\n\n const addToCart = (product: any) => {\n const item: CartItemProps = {\n membership: product.membership,\n name: product.name,\n price: product.discount_price,\n amount: 1\n };\n if (cartCtx.addItem) {\n cartCtx.addItem(item)\n }\n }\n\n const genSaleTags = (is_featured: boolean, percent: number, currentLanguage: string) => {\n if( is_featured ) {\n return currentLanguage === 'vi' ? 'ทางเลือกที่ดีที่สุด' : 'Best choice';\n } else {\n return currentLanguage === 'vi' ? `-${percent}%`: `Sale ${percent}%`;\n }\n };\n\n return (\n \n
    \n
    \n {product.name}\n
    \n { product.is_featured &&
    {genSaleTags(product.is_featured, product.discount_percent, currentLanguage)}
    }\n

    {product.name}

    \n
      \n {product.membership === 'combo_ielts_band_6_7_9' ?\n product.meta.include?.map(item =>\n
    • \n \"icon\"\n {item}\n
    • \n ) :\n <>\n {\n product.meta.unit &&
    • \n \"icon\"\n {product.meta.unit} units\n
    • \n }\n {\n product.meta.lesson &&
    • \n \"icon\"\n {product.meta.lesson} lessons\n
    • \n }\n \n }\n
    \n

    {currentLanguage === 'vi' ? 'ระดับปัจจุบัน: ' : 'Level: '} IELTS

    \n
    \n
    \n
    \n
      \n {product.membership === 'hpc_all_books' ?\n product.meta.include?.map(item =>\n
    • \n \"icon\"\n {item}\n
    • \n ) :\n <>\n {\n product.meta.unit &&
    • \n \"icon\"\n {product.meta.unit} units\n
    • \n }\n {\n product.meta.lesson &&
    • \n \"icon\"\n {product.meta.lesson} lessons\n
    • \n }\n \n }\n
    \n

    {currentLanguage === 'vi' ? 'ระดับปัจจุบัน: ' : 'Level: '} IELTS

    \n
    \n
    \n
    \n
    \n

    {product.discount_price.toLocaleString('vn-VN')} บาท

    \n
    {genSaleTags(product.is_featured, product.discount_percent, currentLanguage)}
    \n
    \n addToCart(product)}\n >\n {t('courses.add_to_cart')}\n \n
    \n

    \n {active ? `${t('courses.back')}` : `${t('courses.view_detail')}`}\n

    \n \n );\n};\nexport default CourseHPC;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport './HarperCollins.css';\nimport { useTranslation } from 'react-i18next';\nimport Banner from 'assets/img/banner-ielts.jpg';\nimport CourseIelts from 'components/Cards/courseIelts';\nimport GlobalStore from 'stores/globalStore';\n\nconst IELTS: React.FC = () => {\n const { bookData } = GlobalStore.useContainer();\n const { t } = useTranslation();\n\n return (\n
    \n

    \n IETLS Speaking Test\n

    \n

    {t('courses.des_harper_collins')}

    \n \"banner\"\n
    \n {bookData.ielts.map((hpc, index) => (\n \n \n
    \n ))}\n
    \n
    \n

    {t('courses.see_more_package')}:

    \n \n \n \n \n \n \n
    \n \n );\n};\n\nexport default IELTS;\n","import { Navigate, Route, Routes} from 'react-router-dom';\nimport React from 'react';\nimport Dashboard from './dashboard/dashboard';\nimport ProfileUser from './dashboard/user/profileUser';\nimport ChangePasswordUser from './dashboard/user/changePasswordUser';\nimport ChangeProfileUser from './dashboard/user/changeProfileUser';\nimport ScoringUser from './dashboard/score/scoringUser';\nimport RedeemVoucher from './dashboard/redeem/redeemVoucher';\nimport BillList from './dashboard/bill/BillList';\nimport Oxford from './dashboard/course/Oxford';\nimport Login from './login/login';\nimport Signup from './login/signup';\nimport ForgetPassword from './login/forgetPassword';\nimport ELSACourse from './dashboard/course/ELSACourse';\nimport Page404 from './404/Page404'\nimport HarperCollins from './dashboard/course/HarperCollins';\nimport UpgradePackage from './dashboard/course/UpgradePackage';\nimport IELTS from './dashboard/course/Ielts';\n\nconst AppRoutes: React.FC = () => {\n const isLoggedIn: boolean = localStorage.getItem('sessionToken') !== null;\n return (\n \n }>\n } />\n } />\n } />\n } />\n } />\n } />\n }>\n } />\n } />\n } />\n } />\n \n } />\n }\n />\n } />\n \n :} />\n :} />\n :} />\n } />\n \n );\n};\n\nexport default AppRoutes;\n","import React from \"react\";\nimport AppRoutes from \"pages/routes\";\nimport GlobalStore from \"stores/globalStore\";\nimport CartProvider from 'stores/CartProvider';\nimport env from \"utils/env\";\nimport { Helmet } from 'react-helmet';\n\nconst App: React.FC = () => {\n env();\n\n return (\n
    \n \n User Dashboard\n \n \n \n \n \n \n \n \n
    \n );\n};\n\nexport default App;\n","import ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport 'antd/dist/antd.css';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n// import * as Sentry from '@sentry/react';\nimport App from 'App';\nimport 'index.css';\n\nimport translationTH from './assets/languages/th.json';\nimport translationEN from './assets/languages/en.json';\n\n// Sentry.init({\n// dsn: 'https://48bd0265fc904095a4035422d3bc4145@o83917.ingest.sentry.io/4504959207079936',\n// environment: process.env.REACT_APP_ENV || 'dev'\n// });\n\ni18n\n .use(initReactI18next)\n .use(LanguageDetector)\n .init({\n lng: 'vi',\n supportedLngs: ['en', 'vi'],\n resources: {\n en: {\n translation: translationEN\n },\n vi: {\n translation: translationTH\n }\n },\n fallbackLng: 'vi',\n debug: false,\n detection: {\n order: ['sessionStorage', 'cookie'],\n caches: ['sessionStorage', 'cookie'],\n lookupLocalStorage: 'i18next'\n }\n });\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}