-
Notifications
You must be signed in to change notification settings - Fork 1
/
__layout.svelte
69 lines (58 loc) · 1.54 KB
/
__layout.svelte
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
<script lang="ts" context="module">
import { isAuthedRoute } from "$lib/routing"
import type { Load } from "@sveltejs/kit"
export const load: Load = async ({ url, session }) => {
const needsAuth = isAuthedRoute(url.pathname)
const loggedIn = !!session.userId
if (!loggedIn && needsAuth) {
return {
status: 303,
redirect: "/login?next=" + encodeURIComponent(url.pathname),
}
} else {
return {}
}
}
</script>
<script lang="ts">
import { browser } from "$app/env"
import { navigating, session } from "$app/stores"
import { page } from "$app/stores"
import sprachy from "$lib/sprachy"
import PreloadingIndicator from "$lib/PreloadingIndicator.svelte"
let initializing: boolean = true
let loadingPromises: Set<Promise<any>> = new Set()
if (browser) {
const { api } = sprachy.expectBrowser()
api.http.onRequest = (req) => {
loadingPromises.add(req)
loadingPromises = loadingPromises
req.finally(() => {
loadingPromises.delete(req)
loadingPromises = loadingPromises
})
}
}
async function startSPA() {
try {
await sprachy.initSPA()
} finally {
initializing = false
}
}
if (browser && $session.userId && !sprachy.spa && !$page.error) {
startSPA()
} else {
initializing = false
}
</script>
{#if initializing || $navigating || loadingPromises.size > 0}
<PreloadingIndicator />
{/if}
{#if !initializing}
<slot />
{/if}
<style lang="sass" global>
@import '../app.sass'
@import '../app.css'
</style>