import { AvatarUploader } from '@/components/ImageUploader'; import { DefaultFullModalInputEditorRender, FullModalField, } from '@/components/FullModal/Field'; import { openModal } from '@/components/Modal'; import { closeModal, pluginUserExtraInfo } from '@/plugin/common'; import { setUserJWT } from '@/utils/jwt-helper'; import { Button, Divider, message, Tag, Typography } from 'antd'; import React, { useCallback } from 'react'; import { useNavigate } from 'react-router'; import { Avatar } from 'tailchat-design'; import { model, modifyUserField, showSuccessToasts, showToasts, t, UploadFileResult, useAppDispatch, useAsyncRequest, userActions, useUserInfo, } from 'tailchat-shared'; import { EmailVerify } from '../EmailVerify'; import { ModifyPassword } from '../ModifyPassword'; export const SettingsAccount: React.FC = React.memo(() => { const userInfo = useUserInfo(); const dispatch = useAppDispatch(); const navigate = useNavigate(); const userExtra = userInfo?.extra ?? {}; const [, handleUserAvatarChange] = useAsyncRequest( async (fileInfo: UploadFileResult) => { await modifyUserField('avatar', fileInfo.url); dispatch( userActions.setUserInfoField({ fieldName: 'avatar', fieldValue: fileInfo.url, }) ); showToasts(t('修改头像成功'), 'success'); }, [] ); const [, handleUpdateNickName] = useAsyncRequest( async (newNickname: string) => { await modifyUserField('nickname', newNickname); dispatch( userActions.setUserInfoField({ fieldName: 'nickname', fieldValue: newNickname, }) ); showToasts(t('修改昵称成功'), 'success'); }, [] ); const [, handleUpdateExtraInfo] = useAsyncRequest( async (fieldName: string, fieldValue: unknown) => { await model.user.modifyUserExtra(fieldName, fieldValue); dispatch( userActions.setUserInfoExtra({ fieldName, fieldValue, }) ); showSuccessToasts(t('修改成功')); }, [] ); const handleUpdatePassword = useCallback(() => { const key = openModal( closeModal(key)} />); }, []); // 登出 const handleLogout = useCallback(async () => { await setUserJWT(null); window.location.replace('/'); // 重载页面以清空所有状态 }, []); if (!userInfo) { return null; } return (
{userInfo.email} {userInfo.emailVerified ? ( {t('已认证')} ) : ( { if (userInfo.temporary) { message.warning( t('临时用户无法认证邮箱, 请先认领账号') ); return; } const key = openModal( { closeModal(key); }} /> ); }} > {t('未认证')} )}
} /> {pluginUserExtraInfo.map((item, i) => { if (item.component && item.component.editor) { const Component = item.component.editor; return ( handleUpdateExtraInfo(item.name, val)} /> ); } return ( handleUpdateExtraInfo(item.name, val)} /> ); })}
{t('密码')}
); }); SettingsAccount.displayName = 'SettingsAccount';