diff --git a/web/src/components/tree.tsx b/web/src/components/tree.tsx
index f8c7376..9b7db0f 100644
--- a/web/src/components/tree.tsx
+++ b/web/src/components/tree.tsx
@@ -3,12 +3,15 @@ import { Menu, MenuItem } from '@mui/material'
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
import ChevronRightIcon from '@mui/icons-material/ChevronRight'
+import DeleteConfirmationModal from './deleteConfirmationModal'
+
import { TreeNode } from '../utils/types'
-type TreeViewProps = {
+type Props = {
node: TreeNode
selectedFilePath: string
handleSelect: (filePath: string) => void
+ deleteNode: (path: string, isFolder: boolean) => void
defaultExpanded?: string[]
}
@@ -16,8 +19,9 @@ const TreeView = ({
node,
selectedFilePath,
handleSelect,
+ deleteNode,
defaultExpanded
-}: TreeViewProps) => {
+}: Props) => {
return (
@@ -38,19 +43,17 @@ const TreeView = ({
export default TreeView
-type TreeViewNodeProps = {
- node: TreeNode
- selectedFilePath: string
- handleSelect: (filePath: string) => void
- defaultExpanded?: string[]
-}
-
const TreeViewNode = ({
node,
selectedFilePath,
handleSelect,
+ deleteNode,
defaultExpanded
-}: TreeViewNodeProps) => {
+}: Props) => {
+ const [deleteConfirmationModalOpen, setDeleteConfirmationModalOpen] =
+ useState(false)
+ const [deleteConfirmationModalMessage, setDeleteConfirmationModalMessage] =
+ useState('')
const [childVisible, setChildVisibility] = useState(false)
const [contextMenu, setContextMenu] = useState<{
mouseX: number
@@ -90,6 +93,21 @@ const TreeViewNode = ({
}
}, [defaultExpanded, node.relativePath])
+ const handleDeleteItemClick = () => {
+ setContextMenu(null)
+ setDeleteConfirmationModalOpen(true)
+ setDeleteConfirmationModalMessage(
+ `Are you sure you want to delete ${node.isFolder ? 'folder' : 'file'} "${
+ node.relativePath
+ }"?`
+ )
+ }
+
+ const deleteConfirm = () => {
+ setDeleteConfirmationModalOpen(false)
+ deleteNode(node.relativePath, node.isFolder)
+ }
+
return (
@@ -112,10 +130,17 @@ const TreeViewNode = ({
node={child}
selectedFilePath={selectedFilePath}
handleSelect={handleSelect}
+ deleteNode={deleteNode}
defaultExpanded={defaultExpanded}
/>
))}
+
)
diff --git a/web/src/containers/Studio/editor.tsx b/web/src/containers/Studio/editor.tsx
index 4889282..a3b0be0 100644
--- a/web/src/containers/Studio/editor.tsx
+++ b/web/src/containers/Studio/editor.tsx
@@ -107,6 +107,8 @@ const SASjsEditor = ({
setOpenModal(true)
})
.finally(() => setIsLoading(false))
+ } else {
+ setFileContent('')
}
}, [selectedFilePath])
diff --git a/web/src/containers/Studio/index.tsx b/web/src/containers/Studio/index.tsx
index 5d556ca..1dd7051 100644
--- a/web/src/containers/Studio/index.tsx
+++ b/web/src/containers/Studio/index.tsx
@@ -56,6 +56,12 @@ const Studio = () => {
) => {
if (node.relativePath === path) {
removeNodeFromParent(parentNode, path)
+ // reset selected file path and file path query param
+ if (
+ node.relativePath === selectedFilePath ||
+ selectedFilePath.startsWith(node.relativePath)
+ )
+ setSearchParams({})
return true
}
if (Array.isArray(node.children)) {
@@ -81,6 +87,7 @@ const Studio = () => {
selectedFilePath={selectedFilePath}
directoryData={directoryData}
handleSelect={handleSelect}
+ removeFileFromTree={removeFileFromTree}
/>
void
+ removeFileFromTree: (filePath: string) => void
}
-const SideBar = ({ selectedFilePath, directoryData, handleSelect }: Props) => {
+const SideBar = ({
+ selectedFilePath,
+ directoryData,
+ handleSelect,
+ removeFileFromTree
+}: Props) => {
const defaultExpanded = useMemo(() => {
const splittedPath = selectedFilePath.split('/')
const arr = ['']
@@ -27,6 +33,20 @@ const SideBar = ({ selectedFilePath, directoryData, handleSelect }: Props) => {
return arr
}, [selectedFilePath])
+ const deleteNode = (path: string, isFolder: boolean) => {
+ const axiosPromise = axios.delete(
+ `/SASjsApi/drive/${
+ isFolder ? `folder?_folderPath=${path}` : `file?_filePath=${path}`
+ }`
+ )
+
+ axiosPromise
+ .then(() => removeFileFromTree(path))
+ .catch((err) => {
+ console.log(err)
+ })
+ }
+
return (
{
node={directoryData}
selectedFilePath={selectedFilePath}
handleSelect={handleSelect}
+ deleteNode={deleteNode}
defaultExpanded={defaultExpanded}
/>
)}