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 (
);
};
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 (
);
};
const AccessDenied = () => {
return (
);
};
const AuthenticationError = () => {
return (
);
};
const Loading = () => Loading...
;