mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-18 16:30:32 +08:00
feat(backup): restore starts automatically with loading overlay without closing dialog
This commit is contained in:
parent
9e6689ef08
commit
b16cbd5379
@ -66,5 +66,6 @@
|
|||||||
- 保存 TUN 设置时优化执行流程,避免界面卡顿
|
- 保存 TUN 设置时优化执行流程,避免界面卡顿
|
||||||
- 补充 `deb` / `rpm` 依赖 `libayatana-appindicator`
|
- 补充 `deb` / `rpm` 依赖 `libayatana-appindicator`
|
||||||
- 「连接」表格标题的排序点击区域扩展到整列宽度
|
- 「连接」表格标题的排序点击区域扩展到整列宽度
|
||||||
|
- 备份恢复时显示加载覆盖层,恢复过程无需再手动关闭对话框
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|||||||
@ -79,6 +79,7 @@ export const BackupHistoryViewer = ({
|
|||||||
const { verge } = useVerge();
|
const { verge } = useVerge();
|
||||||
const [rows, setRows] = useState<BackupRow[]>([]);
|
const [rows, setRows] = useState<BackupRow[]>([]);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
const [isRestoring, setIsRestoring] = useState(false);
|
||||||
const [isRestarting, setIsRestarting] = useState(false);
|
const [isRestarting, setIsRestarting] = useState(false);
|
||||||
const isLocal = source === "local";
|
const isLocal = source === "local";
|
||||||
const isWebDavConfigured = Boolean(
|
const isWebDavConfigured = Boolean(
|
||||||
@ -86,7 +87,7 @@ export const BackupHistoryViewer = ({
|
|||||||
);
|
);
|
||||||
const shouldSkipWebDav = !isLocal && !isWebDavConfigured;
|
const shouldSkipWebDav = !isLocal && !isWebDavConfigured;
|
||||||
const pageSize = 8;
|
const pageSize = 8;
|
||||||
const isBusy = loading || isRestarting;
|
const isBusy = loading || isRestoring || isRestarting;
|
||||||
|
|
||||||
const buildRow = useCallback(
|
const buildRow = useCallback(
|
||||||
(item: ILocalBackupFile | IWebDavFile): BackupRow | null => {
|
(item: ILocalBackupFile | IWebDavFile): BackupRow | null => {
|
||||||
@ -195,11 +196,13 @@ export const BackupHistoryViewer = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const handleRestore = useLockFn(async (filename: string) => {
|
const handleRestore = useLockFn(async (filename: string) => {
|
||||||
if (isRestarting) return;
|
if (isRestoring || isRestarting) return;
|
||||||
if (
|
if (
|
||||||
!(await confirmAsync(t("settings.modals.backup.messages.confirmRestore")))
|
!(await confirmAsync(t("settings.modals.backup.messages.confirmRestore")))
|
||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
|
setIsRestoring(true);
|
||||||
|
try {
|
||||||
if (isLocal) {
|
if (isLocal) {
|
||||||
await restoreLocalBackup(filename);
|
await restoreLocalBackup(filename);
|
||||||
} else {
|
} else {
|
||||||
@ -213,6 +216,12 @@ export const BackupHistoryViewer = ({
|
|||||||
showNotice.error(err);
|
showNotice.error(err);
|
||||||
});
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
showNotice.error(error);
|
||||||
|
} finally {
|
||||||
|
setIsRestoring(false);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const handleExport = useLockFn(async (filename: string) => {
|
const handleExport = useLockFn(async (filename: string) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user