28 lines
983 B
TypeScript
28 lines
983 B
TypeScript
import apiFetch from "@/lib/api-fetch";
|
|
import type { Account } from "@/lib/api/entities/account";
|
|
import { defineStore } from "pinia";
|
|
import { ref } from "vue";
|
|
|
|
const localStorageKey = "vulpine-current-user";
|
|
const tokenKey = "vulpine-token";
|
|
|
|
export const useAccountStore = defineStore("current-user", () => {
|
|
const json = localStorage.getItem(localStorageKey);
|
|
const user = ref<Account>(json ? JSON.parse(json) : undefined);
|
|
const token = ref(localStorage.getItem(tokenKey) || undefined);
|
|
|
|
function setUser(meUser: Account) {
|
|
user.value = meUser;
|
|
localStorage.setItem(localStorageKey, JSON.stringify(user.value));
|
|
}
|
|
async function fetchUser() {
|
|
user.value = await apiFetch<Account>("/api/v1/accounts/verify_credentials");
|
|
localStorage.setItem(localStorageKey, JSON.stringify(user.value));
|
|
}
|
|
function setToken(newToken: string) {
|
|
localStorage.setItem(tokenKey, newToken);
|
|
token.value = newToken;
|
|
}
|
|
|
|
return { user, token, setUser, setToken, fetchUser };
|
|
});
|