From 72f3d8c5ab3e2a42cf1a76d0c08815dbe46e50a1 Mon Sep 17 00:00:00 2001
From: Owen Jacobson <owen@grimoire.ca>
Date: Fri, 11 Oct 2024 01:18:18 -0400
Subject: Move login to its own route.

This - in passing - fixes the problem where the client failed to subscribe after logging in, by causing the whole subscription process to be re-run when returning to the main interface.
---
 ui/routes/(app)/+layout.svelte | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

(limited to 'ui/routes/(app)/+layout.svelte')

diff --git a/ui/routes/(app)/+layout.svelte b/ui/routes/(app)/+layout.svelte
index 1d561ae..0f8e83c 100644
--- a/ui/routes/(app)/+layout.svelte
+++ b/ui/routes/(app)/+layout.svelte
@@ -1,22 +1,19 @@
 <script>
-	import { onMount } from 'svelte';
     import { page } from '$app/stores';
+    import { goto } from '$app/navigation';
+	import { onMount, onDestroy } from 'svelte';
 
 	import { boot, subscribeToEvents } from '$lib/apiServer';
 	import { currentUser, logins, channelsList, messages } from '$lib/store';
 
     import ChannelList from '$lib/components/ChannelList.svelte';
     import CreateChannelForm from '$lib/components/CreateChannelForm.svelte';
-    import LogIn from '$lib/components/LogIn.svelte';
     import MessageInput from '$lib/components/MessageInput.svelte';
 
-    let user;
     let loading = true;
-    $: channel = $page?.params?.channel;
+    let events = null;
 
-    currentUser.subscribe((value) => {
-        user = value;
-    });
+    $: channel = $page?.params?.channel;
 
     function onBooted(boot) {
         currentUser.update(() => ({
@@ -34,10 +31,11 @@
             switch (response.status) {
                 case 200:
                     onBooted(response.data);
-                    subscribeToEvents(response.data.resume_point);
+                    events = subscribeToEvents(response.data.resume_point);
                     break;
                 case 401:
                     currentUser.update(() => null);
+                    goto('/login');
                     break;
                 default:
                     // TODO: display error.
@@ -48,11 +46,17 @@
         }
         loading = false;
 	});
+
+    onDestroy(async () => {
+        if (events !== null) {
+            events.close();
+        }
+    });
 </script>
 
 {#if loading}
     <h2>Loading&hellip;</h2>
-{:else if user != null}
+{:else}
     <div id="interface">
         <div class="channel-list">
             <ChannelList active={channel} />
@@ -67,8 +71,6 @@
             <MessageInput {channel} />
         </div>
     </div>
-{:else}
-    <LogIn />
 {/if}
 
 <style>
-- 
cgit v1.2.3

