import * as React from 'react'; import polyglotI18nProvider from 'ra-i18n-polyglot'; import englishMessages from 'ra-language-english'; import { CoreAdmin } from '../../core/CoreAdmin'; import { Resource } from '../../core/Resource'; import { CreateBase } from '../../controller/create/CreateBase'; import { testDataProvider } from '../../dataProvider/testDataProvider'; import { DataProvider } from '../../types'; import { Form } from '../../form/Form'; import { InputProps, useInput } from '../../form/useInput'; import { TestMemoryRouter } from '../../routing/TestMemoryRouter'; import { ReferenceArrayInputBase, ReferenceArrayInputBaseProps, } from './ReferenceArrayInputBase'; import { ChoicesContextValue, ChoicesProps, useChoicesContext, } from '../../form'; import { useGetRecordRepresentation, useIsOffline } from '../..'; import { onlineManager } from '@tanstack/react-query'; export default { title: 'ra-core/controller/input/ReferenceArrayInputBase' }; const tags = [ { id: 0, name: '3D' }, { id: 1, name: 'Architecture' }, { id: 2, name: 'Design' }, { id: 3, name: 'Painting' }, { id: 4, name: 'Photography' }, ]; const defaultDataProvider = testDataProvider({ getList: () => // @ts-ignore Promise.resolve({ data: tags, total: tags.length, }), // @ts-ignore getMany: (resource, params) => { if (process.env.NODE_ENV !== 'test') { console.log('getMany', resource, params); } return Promise.resolve({ data: params.ids.map(id => tags.find(tag => tag.id === id)), }); }, }); const i18nProvider = polyglotI18nProvider(() => englishMessages); const CheckboxGroupInput = ( props: Omit & ChoicesProps ) => { const choicesContext = useChoicesContext(props); return ; }; const CheckboxGroupInputBase = ( props: Omit & ChoicesProps & ChoicesContextValue ) => { const { allChoices, isPending, error, resource, source, total } = props; const input = useInput({ ...props, source }); const getRecordRepresentation = useGetRecordRepresentation(resource); if (isPending) { return Loading...; } if (error) { return Error: {error.message}; } return (
{allChoices.map(choice => ( ))}
Selected {resource}: {input.field.value.join(', ')}
Total {resource}: {total}
); }; export const Basic = ({ dataProvider = defaultDataProvider, meta, ...props }: Partial & { dataProvider?: DataProvider; meta?: boolean; }) => (

Create Post

} />
); Basic.args = { meta: false, }; Basic.argTypes = { meta: { control: 'boolean' }, }; export const WithRender = ({ dataProvider = defaultDataProvider, meta, ...props }: Partial & { dataProvider?: DataProvider; meta?: boolean; }) => (

Create Post

( )} /> } />
); WithRender.args = { meta: false, }; WithRender.argTypes = { meta: { control: 'boolean' }, }; export const WithError = () => ( Promise.reject(new Error('fetch error')), getMany: () => Promise.resolve({ data: [{ id: 5, name: 'test1' }] }), } as unknown as DataProvider } i18nProvider={i18nProvider} >

Create Post

{}} defaultValues={{ tag_ids: [1, 3] }} >
} />
); export const Offline = () => (

Create Post

You are offline, cannot load data

} >
} />
); const SimulateOfflineButton = () => { const isOffline = useIsOffline(); return ( ); }; const RenderChildOnDemand = ({ children }) => { const [showChild, setShowChild] = React.useState(false); return ( <> {showChild &&
{children}
} ); };