File size: 2,227 Bytes
3b7fd58
 
 
 
 
 
 
 
 
 
 
75fc585
 
 
 
 
 
 
 
 
 
 
3b7fd58
75fc585
3b7fd58
 
75fc585
3b7fd58
75fc585
 
3b7fd58
 
 
 
 
 
 
 
 
 
 
 
75fc585
 
3b7fd58
 
75fc585
 
 
 
7357db4
 
 
 
 
 
 
75fc585
3b7fd58
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const { useState, useRef, useEffect, useCallback } = React;

const STATUS_MESSAGES = {
    uploading: 'Uploading video\u2026',
    detecting: 'Detecting faces & predicting deepfake\u2026',
    processing_video: 'Generating face detection video\u2026',
};

function barClass(s) { return s > 0.8 ? 'bar-green' : s > 0.2 ? 'bar-orange' : 'bar-red'; }
function scoreClass(s) { return s > 0.8 ? 'score-green' : s > 0.2 ? 'score-orange' : 'score-red'; }

/* ── Simple hash-based router ── */
function useHashRoute() {
    const [route, setRoute] = useState(window.location.hash || '#/');
    useEffect(() => {
        const onHash = () => setRoute(window.location.hash || '#/');
        window.addEventListener('hashchange', onHash);
        return () => window.removeEventListener('hashchange', onHash);
    }, []);
    return route;
}

/* ── Navbar ── */
function Navbar({ route }) {
    return (
        <header className="navbar">
            <div className="logo"><span>AI</span>-Deepfake Video Detection</div>
            <nav>
                <a href="#/" className={route === '#/' || route === '' ? 'active' : ''}>Product</a>
                <a href="#/technology" className={route === '#/technology' ? 'active' : ''}>Technology</a>
            </nav>
        </header>
    );
}

/* ── Main App ── */
function App() {
    const [file, setFile] = useState(null);
    const [status, setStatus] = useState(null);
    const [error, setError] = useState(null);
    const [result, setResult] = useState(null);
    const [submitting, setSubmitting] = useState(false);
    const route = useHashRoute();

    return (
        <>
            <Navbar route={route} />
            {route === '#/technology' ? (
                <TechnologyPage />
            ) : (
                <ProductPage
                    file={file} setFile={setFile}
                    status={status} setStatus={setStatus}
                    error={error} setError={setError}
                    result={result} setResult={setResult}
                    submitting={submitting} setSubmitting={setSubmitting}
                />
            )}
        </>
    );
}

ReactDOM.createRoot(document.getElementById('root')).render(<App />);