Stackedit/src/services/explorerSvc.js
2018-07-17 20:58:40 +01:00

96 lines
2.8 KiB
JavaScript

import store from '../store';
import workspaceSvc from './workspaceSvc';
export default {
newItem(isFolder = false) {
let parentId = store.getters['explorer/selectedNodeFolder'].item.id;
if (parentId === 'trash' // Not allowed to create new items in the trash
|| (isFolder && parentId === 'temp') // Not allowed to create new folders in the temp folder
) {
parentId = null;
}
store.dispatch('explorer/openNode', parentId);
store.commit('explorer/setNewItem', {
type: isFolder ? 'folder' : 'file',
parentId,
});
},
async deleteItem() {
const selectedNode = store.getters['explorer/selectedNode'];
if (selectedNode.isNil) {
return;
}
if (selectedNode.isTrash || selectedNode.item.parentId === 'trash') {
try {
await store.dispatch('modal/open', 'trashDeletion');
} catch (e) {
// Cancel
}
return;
}
// See if we have a confirmation dialog to show
let moveToTrash = true;
try {
if (selectedNode.isTemp) {
await store.dispatch('modal/open', 'tempFolderDeletion');
moveToTrash = false;
} else if (selectedNode.item.parentId === 'temp') {
await store.dispatch('modal/open', {
type: 'tempFileDeletion',
item: selectedNode.item,
});
moveToTrash = false;
} else if (selectedNode.isFolder) {
await store.dispatch('modal/open', {
type: 'folderDeletion',
item: selectedNode.item,
});
}
} catch (e) {
return; // cancel
}
const deleteFile = (id) => {
if (moveToTrash) {
workspaceSvc.setOrPatchItem({
id,
parentId: 'trash',
});
} else {
workspaceSvc.deleteFile(id);
}
};
if (selectedNode === store.getters['explorer/selectedNode']) {
const currentFileId = store.getters['file/current'].id;
let doClose = selectedNode.item.id === currentFileId;
if (selectedNode.isFolder) {
const recursiveDelete = (folderNode) => {
folderNode.folders.forEach(recursiveDelete);
folderNode.files.forEach((fileNode) => {
doClose = doClose || fileNode.item.id === currentFileId;
deleteFile(fileNode.item.id);
});
store.commit('folder/deleteItem', folderNode.item.id);
};
recursiveDelete(selectedNode);
} else {
deleteFile(selectedNode.item.id);
}
if (doClose) {
// Close the current file by opening the last opened, not deleted one
store.getters['data/lastOpenedIds'].some((id) => {
const file = store.state.file.itemsById[id];
if (file.parentId === 'trash') {
return false;
}
store.commit('file/setCurrentId', id);
return true;
});
}
}
},
};