aboutsummaryrefslogtreecommitdiffstats
path: root/apps/kit/src/routes/(main)/+layout.svelte
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-09-27 18:21:37 +0200
committerivarlovlie <git@ivarlovlie.no>2022-09-27 18:21:37 +0200
commit2b58ff029107b23617d8c4b246de77876b3bf053 (patch)
tree6fc1fe6dd325e0a9d2af211bd3801dc136bc26f9 /apps/kit/src/routes/(main)/+layout.svelte
parentf8ae7740f4a79d1374e136aba58b4c75f09b1396 (diff)
downloadgreatoffice-2b58ff029107b23617d8c4b246de77876b3bf053.tar.xz
greatoffice-2b58ff029107b23617d8c4b246de77876b3bf053.zip
feat: Move frontend into layout group (main)
This enables /book to load without the usual layout (app layout)
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 />