aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src/actions/renameAction.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files/src/actions/renameAction.ts')
-rw-r--r--apps/files/src/actions/renameAction.ts36
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) {