{"version":3,"sources":["webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/assets/feedback.png","webpack:///./src/desktop/containers/Pro/components/UpgradeAction/style.less","webpack:///./src/desktop/components/Header/Base.tsx","webpack:///./src/desktop/containers/Pro/components/Header/Header.tsx","webpack:///./src/desktop/containers/Pro/components/Header/index.ts","webpack:///./src/desktop/containers/Pro/components/ActivitionCodeModal/ActivitionCodeModal.tsx","webpack:///./src/desktop/containers/Pro/components/ActivitionCodeModal/index.ts","webpack:///./src/desktop/containers/Pro/components/InviteFriendsModal/InviteFriendsModal.tsx","webpack:///./src/desktop/containers/Pro/components/InviteFriendsModal/index.ts","webpack:///./src/desktop/containers/Pro/components/UpgradeAction/UpgradeAction.tsx","webpack:///./src/desktop/containers/Pro/components/UpgradeAction/index.ts","webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/UpgradeOptions.tsx","webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/index.ts","webpack:///./src/desktop/containers/Pro/components/UserStatus/UserStatus.tsx","webpack:///./src/desktop/containers/Pro/components/UserStatus/index.ts","webpack:///./src/desktop/containers/Pro/Pro.tsx","webpack:///./src/desktop/containers/Pro/style.less","webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/assets/pay-pro.png","webpack:///./src/desktop/containers/Pro/components/UserStatus/assets/default-avatar.png","webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/assets/invite-friend.png","webpack:///./src/desktop/containers/Pro/components/UserStatus/style.less","webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/style.less","webpack:///./src/desktop/containers/Pro/components/UpgradeOptions/assets/chat-us.png","webpack:///./src/desktop/containers/Pro/components/InviteFriendsModal/style.less","webpack:///./src/desktop/containers/Pro/components/ActivitionCodeModal/style.less"],"names":["module","exports","BaseHeader","props","useState","withBorder","setWithBorder","calcIfWithBorder","window","scrollY","useEffect","addEventListener","removeEventListener","classnames","Container","Logo","actions","Header","t","useTranslate","dispatch","useDispatch","history","useHistory","headerActions","Button","onClick","length","goBack","push","Base","ActivitionCodeModal","visible","handleClose","onClose","upgradeCode","setUpgradeCode","error","setError","netFetchUser","useFetch","url","Api","FetchUser","method","net","UpgradeProByCode","netUpgradeByCode","upgradeByCodeLoading","loading","errorEl","Modal","onSubmit","e","preventDefault","data","code","then","res","StatusCodes","Success","toast","success","vipDays","duration","userActions","injectUser","CodeNotExist","warn","single","CodeHadBeenUsed","Input","onChange","currentTarget","value","onFocus","onBlur","placeholder","type","block","disabled","LoadingState","LOADING","InviteFriendsModal","inviteCount","setInviteCount","user","useSelector","state","shallowEqual","inviteLink","useRef","userInviteUrl","CLIENT_CONFIG","host","id","netGetInviteCount","GetInviteCount","ref","readOnly","current","select","document","execCommand","dangerouslySetInnerHTML","__html","getSaftyHtml","UpgradeAction","icon","title","tip","action","handleAction","onAction","clickable","src","alt","UpgradeOptions","showActivitionModal","toggleActivitionModal","showInviteFriendsModal","toggleInviteFriendsModal","canGetVip","setCanGetVip","netCheckVip","CheckFeedbackVip","GetFeedbackVip","netGetVip","getVipLoading","canGet","upgradeActions","inviteIcon","feedbackIcon","location","href","Path","Feedback","chatIcon","ContactUs","payIcon","map","option","key","UserStatus","loadings","dayjs","useDayjs","userData","expirationDate","vipEndDate","isPro","level","UserLevel","Pro","avatarUrl","photo","getImageUrl","defaultAvatar","content","API","SUCCESS","name","className","pro","format","Spin","spinning","login","SignIn","Helmet","Link","to","AboutPro"],"mappings":"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","file":"Pro-6d2441c1e3166183d20e.js","sourcesContent":["module.exports = __webpack_public_path__ + \"a4741e4cc0ee3731d8e8863ea85c0547.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"upgrade-action\":\"style__upgrade-action___29AZSQRu\",\"disabled\":\"style__disabled___npFWt0jD\",\"icon\":\"style__icon___2hIilUM1\",\"content\":\"style__content___2AJeQqj4\",\"title\":\"style__title___xx9UOsNI\",\"tip\":\"style__tip___10ODnpDQ\",\"action\":\"style__action___3n_NfDNR\"};","import React, { useState, useEffect } from 'react';\nimport classnames from 'classnames';\nimport Container from '$components/Container';\nimport Logo from '$commons/components/Logo';\n\nimport './style.less';\n\nexport interface BaseHeaderProps {\n actions: React.ReactNode;\n}\n\nfunction BaseHeader(props: BaseHeaderProps): React.ReactElement {\n const [withBorder, setWithBorder] = useState(false);\n\n useEffect(() => {\n calcIfWithBorder();\n window.addEventListener('scroll', calcIfWithBorder);\n return () => {\n window.removeEventListener('scroll', calcIfWithBorder);\n };\n }, [withBorder]);\n\n // TODO: 节流\n function calcIfWithBorder() {\n if (window.scrollY > 20 && !withBorder) {\n setWithBorder(true);\n } else if (window.scrollY <= 20 && withBorder) {\n setWithBorder(false);\n }\n }\n\n return (\n
\n \n
\n \n {props.actions}\n
\n
\n
\n );\n}\n\nexport default BaseHeader;\n","import { goBack, push } from 'connected-react-router';\nimport React from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport BaseHeader from '$components/Header/Base';\nimport Button from '$mubu-ui/Button';\nimport useTranslate from '$translate';\n\nfunction Header() {\n const t = useTranslate();\n const dispatch = useDispatch();\n const history = useHistory();\n\n function handleClickBack() {\n // 新 tab 和当前页面都会在 history stack 中,所以要排除这两个页面\n if (history.length > 2) {\n dispatch(goBack());\n } else {\n dispatch(push('/'));\n }\n }\n\n const headerActions = (\n \n );\n\n return ;\n}\n\nexport default Header;\n","import Header from './Header';\n\nexport default Header;\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport Api from '$constants/api';\nimport { LoadingState, StatusCodes } from '$constants/fetch';\nimport useFetch from '$hooks/useFetch';\nimport Button from '$mubu-ui/Button';\nimport Input from '$mubu-ui/Input';\nimport Modal from '$mubu-ui/Modal';\nimport toast from '$mubu-ui/Toast';\nimport userActions from '$redux/actions/user';\nimport useTranslate from '$translate';\n\nimport './style.less';\n\ntype ActivitionCodeModalProps = {\n visible: boolean;\n onClose: () => void;\n};\n\nfunction ActivitionCodeModal(props: ActivitionCodeModalProps) {\n const { visible, onClose: handleClose } = props;\n const dispatch = useDispatch();\n const t = useTranslate();\n\n const [upgradeCode, setUpgradeCode] = useState('');\n const [error, setError] = useState('');\n\n const { net: netFetchUser } = useFetch({\n url: Api.FetchUser,\n method: 'post',\n });\n const { net: netUpgradeByCode, loading: upgradeByCodeLoading } = useFetch({\n url: Api.UpgradeProByCode,\n method: 'post',\n });\n\n function handleUpgradeCodeChange(e: React.FormEvent) {\n setUpgradeCode(e.currentTarget.value);\n }\n\n function handleUpgradeFocus() {\n setError('');\n }\n\n function handleUpgradeBlur() {\n if (!upgradeCode) {\n setError(t('TransnoWeb_Form_ErrmsgRequired'));\n }\n }\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault();\n\n if (!upgradeCode) {\n setError(t('TransnoWeb_Form_ErrmsgRequired'));\n return;\n }\n\n netUpgradeByCode({ data: { code: upgradeCode } }).then((res) => {\n if (res) {\n switch (res.code) {\n case StatusCodes.Success:\n toast.success(\n t('TransnoWeb_Toast_UpgradeCodeSuccess', [res.data.vipDays]),\n { duration: 1.5 }\n );\n netFetchUser({}).then(\n (res) => res && dispatch(userActions.injectUser(res))\n );\n break;\n case StatusCodes.CodeNotExist:\n toast.warn(t('TransnoWeb_Toast_UpgradeCodeNotExist'), {\n duration: 1.5,\n single: true,\n });\n break;\n case StatusCodes.CodeHadBeenUsed:\n toast.warn(t('TransnoWeb_Toast_UpgradeCodeBeenUsed'), {\n duration: 1.5,\n single: true,\n });\n break;\n default:\n toast.error(t('TransnoWeb_Toast_TryAgain'), {\n duration: 1.5,\n single: true,\n });\n }\n } else {\n toast.error(t('TransnoWeb_Toast_TryAgain'), {\n duration: 1.5,\n single: true,\n });\n }\n });\n }\n const errorEl = error ?
{error}
: null;\n\n return (\n \n
\n
\n

{t('TransnoWeb_Pro_EnterAcCode')}

\n
\n \n {errorEl}\n
\n
\n

{t('TransnoWeb_Pro_UpgradeCodeDesc1')}

\n

{t('TransnoWeb_Pro_UpgradeCodeDesc2')}

\n
\n
\n \n {t('TransnoWeb_Form_Submit')}\n \n
\n
\n
\n
\n );\n}\n\nexport default ActivitionCodeModal;\n","import ActivitionCodeModal from './ActivitionCodeModal';\n\nexport default ActivitionCodeModal;\n","import React, { useEffect, useRef, useState } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport useFetch from '$hooks/useFetch';\nimport Modal from '$mubu-ui/Modal';\nimport toast from '$mubu-ui/Toast';\nimport { StoreState } from '$redux/models';\nimport Api from '$shared/constants/api';\nimport { getSaftyHtml } from '$shared/utils/i18n';\nimport useTranslate from '$translate';\n\nimport './style.less';\n\ntype InviteFriendsModalProps = {\n visible: boolean;\n onClose: () => void;\n};\n\nfunction InviteFriendsModal(props: InviteFriendsModalProps) {\n const { visible, onClose: handleClose } = props;\n const t = useTranslate();\n\n const [inviteCount, setInviteCount] = useState(0);\n\n const { user } = useSelector(\n (state: StoreState) => ({\n user: state.user,\n }),\n shallowEqual\n );\n\n const inviteLink = useRef(null);\n const userInviteUrl = user.user\n ? `https://${CLIENT_CONFIG.host}/inv/${user.user.id}`\n : '...';\n\n const { net: netGetInviteCount } = useFetch({\n url: Api.GetInviteCount,\n method: 'post',\n });\n\n function handleClickCopy() {\n if (!inviteLink.current) {\n return;\n }\n\n inviteLink.current.select();\n try {\n document.execCommand('copy');\n toast.success(t('TransnoWeb_Commons_CopySuccess'));\n } catch (e) {\n toast.success(t('TransnoWeb_Commons_CopyFailed'));\n }\n }\n\n useEffect(() => {\n // TODO: 这里需要在 unmounted 的时候 cancel request\n\n netGetInviteCount({}).then((res) => {\n if (res && res.data) {\n setInviteCount(res.data.inviteCount);\n }\n });\n }, []);\n\n return (\n \n
\n
\n

{t('TransnoWeb_Pro_InviteFriends')}

\n

{t('TransnoWeb_Pro_InviteSubTitle')}

\n
\n
\n \n \n
\n \n
\n
\n {t('TransnoWeb_Pro_TotalInviteNumber')}\n
\n
{inviteCount}
\n
\n
\n
\n );\n}\n\nexport default InviteFriendsModal;\n","import InviteFriendsModal from './InviteFriendsModal';\n\nexport default InviteFriendsModal;\n","import classnames from 'classnames';\nimport React from 'react';\n\nimport { getSaftyHtml } from '$shared/utils/i18n';\n\nimport './style.less';\n\ntype UpgradeActionProps = {\n icon: string;\n title: string;\n tip: string;\n action: string;\n onAction?: () => void;\n disabled?: boolean;\n clickable?: boolean;\n};\n\nfunction UpgradeAction(props: UpgradeActionProps) {\n const {\n icon,\n title,\n tip,\n action,\n disabled,\n onAction: handleAction,\n clickable,\n } = props;\n\n return (\n
\n
\n {title}\n
\n
\n

{title}

\n \n
\n
\n \n
\n
\n );\n}\n\nexport default UpgradeAction;\n","import UpgradeAction from './UpgradeAction';\n\nexport default UpgradeAction;\n","import React, { useEffect, useState } from 'react';\n\nimport Api from '$constants/api';\nimport { LoadingState } from '$constants/fetch';\nimport { Path } from '$constants/page';\nimport ActivitionCodeModal from '$containers/Pro/components/ActivitionCodeModal';\nimport InviteFriendsModal from '$containers/Pro/components/InviteFriendsModal';\nimport UpgradeAction from '$containers/Pro/components/UpgradeAction';\nimport chatIcon from '$containers/Pro/components/UpgradeOptions/assets/chat-us.png';\nimport feedbackIcon from '$containers/Pro/components/UpgradeOptions/assets/feedback.png';\nimport inviteIcon from '$containers/Pro/components/UpgradeOptions/assets/invite-friend.png';\nimport payIcon from '$containers/Pro/components/UpgradeOptions/assets/pay-pro.png';\nimport useFetch from '$hooks/useFetch';\nimport useTranslate from '$translate';\n\nimport './style.less';\n\nfunction UpgradeOptions() {\n const t = useTranslate();\n\n const [showActivitionModal, toggleActivitionModal] = useState(false);\n const [showInviteFriendsModal, toggleInviteFriendsModal] = useState(false);\n const [canGetVip, setCanGetVip] = useState(false);\n\n const { net: netCheckVip } = useFetch({\n url: Api.CheckFeedbackVip,\n method: 'post',\n });\n const { net: netGetVip, loading: getVipLoading } = useFetch({\n url: Api.GetFeedbackVip,\n method: 'post',\n });\n\n useEffect(() => {\n // TODO: 这里需要在 unmounted 的时候 cancel request\n netCheckVip({}).then((res) => {\n if (res && res.data) {\n setCanGetVip(res.data.canGet);\n }\n });\n }, []);\n\n function handleClickInviteFriends() {\n toggleInviteFriendsModal(true);\n }\n\n function handleInviteFriendsClose() {\n toggleInviteFriendsModal(false);\n }\n\n function handleClickFeedback() {\n if (canGetVip) {\n netGetVip({}).then(\n (res) => res && (window.location.href = Path.Feedback)\n );\n } else {\n window.location.href = Path.Feedback;\n }\n }\n function handleClickChat() {\n window.location.href = Path.ContactUs;\n }\n\n function handleClickActivitionCode() {\n toggleActivitionModal(true);\n }\n\n function handleActivitionModalClose() {\n toggleActivitionModal(false);\n }\n\n // 菜单列表\n const optionList = [\n {\n icon: inviteIcon,\n title: t('TransnoWeb_Pro_InviteFriends'),\n tip: t('TransnoWeb_Pro_UpgradeTip1'),\n action: t('TransnoWeb_Pro_Go'),\n onAction: handleClickInviteFriends,\n disabled: false,\n clickable: true,\n },\n {\n icon: feedbackIcon,\n title: t('TransnoWeb_Pro_Feedback'),\n tip: canGetVip\n ? t('TransnoWeb_Pro_UpgradeTip2')\n : t('TransnoWeb_Pro_UpgradeTip5'),\n action: canGetVip ? t('TransnoWeb_Pro_Go') : t('TransnoWeb_Pro_Got'),\n onAction: handleClickFeedback,\n clickable: getVipLoading !== LoadingState.LOADING,\n disabled: !canGetVip,\n },\n {\n icon: chatIcon,\n title: t('TransnoWeb_Pro_ChatUs'),\n tip: t('TransnoWeb_Pro_UpgradeTip3'),\n action: t('TransnoWeb_Pro_Go'),\n onAction: handleClickChat,\n disabled: false,\n clickable: true,\n },\n {\n icon: payIcon,\n title: t('TransnoWeb_Pro_PayForPro'),\n tip: t('TransnoWeb_Pro_UpgradeTip4'),\n action: t('TransnoWeb_Pro_Go'),\n disabled: true,\n onAction: () => {},\n clickable: false,\n },\n ];\n\n const upgradeActions = optionList.map((option) => (\n
\n \n
\n ));\n\n return (\n
\n

{t('TransnoWeb_Pro_UpgradeOptions')}

\n
{upgradeActions}
\n
\n \n {t('TransnoWeb_Pro_EnterAcCode')}\n \n
\n \n \n
\n );\n}\n\nexport default UpgradeOptions;\n","import UpgradeOptions from './UpgradeOptions';\n\nexport default UpgradeOptions;\n","import classnames from 'classnames';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport Container from '$components/Container';\nimport { UserLevel } from '$constants';\nimport API from '$constants/api';\nimport { LoadingState } from '$constants/fetch';\nimport useDayjs from '$hooks/useDayjs';\nimport Spin from '$mubu-ui/Spin';\nimport { StoreState } from '$redux/models';\nimport useTranslate from '$translate';\nimport { getImageUrl } from '$utils/api';\n\nimport defaultAvatar from './assets/default-avatar.png';\n\nimport './style.less';\n\nfunction UserStatus() {\n const { loadings, user } = useSelector((state: StoreState) => ({\n user: state.user,\n loadings: state.loadings,\n }));\n const t = useTranslate();\n const dayjs = useDayjs();\n\n const userData = user.user;\n\n const expirationDate = dayjs(userData.vipEndDate || '');\n const isPro = userData.level === UserLevel.Pro;\n const avatarUrl = userData.photo\n ? getImageUrl(userData.photo)\n : defaultAvatar;\n\n const content =\n loadings[API.FetchUser] === LoadingState.SUCCESS ? (\n <>\n
\n {userData.name}\n
\n
\n
{userData.name}
\n
ID: {userData.id}
\n
\n
\n
\n {t('TransnoWeb_Pro_AccountType')}\n \n {isPro\n ? t('TransnoWeb_Pro_ProStatus')\n : t('TransnoWeb_Pro_BasicStatus')}\n \n
\n
\n {isPro && (\n <>\n \n {t('TransnoWeb_Pro_ExpirationTime')}\n \n {expirationDate.format('ll')}\n \n )}\n
\n
\n \n ) : null;\n\n return (\n
\n \n \n
{content}
\n
\n
\n
\n );\n}\n\nexport default UserStatus;\n","import UserStatus from './UserStatus';\n\nexport default UserStatus;\n","import { push } from 'connected-react-router';\nimport React, { useEffect } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport Link from '$components/Link';\nimport OptionsComparation from '$components/OptionComparation';\nimport API from '$constants/api';\nimport { LoadingState } from '$constants/fetch';\nimport { Path } from '$constants/page';\nimport Header from '$containers/Pro/components/Header';\nimport UpgradeOptions from '$containers/Pro/components/UpgradeOptions';\nimport UserStatus from '$containers/Pro/components/UserStatus';\nimport { StoreState } from '$redux/models';\nimport useTranslate from '$translate';\n\nimport './style.less';\n\nfunction Pro() {\n const t = useTranslate();\n const dispatch = useDispatch();\n\n const { loadings, user } = useSelector(\n (state: StoreState) => ({\n loadings: state.loadings,\n user: state.user,\n }),\n shallowEqual\n );\n\n useEffect(() => {\n if (loadings[API.FetchUser] === LoadingState.SUCCESS && !user.login) {\n dispatch(push(`${Path.SignIn}?next=${Path.Pro}`));\n }\n }, [loadings[API.FetchUser]]);\n\n return (\n
\n \n {t('TransnoWeb_Meta_ProTitle')}\n \n
\n \n \n \n
\n \n {t('TransnoWeb_Pro_MoreAboutTransnoPro')}\n \n
\n
\n );\n}\n\nexport default Pro;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pro\":\"style__pro___1RZGzZlX\",\"about-transno-pro\":\"style__about-transno-pro___2pA-7NUy\"};","module.exports = __webpack_public_path__ + \"b72a7eef4a4c500417112355342b1b36.png\";","module.exports = __webpack_public_path__ + \"57133afbdbc76c2087d173c92b858fce.png\";","module.exports = __webpack_public_path__ + \"07b2d4133b764b63cd76067c92c15200.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"user-status\":\"style__user-status___73NDGJqa\",\"content-wrapper\":\"style__content-wrapper___2jqbg214\",\"avatar\":\"style__avatar___cYh8UmwU\",\"user-meta\":\"style__user-meta___B02AehSf\",\"name\":\"style__name___2nV2wEvb\",\"pro-status\":\"style__pro-status___331AE3Ms\",\"value\":\"style__value___3ACJaOJv\",\"account-type\":\"style__account-type___2Isgy63U\",\"pro\":\"style__pro___32SBP_yR\",\"expiration-time\":\"style__expiration-time___2MAQAWXs\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"upgrade-options\":\"style__upgrade-options___1DcwtCiH\",\"title\":\"style__title___3ouXEaj0\",\"upgrade-actions\":\"style__upgrade-actions___UdwH3kth\",\"upgrade-action-layout\":\"style__upgrade-action-layout___2t1cAd9-\",\"activition-code\":\"style__activition-code___3BjPs8qc\",\"enter-activition-code\":\"style__enter-activition-code___Y0Fah7_y\"};","module.exports = __webpack_public_path__ + \"cdfba8fb07d1da4eab0c4171c182a31f.png\";","// extracted by mini-css-extract-plugin\nmodule.exports = {\"invite-friend-modal\":\"style__invite-friend-modal___wiWPLBLs\",\"title\":\"style__title___1mgNQFXc\",\"sub-title\":\"style__sub-title___3VHmVjSe\",\"invite-link-field\":\"style__invite-link-field___1n_QNjnC\",\"invite-link\":\"style__invite-link___OV6Jc0rh\",\"invite-description\":\"style__invite-description___2eJFAZEZ\",\"total-invited\":\"style__total-invited___1GhOP4VZ\",\"total-invited-title\":\"style__total-invited-title___hjFOQFu7\",\"total-invited-count\":\"style__total-invited-count___G_k_-DGn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"upgrade-code-modal\":\"style__upgrade-code-modal___1XUoO4aO\",\"title\":\"style__title___b2buGPGT\",\"error\":\"style__error___1X4uGP_w\",\"enter-upgrade-code\":\"style__enter-upgrade-code___1qCfkq5B\",\"upgrade-code-description\":\"style__upgrade-code-description___2RTshZGf\",\"submit\":\"style__submit___32gyknug\"};"],"sourceRoot":""}