From c0ebb182eb62c0951ec75521a694fc8942cf41db Mon Sep 17 00:00:00 2001 From: Haiping Chen <101423@smsassist.com> Date: Thu, 4 Jan 2024 21:24:52 -0600 Subject: [PATCH] Update UserStore. --- src/lib/helpers/store.js | 27 +++++++++++++------------- src/lib/helpers/types.js | 16 ++++++++------- src/lib/services/auth-service.js | 8 ++++++-- src/routes/chat/[agentId]/+page.svelte | 12 ++++++++---- 4 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/lib/helpers/store.js b/src/lib/helpers/store.js index 9c0e6fd9..8e299654 100644 --- a/src/lib/helpers/store.js +++ b/src/lib/helpers/store.js @@ -1,27 +1,28 @@ import { writable } from 'svelte/store'; +import { browser } from '$app/environment'; -function isBrowser() { - return typeof window !== 'undefined'; -} - -const initValue = { init: true, loggedIn: false, token: '' }; -export const userStore = writable(initValue); +/** @type {Writable} */ +export const userStore = writable({ id: "" }); +/** + * @returns {Writable} + */ export function getUserStore () { - if (isBrowser()) { + if (browser) { // Access localStorage only if in the browser context let json = localStorage.getItem('user'); - return JSON.parse(json) || initValue; + if (json) + return JSON.parse(json); + else + return userStore; } else { // Return a default value for SSR - return initValue; + return userStore; } }; userStore.subscribe(value => { - if (isBrowser()) { - if(!value.init) { - localStorage.setItem('user', JSON.stringify(value)); - } + if (browser && value.token) { + localStorage.setItem('user', JSON.stringify(value)); } }); \ No newline at end of file diff --git a/src/lib/helpers/types.js b/src/lib/helpers/types.js index 9583d6a1..59414b7e 100644 --- a/src/lib/helpers/types.js +++ b/src/lib/helpers/types.js @@ -1,13 +1,15 @@ /** * @typedef {Object} UserModel * @property {string} id - The user id. - * @property {string} first_name - The user first name. - * @property {string} last_name - The user last name. - * @property {string} full_name - The user full name. - * @property {string} email - The user email. - * @property {string} role - The user role. - * @property {string} avatar - The user avatar. - * @property {string} color + * @property {string} [user_name] - User name + * @property {string} [first_name] - The user first name. + * @property {string} [last_name] - The user last name. + * @property {string} [full_name] - The user full name. + * @property {string} [email] - The user email. + * @property {string} [role] - The user role. + * @property {string} [avatar] - The user avatar. + * @property {string} [color] + * @property {string} [token] */ /** diff --git a/src/lib/services/auth-service.js b/src/lib/services/auth-service.js index 36472d9c..67ce405c 100644 --- a/src/lib/services/auth-service.js +++ b/src/lib/services/auth-service.js @@ -24,7 +24,8 @@ export async function getToken(email, password, onSucceed) { } }).then(result => { let user = getUserStore(); - userStore.set({ ...user, init: false, loggedIn: true, email, token: result.access_token }); + user.token = result.access_token; + userStore.set(user); onSucceed(); }) .catch(error => alert(error.message)); @@ -36,7 +37,7 @@ export async function getToken(email, password, onSucceed) { */ export function setToken(token) { let user = getUserStore(); - userStore.set({ ...user, init: false, loggedIn: true, token: token }); + user.token = token; } /** @@ -44,6 +45,9 @@ export function setToken(token) { */ export async function myInfo() { const response = await axios.get(endpoints.myInfoUrl); + let user = getUserStore(); + user.id = response.data.id; + userStore.set(user); return response.data; } diff --git a/src/routes/chat/[agentId]/+page.svelte b/src/routes/chat/[agentId]/+page.svelte index 92f22313..67a02919 100644 --- a/src/routes/chat/[agentId]/+page.svelte +++ b/src/routes/chat/[agentId]/+page.svelte @@ -6,6 +6,7 @@ import { onMount } from 'svelte'; import { newConversation } from '$lib/services/conversation-service.js'; import { getToken, setToken } from '$lib/services/auth-service.js' + import { getUserStore } from '$lib/helpers/store.js'; import { setAuthorization } from '$lib/helpers/http'; const params = $page.params; @@ -17,13 +18,16 @@ let agentId = params.agentId; onMount(async () => { - if(!$page.url.searchParams.has('token')) { + let user = getUserStore(); + if (user.token) { + console.log("login as existing account."); + } else if($page.url.searchParams.has('token')) { + let token = $page.url.searchParams.get('token'); + setToken(token); + } else { await getToken("guest@gmail.com", "123456", () => { console.log("login as guest."); }); - } else { - let token = $page.url.searchParams.get('token') ?? "unauthorized"; - setToken(token); } setAuthorization();