@@ -9,7 +9,6 @@ import { faCopy } from '@fortawesome/free-solid-svg-icons/faCopy';
99import { faLevelUpAlt } from '@fortawesome/free-solid-svg-icons/faLevelUpAlt' ;
1010import RenameFileModal from '@/components/server/files/RenameFileModal' ;
1111import { ServerContext } from '@/state/server' ;
12- import CopyFileModal from '@/components/server/files/CopyFileModal' ;
1312import { join } from 'path' ;
1413import deleteFile from '@/api/server/files/deleteFile' ;
1514import SpinnerOverlay from '@/components/elements/SpinnerOverlay' ;
@@ -20,6 +19,7 @@ type ModalType = 'rename' | 'move';
2019
2120export default ( { uuid } : { uuid : string } ) => {
2221 const menu = createRef < HTMLDivElement > ( ) ;
22+ const menuButton = createRef < HTMLDivElement > ( ) ;
2323 const [ visible , setVisible ] = useState ( false ) ;
2424 const [ showSpinner , setShowSpinner ] = useState ( false ) ;
2525 const [ modal , setModal ] = useState < ModalType | null > ( null ) ;
@@ -29,6 +29,7 @@ export default ({ uuid }: { uuid: string }) => {
2929 const file = ServerContext . useStoreState ( state => state . files . contents . find ( file => file . uuid === uuid ) ) ;
3030 const directory = ServerContext . useStoreState ( state => state . files . directory ) ;
3131 const { removeFile, getDirectoryContents } = ServerContext . useStoreActions ( actions => actions . files ) ;
32+
3233 if ( ! file ) {
3334 return null ;
3435 }
@@ -87,29 +88,39 @@ export default ({ uuid }: { uuid: string }) => {
8788 return (
8889 < div key = { `dropdown:${ file . uuid } ` } >
8990 < div
91+ ref = { menuButton }
9092 className = { 'p-3 hover:text-white' }
9193 onClick = { e => {
9294 e . preventDefault ( ) ;
95+ setModal ( null ) ;
96+
9397 if ( ! visible ) {
9498 setPosX ( e . clientX ) ;
95- } else if ( visible ) {
96- setModal ( null ) ;
9799 }
100+
98101 setVisible ( ! visible ) ;
99102 } }
100103 >
101104 < FontAwesomeIcon icon = { faEllipsisH } />
102105 { visible &&
103106 < React . Fragment >
104- < RenameFileModal file = { file } visible = { modal === 'rename' } onDismissed = { ( ) => setModal ( null ) } />
107+ < RenameFileModal
108+ file = { file }
109+ visible = { modal === 'rename' || modal === 'move' }
110+ useMoveTerminology = { modal === 'move' }
111+ onDismissed = { ( ) => {
112+ setModal ( null ) ;
113+ setVisible ( false ) ;
114+ } }
115+ />
105116 < SpinnerOverlay visible = { showSpinner } fixed = { true } large = { true } />
106117 </ React . Fragment >
107118 }
108119 </ div >
109120 < CSSTransition timeout = { 250 } in = { visible } unmountOnExit = { true } classNames = { 'fade' } >
110121 < div
111- className = { 'absolute bg-white p-2 rounded border border-neutral-700 shadow-lg text-neutral-500 min-w-48' }
112122 ref = { menu }
123+ className = { 'absolute bg-white p-2 rounded border border-neutral-700 shadow-lg text-neutral-500 min-w-48' }
113124 >
114125 < div
115126 onClick = { ( ) => setModal ( 'rename' ) }
@@ -118,7 +129,10 @@ export default ({ uuid }: { uuid: string }) => {
118129 < FontAwesomeIcon icon = { faPencilAlt } className = { 'text-xs' } />
119130 < span className = { 'ml-2' } > Rename</ span >
120131 </ div >
121- < div className = { 'hover:text-neutral-700 p-2 flex items-center hover:bg-neutral-100 rounded' } >
132+ < div
133+ onClick = { ( ) => setModal ( 'move' ) }
134+ className = { 'hover:text-neutral-700 p-2 flex items-center hover:bg-neutral-100 rounded' }
135+ >
122136 < FontAwesomeIcon icon = { faLevelUpAlt } className = { 'text-xs' } />
123137 < span className = { 'ml-2' } > Move</ span >
124138 </ div >
0 commit comments