1
- import { rolePermissionsFormatedState , rolePermissionsState } from '@/core/stores' ;
1
+ import { myRolePermissionsState , rolePermissionsFormatedState , rolePermissionsState } from '@/core/stores' ;
2
2
import { useCallback } from 'react' ;
3
3
import { useAtom } from 'jotai' ;
4
4
import { useQuery , useMutation , useQueryClient } from '@tanstack/react-query' ;
5
5
import cloneDeep from 'lodash/cloneDeep' ;
6
6
import { rolePermissionService } from '@/core/services/client/api/roles/role-permission.service' ;
7
7
import { TRolePermission } from '@/core/types/schemas/role/role-permission-schema' ;
8
8
import { queryKeys } from '@/core/query/keys' ;
9
- import { useConditionalUpdateEffect } from '../common' ;
9
+ import { useConditionalUpdateEffect , useFirstLoad } from '../common' ;
10
+ import { getTenantIdCookie } from '@/core/lib/helpers/cookies' ;
10
11
11
12
export const useRolePermissions = ( roleId ?: string ) => {
12
13
const [ rolePermissions , setRolePermissions ] = useAtom ( rolePermissionsState ) ;
14
+ const [ myRolePermissions , setMyRolePermissions ] = useAtom ( myRolePermissionsState ) ;
13
15
const [ rolePermissionsFormated , setRolePermissionsFormated ] = useAtom ( rolePermissionsFormatedState ) ;
16
+ const { firstLoadData : firstLoadMyRolePermissionsData } = useFirstLoad ( ) ;
14
17
const queryClient = useQueryClient ( ) ;
18
+ const tenantId = getTenantIdCookie ( ) ;
15
19
16
20
// Query for fetching role permissions
17
21
const rolePermissionsQuery = useQuery ( {
@@ -23,6 +27,12 @@ export const useRolePermissions = (roleId?: string) => {
23
27
enabled : ! ! roleId
24
28
} ) ;
25
29
30
+ const myRolePermissionsQuery = useQuery ( {
31
+ queryKey : queryKeys . roles . myPermissions ( tenantId ) ,
32
+ queryFn : ( ) => rolePermissionService . getMyRolePermissions ( ) ,
33
+ enabled : ! ! tenantId
34
+ } ) ;
35
+
26
36
// Mutation for updating role permissions
27
37
const updateRolePermissionMutation = useMutation ( {
28
38
mutationFn : rolePermissionService . updateRolePermission ,
@@ -63,6 +73,16 @@ export const useRolePermissions = (roleId?: string) => {
63
73
Boolean ( rolePermissions ?. length )
64
74
) ;
65
75
76
+ useConditionalUpdateEffect (
77
+ ( ) => {
78
+ if ( myRolePermissionsQuery . data ?. items ?. length ) {
79
+ setMyRolePermissions ( myRolePermissionsQuery . data . items ) ;
80
+ }
81
+ } ,
82
+ [ myRolePermissionsQuery . data ] ,
83
+ Boolean ( myRolePermissions ?. length )
84
+ ) ;
85
+
66
86
// For backward compatibility
67
87
const getRolePermissions = useCallback (
68
88
( id : string ) => {
@@ -71,12 +91,24 @@ export const useRolePermissions = (roleId?: string) => {
71
91
[ queryClient ]
72
92
) ;
73
93
94
+ const getMyRolePermissions = useCallback ( ( ) => {
95
+ queryClient . invalidateQueries ( { queryKey : queryKeys . roles . myPermissions ( tenantId ) } ) ;
96
+ } , [ queryClient , tenantId ] ) ;
97
+
98
+ const handleFirstLoad = useCallback ( async ( ) => {
99
+ await myRolePermissionsQuery . refetch ( ) ;
100
+ firstLoadMyRolePermissionsData ( ) ;
101
+ } , [ firstLoadMyRolePermissionsData , myRolePermissionsQuery ] ) ;
102
+
74
103
return {
75
104
loading : rolePermissionsQuery . isLoading ,
76
105
rolePermissions,
77
106
getRolePermissions,
78
107
updateRolePermission : updateRolePermissionMutation . mutate ,
79
108
updateRolePermissionLoading : updateRolePermissionMutation . isPending ,
80
- rolePermissionsFormated
109
+ rolePermissionsFormated,
110
+ myRolePermissions,
111
+ getMyRolePermissions,
112
+ firstLoadMyRolePermissionsData : handleFirstLoad
81
113
} ;
82
114
} ;
0 commit comments