1
0
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:
Kushagra Gour
2018-10-12 23:53:36 +05:30
parent d3f06ac890
commit 57e41b2f4d
4 changed files with 36 additions and 19 deletions

View File

@@ -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 (

View File

@@ -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]

View File

@@ -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;
}

View 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;