@@ -7,14 +7,16 @@ import { faPencilAlt } from '@fortawesome/free-solid-svg-icons/faPencilAlt';
77import { faTrashAlt } from '@fortawesome/free-solid-svg-icons/faTrashAlt' ;
88import { faFileDownload } from '@fortawesome/free-solid-svg-icons/faFileDownload' ;
99import { faCopy } from '@fortawesome/free-solid-svg-icons/faCopy' ;
10- import { faArrowsAltH } from '@fortawesome/free-solid-svg-icons/faArrowsAltH' ;
11- import { faBalanceScaleLeft } from '@fortawesome/free-solid-svg-icons/faBalanceScaleLeft' ;
1210import { faLevelUpAlt } from '@fortawesome/free-solid-svg-icons/faLevelUpAlt' ;
11+ import RenameFileModal from '@/components/server/files/RenameFileModal' ;
12+
13+ type ModalType = 'rename' | 'move' ;
1314
1415export default ( { file } : { file : FileObject } ) => {
1516 const menu = createRef < HTMLDivElement > ( ) ;
1617 const [ visible , setVisible ] = useState ( false ) ;
17- const [ posX , setPosX ] = useState ( 0 ) ;
18+ const [ modal , setModal ] = useState < ModalType | null > ( null ) ;
19+ const [ posX , setPosX ] = useState ( 0 ) ;
1820
1921 const windowListener = ( e : MouseEvent ) => {
2022 if ( e . button === 2 || ! visible || ! menu . current ) {
@@ -37,7 +39,7 @@ export default ({ file }: { file: FileObject }) => {
3739
3840 if ( visible && menu . current ) {
3941 menu . current . setAttribute (
40- 'style' , `margin-top: -0.35rem; left: ${ Math . round ( posX - menu . current . clientWidth ) } px`
42+ 'style' , `margin-top: -0.35rem; left: ${ Math . round ( posX - menu . current . clientWidth ) } px` ,
4143 ) ;
4244 }
4345 } , [ visible ] ) ;
@@ -54,18 +56,28 @@ export default ({ file }: { file: FileObject }) => {
5456 e . preventDefault ( ) ;
5557 if ( ! visible ) {
5658 setPosX ( e . clientX ) ;
59+ } else if ( visible ) {
60+ setModal ( null ) ;
5761 }
5862 setVisible ( ! visible ) ;
5963 } }
6064 >
6165 < FontAwesomeIcon icon = { faEllipsisH } />
6266 </ div >
67+ { visible &&
68+ < React . Fragment >
69+ < RenameFileModal file = { file } visible = { modal === 'rename' } onDismissed = { ( ) => setModal ( null ) } />
70+ </ React . Fragment >
71+ }
6372 < CSSTransition timeout = { 250 } in = { visible } unmountOnExit = { true } classNames = { 'fade' } >
6473 < div
6574 className = { 'absolute bg-white p-2 rounded border border-neutral-700 shadow-lg text-neutral-500 min-w-48' }
6675 ref = { menu }
6776 >
68- < div className = { 'hover:text-neutral-700 p-2 flex items-center hover:bg-neutral-100 rounded' } >
77+ < div
78+ className = { 'hover:text-neutral-700 p-2 flex items-center hover:bg-neutral-100 rounded' }
79+ onClick = { ( ) => setModal ( 'rename' ) }
80+ >
6981 < FontAwesomeIcon icon = { faPencilAlt } className = { 'text-xs' } />
7082 < span className = { 'ml-2' } > Rename</ span >
7183 </ div >
0 commit comments