File size: 3,770 Bytes
1982de5
a417977
 
1982de5
 
 
 
 
 
a417977
 
1982de5
 
a417977
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1982de5
a417977
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1982de5
a417977
 
 
1982de5
 
a417977
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1982de5
 
 
 
 
 
 
 
 
a417977
1982de5
a417977
1982de5
 
 
 
 
 
a417977
1982de5
 
 
 
 
 
 
 
 
 
 
 
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import "./styles.scss";
import {JSX} from "preact";
import {useState, useContext} from "preact/hooks";
import style from "./style.module.scss";
import {Container} from "./components/container";
import {Topics} from "./components/topics";
import {Topic as TopicComponent} from "./components/topic";
import {Settings} from "./components/settings";
import {Layout} from "./components/layout";
import {routeCtx, routes} from "@/contexts/route";
import {topicsCtx} from "@/contexts/topics";

export function App(): JSX.Element {
    const [route, setRoute] = useContext(routeCtx);
    const [topicsContext] = useContext(topicsCtx);

    // Router switch
    let routeComponent: JSX.Element;
    let breadcrumbs: JSX.Element;
    let title: string;

    switch (route.name) {
        case "home":
            routeComponent = <Topics page={route.args[0]} setPage={n => setRoute(routes.home(n))}/>
            breadcrumbs = (
                <a
                    href={routes.home(0).location}
                    onClick={e => {
                        e.preventDefault();
                        setRoute(routes.home(0));
                    }}
                >
                    accueil
                </a>
            );
            title = "Liste des sujets";
            break;
        case "topic":
            const topic = topicsContext.topics.find(t => t.id === route.args[0]);
            if (topic) {
                routeComponent = <TopicComponent page={route.args[1] - 1} setPage={n => setRoute(routes.topic(topic.id, n + 1))} topic={topic}/>
                breadcrumbs = (
                    <>
                        <a
                            href={routes.home(0).location}
                            onClick={e => {
                                e.preventDefault();
                                setRoute(routes.home(0));
                            }}
                        >
                            accueil
                        </a>
                        <span> / </span>
                        <b>{topic.title}</b>
                    </>
                )
                title = `Sujet : ${topic.title}`
            } else {
                routeComponent = <div></div>
                breadcrumbs = <>410</>
                title = `410 :)`
            }
            break;
        case "settings":
            routeComponent = <Settings/>
            breadcrumbs = (
                <>
                    <a
                        href={routes.home(0).location}
                        onClick={e => {
                            e.preventDefault();
                            setRoute(routes.home(0));
                        }}
                    >
                        accueil
                    </a>
                    <span> / </span>
                    <b>paramètres</b>
                </>
            )
            title = "Paramètres"
            break;
    }

    return (
        <>
            <header className={style.header}>
                <Container>
                    <h1 className={style.logo}>
                        <a href={routes.home(0).location} onClick={e => {
                            e.preventDefault();
                            setRoute(routes.home(0));
                        }}>
                            JVCGPT
                        </a>
                    </h1>
                </Container>
            </header>
            <main className={style.main}>
                <Container>
                    <Layout
                        breadcrumbs={breadcrumbs}
                        title={title}
                    >
                        {routeComponent}
                    </Layout>
                </Container>
            </main>
        </>
    );
}