diff options
Diffstat (limited to 'src/routes/__layout.svelte')
| -rw-r--r-- | src/routes/__layout.svelte | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte index ed1ad188..9ec36c57 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/__layout.svelte @@ -1,11 +1,47 @@ <script> + import { SvelteToast } from '@zerodevx/svelte-toast'; + import { toast } from '@zerodevx/svelte-toast'; import '../app.css'; + import '$lib/i18n'; import { onMount } from 'svelte'; import { connect } from '$lib/socket'; + import { user, token } from '$lib/store'; + import { page, session } from '$app/stores'; + import { browser } from '$app/env'; + import { goto } from '$app/navigation'; + import { LoadingSplash } from '$comp'; + import { protectedRoutes } from '$lib/utils'; - import '$lib/i18n'; + browser && ($token ||= $session.token); + let ready = false; - onMount(connect); + onMount(() => { + if (protectedRoutes.find((p) => $page.url.pathname.match(p))) { + if (!$token) { + goto('/login'); + toast.push('Please sign in to continue.'); + } + user.subscribe((u) => u?.username && (ready = true)); + } else { + ready = true; + } + + connect(); + }); </script> -<slot /> +{#if ready} + <SvelteToast options={{ reversed: true, intro: { y: 192 } }} /> + <slot /> +{:else} + <LoadingSplash /> +{/if} + +<style> + :root { + --toastContainerTop: auto; + --toastContainerRight: auto; + --toastContainerBottom: 8rem; + --toastContainerLeft: calc(50vw - 8rem); + } +</style> |
