terriajs
Version:
Geospatial data visualization platform.
55 lines (45 loc) • 1.94 kB
JSX
import React from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
import Sortable from 'react-anything-sortable';
import WorkbenchItem from './WorkbenchItem.jsx';
import ObserveModelMixin from './../ObserveModelMixin';
import Styles from './workbench-list.scss';
import '!!style-loader!css-loader?sourceMap!react-anything-sortable/sortable.css';
import '!!style-loader!css-loader?sourceMap!./sortable.css';
const WorkbenchList = createReactClass({
displayName: 'WorkbenchList',
mixins: [ObserveModelMixin],
propTypes: {
terria: PropTypes.object.isRequired,
viewState: PropTypes.object.isRequired
},
onSort(sortedArray, currentDraggingSortData, currentDraggingIndex) {
let draggedItemIndex = this.props.terria.nowViewing.items.indexOf(currentDraggingSortData);
const addAtIndex = currentDraggingIndex;
while (draggedItemIndex < addAtIndex) {
this.props.terria.nowViewing.lower(currentDraggingSortData);
++draggedItemIndex;
}
while (draggedItemIndex > addAtIndex) {
this.props.terria.nowViewing.raise(currentDraggingSortData);
--draggedItemIndex;
}
},
render() {
return (
<ul className={Styles.workbenchContent}>
<Sortable onSort={this.onSort} direction="vertical" dynamic={true}>
<For each="item" of={this.props.terria.nowViewing.items}>
<WorkbenchItem item={item}
sortData={item}
key={item.uniqueId}
viewState={this.props.viewState}
/>
</For>
</Sortable>
</ul>
);
},
});
module.exports = WorkbenchList;