|
@@ -206,10 +206,10 @@ export function useFileTreeActionable() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function finishCreatingEntity(entity) {
|
|
function finishCreatingEntity(entity) {
|
|
|
- const selectedEntityId = Array.from(selectedEntityIds)[0]
|
|
|
|
|
- const found = findInTreeOrThrow(fileTreeData, selectedEntityId)
|
|
|
|
|
- const parentFolderId =
|
|
|
|
|
- found.type === 'folder' ? found.entity._id : found.parentFolderId
|
|
|
|
|
|
|
+ const parentFolderId = getSelectedParentFolderId(
|
|
|
|
|
+ fileTreeData,
|
|
|
|
|
+ selectedEntityIds
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
// check for duplicates and throw
|
|
// check for duplicates and throw
|
|
|
if (isNameUniqueInFolder(fileTreeData, parentFolderId, entity.name)) {
|
|
if (isNameUniqueInFolder(fileTreeData, parentFolderId, entity.name)) {
|
|
@@ -233,10 +233,10 @@ export function useFileTreeActionable() {
|
|
|
// bypass React file tree entirely; requesting the Angular new doc or file
|
|
// bypass React file tree entirely; requesting the Angular new doc or file
|
|
|
// modal instead
|
|
// modal instead
|
|
|
function startCreatingDocOrFile() {
|
|
function startCreatingDocOrFile() {
|
|
|
- const selectedEntityId = Array.from(selectedEntityIds)[0]
|
|
|
|
|
- const found = findInTreeOrThrow(fileTreeData, selectedEntityId)
|
|
|
|
|
- const parentFolderId =
|
|
|
|
|
- found.type === 'folder' ? found.entity._id : found.parentFolderId
|
|
|
|
|
|
|
+ const parentFolderId = getSelectedParentFolderId(
|
|
|
|
|
+ fileTreeData,
|
|
|
|
|
+ selectedEntityIds
|
|
|
|
|
+ )
|
|
|
window.dispatchEvent(
|
|
window.dispatchEvent(
|
|
|
new CustomEvent('FileTreeReactBridge.openNewDocModal', {
|
|
new CustomEvent('FileTreeReactBridge.openNewDocModal', {
|
|
|
detail: {
|
|
detail: {
|
|
@@ -305,7 +305,7 @@ export function useFileTreeActionable() {
|
|
|
return {
|
|
return {
|
|
|
canDelete: selectedEntityIds.size > 0,
|
|
canDelete: selectedEntityIds.size > 0,
|
|
|
canRename: selectedEntityIds.size === 1,
|
|
canRename: selectedEntityIds.size === 1,
|
|
|
- canCreate: selectedEntityIds.size === 1,
|
|
|
|
|
|
|
+ canCreate: selectedEntityIds.size < 2,
|
|
|
isDeleting,
|
|
isDeleting,
|
|
|
isRenaming,
|
|
isRenaming,
|
|
|
isCreatingFolder,
|
|
isCreatingFolder,
|
|
@@ -326,3 +326,15 @@ export function useFileTreeActionable() {
|
|
|
cancel
|
|
cancel
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+function getSelectedParentFolderId(fileTreeData, selectedEntityIds) {
|
|
|
|
|
+ // we expect only one entity to be selected in that case, so we pick the first
|
|
|
|
|
+ const selectedEntityId = Array.from(selectedEntityIds)[0]
|
|
|
|
|
+ if (!selectedEntityId) {
|
|
|
|
|
+ // in some cases no entities are selected. Return the root folder id then.
|
|
|
|
|
+ return fileTreeData._id
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const found = findInTreeOrThrow(fileTreeData, selectedEntityId)
|
|
|
|
|
+ return found.type === 'folder' ? found.entity._id : found.parentFolderId
|
|
|
|
|
+}
|