Skip to content

Commit 8d6f933

Browse files
hamza221nextcloud-command
authored andcommitted
fix: hide rename action in trashbin
Signed-off-by: Hamza <hamzamahjoubi221@gmail.com>
1 parent b72caf2 commit 8d6f933

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

apps/files/src/actions/renameAction.spec.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,22 @@
44
*/
55
import { action } from './renameAction'
66
import { expect } from '@jest/globals'
7-
import { File, Permission, View, FileAction } from '@nextcloud/files'
7+
import { File, Folder, Permission, View, FileAction } from '@nextcloud/files'
88
import eventBus from '@nextcloud/event-bus'
9+
import { useFilesStore } from '../store/files'
10+
import { pinia } from '../store/index.ts'
911

1012
const view = {
1113
id: 'files',
1214
name: 'Files',
1315
} as View
1416

17+
beforeEach(() => {
18+
const root = new Folder({ owner: 'test', source: 'https://cloud.domain.com/remote.php/dav/files/admin/', id: 1, permissions: Permission.CREATE })
19+
const files = useFilesStore(pinia)
20+
files.setRoot({ service: 'files', root })
21+
})
22+
1523
describe('Rename action conditions tests', () => {
1624
test('Default values', () => {
1725
expect(action).toBeInstanceOf(FileAction)
@@ -26,7 +34,7 @@ describe('Rename action conditions tests', () => {
2634
describe('Rename action enabled tests', () => {
2735
test('Enabled for node with UPDATE permission', () => {
2836
const file = new File({
29-
id: 1,
37+
id: 2,
3038
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt',
3139
owner: 'admin',
3240
mime: 'text/plain',
@@ -39,7 +47,7 @@ describe('Rename action enabled tests', () => {
3947

4048
test('Disabled for node without DELETE permission', () => {
4149
const file = new File({
42-
id: 1,
50+
id: 2,
4351
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt',
4452
owner: 'admin',
4553
mime: 'text/plain',
@@ -54,13 +62,13 @@ describe('Rename action enabled tests', () => {
5462
window.OCA = { Files: { Sidebar: {} } }
5563

5664
const file1 = new File({
57-
id: 1,
65+
id: 2,
5866
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foo.txt',
5967
owner: 'admin',
6068
mime: 'text/plain',
6169
})
6270
const file2 = new File({
63-
id: 1,
71+
id: 2,
6472
source: 'https://cloud.domain.com/remote.php/dav/files/admin/bar.txt',
6573
owner: 'admin',
6674
mime: 'text/plain',
@@ -76,7 +84,7 @@ describe('Rename action exec tests', () => {
7684
jest.spyOn(eventBus, 'emit')
7785

7886
const file = new File({
79-
id: 1,
87+
id: 2,
8088
source: 'https://cloud.domain.com/remote.php/dav/files/admin/foobar.txt',
8189
owner: 'admin',
8290
mime: 'text/plain',

apps/files/src/actions/renameAction.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
* SPDX-License-Identifier: AGPL-3.0-or-later
44
*/
55
import { emit } from '@nextcloud/event-bus'
6-
import { Permission, type Node, FileAction } from '@nextcloud/files'
6+
import { Permission, type Node, FileAction, View } from '@nextcloud/files'
77
import { translate as t } from '@nextcloud/l10n'
88
import PencilSvg from '@mdi/svg/svg/pencil.svg?raw'
9+
import { pinia } from '../store'
10+
import { useFilesStore } from '../store/files'
11+
import { dirname } from 'path'
912

1013
export const ACTION_DETAILS = 'details'
1114

@@ -14,10 +17,18 @@ export const action = new FileAction({
1417
displayName: () => t('files', 'Rename'),
1518
iconSvgInline: () => PencilSvg,
1619

17-
enabled: (nodes: Node[]) => {
18-
return nodes.length > 0 && nodes
19-
.map(node => node.permissions)
20-
.every(permission => Boolean(permission & Permission.DELETE))
20+
enabled: (nodes: Node[], view: View) => {
21+
const node = nodes[0]
22+
const filesStore = useFilesStore(pinia)
23+
const parentNode = node.dirname === '/'
24+
? filesStore.getRoot(view.id)
25+
: filesStore.getNode(dirname(node.source))
26+
const parentPermissions = parentNode?.permissions || Permission.NONE
27+
28+
// Only enable if the node have the delete permission
29+
// and if the parent folder allows creating files
30+
return Boolean(node.permissions & Permission.DELETE)
31+
&& Boolean(parentPermissions & Permission.CREATE)
2132
},
2233

2334
async exec(node: Node) {

0 commit comments

Comments
 (0)