UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

48 lines 1.78 kB
import { useMutation, } from '@tanstack/react-query'; import useAuthProvider from "./useAuthProvider.js"; import { useMemo } from 'react'; /** * A hook that returns a function you can call to determine whether user has access to the given resource * * @example * import { Datagrid, List, TextField, useCanAccessCallback } from 'react-admin'; * * const UserList = () => { * const checkAccess = useCanAccessCallback(); * * const handleRowClick = (id: Identifier, resource: string, record: Record) => { * try { * const canAccess = checkAccess({ resource: 'users', action: 'edit', record }); * return canAccess ? "edit" : "show"; * } catch (error) { * console.error(error); * } * }; * * return ( * <List> * <Datagrid onClick={handleRowClick}> * <TextField source="id" /> * <TextField source="name" /> * <TextField source="email" /> * </Datagrid> * </List> * ); * }; */ export const useCanAccessCallback = (options = {}) => { const authProvider = useAuthProvider(); const authProviderHasCanAccess = !!authProvider?.canAccess; const { mutateAsync } = useMutation({ mutationFn: async (params) => { if (!authProvider || !authProvider.canAccess) { return true; } return authProvider.canAccess(params); }, retry: false, ...options, }); return useMemo(() => (authProviderHasCanAccess ? mutateAsync : () => true), [authProviderHasCanAccess, mutateAsync]); }; //# sourceMappingURL=useCanAccessCallback.js.map