aboutsummaryrefslogtreecommitdiffstats
path: root/apps/kit/src/routes/(main)/+layout.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'apps/kit/src/routes/(main)/+layout.svelte')
-rw-r--r--apps/kit/src/routes/(main)/+layout.svelte41
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 />