'use client'; import { useState, useEffect } from 'react'; import { AlertCircle, RefreshCw, Info } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { getVersion, VersionInfo } from '@/lib/api'; export function VersionChecker() { const [currentVersion, setCurrentVersion] = useState(null); const [serverVersion, setServerVersion] = useState(null); const [showUpdate, setShowUpdate] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { // Get initial version from version.json const loadCurrentVersion = async () => { try { const response = await fetch('/ui/version.json', { cache: 'no-store' // Always fetch fresh version }); if (response.ok) { const data = await response.json(); setCurrentVersion(data.version); } } catch (error) { console.warn('Failed to load UI version:', error); } finally { setLoading(false); } }; loadCurrentVersion(); }, []); useEffect(() => { // Check server version periodically (every 5 minutes) const checkVersion = async () => { try { const versionInfo = await getVersion(); setServerVersion(versionInfo); // If we have both versions and they don't match, show update notification if (currentVersion && versionInfo.version !== currentVersion) { setShowUpdate(true); } } catch (error) { console.warn('Failed to check server version:', error); } }; // Initial check after 2 seconds const initialTimeout = setTimeout(checkVersion, 2000); // Periodic check every 5 minutes const interval = setInterval(checkVersion, 5 * 60 * 1000); return () => { clearTimeout(initialTimeout); clearInterval(interval); }; }, [currentVersion]); const handleRefresh = () => { // Force reload to get new version window.location.reload(); }; if (loading || !serverVersion) { return null; } // Version badge display (always visible in footer/header) const VersionBadge = () => (
v{serverVersion.version} {!serverVersion.clean && *}
); // Update notification overlay if (showUpdate) { return ( <>

New UI Version Available

A new version of UI has been deployed. Current: {currentVersion}, Server: {serverVersion.version}. Refresh to get latest updates.

); } return ; }