- {notifications.length === 0 ? (
+ {/* Update Notification */}
+ {updateInfo?.available && (
+
+ )}
+
+ {notifications.length === 0 && !updateInfo?.available ? (
No new notifications
diff --git a/frontend/src/components/ProxyHostForm.tsx b/frontend/src/components/ProxyHostForm.tsx
index 013857aa..7633f021 100644
--- a/frontend/src/components/ProxyHostForm.tsx
+++ b/frontend/src/components/ProxyHostForm.tsx
@@ -1,4 +1,5 @@
import { useState } from 'react'
+import { CircleHelp } from 'lucide-react'
import type { ProxyHost } from '../api/proxyHosts'
import { useRemoteServers } from '../hooks/useRemoteServers'
import { useDocker } from '../hooks/useDocker'
@@ -20,15 +21,31 @@ export default function ProxyHostForm({ host, onSubmit, onCancel }: ProxyHostFor
hsts_enabled: host?.hsts_enabled ?? false,
hsts_subdomains: host?.hsts_subdomains ?? false,
block_exploits: host?.block_exploits ?? true,
- websocket_support: host?.websocket_support ?? false,
+ websocket_support: host?.websocket_support ?? true,
advanced_config: host?.advanced_config || '',
enabled: host?.enabled ?? true,
})
const { servers: remoteServers } = useRemoteServers()
- const [dockerHost, setDockerHost] = useState('')
- const [showDockerHost, setShowDockerHost] = useState(false)
- const { containers: dockerContainers, isLoading: dockerLoading, error: dockerError } = useDocker(dockerHost)
+ const [connectionSource, setConnectionSource] = useState<'local' | string>('local')
+
+ // Fetch containers based on selected source
+ // If 'local', host is undefined (which defaults to local socket in backend)
+ // If remote UUID, we need to find the server and get its host address?
+ // Actually, the backend ListContainers takes a 'host' query param.
+ // If it's a remote server, we should probably pass the UUID or the host address.
+ // Looking at backend/internal/services/docker_service.go, it takes a 'host' string.
+ // If it's a remote server, we need to pass the TCP address (e.g. tcp://1.2.3.4:2375).
+
+ const getDockerHostString = () => {
+ if (connectionSource === 'local') return undefined;
+ const server = remoteServers.find(s => s.uuid === connectionSource);
+ if (!server) return undefined;
+ // Construct the Docker host string
+ return `tcp://${server.host}:${server.port}`;
+ }
+
+ const { containers: dockerContainers, isLoading: dockerLoading, error: dockerError } = useDocker(getDockerHostString())
const [loading, setLoading] = useState(false)
const [error, setError] = useState
(null)
@@ -130,28 +147,31 @@ export default function ProxyHostForm({ host, onSubmit, onCancel }: ProxyHostFor
{/* Docker Container Quick Select */}
-
-
-
-
+
+
+
- {showDockerHost && (
- setDockerHost(e.target.value)}
- className="w-full bg-gray-900 border border-gray-700 rounded-lg px-4 py-2 text-white text-sm mb-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
- />
- )}
+
-
-
- setFormData({ ...formData, username: e.target.value })}
- 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"
- />
-
+ {formData.provider !== 'docker' && (
+
+
+ setFormData({ ...formData, username: e.target.value })}
+ 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"
+ />
+
+ )}