feat(notion): 添加 Notion连接检查功能 (#1620)

- 在 Notion 配置页面添加"检查"按钮
- 实现 Notion 连接检查逻辑
- 添加相关国际化文本
This commit is contained in:
Trey Dong 2025-02-14 10:52:16 +08:00 committed by GitHub
parent fd4334f331
commit 710180997f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 81 additions and 12 deletions

View File

@ -552,6 +552,14 @@
"notion.api_key": "Notion API Key", "notion.api_key": "Notion API Key",
"notion.database_id": "Notion Database ID", "notion.database_id": "Notion Database ID",
"notion.title": "Notion Configuration", "notion.title": "Notion Configuration",
"notion.check": {
"button": "Check",
"fail": "Connection failed, please check the configuration",
"success": "Connection successful",
"error": "Connection error, please check the network",
"empty_api_key": "Api_key is not configured",
"empty_database_id": "Database_id is not configured"
},
"title": "Data Settings", "title": "Data Settings",
"webdav.autoSync": "Auto Backup", "webdav.autoSync": "Auto Backup",
"webdav.autoSync.off": "Off", "webdav.autoSync.off": "Off",

View File

@ -552,6 +552,14 @@
"notion.api_key": "Notion APIキー", "notion.api_key": "Notion APIキー",
"notion.database_id": "Notion データベースID", "notion.database_id": "Notion データベースID",
"notion.title": "Notion 設定", "notion.title": "Notion 設定",
"notion.check": {
"button": "確認",
"fail": "接続に失敗しました。設定を確認してください。",
"success": "接続に成功しました。",
"error": "接続エラーが発生しました。ネットワークを確認してください。",
"empty_api_key": "Api_keyが設定されていません",
"empty_database_id": "Database_idが設定されていません"
},
"title": "データ設定", "title": "データ設定",
"webdav.autoSync": "自動バックアップ", "webdav.autoSync": "自動バックアップ",
"webdav.autoSync.off": "オフ", "webdav.autoSync.off": "オフ",

View File

@ -552,6 +552,14 @@
"notion.api_key": "Ключ API Notion", "notion.api_key": "Ключ API Notion",
"notion.database_id": "ID базы данных Notion", "notion.database_id": "ID базы данных Notion",
"notion.title": "Настройки Notion", "notion.title": "Настройки Notion",
"notion.check": {
"button": "Проверить",
"fail": "Ошибка подключения, проверьте настройки",
"success": "Подключение успешно",
"error": "Ошибка подключения, проверьте сеть",
"empty_api_key": "Не настроен Api_key",
"empty_database_id": "Не настроен Database_id"
},
"title": "Настройки данных", "title": "Настройки данных",
"webdav.autoSync": "Автоматическое резервное копирование", "webdav.autoSync": "Автоматическое резервное копирование",
"webdav.autoSync.off": "Выключено", "webdav.autoSync.off": "Выключено",

View File

@ -552,6 +552,14 @@
"notion.api_key": "Notion 密钥", "notion.api_key": "Notion 密钥",
"notion.database_id": "Notion 数据库ID", "notion.database_id": "Notion 数据库ID",
"notion.title": "Notion 配置", "notion.title": "Notion 配置",
"notion.check": {
"button": "检查",
"fail": "连接失败,请检查配置",
"success": "连接成功",
"error": "连接异常,请检查网络",
"empty_api_key": "未配置Api_key",
"empty_database_id": "未配置Database_id"
},
"title": "数据设置", "title": "数据设置",
"webdav.autoSync": "自动备份", "webdav.autoSync": "自动备份",
"webdav.autoSync.off": "关闭", "webdav.autoSync.off": "关闭",

View File

@ -550,6 +550,14 @@
"notion.api_key": "Notion 金鑰", "notion.api_key": "Notion 金鑰",
"notion.database_id": "Notion 資料庫 ID", "notion.database_id": "Notion 資料庫 ID",
"notion.title": "Notion 配置", "notion.title": "Notion 配置",
"notion.check": {
"button": "檢查",
"fail": "連線失敗,請檢查配置",
"success": "連線成功",
"error": "連線異常,請檢查網路",
"empty_api_key": "未配置Api_key",
"empty_database_id": "未配置Database_id"
},
"title": "數據設定", "title": "數據設定",
"webdav.autoSync": "自動備份", "webdav.autoSync": "自動備份",
"webdav.autoSync.off": "關閉", "webdav.autoSync.off": "關閉",

View File

@ -1,4 +1,5 @@
import { FileSearchOutlined, FolderOpenOutlined, SaveOutlined } from '@ant-design/icons' import { FileSearchOutlined, FolderOpenOutlined, SaveOutlined } from '@ant-design/icons'
import { Client } from '@notionhq/client'
import { HStack } from '@renderer/components/Layout' import { HStack } from '@renderer/components/Layout'
import { useTheme } from '@renderer/context/ThemeProvider' import { useTheme } from '@renderer/context/ThemeProvider'
import { backup, reset, restore } from '@renderer/services/BackupService' import { backup, reset, restore } from '@renderer/services/BackupService'
@ -33,10 +34,47 @@ const NotionSettings: FC = () => {
const handleNotionDatabaseIdChange = (e: React.ChangeEvent<HTMLInputElement>) => { const handleNotionDatabaseIdChange = (e: React.ChangeEvent<HTMLInputElement>) => {
dispatch(setNotionDatabaseID(e.target.value)) dispatch(setNotionDatabaseID(e.target.value))
} }
const handleNotionConnectionCheck = () => {
if (notionApiKey === null) {
window.message.error(t('settings.data.notion.check.empty_api_key'))
return
}
if (notionDatabaseID === null) {
window.message.error(t('settings.data.notion.check.empty_database_id'))
return
}
const notion = new Client({ auth: notionApiKey })
notion.databases
.retrieve({
database_id: notionDatabaseID
})
.then((result) => {
if (result) {
window.message.success(t('settings.data.notion.check.success'))
} else {
window.message.error(t('settings.data.notion.check.fail'))
}
})
.catch(() => {
window.message.error(t('settings.data.notion.check.error'))
})
}
return ( return (
<SettingGroup theme={theme}> <SettingGroup theme={theme}>
<SettingTitle>{t('settings.data.notion.title')}</SettingTitle> <SettingTitle>{t('settings.data.notion.title')}</SettingTitle>
<SettingRow>
<SettingRowTitle>{t('settings.data.notion.database_id')}</SettingRowTitle>
<HStack alignItems="center" gap="5px">
<Input
type="text"
value={notionDatabaseID || ''}
onChange={handleNotionDatabaseIdChange}
onBlur={handleNotionDatabaseIdChange}
style={{ width: 315 }}
/>
</HStack>
</SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitle>{t('settings.data.notion.api_key')}</SettingRowTitle> <SettingRowTitle>{t('settings.data.notion.api_key')}</SettingRowTitle>
@ -48,21 +86,12 @@ const NotionSettings: FC = () => {
onBlur={handleNotionTokenChange} onBlur={handleNotionTokenChange}
style={{ width: 250 }} style={{ width: 250 }}
/> />
<Button onClick={handleNotionConnectionCheck} style={{ width: 60 }}>
{t('settings.data.notion.check.button')}
</Button>
</HStack> </HStack>
</SettingRow> </SettingRow>
<SettingDivider /> {/* 添加分割线 */} <SettingDivider /> {/* 添加分割线 */}
<SettingRow>
<SettingRowTitle>{t('settings.data.notion.database_id')}</SettingRowTitle>
<HStack alignItems="center" gap="5px">
<Input
type="text"
value={notionDatabaseID || ''}
onChange={handleNotionDatabaseIdChange}
onBlur={handleNotionDatabaseIdChange}
style={{ width: 250 }}
/>
</HStack>
</SettingRow>
</SettingGroup> </SettingGroup>
) )
} }