feat(user-center): enhance loading fallback and avatar display

- Update HydrateFallback to show a refresh button after 10 seconds of loading
- Improve UserCenter avatar by using username/name as fallback when image is missing
- Add /dev route pointing to HydrateFallback component
This commit is contained in:
kyuuseiryuu 2026-03-18 10:02:45 +09:00
parent 3be476ad13
commit 5168bdca29
3 changed files with 22 additions and 5 deletions

View File

@ -1,9 +1,20 @@
import { Spin } from "antd"; import { Button, Flex, Spin } from "antd";
import { useEffect, useState } from "react";
export function HydrateFallback() { export function HydrateFallback() {
const [tooLongTime, setTooLongTime] = useState(false);
useEffect(() => {
const id = setTimeout(() => {
setTooLongTime(true);
}, 1000 * 10);
return () => clearTimeout(id);
}, []);
return ( return (
<Spin spinning> <Flex gap={24} vertical align="center" justify="center" style={{ height: '100vh' }}>
<div style={{ height: '100vh' }} /> <Spin spinning />
</Spin> {tooLongTime && (
<Button type="link" onClick={() => window.location.reload()}></Button>
)}
</Flex>
); );
} }

View File

@ -80,7 +80,9 @@ export const UserCenter = () => {
<> <>
<ChangeBackground url={user?.picture ?? ''} /> <ChangeBackground url={user?.picture ?? ''} />
<Flex className="app" gap={12} vertical align="center" style={{ maxWidth: 600 }}> <Flex className="app" gap={12} vertical align="center" style={{ maxWidth: 600 }}>
<Avatar size={128} src={user?.picture ?? user?.name} /> <Avatar size={128} src={user?.picture} style={{ background: '#f56a00' }}>
{(user?.username || user?.name)}
</Avatar>
<Flex> <Flex>
<Typography.Text>{user?.username ?? user?.name ?? '未设置'}</Typography.Text> <Typography.Text>{user?.username ?? user?.name ?? '未设置'}</Typography.Text>
</Flex> </Flex>

View File

@ -91,4 +91,8 @@ export const route = createBrowserRouter([
}, },
], ],
}, },
{
path: '/dev',
Component: HydrateFallback,
}
]); ]);