Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 14 additions & 13 deletions src/lib/helpers/store.js
Original file line number Diff line number Diff line change
@@ -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<import('$types').UserModel>} */
export const userStore = writable({ id: "" });

/**
* @returns {Writable<import('$types').UserModel>}
*/
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));
}
});
16 changes: 9 additions & 7 deletions src/lib/helpers/types.js
Original file line number Diff line number Diff line change
@@ -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]
*/

/**
Expand Down
8 changes: 6 additions & 2 deletions src/lib/services/auth-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -36,14 +37,17 @@ 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;
}

/**
* @returns {Promise<import('$types').UserModel>}
*/
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;
}

Expand Down
12 changes: 8 additions & 4 deletions src/routes/chat/[agentId]/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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();
Expand Down