From 793504c6f6c3cc03bbeb60a99947a40b4ce7742c Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 2 May 2022 18:08:17 +0800 Subject: ... --- FrontEnd/src/locales/en/translation.json | 3 ++ FrontEnd/src/locales/zh/translation.json | 3 ++ FrontEnd/src/views/settings/index.tsx | 70 ++++++++++++++++++++++++++------ 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/FrontEnd/src/locales/en/translation.json b/FrontEnd/src/locales/en/translation.json index 9c6747e1..082e2836 100644 --- a/FrontEnd/src/locales/en/translation.json +++ b/FrontEnd/src/locales/en/translation.json @@ -185,6 +185,9 @@ "changeNickname": "Change nickname.", "changeBookmarkVisibility": "Change bookmark visibility.", "myRegisterCode": "My register code:", + "myRegisterCodeDesc": "Click to create a new register code.", + "renewRegisterCode": "Renew Register Code", + "renewRegisterCodeDesc": "Confirm to renew register code? The old one will no longer be used.", "dialogChangePassword": { "title": "Change Password", "prompt": "You are changing your password. You need to input the correct old password. After change, you need to login again and all old login will be invalid.", diff --git a/FrontEnd/src/locales/zh/translation.json b/FrontEnd/src/locales/zh/translation.json index 130ebe66..1b538f2a 100644 --- a/FrontEnd/src/locales/zh/translation.json +++ b/FrontEnd/src/locales/zh/translation.json @@ -185,6 +185,9 @@ "changeNickname": "更改昵称", "changeBookmarkVisibility": "修改书签时间线可见性", "myRegisterCode": "我的注册码:", + "myRegisterCodeDesc": "点击以创建新的注册码。", + "renewRegisterCode": "创建新的注册码", + "renewRegisterCodeDesc": "确定要创建新的注册码吗?旧的注册码将无法再使用。", "dialogChangePassword": { "title": "修改密码", "prompt": "您正在修改密码,您需要输入正确的旧密码。成功修改后您需要重新登陆,而且以前所有的登录都会失效。", diff --git a/FrontEnd/src/views/settings/index.tsx b/FrontEnd/src/views/settings/index.tsx index 633bb209..f5d26e69 100644 --- a/FrontEnd/src/views/settings/index.tsx +++ b/FrontEnd/src/views/settings/index.tsx @@ -3,7 +3,7 @@ import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import classnames from "classnames"; -import { convertI18nText, I18nText } from "@/common"; +import { convertI18nText, I18nText, UiLogicError } from "@/common"; import { useUser, userService } from "@/services/user"; import { getHttpUserClient } from "@/http/user"; import { TimelineVisibility } from "@/http/timeline"; @@ -69,10 +69,12 @@ function SettingItemContainer({ className={classnames( "row settings-item mx-0", first && "first", + onClick && "clickable", className )} + onClick={onClick} > -
+
{convertI18nText(title, t)}
@@ -87,16 +89,8 @@ function SettingItemContainer({ type ButtonSettingItemProps = SettingItemContainerWithoutChildrenProps; -const ButtonSettingItem: React.FC = ({ - className, - ...props -}) => { - return ( - - ); +const ButtonSettingItem: React.FC = ({ ...props }) => { + return ; }; interface SelectSettingItemProps @@ -145,9 +139,18 @@ const SettingsPage: React.FC = (_) => { const navigate = useNavigate(); const [dialog, setDialog] = useState< - null | "changepassword" | "changeavatar" | "changenickname" | "logout" + | null + | "changepassword" + | "changeavatar" + | "changenickname" + | "logout" + | "renewregistercode" >(null); + const [registerCode, setRegisterCode] = useState( + undefined + ); + const [bookmarkVisibility, setBookmarkVisibility] = useState(); @@ -163,6 +166,20 @@ const SettingsPage: React.FC = (_) => { } }, [user]); + React.useEffect(() => { + setRegisterCode(undefined); + }, [user]); + + React.useEffect(() => { + if (user != null && registerCode === undefined) { + void getHttpUserClient() + .getRegisterCode(user.username) + .then((code) => { + setRegisterCode(code.registerCode ?? null); + }); + } + }, [user, registerCode]); + const language = i18n.language.slice(0, 2); return ( @@ -170,6 +187,19 @@ const SettingsPage: React.FC = (_) => {
{user ? ( + setDialog("renewregistercode")} + > + {registerCode === undefined ? ( + + ) : registerCode === null ? ( + Noop + ) : ( + {registerCode} + )} + setDialog("changeavatar")} @@ -263,6 +293,20 @@ const SettingsPage: React.FC = (_) => { }); }} /> + setDialog(null)} + open={dialog === "renewregistercode"} + onConfirm={() => { + if (user == null) throw new UiLogicError(); + void getHttpUserClient() + .renewRegisterCode(user.username) + .then(() => { + setRegisterCode(undefined); + }); + }} + /> setDialog(null)} -- cgit v1.2.3