import { useState, useEffect, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { getSigmaInstance } from '../sigmaGlobals'; interface NetworkControlsProps { className?: string; } export function NetworkControls({ className }: NetworkControlsProps) { const { t } = useTranslation(); const [isFullscreen, setIsFullscreen] = useState(false); // Sync fullscreen state when user exits via Escape key or browser UI const handleFullscreenChange = useCallback(() => { setIsFullscreen(!!document.fullscreenElement); }, []); useEffect(() => { document.addEventListener('fullscreenchange', handleFullscreenChange); return () => document.removeEventListener('fullscreenchange', handleFullscreenChange); }, [handleFullscreenChange]); function handleZoomIn() { const sigma = getSigmaInstance(); if (!sigma) return; const camera = sigma.getCamera(); camera.animate({ ratio: camera.ratio / 1.5 }, { duration: 200 }); } function handleZoomOut() { const sigma = getSigmaInstance(); if (!sigma) return; const camera = sigma.getCamera(); camera.animate({ ratio: camera.ratio * 1.5 }, { duration: 200 }); } function handleResetZoom() { const sigma = getSigmaInstance(); if (!sigma) return; const camera = sigma.getCamera(); camera.animate({ x: 0.5, y: 0.5, ratio: 1 }, { duration: 400 }); } function handleFullscreen() { const container = document.getElementById('referral-network-container'); if (!container) return; if (!document.fullscreenElement) { container .requestFullscreen() .then(() => setIsFullscreen(true)) .catch(() => {}); } else { document .exitFullscreen() .then(() => setIsFullscreen(false)) .catch(() => {}); } } const buttons = [ { label: t('admin.referralNetwork.controls.zoomIn'), onClick: handleZoomIn, icon: ( ), }, { label: t('admin.referralNetwork.controls.zoomOut'), onClick: handleZoomOut, icon: ( ), }, { label: t('admin.referralNetwork.controls.resetZoom'), onClick: handleResetZoom, icon: ( ), }, { label: t('admin.referralNetwork.controls.fullscreen'), onClick: handleFullscreen, icon: isFullscreen ? ( ) : ( ), }, ]; return (