From fe4d159d4dab88ba0227f6a6e17907ac1313d94f Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Tue, 10 Feb 2026 13:00:54 +0100 Subject: [PATCH] refactor(files): migrate to files registry for reactive file actions Signed-off-by: Ferdinand Thiessen --- apps/files/src/components/FileEntry.vue | 4 + apps/files/src/components/FileEntryGrid.vue | 4 + apps/files/src/components/FileEntryMixin.ts | 6 +- .../FilesAppSettingsShortcuts.vue | 8 +- .../FilesListTableHeaderActions.vue | 15 ++- .../files/src/components/FilesListVirtual.vue | 24 ++-- .../src/composables/useFileActions.spec.ts | 124 ++++++++++++++++++ apps/files/src/composables/useFileActions.ts | 42 ++++++ 8 files changed, 197 insertions(+), 30 deletions(-) create mode 100644 apps/files/src/composables/useFileActions.spec.ts create mode 100644 apps/files/src/composables/useFileActions.ts diff --git a/apps/files/src/components/FileEntry.vue b/apps/files/src/components/FileEntry.vue index 76ca2be74bd..53030040caa 100644 --- a/apps/files/src/components/FileEntry.vue +++ b/apps/files/src/components/FileEntry.vue @@ -115,6 +115,7 @@ import FileEntryActions from './FileEntry/FileEntryActions.vue' import FileEntryCheckbox from './FileEntry/FileEntryCheckbox.vue' import FileEntryName from './FileEntry/FileEntryName.vue' import FileEntryPreview from './FileEntry/FileEntryPreview.vue' +import { useFileActions } from '../composables/useFileActions.ts' import { useFileListWidth } from '../composables/useFileListWidth.ts' import { useRouteParameters } from '../composables/useRouteParameters.ts' import { useActionsMenuStore } from '../store/actionsmenu.ts' @@ -170,7 +171,10 @@ export default defineComponent({ activeView, } = useActiveStore() + const actions = useFileActions() + return { + actions, actionsMenuStore, activeFolder, activeNode, diff --git a/apps/files/src/components/FileEntryGrid.vue b/apps/files/src/components/FileEntryGrid.vue index c59da91e408..d2cb92ef40f 100644 --- a/apps/files/src/components/FileEntryGrid.vue +++ b/apps/files/src/components/FileEntryGrid.vue @@ -77,6 +77,7 @@ import FileEntryActions from './FileEntry/FileEntryActions.vue' import FileEntryCheckbox from './FileEntry/FileEntryCheckbox.vue' import FileEntryName from './FileEntry/FileEntryName.vue' import FileEntryPreview from './FileEntry/FileEntryPreview.vue' +import { useFileActions } from '../composables/useFileActions.ts' import { useFileListWidth } from '../composables/useFileListWidth.ts' import { useRouteParameters } from '../composables/useRouteParameters.ts' import { useActionsMenuStore } from '../store/actionsmenu.ts' @@ -122,7 +123,10 @@ export default defineComponent({ activeView, } = useActiveStore() + const actions = useFileActions() + return { + actions, actionsMenuStore, activeFolder, activeNode, diff --git a/apps/files/src/components/FileEntryMixin.ts b/apps/files/src/components/FileEntryMixin.ts index fb886532698..8fc1aa55399 100644 --- a/apps/files/src/components/FileEntryMixin.ts +++ b/apps/files/src/components/FileEntryMixin.ts @@ -8,7 +8,7 @@ import type { PropType } from 'vue' import type { FileSource } from '../types.ts' import { showError } from '@nextcloud/dialogs' -import { FileType, Folder, getFileActions, File as NcFile, Node, NodeStatus, Permission } from '@nextcloud/files' +import { FileType, Folder, File as NcFile, Node, NodeStatus, Permission } from '@nextcloud/files' import { t } from '@nextcloud/l10n' import { generateUrl } from '@nextcloud/router' import { isPublicShare } from '@nextcloud/sharing/public' @@ -24,8 +24,6 @@ import { isDownloadable } from '../utils/permissions.ts' Vue.directive('onClickOutside', vOnClickOutside) -const actions = getFileActions() - export default defineComponent({ props: { source: { @@ -233,7 +231,7 @@ export default defineComponent({ return [] } - return actions + return this.actions .filter((action: IFileAction) => { if (!action.enabled) { return true diff --git a/apps/files/src/components/FilesAppSettings/FilesAppSettingsShortcuts.vue b/apps/files/src/components/FilesAppSettings/FilesAppSettingsShortcuts.vue index 1ffb3c26525..85a8d2c6dde 100644 --- a/apps/files/src/components/FilesAppSettings/FilesAppSettingsShortcuts.vue +++ b/apps/files/src/components/FilesAppSettings/FilesAppSettingsShortcuts.vue @@ -6,20 +6,22 @@