@@ -6,8 +6,8 @@ import { usePermissionsQuery } from 'data/permissions/permissions-query'
66import { useProjectDetailQuery } from 'data/projects/project-detail-query'
77import { IS_PLATFORM } from 'lib/constants'
88import type { Permission } from 'types'
9- import { useSelectedOrganization } from './useSelectedOrganization'
10- import { useSelectedProject } from './useSelectedProject'
9+ import { useSelectedOrganizationQuery } from './useSelectedOrganization'
10+ import { useSelectedProjectQuery } from './useSelectedProject'
1111
1212const toRegexpString = ( actionOrResource : string ) =>
1313 `^${ actionOrResource . replace ( '.' , '\\.' ) . replace ( '%' , '.*' ) } $`
@@ -80,30 +80,50 @@ export function useGetProjectPermissions(
8080 projectRefOverride ?: string ,
8181 enabled = true
8282) {
83- const { data, isLoading, isSuccess } = usePermissionsQuery ( {
83+ const {
84+ data,
85+ isLoading : isLoadingPermissions ,
86+ isSuccess : isSuccessPermissions ,
87+ } = usePermissionsQuery ( {
8488 enabled : permissionsOverride === undefined && enabled ,
8589 } )
86-
8790 const permissions = permissionsOverride === undefined ? data : permissionsOverride
8891
89- const organizationResult = useSelectedOrganization ( {
90- enabled : organizationSlugOverride === undefined && enabled ,
92+ const organizationsQueryEnabled = organizationSlugOverride === undefined && enabled
93+ const {
94+ data : organizationData ,
95+ isLoading : isLoadingOrganization ,
96+ isSuccess : isSuccessOrganization ,
97+ } = useSelectedOrganizationQuery ( {
98+ enabled : organizationsQueryEnabled ,
9199 } )
92-
93100 const organization =
94- organizationSlugOverride === undefined ? organizationResult : { slug : organizationSlugOverride }
101+ organizationSlugOverride === undefined ? organizationData : { slug : organizationSlugOverride }
95102 const organizationSlug = organization ?. slug
96103
97- const projectResult = useSelectedProject ( {
98- enabled : projectRefOverride === undefined && enabled ,
104+ const projectsQueryEnabled = projectRefOverride === undefined && enabled
105+ const {
106+ data : projectData ,
107+ isLoading : isLoadingProject ,
108+ isSuccess : isSuccessProject ,
109+ } = useSelectedProjectQuery ( {
110+ enabled : projectsQueryEnabled ,
99111 } )
100-
101112 const project =
102- projectRefOverride === undefined || projectResult ?. parent_project_ref
103- ? projectResult
113+ projectRefOverride === undefined || projectData ?. parent_project_ref
114+ ? projectData
104115 : { ref : projectRefOverride , parent_project_ref : undefined }
105116 const projectRef = project ?. parent_project_ref ? project . parent_project_ref : project ?. ref
106117
118+ const isLoading =
119+ isLoadingPermissions ||
120+ ( organizationsQueryEnabled && isLoadingOrganization ) ||
121+ ( projectsQueryEnabled && isLoadingProject )
122+ const isSuccess =
123+ isSuccessPermissions &&
124+ ( ! organizationsQueryEnabled || isSuccessOrganization ) &&
125+ ( ! projectsQueryEnabled || isSuccessProject )
126+
107127 return {
108128 permissions,
109129 organizationSlug,
@@ -196,22 +216,33 @@ export function useAsyncCheckProjectPermissions(
196216 isSuccess : isPermissionsSuccess ,
197217 } = useGetProjectPermissions ( permissions , organizationSlug , projectRef , isLoggedIn )
198218
199- if ( ! isLoggedIn )
219+ if ( ! isLoggedIn ) {
200220 return {
201221 isLoading : true ,
202222 isSuccess : false ,
203223 can : false ,
204224 }
205- if ( ! IS_PLATFORM )
225+ }
226+ if ( ! IS_PLATFORM ) {
206227 return {
207228 isLoading : false ,
208229 isSuccess : true ,
209230 can : true ,
210231 }
232+ }
233+
234+ const can = doPermissionsCheck (
235+ allPermissions ,
236+ action ,
237+ resource ,
238+ data ,
239+ _organizationSlug ,
240+ _projectRef
241+ )
211242
212243 return {
213244 isLoading : isPermissionsLoading ,
214245 isSuccess : isPermissionsSuccess ,
215- can : doPermissionsCheck ( allPermissions , action , resource , data , _organizationSlug , _projectRef ) ,
246+ can,
216247 }
217248}
0 commit comments