diff options
Diffstat (limited to 'apps/files/src/actions/renameAction.ts')
-rw-r--r-- | apps/files/src/actions/renameAction.ts | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/apps/files/src/actions/renameAction.ts b/apps/files/src/actions/renameAction.ts index e0ea784c291..d421d18c473 100644 --- a/apps/files/src/actions/renameAction.ts +++ b/apps/files/src/actions/renameAction.ts @@ -6,6 +6,9 @@ import { emit } from '@nextcloud/event-bus' import { Permission, type Node, FileAction, View } from '@nextcloud/files' import { translate as t } from '@nextcloud/l10n' import PencilSvg from '@mdi/svg/svg/pencil.svg?raw' +import { getPinia } from '../store' +import { useFilesStore } from '../store/files' +import { dirname } from 'path' export const ACTION_RENAME = 'rename' @@ -18,12 +21,23 @@ export const action = new FileAction({ if (nodes.length === 0) { return false } + // Disable for single file shares if (view.id === 'public-file-share') { return false } - // Only enable if all nodes have the delete permission - return nodes.every((node) => Boolean(node.permissions & Permission.DELETE)) + + const node = nodes[0] + const filesStore = useFilesStore(getPinia()) + const parentNode = node.dirname === '/' + ? filesStore.getRoot(view.id) + : filesStore.getNode(dirname(node.source)) + const parentPermissions = parentNode?.permissions || Permission.NONE + + // Only enable if the node have the delete permission + // and if the parent folder allows creating files + return Boolean(node.permissions & Permission.DELETE) + && Boolean(parentPermissions & Permission.CREATE) }, async exec(node: Node) { |