aboutsummaryrefslogtreecommitdiff
path: root/fe/src/lib/Layout.svelte
blob: 26630d293a1a9af973b4a24161d8d19ea58bed69 (plain)
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
<script>
    import { authenticated, token, user, preferences } from "../stores/auth";
    import { PreferencesForm, AddForm } from "./forms";
    import { addFormOpen } from "../stores/forms";

    const logout = () => { 
        preferences.reset();
        user.reset();
        token.unauthenticate();
    }
    let preferenceFormOpen = false;

    function showPreferencesDialog() {
        preferenceFormOpen = true;
    }

    function closePreferenceDialog() {
        preferenceFormOpen = false;
    }

    function showAddDialog() {
        addFormOpen.set(true);
    }
</script>

<div class="layout">
    {#if $authenticated}
        <nav>
            <div>
                <h1>Water</h1>
            </div>
            <div>
                <button on:click={showAddDialog}>
                    <span class="btn-icon">➕</span>
                    <span class="btn-content">Log Water</span>
                </button>
                <button on:click={showPreferencesDialog}>
                    <span class="btn-icon">⚙</span>
                    <span class="btn-content">Preference</span>
                </button>
                <button on:click={logout}>
                    <span class="btn-icon">🔒</span>
                    <span class="btn-content">Logout</span>
                </button>
            </div>
        </nav>
        <PreferencesForm open={preferenceFormOpen} on:close={closePreferenceDialog} />
    {/if}
    <div id="content">
        <slot />
    </div>
</div>

<style>
    nav {
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        height: 64px;
        padding: 1em 0;
    }

    nav div button {
        margin: 0 .5em;
    }

    nav div button:first-child {
        margin-left: 0;
    }

    nav div button:last-child {
        margin-right: 0;
    }


    nav .btn-content {
        display: none;
    }

    nav div {
        width: fit-content;
    }

    nav div h1 {
        font-size: 1.75em;
    }

    #content {
        display: flex;
        flex-direction: column;
        justify-content: center;
        gap: 2em;
        margin-top: 1em;
    }

    @media (min-width: 916px) {
        nav .btn-content {
            display: inline;
            margin-left: 1em;
        }
    }
</style>