diff --git a/frontend/src/pages/settings/settings-provider.tsx b/frontend/src/pages/settings/settings-provider.tsx index 0cc0d6a4..26bda000 100644 --- a/frontend/src/pages/settings/settings-provider.tsx +++ b/frontend/src/pages/settings/settings-provider.tsx @@ -16,7 +16,7 @@ import { Trash2, XCircle, } from 'lucide-react'; -import { useEffect, useMemo, useState } from 'react'; +import { type ComponentProps, useEffect, useMemo, useState } from 'react'; import { type Control, type FieldPath, @@ -1065,6 +1065,29 @@ const extractAgentTypes = (agents: unknown): null | string[] => { return types.length > 0 ? types : null; }; +interface DeleteProviderDialogProps + extends Pick, 'handleConfirm' | 'handleOpenChange' | 'isOpen'> { + control: Control; +} + +// Subscribes to the `name` field on its own so a keystroke in the provider-name +// input re-renders only this dialog, not the whole SettingsProvider form tree. +function DeleteProviderDialog({ control, handleConfirm, handleOpenChange, isOpen }: DeleteProviderDialogProps) { + const providerName = useWatch({ control, name: 'name' }); + + return ( + + ); +} + function SettingsProvider() { const { providerId } = useParams<{ providerId: string }>(); const navigate = useNavigate(); @@ -1107,8 +1130,6 @@ function SettingsProvider() { const selectedType = useWatch({ control, name: 'type' }); - const providerName = useWatch({ control, name: 'name' }); - const formQueryParams = useMemo( () => ({ id: searchParams.get('id'), @@ -1880,14 +1901,11 @@ function SettingsProvider() { results={testResults} /> -