mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-05 20:41:30 +08:00
refactor: streamline provider menu logic in settings
- Consolidated edit and delete menu items for providers into separate constants for improved readability and maintainability. - Enhanced the logic for displaying menus based on provider status, ensuring correct options are presented for system providers and initial providers.
This commit is contained in:
parent
abe9c09cc3
commit
e41152cc1a
@ -4,6 +4,7 @@ import Scrollbar from '@renderer/components/Scrollbar'
|
|||||||
import { getProviderLogo } from '@renderer/config/providers'
|
import { getProviderLogo } from '@renderer/config/providers'
|
||||||
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
|
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
|
||||||
import ImageStorage from '@renderer/services/ImageStorage'
|
import ImageStorage from '@renderer/services/ImageStorage'
|
||||||
|
import { INITIAL_PROVIDERS } from '@renderer/store/llm'
|
||||||
import { Provider } from '@renderer/types'
|
import { Provider } from '@renderer/types'
|
||||||
import { droppableReorder, generateColorFromChar, getFirstCharacter, uuid } from '@renderer/utils'
|
import { droppableReorder, generateColorFromChar, getFirstCharacter, uuid } from '@renderer/utils'
|
||||||
import { Avatar, Button, Dropdown, Input, MenuProps, Tag } from 'antd'
|
import { Avatar, Button, Dropdown, Input, MenuProps, Tag } from 'antd'
|
||||||
@ -115,86 +116,89 @@ const ProvidersList: FC = () => {
|
|||||||
onClick: () => ModelNotesPopup.show({ provider })
|
onClick: () => ModelNotesPopup.show({ provider })
|
||||||
}
|
}
|
||||||
|
|
||||||
const menus = [
|
const editMenu = {
|
||||||
{
|
label: t('common.edit'),
|
||||||
label: t('common.edit'),
|
key: 'edit',
|
||||||
key: 'edit',
|
icon: <EditOutlined />,
|
||||||
icon: <EditOutlined />,
|
async onClick() {
|
||||||
async onClick() {
|
const { name, type, logoFile, logo } = await AddProviderPopup.show(provider)
|
||||||
const { name, type, logoFile, logo } = await AddProviderPopup.show(provider)
|
|
||||||
|
|
||||||
if (name) {
|
if (name) {
|
||||||
updateProvider({ ...provider, name, type })
|
updateProvider({ ...provider, name, type })
|
||||||
if (provider.id) {
|
if (provider.id) {
|
||||||
if (logoFile && logo) {
|
if (logoFile && logo) {
|
||||||
try {
|
try {
|
||||||
await ImageStorage.set(`provider-${provider.id}`, logo)
|
await ImageStorage.set(`provider-${provider.id}`, logo)
|
||||||
setProviderLogos((prev) => ({
|
setProviderLogos((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
[provider.id]: logo
|
[provider.id]: logo
|
||||||
}))
|
}))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to save logo', error)
|
console.error('Failed to save logo', error)
|
||||||
window.message.error('更新Provider Logo失败')
|
window.message.error('更新Provider Logo失败')
|
||||||
}
|
}
|
||||||
} else if (logo === undefined && logoFile === undefined) {
|
} else if (logo === undefined && logoFile === undefined) {
|
||||||
try {
|
try {
|
||||||
await ImageStorage.set(`provider-${provider.id}`, '')
|
await ImageStorage.set(`provider-${provider.id}`, '')
|
||||||
setProviderLogos((prev) => {
|
setProviderLogos((prev) => {
|
||||||
const newLogos = { ...prev }
|
const newLogos = { ...prev }
|
||||||
delete newLogos[provider.id]
|
delete newLogos[provider.id]
|
||||||
return newLogos
|
return newLogos
|
||||||
})
|
})
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Failed to reset logo', error)
|
console.error('Failed to reset logo', error)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
noteMenu,
|
|
||||||
{
|
|
||||||
label: t('common.delete'),
|
|
||||||
key: 'delete',
|
|
||||||
icon: <DeleteOutlined />,
|
|
||||||
danger: true,
|
|
||||||
async onClick() {
|
|
||||||
window.modal.confirm({
|
|
||||||
title: t('settings.provider.delete.title'),
|
|
||||||
content: t('settings.provider.delete.content'),
|
|
||||||
okButtonProps: { danger: true },
|
|
||||||
okText: t('common.delete'),
|
|
||||||
centered: true,
|
|
||||||
onOk: async () => {
|
|
||||||
// 删除provider前先清理其logo
|
|
||||||
if (provider.id) {
|
|
||||||
try {
|
|
||||||
await ImageStorage.remove(`provider-${provider.id}`)
|
|
||||||
setProviderLogos((prev) => {
|
|
||||||
const newLogos = { ...prev }
|
|
||||||
delete newLogos[provider.id]
|
|
||||||
return newLogos
|
|
||||||
})
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Failed to delete logo', error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setSelectedProvider(providers.filter((p) => p.isSystem)[0])
|
|
||||||
removeProvider(provider)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
}
|
||||||
|
|
||||||
|
const deleteMenu = {
|
||||||
|
label: t('common.delete'),
|
||||||
|
key: 'delete',
|
||||||
|
icon: <DeleteOutlined />,
|
||||||
|
danger: true,
|
||||||
|
async onClick() {
|
||||||
|
window.modal.confirm({
|
||||||
|
title: t('settings.provider.delete.title'),
|
||||||
|
content: t('settings.provider.delete.content'),
|
||||||
|
okButtonProps: { danger: true },
|
||||||
|
okText: t('common.delete'),
|
||||||
|
centered: true,
|
||||||
|
onOk: async () => {
|
||||||
|
// 删除provider前先清理其logo
|
||||||
|
if (provider.id) {
|
||||||
|
try {
|
||||||
|
await ImageStorage.remove(`provider-${provider.id}`)
|
||||||
|
setProviderLogos((prev) => {
|
||||||
|
const newLogos = { ...prev }
|
||||||
|
delete newLogos[provider.id]
|
||||||
|
return newLogos
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to delete logo', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setSelectedProvider(providers.filter((p) => p.isSystem)[0])
|
||||||
|
removeProvider(provider)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const menus = [editMenu, noteMenu, deleteMenu]
|
||||||
|
|
||||||
if (providers.filter((p) => p.id === provider.id).length > 1) {
|
if (providers.filter((p) => p.id === provider.id).length > 1) {
|
||||||
return menus
|
return menus
|
||||||
}
|
}
|
||||||
|
|
||||||
if (provider.isSystem) {
|
if (provider.isSystem) {
|
||||||
return [noteMenu]
|
if (INITIAL_PROVIDERS.find((p) => p.id === provider.id)) {
|
||||||
|
return [noteMenu]
|
||||||
|
}
|
||||||
|
return [noteMenu, deleteMenu]
|
||||||
}
|
}
|
||||||
|
|
||||||
return menus
|
return menus
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user