|
1 | 1 | import PropTypes from 'prop-types'; |
2 | 2 | import React from 'react'; |
3 | 3 | import {NavLink, Link, Route, Switch} from 'react-router-dom'; |
| 4 | +import {DragDropContext, Droppable, Draggable} from 'react-beautiful-dnd'; |
4 | 5 |
|
5 | 6 | import LayerIcon from '../../utility/LayerIcon'; |
6 | 7 |
|
@@ -47,6 +48,11 @@ export default class Vlayers extends React.Component { |
47 | 48 | }, |
48 | 49 | searchChange:(field)=>{ |
49 | 50 | this.setState({search:field.value}); |
| 51 | + }, |
| 52 | + onDragEnd:(result)=>{ |
| 53 | + console.log('draggable res:',result.source.index,result.destination.index); |
| 54 | + |
| 55 | + Mlayer.reorder(result.source.index,result.destination.index); |
50 | 56 | } |
51 | 57 | }; |
52 | 58 | for (let i in this.handle){ |
@@ -115,30 +121,46 @@ export default class Vlayers extends React.Component { |
115 | 121 | } |
116 | 122 |
|
117 | 123 | <div className="bg-light"> |
118 | | - {layers !== undefined && layers.map((layer,i)=>{ |
119 | | - //console.log('layer:',layer); |
120 | | - |
121 | | - if (this.state.search && layer.get('id').toLowerCase().indexOf(this.state.search.toLowerCase()) === -1) return; |
122 | | - |
123 | | - let className = 'px-2 py-1 d-block link-list list-border-right position-relative p-list'; |
124 | | - if (error.hasIn(['layers',i])) className += ' error'; |
125 | | - |
126 | | - return <NavLink to={`${match.url}/${layer.get('id')}`} |
127 | | - className={className} key={layer.get('id')}> |
128 | | - |
129 | | - <div className="list-left mr-2 inline-block"> |
130 | | - <i className="material-icons md-18 md-shadow" style={{color:LayerIcon.getColor(layer)}}>{LayerIcon.getIcon(layer)}</i> |
131 | | - </div> |
132 | | - {layer.get('id')} |
133 | | - <div onClick={()=>{this.handle.visibility(layer.get('id'))}} className="list-right ml-2"> |
134 | | - {layer.getIn(['layout','visibility']) === 'none' ? |
135 | | - <i className="material-icons md-18 md-muted">visibility_off</i> |
136 | | - : |
137 | | - <i className="material-icons md-18">visibility</i> |
138 | | - } |
139 | | - </div> |
140 | | - </NavLink> |
141 | | - })} |
| 124 | + <DragDropContext onDragEnd={this.handle.onDragEnd}> |
| 125 | + <Droppable droppableId="droppable"> |
| 126 | + {(provided, snapshot) => ( |
| 127 | + <div ref={provided.innerRef}> |
| 128 | + {layers !== undefined && layers.map((layer,i)=>{ |
| 129 | + //console.log('layer:',layer); |
| 130 | + |
| 131 | + if (this.state.search && layer.get('id').toLowerCase().indexOf(this.state.search.toLowerCase()) === -1) return; |
| 132 | + |
| 133 | + let className = 'px-2 py-1 d-block link-list list-border-right position-relative p-list'; |
| 134 | + if (error.hasIn(['layers',i])) className += ' error'; |
| 135 | + |
| 136 | + return <Draggable key={layer.get('id')} draggableId={layer.get('id')} index={i}> |
| 137 | + {(provided, snapshot) => ( |
| 138 | + <div ref={provided.innerRef} |
| 139 | + {...provided.draggableProps} |
| 140 | + {...provided.dragHandleProps}> |
| 141 | + <NavLink to={`${match.url}/${layer.get('id')}`} |
| 142 | + className={className} key={layer.get('id')}> |
| 143 | + |
| 144 | + <div className="list-left mr-2 inline-block"> |
| 145 | + <i className="material-icons md-18 md-shadow" style={{color:LayerIcon.getColor(layer)}}>{LayerIcon.getIcon(layer)}</i> |
| 146 | + </div> |
| 147 | + {layer.get('id')} |
| 148 | + <div onClick={()=>{this.handle.visibility(layer.get('id'))}} className="list-right ml-2"> |
| 149 | + {layer.getIn(['layout','visibility']) === 'none' ? |
| 150 | + <i className="material-icons md-18 md-muted">visibility_off</i> |
| 151 | + : |
| 152 | + <i className="material-icons md-18">visibility</i> |
| 153 | + } |
| 154 | + </div> |
| 155 | + </NavLink> |
| 156 | + </div> |
| 157 | + )} |
| 158 | + </Draggable> |
| 159 | + })} |
| 160 | + </div> |
| 161 | + )} |
| 162 | + </Droppable> |
| 163 | + </DragDropContext> |
142 | 164 | </div> |
143 | 165 | </div> |
144 | 166 | </div> |
|
0 commit comments