{"version":3,"file":"ActivatePage-78c1b59d.js","sources":["../src/public/ActivatePage.jsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { useNavigate, useParams } from 'react-router';\nimport axios from 'axios';\nimport * as config from '../config';\nimport { Button, Container, Dimmer, Divider, Form, Header, Loader } from 'semantic-ui-react';\nimport md5 from 'md5';\n\nconst defaultData = {\n    email: '',\n    password: '',\n    rePassword: '',\n};\n\nfunction ActivatePage(props) {\n    const { id } = useParams();\n    const navigate = useNavigate();\n    const [user, setUser] = useState(defaultData);\n    const [data, setData] = useState(defaultData);\n    const [errors, setErrors] = useState({});\n\n    const [loading, setLoading] = useState(false);\n    const [submitting, setSubmitting] = useState(false);\n\n    const controller = new AbortController();\n\n    useEffect(() => {\n        fetchUser(id);\n        return () => {\n            if (submitting || loading) {\n                controller.abort();\n            }\n        };\n    }, [props]);\n\n    const fetchUser = (id) => {\n        setLoading(true);\n        axios\n            .get(`${config.apiURL}/activate/${id}`, { signal: controller.signal })\n            .then((res) => {\n                const user = res.data.user;\n                // console.log(user);\n                setUser(user);\n                setData(user);\n            })\n            .catch((err) => {\n                let msg = err.toString();\n                if (err.response?.data?.error) {\n                    console.log('***', err.response.data.error);\n                    msg = err.response.data.error;\n                }\n                window.alert(msg);\n                navigate('/');\n            })\n            .finally(() => {\n                setLoading(false);\n            });\n    };\n\n    const onChange = (e, { name, value }) => {\n        // console.log([name], value);\n        if (name == 'firstname' || name == 'lastname') {\n            value = value.charAt(0).toUpperCase() + value.slice(1);\n        }\n        setData((prev) => {\n            return { ...prev, [name]: value };\n        });\n    };\n\n    //prevent leading or tailling space in inputs\n    const trim = () => {\n        for (const key in data) {\n            if (typeof data[key] === 'string') {\n                data[key] = data[key].trim();\n            }\n        }\n        return data;\n    };\n\n    //return errors\n    const validate = () => {\n        setData(trim());\n        const errors = {};\n        const pwdLength = 6;\n        if (data.password?.length < pwdLength) {\n            errors.password = `At lease ${pwdLength}`;\n        }\n        if (data.password !== data.rePassword) {\n            errors.rePassword = 'Not match';\n        }\n        if (!data.password) {\n            errors.password = 'Can not be blank';\n        }\n\n        setErrors(errors);\n        return errors;\n    };\n\n    const handleSubmit = () => {\n        const errors = validate();\n        if (Object.keys(errors).length !== 0) {\n            console.log('have error');\n            return;\n        }\n        const req = {\n            passwordHash: md5(data.password),\n        };\n        setSubmitting(true);\n        axios\n            .put(`${config.apiURL}/activate/${user.id}`, req, { signal: controller.signal })\n            .then((res) => {\n                window.alert(res.data.reply);\n                const url = `/?v=${user.email}`;\n                navigate(url);\n            })\n            .catch((err) => {\n                let msg = err.toString();\n                if (err.response?.data?.error) {\n                    console.log('***', err.response.data.error);\n                    msg = err.response.data.error;\n                }\n                window.alert(msg);\n            })\n            .finally(() => {\n                setSubmitting(false);\n            });\n    };\n\n    return (\n        <Container>\n            <Dimmer active={loading || submitting} inverted>\n                <Loader inverted>加载中...</Loader>\n            </Dimmer>\n            {user.approved ? (\n                <>\n                    <Header as=\"h1\">{`恭喜审核通过,请设置登录密码以激活账号`}</Header>\n                    <Header as=\"h3\">{`旅行社: ${user.agency.companyName}`}</Header>\n\n                    <Header as=\"h3\">{`用户名: ${user.email}`}</Header>\n                    <Divider hidden />\n                    <Form widths=\"equal\">\n                        <Form.Group>\n                            <Form.Input\n                                name=\"password\"\n                                fluid\n                                label=\"设置密码\"\n                                placeholder=\"Password\"\n                                required\n                                value={data.password ?? ''}\n                                onChange={onChange}\n                                error={errors.password}\n                                type=\"password\"\n                                autoComplete=\"new-password\"\n                            />\n                            <Form.Input\n                                name=\"rePassword\"\n                                fluid\n                                label=\"确认密码\"\n                                placeholder=\"Confirm Password\"\n                                value={data.rePassword ?? ''}\n                                onChange={onChange}\n                                error={errors.rePassword}\n                                required\n                                type=\"password\"\n                                autoComplete=\"new-password\"\n                            />\n                        </Form.Group>\n                    </Form>\n\n                    <Button positive floated=\"right\" type=\"submit\" onClick={handleSubmit}>\n                        激活\n                    </Button>\n                </>\n            ) : (\n                <>\n                    <Header as=\"h2\">感谢您的注册</Header>\n                    <Header>请耐心等待,审核通过后会发送确认邮件。</Header>\n                    <br />\n                    <Button onClick={() => navigate('/')}>返回</Button>\n                </>\n            )}\n        </Container>\n    );\n}\n\nexport default ActivatePage;\n"],"names":["defaultData","ActivatePage","props","id","useParams","navigate","useNavigate","user","setUser","useState","data","setData","errors","setErrors","loading","setLoading","submitting","setSubmitting","controller","useEffect","fetchUser","axios","config.apiURL","res","err","msg","_b","_a","onChange","e","name","value","prev","trim","key","validate","pwdLength","handleSubmit","req","md5","url","Container","jsx","Dimmer","Loader","jsxs","Fragment","Header","Divider","Form","Button"],"mappings":"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"}