@emsipl/react-data-grid-addons
Version:
A set of addons for react-data-grid
51 lines (44 loc) • 1.35 kB
JavaScript
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import html5DragDropContext from '../shared/html5DragDropContext';
import DraggableHeaderCell from './DraggableHeaderCell';
import RowDragLayer from './RowDragLayer';
import { isColumnsImmutable } from 'common/utils';
class DraggableContainer extends Component {
getRows(rowsCount, rowGetter) {
const rows = [];
for (let j = 0; j < rowsCount; j++) {
rows.push(rowGetter(j));
}
return rows;
}
renderGrid() {
return React.cloneElement(
React.Children.only(this.props.children), {
draggableHeaderCell: DraggableHeaderCell
}
);
}
render() {
const grid = this.renderGrid();
const rowGetter = this.props.getDragPreviewRow || grid.props.rowGetter;
const rowsCount = grid.props.rowsCount;
const columns = grid.props.columns;
const rows = this.getRows(rowsCount, rowGetter);
return (
<div>
{grid}
<RowDragLayer
rowSelection={grid.props.rowSelection}
rows={rows}
columns={isColumnsImmutable(columns) ? columns.toArray() : columns}
/>
</div>
);
}
}
DraggableContainer.propTypes = {
children: PropTypes.element.isRequired,
getDragPreviewRow: PropTypes.func
};
export default html5DragDropContext(DraggableContainer);