From dfb2745c8b71be99256ff5113cc4d3475b578a7d Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Wed, 13 Nov 2024 15:28:16 -0800 Subject: [PATCH] feat(files): Add support for file list actions Signed-off-by: Christopher Ng --- apps/files/src/views/FilesList.vue | 31 +++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue index fdfbed6a4e31a..23aab26f839e1 100644 --- a/apps/files/src/views/FilesList.vue +++ b/apps/files/src/views/FilesList.vue @@ -45,6 +45,18 @@ multiple @failed="onUploadFail" @uploaded="onUpload" /> + + + + + {{ action.displayName(currentView) }} + + @@ -138,7 +150,7 @@ import type { UserConfig } from '../types.ts' import { getCapabilities } from '@nextcloud/capabilities' import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus' -import { Folder, Node, Permission, sortNodes } from '@nextcloud/files' +import { Folder, Node, Permission, sortNodes, getFileListActions } from '@nextcloud/files' import { translate as t } from '@nextcloud/l10n' import { join, dirname, normalize } from 'path' import { showError, showWarning } from '@nextcloud/dialogs' @@ -152,6 +164,8 @@ import IconReload from 'vue-material-design-icons/Reload.vue' import LinkIcon from 'vue-material-design-icons/Link.vue' import ListViewIcon from 'vue-material-design-icons/FormatListBulletedSquare.vue' import NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js' +import NcActions from '@nextcloud/vue/dist/Components/NcActions.js' +import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js' import NcButton from '@nextcloud/vue/dist/Components/NcButton.js' import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js' import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js' @@ -190,6 +204,8 @@ export default defineComponent({ LinkIcon, ListViewIcon, NcAppContent, + NcActions, + NcActionButton, NcButton, NcEmptyContent, NcIconSvgWrapper, @@ -430,6 +446,19 @@ export default defineComponent({ showCustomEmptyView() { return !this.loading && this.isEmptyDir && this.currentView?.emptyView !== undefined }, + + enabledFileListActions() { + const actions = getFileListActions() + const enabledActions = actions + .filter(action => { + if (action.enabled === undefined) { + return true + } + return action.enabled(this.currentView, this.dirContents, { folder: this.currentFolder }) + }) + .toSorted((a, b) => a.order - b.order) + return enabledActions + }, }, watch: {