Skip to content

Commit 35cc295

Browse files
committed
Added trash
1 parent a317139 commit 35cc295

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

src/components/Explorer.vue

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ export default {
4646
'toggleExplorer',
4747
]),
4848
newItem(isFolder) {
49-
const parentId = this.$store.getters['explorer/selectedNodeFolder'].item.id;
49+
let parentId = this.$store.getters['explorer/selectedNodeFolder'].item.id;
50+
if (parentId === 'trash') {
51+
parentId = undefined;
52+
}
5053
this.$store.dispatch('explorer/openNode', parentId);
5154
this.$store.commit('explorer/setNewItem', {
5255
type: isFolder ? 'folder' : 'file',
@@ -55,28 +58,40 @@ export default {
5558
},
5659
editItem() {
5760
const selectedNode = this.$store.getters['explorer/selectedNode'];
58-
this.$store.commit('explorer/setEditingId', selectedNode.item.id);
61+
if (selectedNode.item.id !== 'trash') {
62+
this.$store.commit('explorer/setEditingId', selectedNode.item.id);
63+
}
5964
},
6065
deleteItem() {
6166
const selectedNode = this.$store.getters['explorer/selectedNode'];
6267
if (!selectedNode.isNil) {
68+
if (selectedNode.item.id === 'trash' || selectedNode.item.parentId === 'trash') {
69+
this.$store.dispatch('modal/trashDeletion');
70+
return;
71+
}
6372
this.$store.dispatch(selectedNode.isFolder
6473
? 'modal/folderDeletion'
6574
: 'modal/fileDeletion',
6675
selectedNode.item)
6776
.then(() => {
6877
if (selectedNode === this.$store.getters['explorer/selectedNode']) {
6978
if (selectedNode.isFolder) {
70-
const recursiveDelete = (folderNode) => {
71-
folderNode.folders.forEach(recursiveDelete);
79+
const recursiveMoveToTrash = (folderNode) => {
80+
folderNode.folders.forEach(recursiveMoveToTrash);
7281
folderNode.files.forEach((fileNode) => {
73-
this.$store.commit('file/deleteItem', fileNode.item.id);
82+
this.$store.commit('file/patchItem', {
83+
id: fileNode.item.id,
84+
parentId: 'trash',
85+
});
7486
});
7587
this.$store.commit('folder/deleteItem', folderNode.item.id);
7688
};
77-
recursiveDelete(selectedNode);
89+
recursiveMoveToTrash(selectedNode);
7890
} else {
79-
this.$store.commit('file/deleteItem', selectedNode.item.id);
91+
this.$store.commit('file/patchItem', {
92+
id: selectedNode.item.id,
93+
parentId: 'trash',
94+
});
8095
}
8196
}
8297
});

src/components/ExplorerNode.vue

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,11 @@ export default {
129129
this.$store.commit('explorer/setEditingId', null);
130130
},
131131
setDragSourceId(evt) {
132-
const id = this.node.item.id;
133-
if (id === 'fake') {
132+
if (this.node.noDrag) {
134133
evt.preventDefault();
135134
return;
136135
}
137-
this.$store.commit('explorer/setDragSourceId', id);
136+
this.$store.commit('explorer/setDragSourceId', this.node.item.id);
138137
},
139138
onDrop() {
140139
const sourceNode = this.$store.getters['explorer/dragSourceNode'];

src/store/modules/explorer.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const nilFileNode = new Node(emptyFile());
4242
nilFileNode.isNil = true;
4343
const fakeFileNode = new Node(emptyFile());
4444
fakeFileNode.item.id = 'fake';
45+
fakeFileNode.noDrag = true;
4546

4647
function getParent(node, getters) {
4748
if (node.isNil) {
@@ -68,7 +69,13 @@ export default {
6869
},
6970
getters: {
7071
nodeStructure: (state, getters, rootState, rootGetters) => {
71-
const nodeMap = {};
72+
const trashFolderNode = new Node(emptyFolder(), [], true);
73+
trashFolderNode.item.id = 'trash';
74+
trashFolderNode.item.name = 'Trash';
75+
trashFolderNode.noDrag = true;
76+
const nodeMap = {
77+
trash: trashFolderNode,
78+
};
7279
rootGetters['folder/items'].forEach((item) => {
7380
nodeMap[item.id] = new Node(item, [], true);
7481
});
@@ -84,6 +91,9 @@ export default {
8491
const node = nodeMap[id];
8592
let parentNode = nodeMap[node.item.parentId];
8693
if (!parentNode || !parentNode.isFolder) {
94+
if (id === 'trash') {
95+
return;
96+
}
8797
parentNode = rootNode;
8898
}
8999
if (node.isFolder) {
@@ -93,6 +103,9 @@ export default {
93103
}
94104
});
95105
rootNode.sortChildren();
106+
if (trashFolderNode.files.length) {
107+
rootNode.folders.unshift(trashFolderNode);
108+
}
96109
// Add a fake file at the end of the root folder to always allow drag and drop into it.
97110
rootNode.files.push(fakeFileNode);
98111
return {

0 commit comments

Comments
 (0)