forked from nsjcy/frontEnd/nsjcy

Mr Ke
2020-05-27 91294e385f43628543ebcd9ef4b9931beaabf4a1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import React from 'react';
import DragSort from './index.js';
 
export default class DragSortExample extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      list: [{
        name: 'title'
      }, {
        name: 'name'
      }, {
        name: 'code'
      }, {
        name: 'email'
      }],
      curMoveItem: null,
      index: '',
      dragged: false,
    }
  }
 
  handleDragMove = (data, from, to) => {
    this.setState({
      curMoveItem: to,
      list: data,
      index: null,
    });
  }
 
  handleDragEnd = (index) => {
    this.setState({
      curMoveItem: null,
      dragged: false,
      index,
    });
  }
 
  enter = (index) => {
    if (this.state.index !== null) {
      this.setState({
        index,
      });
    };
  }
 
  leave = () => {
    if (this.state.index !== null) {
      this.setState({
        index: '',
      });
    };
  }
 
  render() {
    const {
      dragged,
    } = this.state;
    const el = this.state.list.map((item, index) => {
      return (
        <div 
          className={this.state.curMoveItem === index ? 'item active' : 'item'}
          onMouseEnter={this.enter.bind(this, index)}
          onMouseLeave={this.leave.bind(this, index)}
          style={{ 
            background: this.state.index === index ? 'red' : '#eee',
          }}
          key={item.name}>
            <div className="inner">{item.name}</div>
        </div>
      );
    });
    return (
      <div>
        <ul>
          <DragSort 
            onDragEnd={this.handleDragEnd} 
            onDragMove={this.handleDragMove}
            draggable={true} 
            data={this.state.list}>
              {el}
          </DragSort>
        </ul>
      </div>
    );
  }
}