mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 03:55:55 +00:00
refactor: remove providerUuid prop from model components and enhance provider deletion confirmation UI
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 && (
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
className="h-8 w-8"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
onDeleteProvider();
|
||||
}}
|
||||
<Popover
|
||||
open={deleteProviderConfirmOpen}
|
||||
onOpenChange={setDeleteProviderConfirmOpen}
|
||||
>
|
||||
<Trash2 className="h-4 w-4 text-destructive" />
|
||||
</Button>
|
||||
<PopoverTrigger asChild>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
className="h-8 w-8"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
}}
|
||||
>
|
||||
<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}
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -224,6 +224,7 @@ const jaJP = {
|
||||
providerSaveError: 'プロバイダーの保存に失敗しました:',
|
||||
providerDeleted: 'プロバイダーを削除しました',
|
||||
providerDeleteError: 'プロバイダーの削除に失敗しました:',
|
||||
deleteProviderConfirmation: 'このプロバイダーを削除してもよろしいですか?',
|
||||
loadError: 'データの読み込みに失敗しました',
|
||||
chat: 'チャット',
|
||||
embedding: '埋め込み',
|
||||
|
||||
@@ -211,6 +211,7 @@ const zhHans = {
|
||||
providerSaveError: '保存供应商失败:',
|
||||
providerDeleted: '供应商已删除',
|
||||
providerDeleteError: '删除供应商失败:',
|
||||
deleteProviderConfirmation: '你确定要删除这个供应商吗?',
|
||||
loadError: '加载数据失败',
|
||||
chat: '对话',
|
||||
embedding: '嵌入',
|
||||
|
||||
@@ -210,6 +210,7 @@ const zhHant = {
|
||||
providerSaveError: '儲存供應商失敗:',
|
||||
providerDeleted: '供應商已刪除',
|
||||
providerDeleteError: '刪除供應商失敗:',
|
||||
deleteProviderConfirmation: '您確定要刪除這個供應商嗎?',
|
||||
loadError: '載入資料失敗',
|
||||
chat: '對話',
|
||||
embedding: '嵌入',
|
||||
|
||||
Reference in New Issue
Block a user