packages/antd/README.md
<div align="center" style="margin: 30px;">
<a href="https://refine.dev">
<img alt="refine logo" src="https://refine.ams3.cdn.digitaloceanspaces.com/readme/refine-readme-banner.png">
</a>
</div>
<br/>
<div align="center">
<a href="https://refine.dev">Home Page</a> |
<a href="https://discord.gg/refine">Discord</a> |
<a href="https://refine.dev/examples/">Examples</a> |
<a href="https://refine.dev/blog/">Blog</a> |
<a href="https://refine.dev/docs/">Documentation</a>
<br/>
<br/>
[![Discord](https://img.shields.io/discord/837692625737613362.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/refine)
[![Twitter Follow](https://img.shields.io/twitter/follow/refine_dev?style=social)](https://twitter.com/refine_dev)
<a href="https://www.producthunt.com/posts/refine-3?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-refine-3" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=362220&theme=light&period=daily" alt="refine - 100% open source React framework to build web apps 3x faster | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
</div>
<br/>
<div align="center">Refine is an open-source, headless React framework for developers building enterprise internal tools, admin panels, dashboards, B2B applications.
<br/>
It eliminates repetitive tasks in CRUD operations and provides industry-standard solutions for critical project components like **authentication**, **access control**, **routing**, **networking**, **state management**, and **i18n**.
</div>
## Ant Design integration for Refine
[Ant Design](https://ant.design/) is a React.js UI library that contains easy-to-use components that are useful for building interactive user interfaces.
[Refine](https://refine.dev/) is **headless by design**, offering unlimited styling and customization options. Moreover, Refine ships with ready-made integrations for [Ant Design](https://ant.design/), [Material UI](https://mui.com/material-ui/getting-started/overview/), [Mantine](https://mantine.dev/), and [Chakra UI](https://chakra-ui.com/) for convenience.
Refine has connectors for 15+ backend services, including REST API, [GraphQL](https://graphql.org/), and popular services like [Airtable](https://www.airtable.com/), [Strapi](https://strapi.io/), [Supabase](https://supabase.com/), [Firebase](https://firebase.google.com/), and [NestJS](https://nestjs.com/).
## Installation
To use Refine with Ant Design, you need to install the following package `@refinedev/antd` along with the Ant Design packages:
```sh
npm install @refinedev/antd antd
```
## ⚡ Try Refine
Start a new project with Refine in seconds using the following command:
```sh
npm create refine-app@latest my-refine-app
```
Or you can create a new project on your browser:
<a href="https://refine.dev/?playground=true" target="_blank">
<img height="48" width="245" src="https://refine.ams3.cdn.digitaloceanspaces.com/assets/try-it-in-your-browser.png" />
</a>
## Quick Start
Here's Refine in action, the below code is an example of a simple CRUD application using Refine + React Router + Ant Design:
```tsx
import { Refine } from "@refinedev/core";
import { ThemedLayoutV2 } from "@refinedev/antd";
import dataProvider from "@refinedev/simple-rest";
import routerBindings from "@refinedev/react-router-v6";
import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";
import "antd/dist/reset.css";
export default function App() {
return (
<BrowserRouter>
<Refine
dataProvider={dataProvider("https://api.fake-rest.refine.dev")}
routerProvider={routerBindings}
resources={[
{
name: "products",
list: "/products",
},
]}
>
<Routes>
<Route
element={
<ThemedLayoutV2>
<Outlet />
</ThemedLayoutV2>
}
>
<Route path="/products">
<Route index element={<ProductList />} />
</Route>
</Route>
</Routes>
</Refine>
</BrowserRouter>
);
}
// src/pages/products/list.tsx
import { useMany } from "@refinedev/core";
import { List, useTable, DateField } from "@refinedev/antd";
import { Table } from "antd";
const ProductList = () => {
const { tableProps } = useTable();
const { data: categories, isLoading } = useMany({
resource: "categories",
ids:
tableProps?.dataSource
?.map((item) => item?.category?.id)
.filter(Boolean) ?? [],
queryOptions: {
enabled: !!tableProps?.dataSource,
},
});
return (
<List>
<Table {...tableProps} rowKey="id">
<Table.Column dataIndex="id" title="ID" />
<Table.Column dataIndex="name" title="Name" />
<Table.Column
dataIndex="category"
title={"Category"}
render={(value) =>
isLoading
? "Loading..."
: categories?.data?.find((item) => item.id === value?.id)?.title
}
/>
<Table.Column
dataIndex="createdAt"
title="Created At"
render={(value) => <DateField value={value} />}
/>
</Table>
</List>
);
};
```
The result will look like this:
[![Refine + Ant Design Example](https://refine.ams3.cdn.digitaloceanspaces.com/assets/refine-antd-simple-example-screenshot.webp)](https://refine.new/preview/260c1e42-56a2-4ddf-a173-a561487cec28)
## Documentation
- For more detailed information and usage, refer to the [Refine Ant Design documentation](https://refine.dev/docs/ui-integrations/ant-design/introduction).
- [Refer to complete Refine tutorial with Ant Design](https://refine.dev/tutorial)
- [Refer to documentation for more info about Refine](https://refine.dev/docs).