import * as React from 'react'; import fakeDataProvider from 'ra-data-fakerest'; import { QueryClient } from '@tanstack/react-query'; import { Browser } from '../../storybook/FakeBrowser'; import { CoreAdmin } from '../../core/CoreAdmin'; import { CoreAdminContext } from '../../core/CoreAdminContext'; import { CoreAdminUI } from '../../core/CoreAdminUI'; import { Resource } from '../../core/Resource'; import { AuthProvider, DataProvider } from '../../types'; import { TestMemoryRouter, LinkBase } from '../../routing'; import { CreateControllerProps, useCreateController, } from './useCreateController'; import { useAuthState } from '../../auth'; export default { title: 'ra-core/controller/useCreateController', }; const styles = { mainContainer: { margin: '20px 10px', }, }; const defaultDataProvider = fakeDataProvider( { posts: [ { id: 1, title: 'Post #1', votes: 90 }, { id: 2, title: 'Post #2', votes: 20 }, { id: 3, title: 'Post #3', votes: 30 }, { id: 4, title: 'Post #4', votes: 40 }, { id: 5, title: 'Post #5', votes: 50 }, { id: 6, title: 'Post #6', votes: 60 }, { id: 7, title: 'Post #7', votes: 70 }, ], }, process.env.NODE_ENV === 'development' ); const PostList = () => { useAuthState(); return (
List view
Create
); }; const CreatePost = (props: Partial) => { const params = useCreateController({ resource: 'posts', ...props, }); return (
{params.isPending ?

Loading...

:
Create view
} List
); }; const defaultAuthProvider: AuthProvider = { checkAuth: () => new Promise(resolve => setTimeout(resolve, 500)), login: () => Promise.resolve(), logout: () => Promise.resolve(), checkError: () => Promise.resolve(), getPermissions: () => Promise.resolve(), }; export const Authenticated = ({ authProvider = defaultAuthProvider, dataProvider = defaultDataProvider, }: { authProvider?: AuthProvider; dataProvider?: DataProvider; }) => { return ( ); }; export const DisableAuthentication = ({ authProvider = defaultAuthProvider, dataProvider = defaultDataProvider, }: { authProvider?: AuthProvider; dataProvider?: DataProvider; }) => { return ( } create={} /> ); }; DisableAuthentication.args = { authProvider: undefined, }; DisableAuthentication.argTypes = { authProvider: { options: ['default', 'canAccess'], mapping: { default: undefined, canAccess: { ...defaultAuthProvider, canAccess: () => Promise.resolve(false), }, }, control: { type: 'inline-radio' }, }, }; export const CanAccess = ({ authProviderDelay = 300, }: { authProviderDelay?: number; }) => { return ( ); }; const AccessControlAdmin = ({ authProviderDelay, queryClient, }: { authProviderDelay?: number; queryClient: QueryClient; }) => { const [authorizedResources, setAuthorizedResources] = React.useState({ 'posts.list': true, 'posts.create': true, }); const authProvider: AuthProvider = { login: () => Promise.reject(new Error('Not implemented')), logout: () => Promise.reject(new Error('Not implemented')), checkAuth: () => Promise.resolve(), checkError: () => Promise.reject(new Error('Not implemented')), getPermissions: () => Promise.resolve(undefined), canAccess: ({ action, resource }) => new Promise(resolve => { setTimeout(() => { resolve(authorizedResources[`${resource}.${action}`]); }, authProviderDelay); }), }; return (
List
Create } create={} />
); }; const AccessControlUI = ({ children, setAuthorizedResources, authorizedResources, queryClient, }: { children: React.ReactNode; setAuthorizedResources: Function; authorizedResources: { 'posts.list': boolean; 'posts.create': boolean; }; queryClient: QueryClient; }) => { return (
{children}
); }; const AccessDenied = () => { return (
Access denied
); }; const AuthenticationError = () => { return (
AuthenticationError
); }; const Loading = () =>
Loading...
;