diff options
Diffstat (limited to 'apps/kit/src/routes/(main)/+layout.svelte')
| -rw-r--r-- | apps/kit/src/routes/(main)/+layout.svelte | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/apps/kit/src/routes/(main)/+layout.svelte b/apps/kit/src/routes/(main)/+layout.svelte new file mode 100644 index 0000000..e5b177e --- /dev/null +++ b/apps/kit/src/routes/(main)/+layout.svelte @@ -0,0 +1,41 @@ +<script lang="ts"> + import "../../app.pcss"; + import { afterNavigate, beforeNavigate, goto } from "$app/navigation"; + import { is_active } from "$lib/session"; + import type { Navigation } from "@sveltejs/kit"; + import { setLocale } from "$lib/i18n/i18n-svelte"; + import { onMount } from "svelte"; + import type { LayoutData } from "./$types"; + import LocaleSwitcher from "$lib/components/locale-switcher.svelte"; + + export let data: LayoutData; + onMount(() => setLocale(data.locale)); + + async function redirect_if_necessary(ticket: Navigation) { + const sessionIsValid = await is_active(); + // TODO: ticket.to can be empty while navigating, so coalesce could probably cause non-public routes to cause a redir to /login... + const isPublicRoute = + (ticket.to?.routeId?.startsWith("(public)") ?? true) || + ticket.to?.routeId?.startsWith("book"); + + console.log("redir: ", { + isPublicRoute, + sessionIsValid, + }); + + if (sessionIsValid && isPublicRoute) { + await goto("/home"); + } else if (!sessionIsValid && !isPublicRoute) { + await goto("/login"); + } + } + + // This should probably be removed in favor of the logic in layout.server.ts. + // That requires a more sophisticated server side implementation of session handling, + // and i don't want that tbh, i want to stay as much in the browser as possible. + afterNavigate(redirect_if_necessary); + beforeNavigate(redirect_if_necessary); +</script> + +<LocaleSwitcher /> +<slot /> |
