refactor: create Query Keys factories
This commit is contained in:
committed by
Adolfo R. Brandes
parent
727bf74049
commit
8ad80a1195
@@ -1,7 +1,15 @@
|
||||
import { useQuery, useSuspenseQuery } from '@tanstack/react-query';
|
||||
import { appId } from "@src/constants";
|
||||
import { LibraryMetadata, TeamMember } from '@src/types';
|
||||
import { getLibrary, getTeamMembers } from './api';
|
||||
|
||||
|
||||
const authzQueryKeys = {
|
||||
all: [appId, 'authz'] as const,
|
||||
teamMembers: (object: string) => [...authzQueryKeys.all, 'teamMembers', object] as const,
|
||||
library: (libraryId: string) => [...authzQueryKeys.all, 'library', libraryId] as const,
|
||||
};
|
||||
|
||||
/**
|
||||
* React Query hook to fetch all team members for a specific object/scope.
|
||||
* It retrieves the full list of members who have access to the given scope.
|
||||
@@ -14,7 +22,7 @@ import { getLibrary, getTeamMembers } from './api';
|
||||
* ```
|
||||
*/
|
||||
export const useTeamMembers = (object: string) => useQuery<TeamMember[], Error>({
|
||||
queryKey: ['team-members', object],
|
||||
queryKey: authzQueryKeys.teamMembers(object),
|
||||
queryFn: () => getTeamMembers(object),
|
||||
staleTime: 1000 * 60 * 30, // refetch after 30 minutes
|
||||
});
|
||||
@@ -30,7 +38,7 @@ export const useTeamMembers = (object: string) => useQuery<TeamMember[], Error>(
|
||||
*/
|
||||
export const useLibrary = (libraryId: string) => {
|
||||
return useSuspenseQuery<LibraryMetadata, Error>({
|
||||
queryKey: ['library-metadata', libraryId],
|
||||
queryKey: authzQueryKeys.library(libraryId),
|
||||
queryFn: () => getLibrary(libraryId),
|
||||
retry: false,
|
||||
});
|
||||
|
||||
1
src/constants.ts
Normal file
1
src/constants.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const appId = 'org.openedx.frontend.app.adminConsole';
|
||||
@@ -1,6 +1,12 @@
|
||||
import { useSuspenseQuery } from '@tanstack/react-query';
|
||||
import { PermissionValidationRequest, PermissionValidationResponse } from '@src/types';
|
||||
import { validateUserPermissions } from './api';
|
||||
import { appId } from '@src/constants';
|
||||
|
||||
const adminConsoleQueryKeys = {
|
||||
all: [appId] as const,
|
||||
permissions: (permissions: PermissionValidationRequest[]) => [...adminConsoleQueryKeys.all, 'validatePermissions', permissions] as const,
|
||||
};
|
||||
|
||||
/**
|
||||
* React Query hook to validate if the current user has permissions over a certain object in the instance.
|
||||
@@ -11,7 +17,7 @@ import { validateUserPermissions } from './api';
|
||||
* @param permissions - The array of objects and actions to validate.
|
||||
*
|
||||
* @example
|
||||
* const { data } = userValidateUserPermissions([{
|
||||
* const { data } = useValidateUserPermissions([{
|
||||
"action": "act:read",
|
||||
"object": "lib:test-lib",
|
||||
"scope": "org:OpenedX"
|
||||
@@ -19,9 +25,9 @@ import { validateUserPermissions } from './api';
|
||||
* if (data[0].allowed) { ... }
|
||||
*
|
||||
*/
|
||||
export const useValidateUserPermissions = (permissions: PermissionValidationRequest[]) => {
|
||||
export const useValidateUserPermissions = (permissions: PermissionValidationRequest[]) => {
|
||||
return useSuspenseQuery<PermissionValidationResponse[], Error>({
|
||||
queryKey: ['validate-user-permissions', permissions],
|
||||
queryKey: adminConsoleQueryKeys.permissions(permissions),
|
||||
queryFn: () => validateUserPermissions(permissions),
|
||||
retry: false,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user