documentation/docs/ui-integrations/ant-design/hooks/use-table/_partial-use-table-search-live-preview.md
body {
padding: 4px;
background: white;
}
setInitialRoutes(["/posts"]);
// visible-block-start
import { HttpError } from "@refinedev/core";
import {
List,
TagField,
useTable,
// highlight-start
SaveButton,
// highlight-end
} from "@refinedev/antd";
import {
Table,
// highlight-start
Form,
Input,
// highlight-end
} from "antd";
interface IPost {
id: number;
title: string;
content: string;
status: "published" | "draft" | "rejected";
}
interface ISearch {
title: string;
}
const PostList: React.FC = () => {
const { tableProps, searchFormProps } = useTable<IPost, HttpError, ISearch>({
// highlight-start
onSearch: (values) => {
return [
{
field: "title",
operator: "contains",
value: values.title,
},
];
},
// highlight-end
});
return (
<List>
<Form {...searchFormProps} layout="inline">
<Form.Item name="title">
<Input placeholder="Search by title" />
</Form.Item>
<SaveButton onClick={searchFormProps.form?.submit} />
</Form>
<Table {...tableProps} rowKey="id">
<Table.Column dataIndex="id" title="ID" />
<Table.Column dataIndex="title" title="Title" />
<Table.Column dataIndex="content" title="Content" />
<Table.Column
dataIndex="status"
title="Status"
render={(value: string) => <TagField value={value} />}
/>
</Table>
</List>
);
};
// visible-block-end
render(
<ReactRouter.BrowserRouter>
<RefineAntdDemo
resources={[
{
name: "posts",
list: "/posts",
},
]}
>
<ReactRouter.Routes>
<ReactRouter.Route
path="/posts"
element={
<div style={{ padding: 16 }}>
<ReactRouter.Outlet />
</div>
}
>
<ReactRouter.Route index element={<PostList />} />
</ReactRouter.Route>
</ReactRouter.Routes>
</RefineAntdDemo>
</ReactRouter.BrowserRouter>,
);