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(() => user.value.state); const isLoggedIn = computed(() => user.value !== null) async function loadUser() { //@ts-ignore const res = await fetch(`${import.meta.env.BASE_URL}/members/me`, { credentials: 'include', }); if (res.ok) { const data = await res.json(); 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 } })