diff --git a/core/http/react-ui/src/hooks/useP2PMode.js b/core/http/react-ui/src/hooks/useP2PMode.js new file mode 100644 index 000000000..98676df9f --- /dev/null +++ b/core/http/react-ui/src/hooks/useP2PMode.js @@ -0,0 +1,31 @@ +import { useState, useEffect, useCallback } from 'react' +import { p2pApi } from '../utils/api' + +// useP2PMode reports whether p2p / swarm mode is available, mirroring +// useDistributedMode. Availability is "a network token exists" (the same signal +// the standalone P2P page used). One-shot probe on mount plus a manual refetch. +// +// Returns: +// enabled — true when a non-empty network token is present +// loading — true until the first probe completes +// refetch — manual trigger to re-run the probe +export function useP2PMode() { + const [enabled, setEnabled] = useState(false) + const [loading, setLoading] = useState(true) + + const probe = useCallback(async () => { + setLoading(true) + try { + const token = await p2pApi.getToken() + setEnabled(!!(token && String(token).trim())) + } catch { + setEnabled(false) + } finally { + setLoading(false) + } + }, []) + + useEffect(() => { probe() }, [probe]) + + return { enabled, loading, refetch: probe } +} diff --git a/core/http/react-ui/src/pages/Nodes.jsx b/core/http/react-ui/src/pages/Nodes.jsx index c6eb9b294..f8d7037d4 100644 --- a/core/http/react-ui/src/pages/Nodes.jsx +++ b/core/http/react-ui/src/pages/Nodes.jsx @@ -107,7 +107,7 @@ function WorkerHintCard({ addToast, activeTab, hasWorkers }) { ) } -export default function Nodes() { +export default function Nodes({ embedded = false }) { const { addToast } = useOutletContext() const { t } = useTranslation('admin') const [nodesList, setNodesList] = useState([]) @@ -309,16 +309,18 @@ export default function Nodes() { : activeTab === 'agent' ? agentNodes : backendNodes return ( -
- - - {t('nodes.title')} - - } - supporting={t('nodes.subtitle')} - /> +
+ {!embedded && ( + + + {t('nodes.title')} + + } + supporting={t('nodes.subtitle')} + /> + )} diff --git a/core/http/react-ui/src/pages/P2P.jsx b/core/http/react-ui/src/pages/P2P.jsx index b67d84110..c5761cbc8 100644 --- a/core/http/react-ui/src/pages/P2P.jsx +++ b/core/http/react-ui/src/pages/P2P.jsx @@ -103,7 +103,7 @@ function StepNumber({ n, bg, color }) { ) } -export default function P2P() { +export default function P2P({ embedded = false }) { const { addToast } = useOutletContext() const { t } = useTranslation('admin') const [workers, setWorkers] = useState([]) @@ -173,7 +173,7 @@ export default function P2P() { if (loading) { return ( -
+
) @@ -182,7 +182,7 @@ export default function P2P() { // ── P2P Disabled ── if (!enabled) { return ( -
+

@@ -295,25 +295,27 @@ export default function P2P() { const mlxTotal = stats.mlx_workers?.total ?? 0 return ( -
- - - {t('p2p.title')} - - } - supporting={ - <> - {t('p2p.subtitle')} - {' '} - - - - - } - /> +
+ {!embedded && ( + + + {t('p2p.title')} + + } + supporting={ + <> + {t('p2p.subtitle')} + {' '} + + + + + } + /> + )} {/* Network Token */}