import * as React from 'react'; import fakeRestProvider from 'ra-data-fakerest'; import { ReferenceArrayFieldBase } from './ReferenceArrayFieldBase'; import { CoreAdmin, DataProvider, IsOffline, Resource, ShowBase, TestMemoryRouter, useIsOffline, useListContext, WithRecord, } from '../..'; import { onlineManager, QueryClient } from '@tanstack/react-query'; export default { title: 'ra-core/controller/field/ReferenceArrayFieldBase' }; const fakeData = { bands: [{ id: 1, name: 'The Beatles', members: [1, 2, 3, 4, 5, 6, 7, 8] }], artists: [ { id: 1, name: 'John Lennon' }, { id: 2, name: 'Paul McCartney' }, { id: 3, name: 'Ringo Star' }, { id: 4, name: 'George Harrison' }, { id: 5, name: 'Mick Jagger' }, { id: 6, name: 'Keith Richards' }, { id: 7, name: 'Ronnie Wood' }, { id: 8, name: 'Charlie Watts' }, ], }; const defaultDataProvider = fakeRestProvider(fakeData, false); export const Basic = ({ dataProvider = defaultDataProvider, }: { dataProvider?: DataProvider; }) => ( } /> ); const ArtistList = () => { const { isPending, error, data } = useListContext(); if (isPending) { return

Loading...

; } if (error) { return

{error.toString()}

; } return (

{data.map((datum, index) => (

  • {datum.name}
  • ))}

    ); }; const erroredDataProvider = { ...defaultDataProvider, getMany: _resource => Promise.reject(new Error('Error')), } as any; export const Errored = () => ; const foreverLoadingDataProvider = { ...defaultDataProvider, getMany: _resource => new Promise(() => {}), } as any; export const Loading = () => ( ); export const WithRenderProp = ({ dataProvider = defaultDataProvider, }: { dataProvider?: DataProvider; }) => ( { if (isPending) { return

    Loading...

    ; } if (error) { return (

    {error.toString()}

    ); } return (

    {data?.map((datum, index) => (

  • {datum.name}
  • ))}

    ); }} /> } />
    ); export const Offline = () => (

    {band.name}

    } /> You are offline, cannot load data

    } render={({ data, isPending, error }) => { if (isPending) { return

    Loading...

    ; } if (error) { return (

    {error.toString()}

    ); } return ( <>

    You are offline, the data may be outdated

    {data?.map( (datum, index) => (

  • {datum.name}
  • ) )}

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