import React, { Component } from 'react' // import { Link } from 'react-router-dom' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { ReactSortable } from "react-sortablejs" // import actions from '../../../actions' import * as tileActions from '../../tile/tile.actions' import * as pageActions from '../../page/page.actions' const DOUBLE_CLICK_THRESHOLD = 250 class TileList extends Component { state = { tiles: [], didDoubleClick: false, lastTargetId: 0, lastTimeStamp: 0, } // store doubleclick state as a class property because ReactSortable calls setState promiscuously didDoubleClick = false componentDidMount(prevProps) { const { tiles } = this.props.page.show.res this.setState({ tiles: tiles.slice(0).reverse() }) } componentDidUpdate(prevProps, prevState) { const { tiles, didDoubleClick } = this.state if (prevState.tiles.length && !pageActions.isSameTileOrder(tiles, prevState.tiles)) { this.props.pageActions.setTileSortOrder(tiles.slice(0).reverse()) } if (didDoubleClick) { this.setState({ didDoubleClick: false }) } } handleChoose(e) { const { lastTargetId, lastTimeStamp } = this.state if (lastTimeStamp && parseInt(e.item.dataset.id) === lastTargetId && (e.timeStamp - lastTimeStamp) < DOUBLE_CLICK_THRESHOLD ) { // console.log('selected', lastTargetId) this.didDoubleClick = true this.props.pageActions.showEditTileForm(lastTargetId) } else { this.setState({ lastTargetId: parseInt(e.item.dataset.id), lastTimeStamp: e.timeStamp, }) } } handleUpdate(newTiles) { if (this.didDoubleClick) return this.setState({ tiles: newTiles }) } render() { const { tiles } = this.state return (
this.handleUpdate(newTiles)} onChoose={e => this.handleChoose(e)} > {tiles.map(tile => ( tile.type === 'image' ? : ))}
) } } const TileListImage = ({ tile }) => (
) const TileListText = ({ tile }) => (
{tile.settings.content.substr(0, 100)}
) const mapStateToProps = state => ({ graph: state.graph, page: state.page, }) const mapDispatchToProps = dispatch => ({ tileActions: bindActionCreators({ ...tileActions }, dispatch), pageActions: bindActionCreators({ ...pageActions }, dispatch), }) export default connect(mapStateToProps, mapDispatchToProps)(TileList)