mirror of
https://github.com/chinchang/web-maker.git
synced 2025-07-17 12:01:13 +02:00
Misc fixes for file explorer.
- Add validation while dropping a file - Refactor removing file to work on path not reference - style fixes
This commit is contained in:
@@ -103,27 +103,27 @@ function File({
|
|||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
function dragStartHandler(e) {
|
function dragStartHandler(e) {
|
||||||
console.log(file.path);
|
|
||||||
e.dataTransfer.setData('text/plain', file.path);
|
e.dataTransfer.setData('text/plain', file.path);
|
||||||
}
|
}
|
||||||
function dragOverHandler(e) {
|
function dragOverHandler(e) {
|
||||||
if (file.isFolder) {
|
if (file.isFolder) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.target.classList.add('is-being-dragged-over');
|
console.log(e.target);
|
||||||
e.target.style.outline = '1px dashed';
|
e.currentTarget.classList.add('is-being-dragged-over');
|
||||||
|
e.currentTarget.style.outline = '1px dashed';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function dragLeaveHandler(e) {
|
function dragLeaveHandler(e) {
|
||||||
if (file.isFolder) {
|
if (file.isFolder) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.target.style.outline = null;
|
e.currentTarget.style.outline = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function dropHandler(e) {
|
function dropHandler(e) {
|
||||||
if (file.isFolder) {
|
if (file.isFolder) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
onFileDrop(e.dataTransfer.getData('text/plain'), file);
|
onFileDrop(e.dataTransfer.getData('text/plain'), file);
|
||||||
e.target.style.outline = null;
|
e.currentTarget.style.outline = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
|
@@ -26,7 +26,8 @@ import {
|
|||||||
linearizeFiles,
|
linearizeFiles,
|
||||||
assignFilePaths,
|
assignFilePaths,
|
||||||
getFileFromPath,
|
getFileFromPath,
|
||||||
removeFileAtPath
|
removeFileAtPath,
|
||||||
|
doesFileExistInFolder
|
||||||
} from '../fileUtils';
|
} from '../fileUtils';
|
||||||
import { itemService } from '../itemService';
|
import { itemService } from '../itemService';
|
||||||
import '../db';
|
import '../db';
|
||||||
@@ -1215,14 +1216,14 @@ export default class App extends Component {
|
|||||||
assignFilePaths(currentItem.files);
|
assignFilePaths(currentItem.files);
|
||||||
this.setState({ currentItem });
|
this.setState({ currentItem });
|
||||||
}
|
}
|
||||||
removeFileHandler(fileToRemove) {
|
removeFileHandler(file) {
|
||||||
this.setState({
|
const currentItem = {
|
||||||
currentItem: {
|
|
||||||
...this.state.currentItem,
|
...this.state.currentItem,
|
||||||
files: this.state.currentItem.files.filter(
|
files: [...this.state.currentItem.files]
|
||||||
file => file !== fileToRemove
|
};
|
||||||
)
|
removeFileAtPath(currentItem.files, file.path);
|
||||||
}
|
this.setState({
|
||||||
|
currentItem
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
renameFileHandler(oldFileName, newFileName) {
|
renameFileHandler(oldFileName, newFileName) {
|
||||||
@@ -1242,11 +1243,18 @@ export default class App extends Component {
|
|||||||
fileDropHandler(sourceFilePath, destinationFolder) {
|
fileDropHandler(sourceFilePath, destinationFolder) {
|
||||||
let { currentItem } = this.state;
|
let { currentItem } = this.state;
|
||||||
const { file } = getFileFromPath(currentItem.files, sourceFilePath);
|
const { file } = getFileFromPath(currentItem.files, sourceFilePath);
|
||||||
|
if (doesFileExistInFolder(destinationFolder, file.name)) {
|
||||||
|
alert(
|
||||||
|
`File with name "${
|
||||||
|
file.name
|
||||||
|
}" already exists in the destination folder.`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
destinationFolder.children.push(file);
|
destinationFolder.children.push(file);
|
||||||
removeFileAtPath(currentItem.files, sourceFilePath);
|
removeFileAtPath(currentItem.files, sourceFilePath);
|
||||||
|
|
||||||
currentItem = {
|
currentItem = {
|
||||||
...currentItem,
|
...currentItem,
|
||||||
files: [...currentItem.files]
|
files: [...currentItem.files]
|
||||||
|
@@ -85,3 +85,13 @@ export function removeFileAtPath(files, path) {
|
|||||||
const { index } = getChildFileFromName(currentFolder, pathPieces[0]);
|
const { index } = getChildFileFromName(currentFolder, pathPieces[0]);
|
||||||
currentFolder.splice(index, 1);
|
currentFolder.splice(index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a file with same name exists in the passed folder.
|
||||||
|
* @param {object} folder Folder to search in
|
||||||
|
* @param {string} fileName File name to search for
|
||||||
|
*/
|
||||||
|
export function doesFileExistInFolder(folder, fileName) {
|
||||||
|
const details = getChildFileFromName(folder.children, fileName);
|
||||||
|
return !!details.file;
|
||||||
|
}
|
||||||
|
@@ -1629,19 +1629,18 @@ body:not(.is-app) .show-when-app {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
/* 1st level nesting */
|
/* 1st level nesting */
|
||||||
.sidebar__folder-wrap > div .sidebar__file {
|
.sidebar__folder-wrap .sidebar__file {
|
||||||
padding-left: 1rem;
|
padding-left: 1rem;
|
||||||
}
|
}
|
||||||
/* 2nd level nesting */
|
/* 2nd level nesting */
|
||||||
.sidebar__folder-wrap .sidebar__folder-wrap > div > .sidebar__file {
|
.sidebar__folder-wrap .sidebar__folder-wrap .sidebar__file {
|
||||||
padding-left: 2rem;
|
padding-left: 2rem;
|
||||||
}
|
}
|
||||||
/* 3rd level nesting */
|
/* 3rd level nesting */
|
||||||
.sidebar__folder-wrap
|
.sidebar__folder-wrap
|
||||||
.sidebar__folder-wrap
|
.sidebar__folder-wrap
|
||||||
.sidebar__folder-wrap
|
.sidebar__folder-wrap
|
||||||
> div
|
.sidebar__file {
|
||||||
> .sidebar__file {
|
|
||||||
padding-left: 3rem;
|
padding-left: 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1657,7 +1656,7 @@ body:not(.is-app) .show-when-app {
|
|||||||
.sidebar__file-icon {
|
.sidebar__file-icon {
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
margin-right: 10px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
.sidebar__file-options {
|
.sidebar__file-options {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
Reference in New Issue
Block a user