import { useContext, useState } from "react"; import appContext from "../stores/appContext"; import { userService } from "../services"; import utils from "../helpers/utils"; import { validate, ValidatorConfig } from "../helpers/validator"; import Only from "./common/OnlyWhen"; import toastHelper from "./Toast"; import showChangePasswordDialog from "./ChangePasswordDialog"; import showBindWxUserIdDialog from "./BindWxUserIdDialog"; import "../less/my-account-section.less"; const validateConfig: ValidatorConfig = { minLength: 4, maxLength: 24, noSpace: true, noChinese: true, }; interface Props {} const MyAccountSection: React.FC = () => { const { userState } = useContext(appContext); const user = userState.user as Model.User; const [username, setUsername] = useState(user.username); const [showEditUsernameInputs, setShowEditUsernameInputs] = useState(false); const [showConfirmUnbindGithubBtn, setShowConfirmUnbindGithubBtn] = useState(false); const [showConfirmUnbindWxBtn, setShowConfirmUnbindWxBtn] = useState(false); const handleUsernameChanged = (e: React.ChangeEvent) => { const nextUsername = e.target.value as string; setUsername(nextUsername); }; const handleConfirmEditUsernameBtnClick = async () => { if (user.username === "guest") { toastHelper.info("🈲 不要修改我的用户名"); return; } if (username === user.username) { setShowEditUsernameInputs(false); return; } const usernameValidResult = validate(username, validateConfig); if (!usernameValidResult.result) { toastHelper.error("用户名 " + usernameValidResult.reason); return; } try { const isUsable = await userService.checkUsernameUsable(username); if (!isUsable) { toastHelper.error("用户名无法使用"); return; } await userService.updateUsername(username); await userService.doSignIn(); setShowEditUsernameInputs(false); toastHelper.info("修改成功~"); } catch (error: any) { toastHelper.error(error.message); } }; const handleChangePasswordBtnClick = () => { if (user.username === "guest") { toastHelper.info("🈲 不要修改我的密码"); return; } showChangePasswordDialog(); }; const handleUnbindGithubBtnClick = async () => { if (showConfirmUnbindGithubBtn) { try { await userService.removeGithubName(); await userService.doSignIn(); } catch (error: any) { toastHelper.error(error.message); } setShowConfirmUnbindGithubBtn(false); } else { setShowConfirmUnbindGithubBtn(true); } }; const handleUnbindWxBtnClick = async () => { if (showConfirmUnbindWxBtn) { try { await userService.updateWxUserId(""); await userService.doSignIn(); } catch (error: any) { toastHelper.error(error.message); } setShowConfirmUnbindWxBtn(false); } else { setShowConfirmUnbindWxBtn(true); } }; const handlePreventDefault = (e: React.MouseEvent) => { e.preventDefault(); }; return ( <>

基本信息

{/* Account Binding Settings: only can use for domain: memos.justsven.top */}

关联账号

); }; export default MyAccountSection;