import * as React from 'react'; import { ComponentType, isValidElement } from 'react'; import { isValidElementType } from 'react-is'; import { ResourceProps } from '../types'; import { ResourceContextProvider } from './ResourceContextProvider'; import { RestoreScrollPosition, useRouterProvider } from '../routing'; export const Resource = (props: ResourceProps) => { const { create, edit, list, name, show } = props; const { Route, Routes } = useRouterProvider(); return ( {create && ( )} {show && } {edit && } {list && ( {getElement(list)} } /> )} {props.children} ); }; const getElement = ( ElementOrComponent: ComponentType | React.ReactNode ) => { if (isValidElement(ElementOrComponent)) { return ElementOrComponent; } if (isValidElementType(ElementOrComponent)) { const Element = ElementOrComponent as ComponentType; return ; } return null; }; Resource.raName = 'Resource'; Resource.registerResource = ({ create, edit, icon, list, name, options, show, recordRepresentation, hasCreate, hasEdit, hasShow, }: ResourceProps) => ({ name, options, hasList: !!list, hasCreate: !!create || !!hasCreate, hasEdit: !!edit || !!hasEdit, hasShow: !!show || !!hasShow, icon, recordRepresentation, });