diff --git a/libs/remix-ui/file-explorer/src/lib/file-explorer.tsx b/libs/remix-ui/file-explorer/src/lib/file-explorer.tsx index 97f25ff8aa..94ee19d2af 100644 --- a/libs/remix-ui/file-explorer/src/lib/file-explorer.tsx +++ b/libs/remix-ui/file-explorer/src/lib/file-explorer.tsx @@ -32,7 +32,8 @@ export const FileExplorer = (props: FileExplorerProps) => { focusContext: { element: null, x: null, - y: null + y: null, + type: '' }, focusEdit: { element: null, @@ -57,7 +58,8 @@ export const FileExplorer = (props: FileExplorerProps) => { }, modals: [], toasterMsg: '', - mouseOverElement: null + mouseOverElement: null, + showContextMenu: false }) const editRef = useRef(null) @@ -755,20 +757,20 @@ export const FileExplorer = (props: FileExplorerProps) => { const handleContextMenuFile = (pageX: number, pageY: number, path: string, content: string) => { if (!content) return setState(prevState => { - return { ...prevState, focusContext: { element: path, x: pageX, y: pageY }, focusEdit: { ...prevState.focusEdit, lastEdit: content } } + return { ...prevState, focusContext: { element: path, x: pageX, y: pageY, type: 'file' }, focusEdit: { ...prevState.focusEdit, lastEdit: content }, showContextMenu: prevState.focusEdit.element !== path } }) } const handleContextMenuFolder = (pageX: number, pageY: number, path: string, content: string) => { if (!content) return setState(prevState => { - return { ...prevState, focusContext: { element: path, x: pageX, y: pageY }, focusEdit: { ...prevState.focusEdit, lastEdit: content } } + return { ...prevState, focusContext: { element: path, x: pageX, y: pageY, type: 'folder' }, focusEdit: { ...prevState.focusEdit, lastEdit: content }, showContextMenu: prevState.focusEdit.element !== path } }) } const hideContextMenu = () => { setState(prevState => { - return { ...prevState, focusContext: { element: null, x: 0, y: 0 } } + return { ...prevState, focusContext: { element: null, x: 0, y: 0, type: '' }, showContextMenu: false } }) } @@ -907,113 +909,69 @@ export const FileExplorer = (props: FileExplorerProps) => { if (file.isDirectory) { return ( -
- { - e.stopPropagation() - if (state.focusEdit.element !== file.path) handleClickFolder(file.path) - }} - onContextMenu={(e) => { - e.preventDefault() - e.stopPropagation() - handleContextMenuFolder(e.pageX, e.pageY, file.path, e.target.textContent) - }} - labelClass={labelClass} - controlBehaviour={ state.ctrlKey } - expand={state.expandPath.includes(file.path)} - onMouseOver={(e) => { - e.stopPropagation() - handleMouseOver(file.path) - }} - onMouseOut={(e) => { - e.stopPropagation() - if (state.mouseOverElement === file.path) handleMouseOut() - }} - > - { - file.child ? { - file.child.map((file, index) => { - return renderFiles(file, index) - }) - } - : + { + e.stopPropagation() + if (state.focusEdit.element !== file.path) handleClickFolder(file.path) + }} + onContextMenu={(e) => { + e.preventDefault() + e.stopPropagation() + handleContextMenuFolder(e.pageX, e.pageY, file.path, e.target.textContent) + }} + labelClass={labelClass} + controlBehaviour={ state.ctrlKey } + expand={state.expandPath.includes(file.path)} + onMouseOver={(e) => { + e.stopPropagation() + handleMouseOver(file.path) + }} + onMouseOut={(e) => { + e.stopPropagation() + if (state.mouseOverElement === file.path) handleMouseOut() + }} + > + { + file.child ? { + file.child.map((file, index) => { + return renderFiles(file, index) + }) } - - { ((state.focusContext.element === file.path) && (state.focusEdit.element !== file.path)) && - { - e.stopPropagation() - handleMouseOver(file.path) - }} - /> + : } -
+ ) } else { return ( -
- { - e.stopPropagation() - if (state.focusEdit.element !== file.path) handleClickFile(file.path) - }} - onContextMenu={(e) => { - e.preventDefault() - e.stopPropagation() - handleContextMenuFile(e.pageX, e.pageY, file.path, e.target.textContent) - }} - icon={icon} - labelClass={labelClass} - onMouseOver={(e) => { - e.stopPropagation() - handleMouseOver(file.path) - }} - onMouseOut={(e) => { - e.stopPropagation() - if (state.mouseOverElement === file.path) handleMouseOut() - }} - /> - { ((state.focusContext.element === file.path) && (state.focusEdit.element !== file.path)) && - { - e.stopPropagation() - handleMouseOver(file.path) - }} - /> - } -
+ { + e.stopPropagation() + if (state.focusEdit.element !== file.path) handleClickFile(file.path) + }} + onContextMenu={(e) => { + e.preventDefault() + e.stopPropagation() + handleContextMenuFile(e.pageX, e.pageY, file.path, e.target.textContent) + }} + icon={icon} + labelClass={labelClass} + onMouseOver={(e) => { + e.stopPropagation() + handleMouseOver(file.path) + }} + onMouseOut={(e) => { + e.stopPropagation() + if (state.mouseOverElement === file.path) handleMouseOut() + }} + /> ) } } @@ -1073,6 +1031,26 @@ export const FileExplorer = (props: FileExplorerProps) => { /> } + { state.showContextMenu && + { + e.stopPropagation() + handleMouseOver(state.focusContext.element) + }} + /> + } ) }