mirror of
https://github.com/supabase/supabase.git
synced 2026-09-06 18:11:51 +08:00
- Add `invalidatePermissionsQuery` helper to `permissions-query.ts` - Invalidate it alongside organizations and projects in `useOrganizationAcceptInvitationMutation`'s `onSuccess`, so permissions are refetched before the redirect to the org. ## Testing 1. Invite a user to an org. 2. Accept the invite via the invite link. 3. Navigate to the org's Billing page. 4. Verify the Subscription and Cost Control sections load without "you need additional permissions" errors (no manual reload needed). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Fixed an issue where user permissions were not properly synchronized after accepting organization invitations. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { useQuery, type QueryClient } from '@tanstack/react-query'
|
|
import { useIsLoggedIn } from 'common'
|
|
|
|
import { permissionKeys } from './keys'
|
|
import { get, handleError } from '@/data/fetchers'
|
|
import { IS_PLATFORM } from '@/lib/constants'
|
|
import type { Permission, ResponseError, UseCustomQueryOptions } from '@/types'
|
|
|
|
export type PermissionsResponse = Permission[]
|
|
|
|
export async function getPermissions(signal?: AbortSignal) {
|
|
const { data, error } = await get('/platform/profile/permissions', { signal })
|
|
if (error) {
|
|
handleError(error, {
|
|
sentryContext: {
|
|
tags: {
|
|
permissionsQuery: true,
|
|
},
|
|
contexts: {
|
|
rawError: error,
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
// [Joshen] TODO: Type this properly from the API
|
|
return data as unknown as PermissionsResponse
|
|
}
|
|
|
|
export type PermissionsData = Awaited<ReturnType<typeof getPermissions>>
|
|
export type PermissionsError = ResponseError
|
|
|
|
export const usePermissionsQuery = <TData = PermissionsData>({
|
|
enabled = true,
|
|
...options
|
|
}: UseCustomQueryOptions<PermissionsData, PermissionsError, TData> = {}) => {
|
|
const isLoggedIn = useIsLoggedIn()
|
|
|
|
return useQuery<PermissionsData, PermissionsError, TData>({
|
|
queryKey: permissionKeys.list(),
|
|
queryFn: ({ signal }) => getPermissions(signal),
|
|
...options,
|
|
enabled: IS_PLATFORM && enabled && isLoggedIn,
|
|
staleTime: 5 * 60 * 1000,
|
|
})
|
|
}
|
|
|
|
export function invalidatePermissionsQuery(client: QueryClient) {
|
|
return client.invalidateQueries({ queryKey: permissionKeys.list() })
|
|
}
|