import { useState, useEffect } from 'react' import Navbar from './components/Navbar' import AnalyzeScreen from './screens/AnalyzeScreen' import BatchScreen from './screens/BatchScreen' import SimilarityScreen from './screens/SimilarityScreen' import DetailScreen from './screens/DetailScreen' // Hash-based routing — svaki ekran ima vlastiti URL fragment // Tako browser back/forward gumb rade ispravno const SCREEN_TO_HASH = { analyze: '#analyze', batch: '#batch', similarity: '#similarity', detail: '#detail', } const HASH_TO_SCREEN = Object.fromEntries( Object.entries(SCREEN_TO_HASH).map(([k, v]) => [v, k]) ) function getScreenFromHash() { return HASH_TO_SCREEN[window.location.hash] || 'analyze' } export default function App() { const [screen, setScreen] = useState(getScreenFromHash) const [detailRow, setDetailRow] = useState(null) const [serverOk, setServerOk] = useState(null) // Health check useEffect(() => { fetch('/api/health') .then(r => r.json()) .then(d => setServerOk(d.model_loaded)) .catch(() => setServerOk(false)) }, []) // Slušamo browser back/forward useEffect(() => { const onPop = () => { const s = getScreenFromHash() setScreen(s) // Ako se vraćamo s detail-a, detailRow ostaje — batch zadržava state } window.addEventListener('popstate', onPop) return () => window.removeEventListener('popstate', onPop) }, []) // Navigacija — pushState mijenja URL i bilježi u history const navigate = (s) => { if (s !== 'batch' && s !== 'detail') setDetailRow(null) window.history.pushState({ screen: s }, '', SCREEN_TO_HASH[s]) setScreen(s) } const openDetail = (row) => { setDetailRow(row) window.history.pushState({ screen: 'detail' }, '', '#detail') setScreen('detail') } const backToBatch = () => { window.history.pushState({ screen: 'batch' }, '', '#batch') setScreen('batch') } return (
python app.py