import type { ProjectRole, RoleMap } from '@/types/roles.types'; import { defineStore } from 'pinia'; import { ref, computed } from 'vue'; import * as rolesApi from '@/api/roles.api'; import { useRootStore } from './root.store'; export const useRolesStore = defineStore('roles', () => { const rootStore = useRootStore(); const roles = ref({ global: [], project: [], credential: [], workflow: [], }); const projectRoleOrder = ref([ 'project:viewer', 'project:editor', 'project:admin', ]); const projectRoleOrderMap = computed>( () => new Map(projectRoleOrder.value.map((role, idx) => [role, idx])), ); const processedProjectRoles = computed(() => roles.value.project .filter((role) => projectRoleOrderMap.value.has(role.role)) .sort( (a, b) => (projectRoleOrderMap.value.get(a.role) ?? 0) - (projectRoleOrderMap.value.get(b.role) ?? 0), ), ); const processedCredentialRoles = computed(() => roles.value.credential.filter((role) => role.role !== 'credential:owner'), ); const processedWorkflowRoles = computed(() => roles.value.workflow.filter((role) => role.role !== 'workflow:owner'), ); const fetchRoles = async () => { roles.value = await rolesApi.getRoles(rootStore.restApiContext); }; return { roles, processedProjectRoles, processedCredentialRoles, processedWorkflowRoles, fetchRoles, }; });