useGroupedPermissions.ts34 lines · main
1import { useMemo } from 'react'
2
3import { ACCESS_TOKEN_RESOURCES } from '../AccessToken.constants'
4import { formatAccessText, getRealAccess } from '../AccessToken.utils'
5
6export const useGroupedPermissions = (tokenPermissions: string[] | undefined) => {
7 const groupedPermissions = useMemo(() => {
8 const grouped: Record<string, string[]> = {}
9
10 if (!tokenPermissions || tokenPermissions.length === 0) {
11 return grouped
12 }
13
14 ACCESS_TOKEN_RESOURCES.forEach((resource) => {
15 const access = getRealAccess(resource.resource, tokenPermissions)
16 if (access !== 'no access') {
17 const formattedAccess = formatAccessText(access)
18 if (!grouped[formattedAccess]) {
19 grouped[formattedAccess] = []
20 }
21 grouped[formattedAccess].push(resource.title)
22 }
23 })
24
25 return grouped
26 }, [tokenPermissions])
27
28 const totalCount = Object.values(groupedPermissions).reduce(
29 (sum, resources) => sum + resources.length,
30 0
31 )
32
33 return { groupedPermissions, totalCount }
34}