diff options
Diffstat (limited to 'apps/files/src/actions/renameAction.ts')
-rw-r--r-- | apps/files/src/actions/renameAction.ts | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/apps/files/src/actions/renameAction.ts b/apps/files/src/actions/renameAction.ts index c00a99b4de1..715ecb7563e 100644 --- a/apps/files/src/actions/renameAction.ts +++ b/apps/files/src/actions/renameAction.ts @@ -3,21 +3,41 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ import { emit } from '@nextcloud/event-bus' -import { Permission, type Node, FileAction } from '@nextcloud/files' +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 PencilSvg from '@mdi/svg/svg/pencil-outline.svg?raw' +import { getPinia } from '../store' +import { useFilesStore } from '../store/files' +import { dirname } from 'path' -export const ACTION_DETAILS = 'details' +export const ACTION_RENAME = 'rename' export const action = new FileAction({ - id: 'rename', + id: ACTION_RENAME, displayName: () => t('files', 'Rename'), iconSvgInline: () => PencilSvg, - enabled: (nodes: Node[]) => { - return nodes.length > 0 && nodes - .map(node => node.permissions) - .every(permission => (permission & Permission.UPDATE) !== 0) + enabled: (nodes: Node[], view: View) => { + if (nodes.length === 0) { + return false + } + + // Disable for single file shares + if (view.id === 'public-file-share') { + return false + } + + 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) { |