feat(network-map): enhance ping and speed request handling with options for specific connections and loading states
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m1s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m1s
This commit is contained in:
@@ -86,7 +86,18 @@ function speedKey(key1, key2) {
|
||||
return [String(key1), String(key2)].sort().join(':');
|
||||
}
|
||||
|
||||
export default function NetworkMapUnifi({ servers = [], connections = [], pingMap = {}, speedMap = {}, pingStaleMap = {}, speedStaleMap = {} }) {
|
||||
export default function NetworkMapUnifi({
|
||||
servers = [],
|
||||
connections = [],
|
||||
pingMap = {},
|
||||
speedMap = {},
|
||||
pingStaleMap = {},
|
||||
speedStaleMap = {},
|
||||
onRefreshPingForConnection,
|
||||
onRefreshSpeedForConnection,
|
||||
pingLoading = false,
|
||||
speedLoading = false,
|
||||
}) {
|
||||
const containerRef = useRef(null);
|
||||
const svgRef = useRef(null);
|
||||
const [size, setSize] = useState({ w: 800, h: 520 });
|
||||
@@ -514,6 +525,17 @@ export default function NetworkMapUnifi({ servers = [], connections = [], pingMa
|
||||
const sk = speedKey(selectedEdge.raw?.fromKey, selectedEdge.raw?.toKey);
|
||||
const speed = speedMap[sk] ?? selectedEdge.speed;
|
||||
const speedStale = speedStaleMap[sk] === true;
|
||||
const canPingFrom =
|
||||
fromServer &&
|
||||
['jumphost', 'home'].includes(String(fromServer.type || '').toLowerCase()) &&
|
||||
selectedEdge.raw?.internalFromTo;
|
||||
const canPingTo =
|
||||
toServer &&
|
||||
['jumphost', 'home'].includes(String(toServer.type || '').toLowerCase()) &&
|
||||
selectedEdge.raw?.internalToFrom;
|
||||
const canPing = Boolean(canPingFrom || canPingTo);
|
||||
const canSpeed =
|
||||
Boolean(selectedEdge.raw?.speedTestServerId && selectedEdge.raw?.interfaceName);
|
||||
return (
|
||||
<div
|
||||
className="network-map-edge-modal-backdrop"
|
||||
@@ -635,6 +657,32 @@ export default function NetworkMapUnifi({ servers = [], connections = [], pingMa
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div className="mt-3 d-flex flex-wrap gap-2 justify-content-end">
|
||||
<button
|
||||
type="button"
|
||||
className="btn btn-outline-primary btn-sm"
|
||||
disabled={!canPing || pingLoading || !onRefreshPingForConnection}
|
||||
onClick={() => onRefreshPingForConnection && onRefreshPingForConnection(selectedEdge.raw)}
|
||||
>
|
||||
<IconRefresh
|
||||
size={14}
|
||||
className={pingLoading ? 'spin me-1' : 'me-1'}
|
||||
/>
|
||||
{pingLoading ? 'Пинг…' : 'Проверить пинг'}
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
className="btn btn-outline-primary btn-sm"
|
||||
disabled={!canSpeed || speedLoading || !onRefreshSpeedForConnection}
|
||||
onClick={() => onRefreshSpeedForConnection && onRefreshSpeedForConnection(selectedEdge.raw)}
|
||||
>
|
||||
<IconRefresh
|
||||
size={14}
|
||||
className={speedLoading ? 'spin me-1' : 'me-1'}
|
||||
/>
|
||||
{speedLoading ? 'Скорость…' : 'Проверить скорость'}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user