From 22e8f24e7f7574915e4c75d3c6a5498f6e621ee8 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 29 Jul 2023 22:00:59 +0800 Subject: ... --- FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx | 15 +++--- .../src/pages/setting/ChangeNicknameDialog.tsx | 6 +-- .../src/pages/setting/ChangePasswordDialog.tsx | 6 +-- FrontEnd/src/pages/setting/index.tsx | 46 +++++++----------- FrontEnd/src/views/admin/UserAdmin.tsx | 8 ++-- FrontEnd/src/views/center/TimelineCreateDialog.tsx | 2 +- FrontEnd/src/views/common/button/LoadingButton.tsx | 5 +- .../src/views/common/dialog/OperationDialog.tsx | 22 +++++---- FrontEnd/src/views/common/dialog/index.ts | 56 ++++++++++++++++++++++ FrontEnd/src/views/common/input/InputGroup.tsx | 7 ++- .../views/timeline/PostPropertyChangeDialog.tsx | 2 +- .../src/views/timeline/TimelineDeleteDialog.tsx | 2 +- .../timeline/TimelinePropertyChangeDialog.tsx | 2 +- 13 files changed, 116 insertions(+), 63 deletions(-) create mode 100644 FrontEnd/src/views/common/dialog/index.ts diff --git a/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx b/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx index b2a4e2a8..8c8e04fe 100644 --- a/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx +++ b/FrontEnd/src/pages/setting/ChangeAvatarDialog.tsx @@ -9,13 +9,16 @@ import { useUser } from "@/services/user"; import { getHttpUserClient } from "@/http/user"; -import ImageCropper, { Clip, applyClipToImage } from "@/views/common/ImageCropper"; +import ImageCropper, { + Clip, + applyClipToImage, +} from "@/views/common/ImageCropper"; import Button from "@/views/common/button/Button"; import Dialog from "@/views/common/dialog/Dialog"; export interface ChangeAvatarDialogProps { open: boolean; - close: () => void; + onClose: () => void; } const ChangeAvatarDialog: React.FC = (props) => { @@ -42,12 +45,12 @@ const ChangeAvatarDialog: React.FC = (props) => { >("select"); const [message, setMessage] = useState( - "settings.dialogChangeAvatar.prompt.select" + "settings.dialogChangeAvatar.prompt.select", ); const trueMessage = convertI18nText(message, t); - const closeDialog = props.close; + const closeDialog = props.onClose; const close = React.useCallback((): void => { if (!(state === "uploading")) { @@ -92,7 +95,7 @@ const ChangeAvatarDialog: React.FC = (props) => { setFile(files[0]); } }, - [] + [], ); const onCropNext = React.useCallback(() => { @@ -140,7 +143,7 @@ const ChangeAvatarDialog: React.FC = (props) => { (e: unknown) => { setState("error"); setMessage({ type: "custom", value: (e as AxiosError).message }); - } + }, ); }, [user, resultBlob]); diff --git a/FrontEnd/src/pages/setting/ChangeNicknameDialog.tsx b/FrontEnd/src/pages/setting/ChangeNicknameDialog.tsx index 5606ce94..4d318543 100644 --- a/FrontEnd/src/pages/setting/ChangeNicknameDialog.tsx +++ b/FrontEnd/src/pages/setting/ChangeNicknameDialog.tsx @@ -5,11 +5,11 @@ import OperationDialog from "@/views/common/dialog/OperationDialog"; export interface ChangeNicknameDialogProps { open: boolean; - close: () => void; + onClose: () => void; } export default function ChangeNicknameDialog(props: ChangeNicknameDialogProps) { - const { open, close } = props; + const { open, onClose } = props; const user = useUserLoggedIn(); @@ -29,7 +29,7 @@ export default function ChangeNicknameDialog(props: ChangeNicknameDialogProps) { nickname: newNickname as string, }); }} - close={close} + onClose={onClose} /> ); } diff --git a/FrontEnd/src/pages/setting/ChangePasswordDialog.tsx b/FrontEnd/src/pages/setting/ChangePasswordDialog.tsx index 407f3051..87a970a5 100644 --- a/FrontEnd/src/pages/setting/ChangePasswordDialog.tsx +++ b/FrontEnd/src/pages/setting/ChangePasswordDialog.tsx @@ -9,11 +9,11 @@ import OperationDialog, { interface ChangePasswordDialogProps { open: boolean; - close: () => void; + onClose: () => void; } export function ChangePasswordDialog(props: ChangePasswordDialogProps) { - const { open, close } = props; + const { open, onClose } = props; const navigate = useNavigate(); @@ -22,7 +22,7 @@ export function ChangePasswordDialog(props: ChangePasswordDialogProps) { return ( (null); - - function dialogOpener(name: DialogName): () => void { - return () => setDialog(name); - } + const { dialogPropsMap, createDialogSwitch } = useDialog([ + "change-password", + "change-avatar", + "change-nickname", + "logout", + "renew-register-code", + ]); return ( @@ -257,20 +253,20 @@ export default function SettingPage() { @@ -278,31 +274,21 @@ export default function SettingPage() { - setDialog(null)} - /> + {user && ( <> setDialog(null)} - open={dialog === "logout"} onConfirm={() => { void userService.logout().then(() => { navigate("/"); }); }} + {...dialogPropsMap["logout"]} /> - setDialog(null)} - /> - setDialog(null)} - /> + + )} diff --git a/FrontEnd/src/views/admin/UserAdmin.tsx b/FrontEnd/src/views/admin/UserAdmin.tsx index 6003bd5a..d5179bf5 100644 --- a/FrontEnd/src/views/admin/UserAdmin.tsx +++ b/FrontEnd/src/views/admin/UserAdmin.tsx @@ -35,7 +35,7 @@ const CreateUserDialog: React.FC<{ password, }) } - close={close} + onClose={close} open={open} onSuccessAndClose={onSuccess} /> @@ -55,7 +55,7 @@ const UserDeleteDialog: React.FC<{ return ( ( @@ -78,7 +78,7 @@ const UserModifyDialog: React.FC<{ return ( ( @@ -126,7 +126,7 @@ const UserPermissionModifyDialog: React.FC<{ return ( ( diff --git a/FrontEnd/src/views/center/TimelineCreateDialog.tsx b/FrontEnd/src/views/center/TimelineCreateDialog.tsx index 8d4dde10..63742936 100644 --- a/FrontEnd/src/views/center/TimelineCreateDialog.tsx +++ b/FrontEnd/src/views/center/TimelineCreateDialog.tsx @@ -20,7 +20,7 @@ const TimelineCreateDialog: React.FC = (props) => { return ( { export default function LoadingButton(props: LoadingButtonProps) { const c = useC(); - const { color, text, loading, className, children, ...otherProps } = props; + const { color, text, loading, disabled, className, children, ...otherProps } = + props; if (text != null && children != null) { console.warn("You can't set both text and children props."); @@ -23,7 +24,7 @@ export default function LoadingButton(props: LoadingButtonProps) { return (