vulpine-fe/src/stores/account.ts
2023-12-19 17:40:02 +01:00

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 };
});