A frontend Framework for building admin applications on top of REST services, using ES6, React and Material UI
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
This section covers the foundational components for setting up and configuring a React Admin application, including the main <Admin> component and resource definitions.
The <Admin> component is the root component that initializes the entire React Admin application. It sets up routing, authentication, data providers, and the overall application context.
import { Admin } from 'react-admin';
interface AdminProps {
authProvider?: AuthProvider;
dataProvider: DataProvider;
i18nProvider?: I18nProvider;
title?: string;
theme?: Theme;
layout?: LayoutComponent;
dashboard?: DashboardComponent;
loginPage?: LoginComponent | boolean;
catchAll?: CatchAllComponent;
loading?: LoadingComponent;
basename?: string;
children: React.ReactNode;
disableTelemetry?: boolean;
ready?: React.ComponentType;
store?: Store;
queryClient?: QueryClient;
router?: Router;
history?: History;
}
const Admin: React.FC<AdminProps>;false to disable authenticationimport { Admin, Resource } from 'react-admin';
import { dataProvider } from './dataProvider';
import { authProvider } from './authProvider';
import { theme } from './theme';
import Dashboard from './Dashboard';
const App = () => (
<Admin
dataProvider={dataProvider}
authProvider={authProvider}
title="My Admin App"
theme={theme}
dashboard={Dashboard}
>
<Resource name="posts" list={PostList} edit={PostEdit} />
<Resource name="users" list={UserList} edit={UserEdit} />
</Admin>
);The <Resource> component defines an entity in your application and its associated views (list, create, edit, show).
import { Resource } from 'react-admin';
interface ResourceProps {
name: string;
list?: React.ComponentType;
create?: React.ComponentType;
edit?: React.ComponentType;
show?: React.ComponentType;
icon?: React.ComponentType;
options?: ResourceOptions;
recordRepresentation?: string | RecordToStringFunction;
hasCreate?: boolean;
hasEdit?: boolean;
hasShow?: boolean;
children?: React.ReactNode;
}
interface ResourceOptions {
label?: string;
[key: string]: any;
}
type RecordToStringFunction = (record: RaRecord) => string;
const Resource: React.FC<ResourceProps>;// Basic resource with all views
<Resource
name="posts"
list={PostList}
create={PostCreate}
edit={PostEdit}
show={PostShow}
icon={PostIcon}
options={{ label: 'Blog Posts' }}
/>
// Resource with limited views
<Resource
name="analytics"
list={AnalyticsList}
hasCreate={false}
hasEdit={false}
/>
// Resource with record representation
<Resource
name="users"
list={UserList}
recordRepresentation="name"
/>
// Resource with custom record representation function
<Resource
name="products"
list={ProductList}
recordRepresentation={(record) => `${record.name} (${record.sku})`}
/>Lower-level admin component without Material-UI dependencies, useful for custom UI implementations.
import { CoreAdmin } from 'react-admin';
interface CoreAdminProps {
authProvider?: AuthProvider;
dataProvider: DataProvider;
i18nProvider?: I18nProvider;
queryClient?: QueryClient;
store?: Store;
history?: History;
children: React.ReactNode;
}
const CoreAdmin: React.FC<CoreAdminProps>;Provides admin context without rendering any UI, useful for custom layouts.
import { CoreAdminContext } from 'react-admin';
interface CoreAdminContextProps {
authProvider?: AuthProvider;
dataProvider: DataProvider;
i18nProvider?: I18nProvider;
queryClient?: QueryClient;
store?: Store;
history?: History;
children: React.ReactNode;
}
const CoreAdminContext: React.FC<CoreAdminContextProps>;Defines the routing structure for resources and custom routes.
import { CoreAdminRoutes } from 'react-admin';
interface CoreAdminRoutesProps {
layout?: LayoutComponent;
dashboard?: DashboardComponent;
catchAll?: CatchAllComponent;
loading?: LoadingComponent;
children?: React.ReactNode;
}
const CoreAdminRoutes: React.FC<CoreAdminRoutesProps>;Core UI logic component that renders the admin interface structure.
import { CoreAdminUI } from 'react-admin';
interface CoreAdminUIProps {
layout?: LayoutComponent;
dashboard?: DashboardComponent;
loginPage?: LoginComponent | boolean;
catchAll?: CatchAllComponent;
loading?: LoadingComponent;
title?: string;
}
const CoreAdminUI: React.FC<CoreAdminUIProps>;Access current resource information within components.
import { useResourceContext, useResourceDefinition } from 'react-admin';
// Get current resource name
const useResourceContext: () => string | undefined;
// Get current resource definition
const useResourceDefinition: (options?: { resource?: string }) => ResourceDefinition | undefined;
// Get all resource definitions
const useResourceDefinitions: () => ResourceDefinitionMap;
// Get resource label
const useGetResourceLabel: () => (resource: string, count?: number) => string;import { useResourceContext, useResourceDefinition } from 'react-admin';
const MyComponent = () => {
const resource = useResourceContext(); // Current resource name
const resourceDefinition = useResourceDefinition({ resource });
return (
<div>
<h1>Current Resource: {resource}</h1>
<p>Has create: {resourceDefinition?.hasCreate}</p>
</div>
);
};interface ResourceDefinition {
name: string;
options?: ResourceOptions;
hasList?: boolean;
hasCreate?: boolean;
hasEdit?: boolean;
hasShow?: boolean;
icon?: React.ComponentType;
recordRepresentation?: string | RecordToStringFunction;
}
type ResourceDefinitionMap = {
[key: string]: ResourceDefinition;
};Add custom pages and routes to your admin application.
import { CustomRoutes } from 'react-admin';
interface CustomRoutesProps {
noLayout?: boolean;
children: React.ReactNode;
}
const CustomRoutes: React.FC<CustomRoutesProps>;import { Admin, Resource, CustomRoutes } from 'react-admin';
import { Route } from 'react-router-dom';
import ReportsPage from './ReportsPage';
import SettingsPage from './SettingsPage';
const App = () => (
<Admin dataProvider={dataProvider}>
<Resource name="posts" list={PostList} />
<CustomRoutes>
<Route path="/reports" element={<ReportsPage />} />
<Route path="/settings" element={<SettingsPage />} />
</CustomRoutes>
{/* Routes without layout */}
<CustomRoutes noLayout>
<Route path="/public-report" element={<PublicReportPage />} />
</CustomRoutes>
</Admin>
);Control how records are displayed as strings throughout the application.
import { useGetRecordRepresentation } from 'react-admin';
const useGetRecordRepresentation: (resource: string) => (record: RaRecord) => string;// String field representation
<Resource name="users" recordRepresentation="name" />
// Function representation
<Resource
name="products"
recordRepresentation={(record) => `${record.title} - $${record.price}`}
/>
// Using the hook in a component
const ProductReferenceField = ({ record }) => {
const getRecordRepresentation = useGetRecordRepresentation('products');
return <span>{getRecordRepresentation(record)}</span>;
};import { Admin, Resource, ListGuesser } from 'react-admin';
import { dataProvider } from './dataProvider';
const App = () => (
<Admin dataProvider={dataProvider}>
<Resource name="posts" list={ListGuesser} />
</Admin>
);import {
Admin,
Resource,
CustomRoutes,
defaultTheme
} from 'react-admin';
import { Route } from 'react-router-dom';
import { dataProvider } from './dataProvider';
import { authProvider } from './authProvider';
import { i18nProvider } from './i18nProvider';
import CustomLayout from './CustomLayout';
import Dashboard from './Dashboard';
const App = () => (
<Admin
dataProvider={dataProvider}
authProvider={authProvider}
i18nProvider={i18nProvider}
title="Advanced Admin"
theme={defaultTheme}
layout={CustomLayout}
dashboard={Dashboard}
>
<Resource
name="posts"
list={PostList}
create={PostCreate}
edit={PostEdit}
show={PostShow}
icon={PostIcon}
options={{ label: 'Blog Posts' }}
recordRepresentation="title"
/>
<Resource
name="users"
list={UserList}
edit={UserEdit}
hasShow={false}
/>
<CustomRoutes>
<Route path="/analytics" element={<AnalyticsPage />} />
</CustomRoutes>
</Admin>
);The core admin setup provides the foundation for your React Admin application, with flexible resource definitions and routing capabilities that can scale from simple CRUD interfaces to complex admin systems.
Install with Tessl CLI
npx tessl i tessl/npm-react-admin