import * as React from 'react'; import { AuthProvider } from '../types'; import { CoreAdminContext } from '../core'; import { useCanAccess, UseCanAccessResult } from './useCanAccess'; import { QueryClient } from '@tanstack/react-query'; import { TestMemoryRouter } from '../routing'; import { Route, Routes } from 'react-router'; export default { title: 'ra-core/auth/useCanAccess', }; const UseCanAccess = ({ children, action, resource, record, }: { children: any; action: string; resource: string; record?: any; }) => { const res = useCanAccess({ action, resource, record, retry: false, }); return children(res); }; const StateInspector = ({ state }: { state: UseCanAccessResult }) => { const renderCounter = React.useRef(0); renderCounter.current++; return ( <>
{state.isPending && 'LOADING'} {state.canAccess !== undefined && ( canAccess: {state.canAccess ? 'YES' : 'NO'} )} {state.error ? {state.error.message} : null}
Renders: {renderCounter.current}
); }; const defaultAuthProvider: AuthProvider = { login: () => Promise.reject('bad method'), logout: () => Promise.reject('bad method'), checkAuth: () => Promise.reject('bad method'), checkError: () => Promise.reject('bad method'), getPermissions: () => Promise.reject('bad method'), canAccess: ({ action }) => new Promise(resolve => setTimeout(resolve, 500, action === 'read')), }; export const Basic = ({ authProvider = defaultAuthProvider, queryClient, }: { authProvider?: AuthProvider | null; queryClient?: QueryClient; }) => ( {state => } } /> Access denied} /> Authentication Error} /> ); export const NoAuthProvider = ({ queryClient, }: { queryClient?: QueryClient; }) => ( {state => } } /> Access denied} /> Authentication Error} /> );