diff --git a/src/stores/UserStore.ts b/src/stores/UserStore.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd1a32d7b5dab2a33b1b73b1df068f9688fd9415 --- /dev/null +++ b/src/stores/UserStore.ts @@ -0,0 +1,74 @@ +import { OpenAPI } from '@/api'; +import Cookies from 'js-cookie'; +import { defineStore } from 'pinia'; + +const cookiesStorage: Storage = { + setItem(key, state) { + return Cookies.set(key, state, { expires: 3 }); + }, + getItem(key) { + const store = Cookies.get(key); + if (store === undefined) { + OpenAPI.TOKEN = ''; + return ''; + } + + OpenAPI.TOKEN = JSON.parse(Cookies.get(key) || '').accessToken; + return Cookies.get(key) || ''; + }, + length: 0, + clear: function (): void { + Cookies.remove('userInfo'); + }, + key: function (index: number): string | null { + throw new Error('Function not implemented.'); + }, + removeItem: function (key: string): void { + throw new Error('Function not implemented.'); + }, +}; + +export type UserStoreInfo = { + username?: string; + firstname?: string; + lastname?: string; + accessToken?: string; + role?: string; +}; + +export const useUserInfoStore = defineStore('UserInfoStore', { + state: () => ({ + username: '', + firstname: '', + lastname: '', + accessToken: '', + role: '', + }), + actions: { + setUserInfo(userinfo: UserStoreInfo) { + userinfo.username && (this.$state.username = userinfo.username); + userinfo.firstname && (this.$state.firstname = userinfo.firstname); + userinfo.lastname && (this.$state.lastname = userinfo.lastname); + userinfo.accessToken && (this.$state.accessToken = userinfo.accessToken); + userinfo.accessToken && (OpenAPI.TOKEN = this.$state.accessToken); + userinfo.role && (this.$state.role = userinfo.role); + }, + clearUserInfo() { + this.$state.username = ''; + this.$state.firstname = ''; + this.$state.lastname = ''; + this.$state.accessToken = ''; + this.$state.role = ''; + OpenAPI.TOKEN = undefined; + }, + }, + getters: { + isLoggedIn(): boolean { + return this.accessToken !== ''; + }, + }, + persist: { + enabled: true, + strategies: [{ key: 'userInfo', storage: cookiesStorage }], + }, +}); \ No newline at end of file