documentation/docs/ui-integrations/ant-design/hooks/use-editable-table/_partial-use-editable-table-live-preview.md
setInitialRoutes(["/posts"]);
// visible-block-start
import {
List,
SaveButton,
EditButton,
TextField,
useEditableTable,
} from "@refinedev/antd";
import { Table, Form, Space, Button, Input } from "antd";
interface IPost {
id: number;
title: string;
}
const PostList: React.FC = () => {
const {
tableProps,
formProps,
isEditing,
setId: setEditId,
saveButtonProps,
cancelButtonProps,
editButtonProps,
} = useEditableTable<IPost>();
return (
<List>
<Form {...formProps}>
<Table
{...tableProps}
rowKey="id"
onRow={(record) => ({
// eslint-disable-next-line
onClick: (event: any) => {
if (event.target.nodeName === "TD") {
setEditId && setEditId(record.id);
}
},
})}
>
<Table.Column dataIndex="id" title="ID" />
<Table.Column<IPost>
dataIndex="title"
title="Title"
render={(value, record) => {
if (isEditing(record.id)) {
return (
<Form.Item name="title" style={{ margin: 0 }}>
<Input />
</Form.Item>
);
}
return <TextField value={value} />;
}}
/>
<Table.Column<IPost>
title="Actions"
dataIndex="actions"
render={(_, record) => {
if (isEditing(record.id)) {
return (
<Space>
<SaveButton {...saveButtonProps} hideText size="small" />
<Button {...cancelButtonProps} size="small">
Cancel
</Button>
</Space>
);
}
return (
<EditButton
{...editButtonProps(record.id)}
hideText
size="small"
/>
);
}}
/>
</Table>
</Form>
</List>
);
};
// visible-block-end
render(
<ReactRouter.BrowserRouter>
<RefineAntdDemo
resources={[
{
name: "posts",
list: "/posts",
},
]}
>
<ReactRouter.Routes>
<ReactRouter.Route path="/posts" element={<PostList />} />
</ReactRouter.Routes>
</RefineAntdDemo>
</ReactRouter.BrowserRouter>,
);