import React, { useEffect, useState, useRef } from 'react' export const OpenCodePage: React.FC = () => { const [isHealthy, setIsHealthy] = useState(false) const [port, setPort] = useState(9999) const startedRef = useRef(false) const restartingRef = useRef(false) useEffect(() => { let mounted = true const start = async () => { try { const portResult = await window.electronAPI.xcOpenCodeWebGetPort() if (mounted) { setPort(portResult.port) } const result = await window.electronAPI.xcOpenCodeWebStart() if (!result.success && mounted) { console.error('Failed to start XCOpenCodeWeb:', result.error) } restartingRef.current = false } catch (err) { console.error('Failed to start XCOpenCodeWeb:', err) restartingRef.current = false } } const checkStatus = async () => { try { const status = await window.electronAPI.xcOpenCodeWebGetStatus() if (mounted) { setIsHealthy(status.running) if (!status.running && !restartingRef.current) { restartingRef.current = true start() } } } catch (err) { if (mounted) { setIsHealthy(false) if (!restartingRef.current) { restartingRef.current = true start() } } } } if (!startedRef.current) { startedRef.current = true start() } const interval = setInterval(checkStatus, 2000) return () => { mounted = false clearInterval(interval) window.electronAPI.xcOpenCodeWebStop() startedRef.current = false } }, []) return (
{!isHealthy && (
)} {isHealthy && (