From 3c5bdf0a0b85044566b0de3c50ee0f0ff43ca687 Mon Sep 17 00:00:00 2001 From: Wikid82 Date: Wed, 19 Nov 2025 20:10:18 -0500 Subject: [PATCH] feat: Update ImportReviewTable and RemoteServerForm components for improved conflict handling and connection testing --- frontend/src/components/ImportReviewTable.tsx | 7 +- frontend/src/components/RemoteServerForm.tsx | 26 +++++++ .../__tests__/ImportReviewTable.test.tsx | 70 ++++--------------- .../__tests__/ProxyHostForm.test.tsx | 29 ++++++-- .../__tests__/RemoteServerForm.test.tsx | 2 +- .../src/hooks/__tests__/useImport.test.ts | 27 +++++-- .../src/hooks/__tests__/useProxyHosts.test.ts | 31 +++++--- .../hooks/__tests__/useRemoteServers.test.ts | 37 +++++++--- 8 files changed, 137 insertions(+), 92 deletions(-) diff --git a/frontend/src/components/ImportReviewTable.tsx b/frontend/src/components/ImportReviewTable.tsx index 1234dd42..1fd6e404 100644 --- a/frontend/src/components/ImportReviewTable.tsx +++ b/frontend/src/components/ImportReviewTable.tsx @@ -7,17 +7,16 @@ interface HostPreview { interface Props { hosts: HostPreview[] - conflicts: Record + conflicts: string[] errors: string[] onCommit: (resolutions: Record) => Promise onCancel: () => void } export default function ImportReviewTable({ hosts, conflicts, errors, onCommit, onCancel }: Props) { - const conflictDomains = useMemo(() => Object.keys(conflicts || {}), [conflicts]) const [resolutions, setResolutions] = useState>(() => { const init: Record = {} - conflictDomains.forEach((d: string) => { init[d] = conflicts[d] || 'keep' }) + conflicts.forEach((d: string) => { init[d] = 'keep' }) return init }) const [submitting, setSubmitting] = useState(false) @@ -88,7 +87,7 @@ export default function ImportReviewTable({ hosts, conflicts, errors, onCommit, {hosts.map((h, idx) => { const domain = h.domain_names - const hasConflict = conflictDomains.includes(domain) + const hasConflict = conflicts.includes(domain) return ( diff --git a/frontend/src/components/RemoteServerForm.tsx b/frontend/src/components/RemoteServerForm.tsx index 2fc635aa..6432b491 100644 --- a/frontend/src/components/RemoteServerForm.tsx +++ b/frontend/src/components/RemoteServerForm.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from 'react' import type { RemoteServer } from '../api/remoteServers' +import { remoteServersAPI } from '../services/api' interface Props { server?: RemoteServer @@ -44,6 +45,20 @@ export default function RemoteServerForm({ server, onSubmit, onCancel }: Props) } } + const handleTestConnection = async () => { + if (!server?.uuid) return + setLoading(true) + setError(null) + try { + const result = await remoteServersAPI.test(server.uuid) + alert(`Connection successful: ${result.address}`) + } catch (err) { + setError('Connection failed') + } finally { + setLoading(false) + } + } + return (
@@ -67,6 +82,7 @@ export default function RemoteServerForm({ server, onSubmit, onCancel }: Props) required value={formData.name} onChange={e => setFormData({ ...formData, name: e.target.value })} + placeholder="My Production Server" className="w-full bg-gray-900 border border-gray-700 rounded-lg px-4 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />
@@ -131,6 +147,16 @@ export default function RemoteServerForm({ server, onSubmit, onCancel }: Props)
+ {server && ( + + )}