@@ -11,10 +11,14 @@ class ExplorerView extends Component {
1111 this . state = {
1212 contextMenu : { visible : false } ,
1313 sessionView : { visible : false , sessions : [ ] } ,
14- displayByList : false
14+ displayByList : false ,
15+ copiedFile : null
1516 } ;
1617
1718 this . createFolder = this . createFolder . bind ( this ) ;
19+ this . copyFile = this . copyFile . bind ( this ) ;
20+ this . dropFile = this . dropFile . bind ( this ) ;
21+ this . pasteFile = this . pasteFile . bind ( this ) ;
1822 this . handleContextMenu = this . handleContextMenu . bind ( this ) ;
1923 this . hideContextMenu = this . hideContextMenu . bind ( this ) ;
2024
@@ -30,6 +34,25 @@ class ExplorerView extends Component {
3034 this . props . requestFolder ( _id ) ;
3135 }
3236
37+ copyFile ( _id ) {
38+ this . setState ( { copiedFile : _id } ) ;
39+ }
40+
41+ pasteFile ( ) {
42+ const { props : { folder : { active : { _id } } , refresh } , state : { copiedFile } } = this ;
43+ request ( 'Paste' , { _id : copiedFile , idParent : _id } ) . then ( ( ) => refresh ( ) ) ;
44+ }
45+
46+ dropFile ( event , _id ) {
47+ const { refresh } = this . props ;
48+ [ 'folder' , 'question' , 'qcm' ] . forEach ( type => {
49+ if ( event . dataTransfer . types . includes ( type ) ) {
50+ const file = JSON . parse ( event . dataTransfer . getData ( type ) ) ;
51+ request ( 'Move' , { _id : file . _id , idParent : _id } ) . then ( ( ) => refresh ( ) ) ;
52+ }
53+ } ) ;
54+ }
55+
3356 handleContextMenu ( event , items = [ ] ) {
3457 const { pageX, pageY, screenX, screenY } = event ;
3558 const x = screenX - window . screenX ;
@@ -43,6 +66,7 @@ class ExplorerView extends Component {
4366 buildMenuItems ( items ) {
4467 const { create, folder, refresh } = this . props ;
4568 return items . concat (
69+ { label : 'Coller' , onClick : this . pasteFile } ,
4670 { label : 'Nouveau dossier' , onClick : ( ) => {
4771 Modals . showPromptModal ( 'Nouveau dossier' , 'Entrez un nom de dossier ici...' ) . then ( name => this . createFolder ( name ) ) . catch ( ( ) => { } ) ;
4872 } } ,
@@ -64,6 +88,8 @@ class ExplorerView extends Component {
6488 folder = { folder }
6589 file = { file }
6690 edit = { edit }
91+ copyFile = { this . copyFile }
92+ dropFile = { this . dropFile }
6793 requestFolder = { requestFolder }
6894 refresh = { refresh }
6995 handleContextMenu = { handleContextMenu }
@@ -75,6 +101,20 @@ class ExplorerView extends Component {
75101 toggleDisplay ( displayByList ) {
76102 this . setState ( { displayByList } ) ;
77103 }
104+
105+ handleDragOver ( event ) {
106+ event . target . classList . add ( 'dropZone' ) ;
107+ event . preventDefault ( ) ;
108+ }
109+
110+ handleDragLeave ( event ) {
111+ event . target . classList . remove ( 'dropZone' ) ;
112+ }
113+
114+ handleDrop ( event , _id ) {
115+ this . dropFile ( event , _id ) ;
116+ event . target . classList . remove ( 'dropZone' ) ;
117+ }
78118
79119 render ( ) {
80120 const {
@@ -93,7 +133,12 @@ class ExplorerView extends Component {
93133 < div id = "path" >
94134 { [ ] . concat ( ...[ { name : 'Explorer' } , ...path ] . map ( folder => {
95135 return [
96- < span onClick = { ( ) => this . goBack ( folder . _id ) } > { folder . name } </ span > ,
136+ < span
137+ onClick = { ( ) => this . goBack ( folder . _id ) }
138+ onDragOver = { this . handleDragOver }
139+ onDragLeave = { this . handleDragLeave }
140+ onDrop = { e => this . handleDrop ( e , folder . _id ) }
141+ > { folder . name } </ span > ,
97142 < div className = "arrow" />
98143 ]
99144 } ) ) . slice ( 0 , - 1 ) }
0 commit comments