aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src/actions/sidebarAction.ts
blob: 21b5dfc287822185b42edf9051463a353f42b5de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
 * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */
import { Permission, type Node, View, FileAction } from '@nextcloud/files'
import { translate as t } from '@nextcloud/l10n'
import InformationSvg from '@mdi/svg/svg/information-variant.svg?raw'

import logger from '../logger.js'

export const ACTION_DETAILS = 'details'

export const action = new FileAction({
	id: ACTION_DETAILS,
	displayName: () => t('files', 'Open details'),
	iconSvgInline: () => InformationSvg,

	// Sidebar currently supports user folder only, /files/USER
	enabled: (nodes: Node[]) => {
		// Only works on single node
		if (nodes.length !== 1) {
			return false
		}

		if (!nodes[0]) {
			return false
		}

		// Only work if the sidebar is available
		if (!window?.OCA?.Files?.Sidebar) {
			return false
		}

		return (nodes[0].root?.startsWith('/files/') && nodes[0].permissions !== Permission.NONE) ?? false
	},

	async exec(node: Node, view: View, dir: string) {
		try {
			// TODO: migrate Sidebar to use a Node instead
			await window.OCA.Files.Sidebar.open(node.path)

			// Silently update current fileid
			window.OCP.Files.Router.goToRoute(
				null,
				{ view: view.id, fileid: String(node.fileid) },
				{ ...window.OCP.Files.Router.query, dir },
				true,
			)

			return null
		} catch (error) {
			logger.error('Error while opening sidebar', { error })
			return false
		}
	},

	order: -50,
})