refactor: create Query Keys factories

This commit is contained in:
Diana Olarte
2025-09-26 17:21:30 +10:00
committed by Adolfo R. Brandes
parent 727bf74049
commit 8ad80a1195
3 changed files with 20 additions and 5 deletions

View File

@@ -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
View File

@@ -0,0 +1 @@
export const appId = 'org.openedx.frontend.app.adminConsole';

View File

@@ -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,
});