React Sortable HOC (Issue Template)
Starting point for filing issues / reporting bugs for react-sortable-hoc
by Clauderic Demers
June 24, 2016
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://fb.me/react-with-addons-15.1.0.js"></script>
<script src="https://fb.me/react-dom-15.1.0.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>
<script src="https://npmcdn.com/react-sortable-hoc/dist/umd/react-sortable-hoc.min.js"></script>
<div id="root">
<!-- This element's contents will be replaced with your component. -->
</div>
CSS
html, body {
height: 100%;
}
body {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
box-sizing: border-box;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
font-family: 'Helvetica Neue', 'Helvetica', arial, sans-serif;
-webkit-font-smoothing: antialiased;
background-color: rgba(244, 245, 249, 0.7);
}
.SortableList {
position: relative;
z-index: 0;
background-color: #F3F3F3;
border: 1px solid #EFEFEF;
border-radius: 3px;
outline: none;
width: 400px;
height: 600px;
overflow: auto;
-webkit-overflow-scrolling: touch;
border: 1px solid #E0E0E0;
list-style: none;
padding: 0;
}
.SortableItem {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
width: 100%;
height: 60px;
padding: 0 20px;
background-color: #FFF;
border-bottom: 1px solid #EFEFEF;
box-sizing: border-box;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
color: #333;
font-weight: 500;
}
.SortableHelper {
box-shadow: 0 5px 5px -5px rgba(0, 0, 0, 0.2), 0 -5px 5px -5px rgba(0, 0, 0, 0.2);
background-color: rgba(255, 255, 255, 0.8);
cursor: row-resize;
}
JavaScript 1.7
// Code goes here
var {SortableContainer, SortableElement, arrayMove} = window.SortableHOC;
const SortableItem = SortableElement(({value}) => <li className="SortableItem">{value}</li>);
const SortableList = SortableContainer(({items}) => {
return (
<ul className="SortableList">
{items.map((value, index) =>
<SortableItem key={`item-${index}`} index={index} value={value} />
)}
</ul>
);
});
class SortableComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
items: Array.apply(null, Array(100)).map((val, index) => 'Item ' + index)
}
}
onSortEnd({oldIndex, newIndex}) {
this.setState({
items: arrayMove(this.state.items, oldIndex, newIndex)
});
}
render() {
return (
<SortableList items={this.state.items} onSortEnd={this.onSortEnd.bind(this)} helperClass="SortableHelper" />
)
}
}
ReactDOM.render(<SortableComponent/>, document.getElementById('root'));