refactor: remove providerUuid prop from model components and enhance provider deletion confirmation UI

This commit is contained in:
Junyan Qin
2026-01-01 15:07:37 +08:00
parent b4773c4e48
commit 75c2a063cc
7 changed files with 62 additions and 22 deletions

View File

@@ -17,7 +17,6 @@ import { ExtraArg, ModelType, TestResult } from '../types';
import ExtraArgsEditor from './ExtraArgsEditor';
interface AddModelPopoverProps {
providerUuid: string;
isOpen: boolean;
onOpen: () => void;
onClose: () => void;
@@ -40,7 +39,6 @@ interface AddModelPopoverProps {
}
export default function AddModelPopover({
providerUuid,
isOpen,
onOpen,
onClose,

View File

@@ -20,7 +20,6 @@ import ExtraArgsEditor from './ExtraArgsEditor';
interface ModelItemProps {
model: LLMModel | EmbeddingModel;
modelType: ModelType;
providerUuid: string;
isLangBotModels: boolean;
editModelPopoverOpen: string | null;
deleteConfirmOpen: string | null;
@@ -58,7 +57,6 @@ function convertExtraArgsToArray(extraArgs?: object): ExtraArg[] {
export default function ModelItem({
model,
modelType,
providerUuid,
isLangBotModels,
editModelPopoverOpen,
deleteConfirmOpen,

View File

@@ -1,5 +1,6 @@
'use client';
import { useState } from 'react';
import {
Plus,
ChevronDown,
@@ -9,17 +10,18 @@ import {
LogIn,
} from 'lucide-react';
import { httpClient, systemInfo } from '@/app/infra/http/HttpClient';
import {
ModelProvider,
LLMModel,
EmbeddingModel,
} from '@/app/infra/entities/api';
import { ModelProvider } from '@/app/infra/entities/api';
import { Button } from '@/components/ui/button';
import {
Collapsible,
CollapsibleContent,
CollapsibleTrigger,
} from '@/components/ui/collapsible';
import {
Popover,
PopoverContent,
PopoverTrigger,
} from '@/components/ui/popover';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { useTranslation } from 'react-i18next';
@@ -116,6 +118,8 @@ export default function ProviderCard({
onResetTestResult,
}: ProviderCardProps) {
const { t } = useTranslation();
const [deleteProviderConfirmOpen, setDeleteProviderConfirmOpen] =
useState(false);
const canDelete =
!isLangBotModels &&
@@ -231,17 +235,55 @@ export default function ProviderCard({
<Settings className="h-4 w-4" />
</Button>
{canDelete && (
<Popover
open={deleteProviderConfirmOpen}
onOpenChange={setDeleteProviderConfirmOpen}
>
<PopoverTrigger asChild>
<Button
variant="ghost"
size="icon"
className="h-8 w-8"
onClick={(e) => {
e.stopPropagation();
onDeleteProvider();
}}
>
<Trash2 className="h-4 w-4 text-destructive" />
</Button>
</PopoverTrigger>
<PopoverContent
className="w-64"
align="end"
onClick={(e) => e.stopPropagation()}
>
<div className="space-y-3">
<p className="text-sm">
{t('models.deleteProviderConfirmation')}
</p>
<div className="flex gap-2 justify-end">
<Button
variant="outline"
size="sm"
onClick={() =>
setDeleteProviderConfirmOpen(false)
}
>
{t('common.cancel')}
</Button>
<Button
variant="destructive"
size="sm"
onClick={() => {
onDeleteProvider();
setDeleteProviderConfirmOpen(false);
}}
>
{t('common.delete')}
</Button>
</div>
</div>
</PopoverContent>
</Popover>
)}
</>
)}
@@ -266,7 +308,6 @@ export default function ProviderCard({
)}
{!isLangBotModels && (
<AddModelPopover
providerUuid={provider.uuid}
isOpen={addModelPopoverOpen === provider.uuid}
onOpen={onOpenAddModel}
onClose={onCloseAddModel}
@@ -293,7 +334,6 @@ export default function ProviderCard({
key={model.uuid}
model={model}
modelType="llm"
providerUuid={provider.uuid}
isLangBotModels={isLangBotModels}
editModelPopoverOpen={editModelPopoverOpen}
deleteConfirmOpen={deleteConfirmOpen}
@@ -325,7 +365,6 @@ export default function ProviderCard({
key={model.uuid}
model={model}
modelType="embedding"
providerUuid={provider.uuid}
isLangBotModels={isLangBotModels}
editModelPopoverOpen={editModelPopoverOpen}
deleteConfirmOpen={deleteConfirmOpen}

View File

@@ -218,6 +218,8 @@ const enUS = {
providerSaveError: 'Failed to save provider: ',
providerDeleted: 'Provider deleted',
providerDeleteError: 'Failed to delete provider: ',
deleteProviderConfirmation:
'Are you sure you want to delete this provider?',
loadError: 'Failed to load data',
chat: 'Chat',
embedding: 'Embedding',

View File

@@ -224,6 +224,7 @@ const jaJP = {
providerSaveError: 'プロバイダーの保存に失敗しました:',
providerDeleted: 'プロバイダーを削除しました',
providerDeleteError: 'プロバイダーの削除に失敗しました:',
deleteProviderConfirmation: 'このプロバイダーを削除してもよろしいですか?',
loadError: 'データの読み込みに失敗しました',
chat: 'チャット',
embedding: '埋め込み',

View File

@@ -211,6 +211,7 @@ const zhHans = {
providerSaveError: '保存供应商失败:',
providerDeleted: '供应商已删除',
providerDeleteError: '删除供应商失败:',
deleteProviderConfirmation: '你确定要删除这个供应商吗?',
loadError: '加载数据失败',
chat: '对话',
embedding: '嵌入',

View File

@@ -210,6 +210,7 @@ const zhHant = {
providerSaveError: '儲存供應商失敗:',
providerDeleted: '供應商已刪除',
providerDeleteError: '刪除供應商失敗:',
deleteProviderConfirmation: '您確定要刪除這個供應商嗎?',
loadError: '載入資料失敗',
chat: '對話',
embedding: '嵌入',