Use single context menu

pull/966/head
ioedeveloper 4 years ago
parent b7068d35f6
commit dbddcce41a
  1. 76
      libs/remix-ui/file-explorer/src/lib/file-explorer.tsx

@ -32,7 +32,8 @@ export const FileExplorer = (props: FileExplorerProps) => {
focusContext: { focusContext: {
element: null, element: null,
x: null, x: null,
y: null y: null,
type: ''
}, },
focusEdit: { focusEdit: {
element: null, element: null,
@ -57,7 +58,8 @@ export const FileExplorer = (props: FileExplorerProps) => {
}, },
modals: [], modals: [],
toasterMsg: '', toasterMsg: '',
mouseOverElement: null mouseOverElement: null,
showContextMenu: false
}) })
const editRef = useRef(null) const editRef = useRef(null)
@ -755,20 +757,20 @@ export const FileExplorer = (props: FileExplorerProps) => {
const handleContextMenuFile = (pageX: number, pageY: number, path: string, content: string) => { const handleContextMenuFile = (pageX: number, pageY: number, path: string, content: string) => {
if (!content) return if (!content) return
setState(prevState => { 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) => { const handleContextMenuFolder = (pageX: number, pageY: number, path: string, content: string) => {
if (!content) return if (!content) return
setState(prevState => { 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 = () => { const hideContextMenu = () => {
setState(prevState => { setState(prevState => {
return { ...prevState, focusContext: { element: null, x: 0, y: 0 } } return { ...prevState, focusContext: { element: null, x: 0, y: 0, type: '' }, showContextMenu: false }
}) })
} }
@ -907,7 +909,6 @@ export const FileExplorer = (props: FileExplorerProps) => {
if (file.isDirectory) { if (file.isDirectory) {
return ( return (
<div key={index}>
<TreeViewItem <TreeViewItem
id={`treeViewItem${file.path}`} id={`treeViewItem${file.path}`}
iconX='pr-3 fa fa-folder' iconX='pr-3 fa fa-folder'
@ -944,31 +945,9 @@ export const FileExplorer = (props: FileExplorerProps) => {
</TreeView> : <TreeView id={`treeView${file.path}`} key={index} /> </TreeView> : <TreeView id={`treeView${file.path}`} key={index} />
} }
</TreeViewItem> </TreeViewItem>
{ ((state.focusContext.element === file.path) && (state.focusEdit.element !== file.path)) &&
<FileExplorerContextMenu
actions={state.actions}
hideContextMenu={hideContextMenu}
createNewFile={handleNewFileInput}
createNewFolder={handleNewFolderInput}
deletePath={deletePath}
renamePath={editModeOn}
publishToGist={publishToGist}
emit={emitContextMenuEvent}
pageX={state.focusContext.x}
pageY={state.focusContext.y}
path={file.path}
type='folder'
onMouseOver={(e) => {
e.stopPropagation()
handleMouseOver(file.path)
}}
/>
}
</div>
) )
} else { } else {
return ( return (
<div key={index}>
<TreeViewItem <TreeViewItem
id={`treeViewItem${file.path}`} id={`treeViewItem${file.path}`}
key={index} key={index}
@ -993,27 +972,6 @@ export const FileExplorer = (props: FileExplorerProps) => {
if (state.mouseOverElement === file.path) handleMouseOut() if (state.mouseOverElement === file.path) handleMouseOut()
}} }}
/> />
{ ((state.focusContext.element === file.path) && (state.focusEdit.element !== file.path)) &&
<FileExplorerContextMenu
actions={state.actions}
hideContextMenu={hideContextMenu}
createNewFile={handleNewFileInput}
createNewFolder={handleNewFolderInput}
deletePath={deletePath}
renamePath={editModeOn}
runScript={runScript}
emit={emitContextMenuEvent}
pageX={state.focusContext.x}
pageY={state.focusContext.y}
path={file.path}
type='file'
onMouseOver={(e) => {
e.stopPropagation()
handleMouseOver(file.path)
}}
/>
}
</div>
) )
} }
} }
@ -1073,6 +1031,26 @@ export const FileExplorer = (props: FileExplorerProps) => {
/> />
} }
<Toaster message={state.toasterMsg} /> <Toaster message={state.toasterMsg} />
{ state.showContextMenu &&
<FileExplorerContextMenu
actions={state.actions}
hideContextMenu={hideContextMenu}
createNewFile={handleNewFileInput}
createNewFolder={handleNewFolderInput}
deletePath={deletePath}
renamePath={editModeOn}
runScript={runScript}
emit={emitContextMenuEvent}
pageX={state.focusContext.x}
pageY={state.focusContext.y}
path={state.focusContext.element}
type={state.focusContext.type}
onMouseOver={(e) => {
e.stopPropagation()
handleMouseOver(state.focusContext.element)
}}
/>
}
</div> </div>
) )
} }

Loading…
Cancel
Save