Files
milsim-site-v4/ui/src/stores/user.ts
2025-12-02 00:09:51 -05:00

38 lines
1.1 KiB
TypeScript

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', () => {
const user = ref(null)
const roles = computed(() => new Set(user.value?.roleData?.map(r => r.name) ?? []));
const loaded = ref(false);
const state = computed<string | undefined>(() => user.value?.state || undefined);
const isLoggedIn = computed(() => user.value !== null)
async function loadUser() {
//@ts-ignore
const res = await fetch(`${import.meta.env.VITE_APIHOST}/members/me`, {
credentials: 'include',
});
if (res.ok) {
const data = await res.json();
console.log(data);
user.value = data;
}
loaded.value = true;
}
function hasRole(role: string): boolean {
return roles.value.has(role)
}
function hasAnyRole(requiredRoles: string[]): boolean {
return requiredRoles.some(r => roles.value.has(r))
}
return { user, isLoggedIn, roles, loadUser, loaded, hasAnyRole, hasRole, state }
})