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}
/>
);