feat: show loading when change profile

This commit is contained in:
GyDi
2023-08-05 22:07:30 +08:00
parent c54b00a701
commit fe88c7ce97
3 changed files with 30 additions and 1 deletions

View File

@@ -35,6 +35,7 @@ const ProfilePage = () => {
const [url, setUrl] = useState("");
const [disabled, setDisabled] = useState(false);
const [activating, setActivating] = useState("");
const {
profiles = {},
@@ -99,6 +100,8 @@ const ProfilePage = () => {
const onSelect = useLockFn(async (current: string, force: boolean) => {
if (!force && current === profiles.current) return;
// 避免大多数情况下loading态闪烁
const reset = setTimeout(() => setActivating(current), 100);
try {
await patchProfiles({ current });
mutateLogs();
@@ -107,6 +110,9 @@ const ProfilePage = () => {
Notice.success("Refresh clash config", 1000);
} catch (err: any) {
Notice.error(err?.message || err.toString(), 4000);
} finally {
clearTimeout(reset);
setActivating("");
}
});
@@ -258,6 +264,7 @@ const ProfilePage = () => {
<Grid item xs={12} sm={6} md={4} lg={3} key={item.file}>
<ProfileItem
selected={profiles.current === item.uid}
activating={activating === item.uid}
itemData={item}
onSelect={(f) => onSelect(item.uid, f)}
onEdit={() => viewerRef.current?.edit(item)}