mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-02 15:59:38 +08:00
a0eb9d31de
* fix: Transfer dataSource cannot be immutable (#28675)
close #28662
* docs: fix errors in example code (#28677)
* ci: expand ie check (#28673)
* ci: expand ie check
* Update issue-open-check.yml
* perf(📦): reduce @babel/runtime package size (#28678)
* perf(📦): reduce @babel/runtime package size
04cd73dea1
* chore(🆙): upgrade @ant-design/react-slick to esm support version
* upgrade @ant-design/tools
* ci: add open condition (#28682)
* fix(Slider): forcePopupAlign null when unmounted (#28699)
* docs: Update overview.zh-CN.md (#28703)
* docs: Update resources.en-US.md (#28701)
* chore: bump rc-select to 12.1.0 (#28715)
* fix: stylelint plugin (#28730)
* Update package.json
* perf(📦): upgrade rc-image to 5.x (#28727)
* refactor: upgrade rc-image to 5.x
reduce bundle size
* upgrade rc-image
* upgrade @ant-design/tools
https://github.com/ant-design/antd-tools/pull/226
* rc-image 5.0.0
* fix image preview icon missing
* refactor code
* docs: example of synchronous rc-tree (#28648)
* ci: fix outputs type
过程中的使用 string。奇怪啊,之前测试过的,今天点的时候发现不行了
* Update package.json
* fix: site overflow cause sticky invalid (#28741)
* fix: site overflow cause sticky invalid
* disable auto scroll
* chore: upgrade rc-dialog and rc-drawer (#28749)
* chore: upgrade rc-dialog and rc-drawer (#28687)
* chore: upgrade rc-dialog and rc-drawer
* upgrade rc-util
* update snapshots
* upgrade rc-util
* upgrade rc-util
* update snapshots
* upgrade rc-dialog
* perf: remove duplicated rc-dialog
Co-authored-by: 骗你是小猫咪 <darryshaw@gmail.com>
Co-authored-by: bigbigbo <zxb141242@163.com>
Co-authored-by: xrkffgg <xrkffgg@gmail.com>
Co-authored-by: Yann Pringault <yann.pringault@gmail.com>
Co-authored-by: godfather <greenday.wj@foxmail.com>
Co-authored-by: Mateusz Wierzbicki <22788841+mateusz-wierzbicki@users.noreply.github.com>
Co-authored-by: Kermit <kermitlx@outlook.com>
Co-authored-by: AkiJoey <akijoey1010635951@gmail.com>
Co-authored-by: qqabcv520 <605655316@qq.com>
Co-authored-by: 骗你是小猫咪 <darryshaw@gmail.com>
3.0 KiB
3.0 KiB
order | title | ||||
---|---|---|---|---|---|
27 |
|
zh-CN
也可以使用 react-sortable-hoc 来实现一个拖拽操作列。
en-US
Alternatively you can implement drag sorting with handler using react-sortable-hoc.
import { Table } from 'antd';
import { sortableContainer, sortableElement, sortableHandle } from 'react-sortable-hoc';
import { MenuOutlined } from '@ant-design/icons';
import arrayMove from 'array-move';
const DragHandle = sortableHandle(() => (
<MenuOutlined style={{ cursor: 'pointer', color: '#999' }} />
));
const columns = [
{
title: 'Sort',
dataIndex: 'sort',
width: 30,
className: 'drag-visible',
render: () => <DragHandle />,
},
{
title: 'Name',
dataIndex: 'name',
className: 'drag-visible',
},
{
title: 'Age',
dataIndex: 'age',
},
{
title: 'Address',
dataIndex: 'address',
},
];
const data = [
{
key: '1',
name: 'John Brown',
age: 32,
address: 'New York No. 1 Lake Park',
index: 0,
},
{
key: '2',
name: 'Jim Green',
age: 42,
address: 'London No. 1 Lake Park',
index: 1,
},
{
key: '3',
name: 'Joe Black',
age: 32,
address: 'Sidney No. 1 Lake Park',
index: 2,
},
];
const SortableItem = sortableElement(props => <tr {...props} />);
const SortableContainer = sortableContainer(props => <tbody {...props} />);
class SortableTable extends React.Component {
state = {
dataSource: data,
};
onSortEnd = ({ oldIndex, newIndex }) => {
const { dataSource } = this.state;
if (oldIndex !== newIndex) {
const newData = arrayMove([].concat(dataSource), oldIndex, newIndex).filter(el => !!el);
console.log('Sorted items: ', newData);
this.setState({ dataSource: newData });
}
};
DraggableContainer = props => (
<SortableContainer
useDragHandle
disableAutoscroll
helperClass="row-dragging"
onSortEnd={this.onSortEnd}
{...props}
/>
);
DraggableBodyRow = ({ className, style, ...restProps }) => {
const { dataSource } = this.state;
// function findIndex base on Table rowKey props and should always be a right array index
const index = dataSource.findIndex(x => x.index === restProps['data-row-key']);
return <SortableItem index={index} {...restProps} />;
};
render() {
const { dataSource } = this.state;
return (
<Table
pagination={false}
dataSource={dataSource}
columns={columns}
rowKey="index"
components={{
body: {
wrapper: this.DraggableContainer,
row: this.DraggableBodyRow,
},
}}
/>
);
}
}
ReactDOM.render(<SortableTable />, mountNode);
.row-dragging {
background: #fafafa;
border: 1px solid #ccc;
}
.row-dragging td {
padding: 16px;
visibility: hidden;
}
.row-dragging .drag-visible {
visibility: visible;
}