{"version":3,"file":"static/chunks/26-cb8efba58a309441.js","mappings":"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","sources":["webpack://_N_E/./src/components/molecules/Footer.tsx","webpack://_N_E/./src/components/templates/LoginPanel.tsx","webpack://_N_E/./src/styles/components/molecules/Footer.module.scss","webpack://_N_E/./src/styles/pages/login.module.scss"],"sourcesContent":["import clsx from 'clsx';\nimport Link from 'next/link';\nimport { ReportCategory } from 'cutopia-types';\nimport { FC } from 'react';\nimport styles from '../../styles/components/molecules/Footer.module.scss';\nimport { viewStore } from '../../store';\n\ntype MultiTypeLink = {\n label: string;\n to?: string;\n onClick?: (...args: any[]) => any;\n url?: string;\n};\n\nconst FOOTER_ITEMS = [\n {\n label: 'About',\n to: '/about',\n },\n {\n label: 'GitHub',\n to: 'https://github.com/cutopia-labs/CUtopia',\n },\n {\n label: 'Support ♡',\n to: 'https://ko-fi.com/cutopia',\n },\n {\n label: 'Report Issues',\n onClick: () => {\n viewStore.setDialog({\n key: 'reportIssues',\n contentProps: {\n reportCategory: ReportCategory.ISSUE,\n },\n });\n },\n },\n {\n label: 'Follow Us',\n url: 'https://www.instagram.com/cutopia.app',\n },\n {\n label: 'Contact Us',\n url: 'mailto:cutopia.app@gmail.com',\n },\n];\n\nconst renderItem = (item: MultiTypeLink) => {\n if (item.to) {\n return (\n \n {item.label}\n \n );\n }\n if (item.url) {\n return (\n \n {item.label}\n \n );\n }\n if (item.onClick) {\n return (\n \n {item.label}\n \n );\n }\n return null;\n};\n\ntype FooterProps = {\n mt?: boolean;\n mb?: boolean;\n style?: string;\n visible?: boolean;\n};\n\nconst Footer: FC = ({ mt, mb, style, visible = true }) => {\n if (!visible) return null;\n return (\n
\n {FOOTER_ITEMS.map(item => renderItem(item))}\n
\n );\n};\n\nexport default Footer;\n","import { useState, useEffect, FC } from 'react';\nimport { IconButton } from '@mui/material';\nimport { ArrowBack } from '@mui/icons-material';\nimport * as Sentry from '@sentry/nextjs';\nimport { observer } from 'mobx-react-lite';\nimport { useMutation } from '@apollo/client';\nimport { useRouter } from 'next/router';\nimport clsx from 'clsx';\nimport { USERNAME_RULE, SID_RULE, PASSWORD_RULE } from 'cutopia-types';\n\nimport styles from '../../styles/pages/login.module.scss';\nimport TextField from '../atoms/TextField';\nimport { useView, useUser } from '../../store';\nimport {\n LOGIN_CUTOPIA,\n SEND_VERIFICATION,\n VERIFY_USER,\n SEND_RESET_PASSWORD_CODE,\n RESET_PASSWORD,\n} from '../../constants/mutations';\nimport { LoginPageMode } from '../../types';\nimport handleCompleted from '../../helpers/handleCompleted';\nimport { LOGIN_REDIRECT_PAGE } from '../../config';\nimport Footer from '../molecules/Footer';\nimport LoadingButton from '../atoms/LoadingButton';\n\nconst INITIAL_MODE = LoginPageMode.CUTOPIA_LOGIN;\nconst MODE_ITEMS = {\n [LoginPageMode.CUTOPIA_LOGIN]: {\n title: 'Log In',\n caption: 'Welcome back',\n userId: 'Username / CUHK SID',\n password: 'Password',\n button: 'Log In',\n },\n [LoginPageMode.CUTOPIA_SIGNUP]: {\n title: 'Sign Up',\n caption: 'A few steps away from unlimited course reviews',\n sid: 'Your CUHK SID (for verification)',\n username: 'Username (2-10 chars, case sensitive)',\n password: 'Password (8-15 chars)',\n button: 'Sign Up',\n },\n [LoginPageMode.VERIFY]: {\n title: 'Verify',\n caption:\n 'An verification code has been sent to CUHK email.\\nPlease enter your code here:',\n verificationCode: 'Verification Code',\n button: 'Verify',\n },\n [LoginPageMode.RESET_PASSWORD]: {\n title: 'Reset Password',\n caption: 'An verification code will be sent to your CUHK email',\n userId: 'Username / CUHK SID',\n button: 'Send Reset Code',\n },\n [LoginPageMode.RESET_PASSWORD_VERIFY]: {\n title: 'Set New Password',\n caption:\n 'Please enter new password and the verification code in your CUHK email',\n password: 'New Password',\n verificationCode: 'Verification Code',\n button: 'Send',\n },\n};\n\nconst PATH_MODE_LOOKUP = {\n 'signup': LoginPageMode.CUTOPIA_SIGNUP,\n 'login': LoginPageMode.CUTOPIA_LOGIN,\n 'verify': LoginPageMode.VERIFY,\n 'forgot': LoginPageMode.RESET_PASSWORD,\n 'reset-pwd': LoginPageMode.RESET_PASSWORD_VERIFY,\n};\n\nconst PREVIOUS_MODE_LOOKUP = {\n [LoginPageMode.VERIFY]: LoginPageMode.CUTOPIA_LOGIN,\n [LoginPageMode.RESET_PASSWORD]: LoginPageMode.CUTOPIA_LOGIN,\n [LoginPageMode.RESET_PASSWORD_VERIFY]: LoginPageMode.RESET_PASSWORD,\n};\n\ntype Props = {\n className?: string;\n returnUrl?: string;\n};\n\ntype QueryParams = {\n mode: string;\n username: string;\n userId: string;\n code: string;\n returnUrl?: string;\n};\n\nexport const isSid = (str: string) => SID_RULE.test(str);\n\nconst LoginPanel: FC = ({ className, returnUrl }) => {\n const router = useRouter();\n const {\n mode: queryMode,\n username: queryUsername,\n userId: queryUserId,\n code: queryCode,\n returnUrl: queryReturnUrl,\n } = router.query as QueryParams;\n returnUrl ||= queryReturnUrl;\n const [mode, setMode] = useState(INITIAL_MODE);\n const [username, setUsername] = useState('');\n const [verificationCode, setVerificationCode] = useState('');\n const [sid, setSid] = useState('');\n const [userId, setUserId] = useState('');\n const [password, setPassword] = useState('');\n const [invisible, setInvisible] = useState(true);\n const [errors, setErrors] = useState({\n verification: null,\n username: null,\n sid: null,\n password: null,\n userId: null,\n });\n\n const user = useUser();\n const view = useView();\n\n useEffect(() => {\n const mode = queryMode ? PATH_MODE_LOOKUP[queryMode] : INITIAL_MODE;\n if (queryUsername || queryCode || queryUserId) {\n setUsername(queryUsername);\n setUserId(queryUserId);\n setVerificationCode(queryCode);\n }\n // Handle sign up verify (RESET PWD VERIFY NO NEED AUTO, CUZ NEED SET PWD)\n if (mode === LoginPageMode.VERIFY && queryUsername && queryCode) {\n verifyUser({\n variables: {\n username: queryUsername,\n code: queryCode,\n },\n });\n }\n setMode(mode);\n }, [queryMode]);\n\n // Maybe shall disable, and let user switch acc?\n useEffect(() => {\n if (user.loggedIn) {\n router.push(LOGIN_REDIRECT_PAGE);\n }\n }, []);\n\n const [createUser, { loading: creatingUser, error: createError }] =\n useMutation(SEND_VERIFICATION, {\n onCompleted: handleCompleted(() => setMode(LoginPageMode.VERIFY), {\n message: 'Verification code has been sent to your CUHK email',\n view,\n }),\n onError: view.handleError,\n });\n const [verifyUser, { loading: verifying, error: verifyError }] = useMutation(\n VERIFY_USER,\n {\n onCompleted: handleCompleted(() => loginAndRedirect(), {\n view,\n message: 'Verification success!',\n }),\n onError: e => {\n view.handleError(e);\n setMode(LoginPageMode.VERIFY);\n },\n }\n );\n const [loginCUtopia, { loading: loggingInCUtopia }] = useMutation(\n LOGIN_CUTOPIA,\n {\n onCompleted: handleCompleted(\n async data => {\n user.saveUser(username, data.login?.token, data.login?.me);\n if (data.login?.me?.username) {\n Sentry.setUser({\n username: data.login?.me?.username,\n });\n }\n // If wrapped in auth route, will push again to reload if same route\n if (router.asPath !== returnUrl) {\n router.push(returnUrl || LOGIN_REDIRECT_PAGE); // return to prev page or review home page\n }\n },\n { mute: true } // login snackbar called user store\n ),\n onError: view.handleError,\n }\n );\n const [sendResetPasswordCode, { loading: sendingResetCode }] = useMutation(\n SEND_RESET_PASSWORD_CODE,\n {\n onCompleted: handleCompleted(\n () => setMode(LoginPageMode.RESET_PASSWORD_VERIFY),\n {\n message: 'Verification code has been sent to your CUHK email',\n view,\n }\n ),\n onError: view.handleError,\n }\n );\n const [resetPassword, { loading: resettingPassword }] = useMutation(\n RESET_PASSWORD,\n {\n onCompleted: handleCompleted(() => setMode(LoginPageMode.CUTOPIA_LOGIN), {\n view,\n }),\n onError: view.handleError,\n }\n );\n\n const loginAndRedirect = async () => {\n if (password) {\n const loginPayload = {\n variables: {\n userId: userId || username, // username is for verified user auto login\n password,\n },\n };\n await loginCUtopia(loginPayload);\n } else {\n setMode(LoginPageMode.CUTOPIA_LOGIN);\n }\n };\n\n const validate = (): boolean => {\n /* Valid username && username is NOT SID */\n const usernameSignUpError =\n mode === LoginPageMode.CUTOPIA_SIGNUP &&\n (!USERNAME_RULE.test(username) || SID_RULE.test(username)) &&\n 'Invalid username (2 - 10 length without space, NOT SID)';\n const passwordSignUpError =\n (mode === LoginPageMode.CUTOPIA_SIGNUP ||\n mode === LoginPageMode.RESET_PASSWORD_VERIFY) &&\n !PASSWORD_RULE.test(password) &&\n 'Invalid password (8 length up without space)';\n\n const passwordMissingError =\n MODE_ITEMS[mode].password &&\n !password &&\n `Please enter your ${\n mode === LoginPageMode.CUSIS ? 'OnePass ' : ''\n }password`;\n const errorsFound = {\n verification:\n MODE_ITEMS[mode].verificationCode &&\n !verificationCode &&\n 'Please enter the verification code',\n username:\n (MODE_ITEMS[mode].username &&\n !username &&\n 'Please choose your username, do NOT use your SID') ||\n usernameSignUpError,\n userId:\n (MODE_ITEMS[mode].userId &&\n !userId &&\n 'Please enter your username / CUHK SID') ||\n usernameSignUpError,\n sid:\n MODE_ITEMS[mode].sid &&\n (!sid || !SID_RULE.test(sid)) &&\n 'Please enter a valid CUHK SID (Not email)',\n password: passwordMissingError || passwordSignUpError,\n };\n setErrors(errorsFound);\n return !Object.values(errorsFound).some(e => e);\n };\n\n const onSubmit = async e => {\n e.preventDefault();\n if (!validate()) return;\n switch (mode) {\n case LoginPageMode.CUTOPIA_LOGIN: {\n loginAndRedirect();\n break;\n }\n case LoginPageMode.CUTOPIA_SIGNUP: {\n const createUserPayload = {\n variables: {\n username,\n sid: sid,\n password,\n },\n };\n await createUser(createUserPayload);\n break;\n }\n case LoginPageMode.VERIFY: {\n const verifyPayload = {\n variables: {\n username,\n code: verificationCode,\n },\n };\n await verifyUser(verifyPayload);\n break;\n }\n case LoginPageMode.RESET_PASSWORD: {\n const resetPasswordPayload = {\n variables: {\n userId,\n },\n };\n await sendResetPasswordCode(resetPasswordPayload);\n break;\n }\n case LoginPageMode.RESET_PASSWORD_VERIFY:\n {\n const resetPasswordVerifyPayload = {\n variables: {\n userId,\n newPassword: password,\n resetCode: verificationCode,\n },\n };\n await resetPassword(resetPasswordVerifyPayload);\n }\n break;\n default:\n break;\n }\n };\n\n const goBack = () => {\n const prevMode = PREVIOUS_MODE_LOOKUP[mode];\n // If prev mode is a valid mode\n if (prevMode >= 0) {\n setMode(prevMode);\n }\n };\n\n const processing =\n loggingInCUtopia ||\n creatingUser ||\n verifying ||\n sendingResetCode ||\n resettingPassword;\n\n return (\n
\n
\n
\n {mode !== LoginPageMode.CUTOPIA_LOGIN &&\n mode !== LoginPageMode.CUTOPIA_SIGNUP && (\n \n \n \n )}\n

{MODE_ITEMS[mode].title}

\n {MODE_ITEMS[mode].caption}\n
\n
\n {MODE_ITEMS[mode].sid && (\n setSid(text)}\n label=\"CUHK SID\"\n />\n )}\n {MODE_ITEMS[mode].username && (\n setUsername(text)}\n label=\"Username\"\n />\n )}\n {MODE_ITEMS[mode].userId && (\n setUserId(text)}\n label=\"Username / SID\"\n />\n )}\n {MODE_ITEMS[mode].password && (\n setPassword(text)}\n type={invisible ? 'password' : 'text'}\n label=\"Password\"\n />\n )}\n {MODE_ITEMS[mode].verificationCode && (\n setVerificationCode(text)}\n label=\"Verification Code\"\n />\n )}\n {mode === LoginPageMode.CUTOPIA_LOGIN && (\n
\n setMode(LoginPageMode.RESET_PASSWORD)}\n >\n Forgot Password?\n \n
\n )}\n \n {MODE_ITEMS[mode].button}\n \n \n {(mode === LoginPageMode.CUTOPIA_LOGIN ||\n mode === LoginPageMode.CUTOPIA_SIGNUP) && (\n
\n \n {mode === LoginPageMode.CUTOPIA_LOGIN\n ? \"Don't have an account?\"\n : 'Already have an account?'}\n \n \n setMode(\n mode === LoginPageMode.CUTOPIA_LOGIN\n ? LoginPageMode.CUTOPIA_SIGNUP\n : LoginPageMode.CUTOPIA_LOGIN\n )\n }\n >\n {mode === LoginPageMode.CUTOPIA_SIGNUP ? 'Log In' : 'Sign Up'}\n \n
\n )}\n
\n
\n );\n};\n\nexport default observer(LoginPanel);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"footer\":\"eb_G2GR\",\"footerLink\":\"GQYOKOA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"loginPage\":\"gNBq3Wu\",\"loginPanel\":\"_3bpUwvd\",\"goBackIcon\":\"x3R4oLx\",\"label\":\"MKXVom7\",\"loginInputContainer\":\"mBRWwMu\",\"titleRow\":\"KCW7rEz\",\"forgotPwdRow\":\"saU84j_\",\"forgotPwdLabel\":\"KmUXNsH\",\"loginBtn\":\"ZH49njf\",\"switchContainer\":\"oF6nlq6\"};"],"names":["FOOTER_ITEMS","label","to","onClick","viewStore","key","contentProps","reportCategory","ReportCategory","url","mt","mb","style","visible","div","className","clsx","styles","map","item","Link","href","a","span","renderItem","INITIAL_MODE","LoginPageMode","MODE_ITEMS","title","caption","userId","password","button","sid","username","verificationCode","PATH_MODE_LOOKUP","PREVIOUS_MODE_LOOKUP","observer","returnUrl","router","useRouter","query","mode","code","queryReturnUrl","useState","verification","user","useUser","view","useView","useEffect","queryMode","queryUsername","queryCode","queryUserId","setUsername","setUserId","setVerificationCode","verifyUser","variables","setMode","loggedIn","push","LOGIN_REDIRECT_PAGE","useMutation","SEND_VERIFICATION","onCompleted","handleCompleted","message","onError","handleError","createUser","loading","error","VERIFY_USER","loginAndRedirect","e","LOGIN_CUTOPIA","data","saveUser","login","token","me","Sentry","asPath","mute","loginCUtopia","SEND_RESET_PASSWORD_CODE","sendResetPasswordCode","RESET_PASSWORD","resetPassword","loginPayload","validate","usernameSignUpError","USERNAME_RULE","SID_RULE","passwordSignUpError","PASSWORD_RULE","passwordMissingError","errorsFound","setErrors","Object","values","some","onSubmit","createUserPayload","verifyPayload","resetPasswordPayload","resetPasswordVerifyPayload","preventDefault","newPassword","resetCode","processing","loggingInCUtopia","creatingUser","verifying","sendingResetCode","resettingPassword","IconButton","prevMode","size","ArrowBack","h2","form","TextField","errors","placeholder","type","value","onChangeText","text","setSid","setPassword","invisible","LoadingButton","variant","color","disabled","Footer","module","exports"],"sourceRoot":""}