Skip to content

Commit e08ceb3

Browse files
authored
🐛 修复未绑定网盘时仍显示解绑按钮的问题 (#1291)
* 🐛 修复未绑定网盘时仍显示解绑按钮的问题 closes #1289 * ♻️ 将 token 检查逻辑内聚到 auth.ts,降低 UI 组件耦合 * ♻️ 简化 FileSystemParams 中 token 检查逻辑,移除多余的 useCallback
1 parent 6c507f4 commit e08ceb3

2 files changed

Lines changed: 26 additions & 4 deletions

File tree

packages/filesystem/auth.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,17 @@ export const netDiskTypeMap: Partial<Record<FileSystemType, NetDiskType>> = {
136136
dropbox: "dropbox",
137137
};
138138

139+
export async function HasNetDiskToken(netDiskType: NetDiskType): Promise<boolean> {
140+
const localStorageDAO = new LocalStorageDAO();
141+
const key = `netdisk:token:${netDiskType}`;
142+
try {
143+
const token = await localStorageDAO.getValue<Token>(key);
144+
return !!token?.accessToken;
145+
} catch {
146+
return false;
147+
}
148+
}
149+
139150
export async function ClearNetDiskToken(netDiskType: NetDiskType) {
140151
const localStorageDAO = new LocalStorageDAO();
141152
const key = `netdisk:token:${netDiskType}`;

src/pages/components/FileSystemParams/index.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import React from "react";
1+
import React, { useEffect, useState } from "react";
22
import { Button, Input, Message, Popconfirm, Select, Space } from "@arco-design/web-react";
33
import type { FileSystemType } from "@Packages/filesystem/factory";
44
import FileSystemFactory from "@Packages/filesystem/factory";
55
import { useTranslation } from "react-i18next";
6-
import { ClearNetDiskToken, netDiskTypeMap } from "@Packages/filesystem/auth";
6+
import { ClearNetDiskToken, HasNetDiskToken, netDiskTypeMap } from "@Packages/filesystem/auth";
77

88
const FileSystemParams: React.FC<{
99
headerContent: React.ReactNode | string;
@@ -22,6 +22,17 @@ const FileSystemParams: React.FC<{
2222
}) => {
2323
const fsParams = FileSystemFactory.params();
2424
const { t } = useTranslation();
25+
const [hasBoundToken, setHasBoundToken] = useState(false);
26+
27+
const netDiskType = netDiskTypeMap[fileSystemType];
28+
29+
useEffect(() => {
30+
if (!netDiskType) {
31+
setHasBoundToken(false);
32+
return;
33+
}
34+
HasNetDiskToken(netDiskType).then(setHasBoundToken);
35+
}, [netDiskType]);
2536

2637
const fileSystemList: {
2738
key: FileSystemType;
@@ -53,7 +64,6 @@ const FileSystemParams: React.FC<{
5364
},
5465
];
5566

56-
const netDiskType = netDiskTypeMap[fileSystemType];
5767
const netDiskName = netDiskType ? fileSystemList.find((item) => item.key === fileSystemType)?.name : null;
5868

5969
return (
@@ -74,13 +84,14 @@ const FileSystemParams: React.FC<{
7484
))}
7585
</Select>
7686
{children}
77-
{netDiskType && netDiskName && (
87+
{netDiskType && netDiskName && hasBoundToken && (
7888
<Popconfirm
7989
key="netdisk-unbind"
8090
title={t("netdisk_unbind_confirm", { provider: netDiskName })}
8191
onOk={async () => {
8292
try {
8393
await ClearNetDiskToken(netDiskType);
94+
setHasBoundToken(false);
8495
Message.success(t("netdisk_unbind_success", { provider: netDiskName })!);
8596
} catch (error) {
8697
Message.error(`${t("netdisk_unbind_error", { provider: netDiskName })}: ${String(error)}`);

0 commit comments

Comments
 (0)