From 238f0c0577a9926225f0727f6862961b75f93929 Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Thu, 7 May 2026 12:18:52 +0200 Subject: [PATCH] change: move downloadArchive move copy actions to web-app-files --- .../src/composables/actions/files/index.ts | 3 ++ .../actions/files/useFileActionsCopy.ts | 23 +++++----- .../files/useFileActionsDownloadArchive.ts | 25 ++++++----- .../actions/files/useFileActionsMove.ts | 24 +++++----- .../composables/extensions/useFileActions.ts | 45 +++++++++++++++++++ .../actions/files/useFileActionsCopy.spec.ts | 2 +- .../useFileActionsDownloadArchive.spec.ts | 10 +++-- .../actions/files/useFileActionsMove.spec.ts | 2 +- .../web-pkg/src/components/AppBar/AppBar.vue | 17 ++----- .../components/FilesList/ContextActions.vue | 12 ----- .../src/composables/actions/files/index.ts | 3 -- .../actions/files/useFileActions.ts | 9 ---- packages/web-pkg/src/helpers/index.ts | 1 + .../FilesList/ContextActions.spec.ts | 4 +- packages/web-runtime/src/index.ts | 2 +- 15 files changed, 101 insertions(+), 81 deletions(-) rename packages/{web-pkg => web-app-files}/src/composables/actions/files/useFileActionsCopy.ts (90%) rename packages/{web-pkg => web-app-files}/src/composables/actions/files/useFileActionsDownloadArchive.ts (91%) rename packages/{web-pkg => web-app-files}/src/composables/actions/files/useFileActionsMove.ts (84%) rename packages/{web-pkg => web-app-files}/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts (97%) rename packages/{web-pkg => web-app-files}/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts (91%) rename packages/{web-pkg => web-app-files}/tests/unit/composables/actions/files/useFileActionsMove.spec.ts (99%) diff --git a/packages/web-app-files/src/composables/actions/files/index.ts b/packages/web-app-files/src/composables/actions/files/index.ts index e0dbfd949e..1cf249fa41 100644 --- a/packages/web-app-files/src/composables/actions/files/index.ts +++ b/packages/web-app-files/src/composables/actions/files/index.ts @@ -1,13 +1,16 @@ export * from './useFileActionsCopyPermanentLink' +export * from './useFileActionsCopy' export * from './useFileActionsCreateLink' export * from './useFileActionsCreateNewFile' export * from './useFileActionsCreateNewFolder' export * from './useFileActionsCreateNewShortcut' export * from './useFileActionsCreateSpaceFromResource' export * from './useFileActionsDisableSync' +export * from './useFileActionsDownloadArchive' export * from './useFileActionsEmptyTrashBin' export * from './useFileActionsEnableSync' export * from './useFileActionsFavorite' +export * from './useFileActionsMove' export * from './useFileActionsOpenShortcut' export * from './useFileActionsPaste' export * from './useFileActionsRename' diff --git a/packages/web-pkg/src/composables/actions/files/useFileActionsCopy.ts b/packages/web-app-files/src/composables/actions/files/useFileActionsCopy.ts similarity index 90% rename from packages/web-pkg/src/composables/actions/files/useFileActionsCopy.ts rename to packages/web-app-files/src/composables/actions/files/useFileActionsCopy.ts index 84fe8925e4..ce15d978e5 100644 --- a/packages/web-pkg/src/composables/actions/files/useFileActionsCopy.ts +++ b/packages/web-app-files/src/composables/actions/files/useFileActionsCopy.ts @@ -1,17 +1,18 @@ -import { - isLocationCommonActive, - isLocationPublicActive, - isLocationSpacesActive -} from '../../../router' +import { isProjectSpaceResource } from '@opencloud-eu/web-client' import { computed, unref } from 'vue' - import { useGettext } from 'vue3-gettext' -import { FileAction, FileActionOptions } from '../types' -import { isProjectSpaceResource } from '@opencloud-eu/web-client' -import { useRouter } from '../../router' -import { useClipboardStore, useResourcesStore } from '../../piniaStores' import { storeToRefs } from 'pinia' -import { isMacOs } from '../../../helpers' +import { + FileAction, + FileActionOptions, + isLocationCommonActive, + isLocationPublicActive, + isLocationSpacesActive, + isMacOs, + useClipboardStore, + useResourcesStore, + useRouter +} from '@opencloud-eu/web-pkg' export const useFileActionsCopy = () => { const router = useRouter() diff --git a/packages/web-pkg/src/composables/actions/files/useFileActionsDownloadArchive.ts b/packages/web-app-files/src/composables/actions/files/useFileActionsDownloadArchive.ts similarity index 91% rename from packages/web-pkg/src/composables/actions/files/useFileActionsDownloadArchive.ts rename to packages/web-app-files/src/composables/actions/files/useFileActionsDownloadArchive.ts index 2006dd87d9..e733fca66f 100644 --- a/packages/web-pkg/src/composables/actions/files/useFileActionsDownloadArchive.ts +++ b/packages/web-app-files/src/composables/actions/files/useFileActionsDownloadArchive.ts @@ -1,19 +1,20 @@ +import { isProjectSpaceResource, isPublicSpaceResource, Resource } from '@opencloud-eu/web-client' +import { computed, unref } from 'vue' +import { useGettext } from 'vue3-gettext' import { + FileAction, + FileActionOptions, + formatFileSize, isLocationCommonActive, isLocationPublicActive, isLocationSharesActive, - isLocationSpacesActive -} from '../../../router' -import { useIsFilesAppActive } from '../helpers' -import { isProjectSpaceResource, isPublicSpaceResource, Resource } from '@opencloud-eu/web-client' -import { computed, unref } from 'vue' -import { useRouter } from '../../router' - -import { FileAction, FileActionOptions } from '../types' -import { useGettext } from 'vue3-gettext' -import { useArchiverService } from '../../archiverService' -import { formatFileSize } from '../../../helpers/filesize' -import { useAuthStore, useMessages } from '../../piniaStores' + isLocationSpacesActive, + useArchiverService, + useAuthStore, + useIsFilesAppActive, + useMessages, + useRouter +} from '@opencloud-eu/web-pkg' export const useFileActionsDownloadArchive = () => { const { showErrorMessage } = useMessages() diff --git a/packages/web-pkg/src/composables/actions/files/useFileActionsMove.ts b/packages/web-app-files/src/composables/actions/files/useFileActionsMove.ts similarity index 84% rename from packages/web-pkg/src/composables/actions/files/useFileActionsMove.ts rename to packages/web-app-files/src/composables/actions/files/useFileActionsMove.ts index 7a7704c987..cd08d8ce2c 100644 --- a/packages/web-pkg/src/composables/actions/files/useFileActionsMove.ts +++ b/packages/web-app-files/src/composables/actions/files/useFileActionsMove.ts @@ -1,17 +1,19 @@ -import { canBeMoved } from '../../../helpers/permissions' +import { Resource } from '@opencloud-eu/web-client' +import { computed, unref } from 'vue' +import { useGettext } from 'vue3-gettext' +import { storeToRefs } from 'pinia' import { + ActionOptions, + canBeMoved, + FileAction, isLocationCommonActive, isLocationPublicActive, - isLocationSpacesActive -} from '../../../router' -import { useGettext } from 'vue3-gettext' -import { ActionOptions, FileAction } from '../types' -import { computed, unref } from 'vue' -import { useRouter } from '../../router' -import { useClipboardStore, useResourcesStore } from '../../piniaStores' -import { Resource } from '@opencloud-eu/web-client' -import { storeToRefs } from 'pinia' -import { isMacOs } from '../../../helpers' + isLocationSpacesActive, + isMacOs, + useClipboardStore, + useResourcesStore, + useRouter +} from '@opencloud-eu/web-pkg' export const useFileActionsMove = () => { const router = useRouter() diff --git a/packages/web-app-files/src/composables/extensions/useFileActions.ts b/packages/web-app-files/src/composables/extensions/useFileActions.ts index 7c1baff292..e02e308760 100644 --- a/packages/web-app-files/src/composables/extensions/useFileActions.ts +++ b/packages/web-app-files/src/composables/extensions/useFileActions.ts @@ -7,11 +7,14 @@ import { resourceTableActionsExtensionPoint } from '../../extensionPoints' import { + useFileActionsCopy, useFileActionsCopyPermanentLink, useFileActionsCreateSpaceFromResource, useFileActionsDisableSync, + useFileActionsDownloadArchive, useFileActionsFavorite, useFileActionsEnableSync, + useFileActionsMove, useFileActionsPaste, useFileActionsOpenShortcut, useSpaceActionsSetImage, @@ -27,12 +30,15 @@ const adminSettingsSpacesContextActionsExtensionPointId = 'app.admin-settings.spaces.context-actions' export const useFileActions = (): ActionExtension[] => { + const { actions: copyActions } = useFileActionsCopy() + const { actions: downloadArchiveActions } = useFileActionsDownloadArchive() const { actions: openShortcutActions } = useFileActionsOpenShortcut() const { actions: showSharesActions } = useFileActionsShowShares() const { actions: permanentLinkActions } = useFileActionsCopyPermanentLink() const { actions: createSpaceFromResourceActions } = useFileActionsCreateSpaceFromResource() const { actions: disableSyncActions } = useFileActionsDisableSync() const { actions: enableSyncActions } = useFileActionsEnableSync() + const { actions: moveActions } = useFileActionsMove() const { actions: pasteActions } = useFileActionsPaste() const { actions: renameActions } = useFileActionsRename() const { actions: favoriteActions } = useFileActionsFavorite() @@ -41,6 +47,45 @@ export const useFileActions = (): ActionExtension[] => { const { actions: toggleHideShareActions } = useFileActionsToggleHideShare() return [ + { + id: 'com.github.opencloud-eu.web.files.context-action.download-archive', + extensionPointIds: [ + contextActionsExtensionPoint.id, + batchActionsExtensionPoint.id, + fileSideBarActionsExtensionPoint.id + ], + type: 'action', + action: { + ...unref(downloadArchiveActions)[0], + category: 'tertiary' + } + }, + { + id: 'com.github.opencloud-eu.web.files.context-action.move', + extensionPointIds: [ + contextActionsExtensionPoint.id, + batchActionsExtensionPoint.id, + fileSideBarActionsExtensionPoint.id + ], + type: 'action', + action: { + ...unref(moveActions)[0], + category: 'tertiary' + } + }, + { + id: 'com.github.opencloud-eu.web.files.context-action.copy', + extensionPointIds: [ + contextActionsExtensionPoint.id, + batchActionsExtensionPoint.id, + fileSideBarActionsExtensionPoint.id + ], + type: 'action', + action: { + ...unref(copyActions)[0], + category: 'tertiary' + } + }, { id: 'com.github.opencloud-eu.web.files.context-action.open-shortcut', extensionPointIds: [contextActionsExtensionPoint.id], diff --git a/packages/web-pkg/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts b/packages/web-app-files/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts similarity index 97% rename from packages/web-pkg/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts rename to packages/web-app-files/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts index fbce46db40..ae70117473 100644 --- a/packages/web-pkg/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts +++ b/packages/web-app-files/tests/unit/composables/actions/files/useFileActionsCopy.spec.ts @@ -7,7 +7,7 @@ import { getComposableWrapper } from '@opencloud-eu/web-test-helpers' import { useFileActionsCopy } from '../../../../../src/composables/actions/files' -import { useClipboardStore } from '../../../../../src/composables/piniaStores' +import { useClipboardStore } from '@opencloud-eu/web-pkg' import { describe } from 'vitest' describe('copy', () => { diff --git a/packages/web-pkg/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts b/packages/web-app-files/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts similarity index 91% rename from packages/web-pkg/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts rename to packages/web-app-files/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts index f0d6e9644a..c62652f7a7 100644 --- a/packages/web-pkg/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts +++ b/packages/web-app-files/tests/unit/composables/actions/files/useFileActionsDownloadArchive.spec.ts @@ -1,16 +1,18 @@ import { mock } from 'vitest-mock-extended' import { unref } from 'vue' -import { useFileActionsDownloadArchive } from '../../../../../src/composables/actions' import { Resource, SpaceResource } from '@opencloud-eu/web-client' import { defaultComponentMocks, RouteLocation, getComposableWrapper } from '@opencloud-eu/web-test-helpers' -import { useArchiverService } from '../../../../../src/composables' -import { ArchiverService } from '../../../../../src' +import { ArchiverService, useArchiverService } from '@opencloud-eu/web-pkg' +import { useFileActionsDownloadArchive } from '../../../../../src/composables/actions/files' -vi.mock('../../../../../src/composables/archiverService/useArchiverService') +vi.mock('@opencloud-eu/web-pkg', async (importOriginal) => ({ + ...(await importOriginal()), + useArchiverService: vi.fn() +})) describe('downloadArchive', () => { describe('search context', () => { diff --git a/packages/web-pkg/tests/unit/composables/actions/files/useFileActionsMove.spec.ts b/packages/web-app-files/tests/unit/composables/actions/files/useFileActionsMove.spec.ts similarity index 99% rename from packages/web-pkg/tests/unit/composables/actions/files/useFileActionsMove.spec.ts rename to packages/web-app-files/tests/unit/composables/actions/files/useFileActionsMove.spec.ts index 70c82626a7..f9ca371287 100644 --- a/packages/web-pkg/tests/unit/composables/actions/files/useFileActionsMove.spec.ts +++ b/packages/web-app-files/tests/unit/composables/actions/files/useFileActionsMove.spec.ts @@ -1,12 +1,12 @@ import { mock, mockDeep } from 'vitest-mock-extended' import { unref } from 'vue' -import { useFileActionsMove } from '../../../../../src/composables/actions' import { Resource, SpaceResource } from '@opencloud-eu/web-client' import { RouteLocation, defaultComponentMocks, getComposableWrapper } from '@opencloud-eu/web-test-helpers' +import { useFileActionsMove } from '../../../../../src/composables/actions/files' describe('move', () => { describe('computed property "actions"', () => { diff --git a/packages/web-pkg/src/components/AppBar/AppBar.vue b/packages/web-pkg/src/components/AppBar/AppBar.vue index c2e957fcbd..adcefdfb9f 100644 --- a/packages/web-pkg/src/components/AppBar/AppBar.vue +++ b/packages/web-pkg/src/components/AppBar/AppBar.vue @@ -79,11 +79,8 @@ import ViewOptions from '../ViewOptions.vue' import { isLocationCommonActive, isLocationTrashActive } from '../../router' import { FolderView } from '../../ui/types' import { - useFileActionsCopy, useFileActionsDelete, - useFileActionsDownloadArchive, useFileActionsDownloadFile, - useFileActionsMove, useFileActionsRestore } from '../../composables/actions' import { @@ -159,11 +156,8 @@ export default defineComponent({ const space = computed(() => props.space) - const { actions: copyActions } = useFileActionsCopy() const { actions: deleteActions } = useFileActionsDelete() - const { actions: downloadArchiveActions } = useFileActionsDownloadArchive() const { actions: downloadFileActions } = useFileActionsDownloadFile() - const { actions: moveActions } = useFileActionsMove() const { actions: restoreActions } = useFileActionsRestore() const breadcrumbMaxWidth = ref(0) @@ -174,14 +168,7 @@ export default defineComponent({ ) const batchActions = computed(() => { - let actions: FileAction[] = [ - ...unref(downloadArchiveActions), - ...unref(downloadFileActions), - ...unref(moveActions), - ...unref(copyActions), - ...unref(deleteActions), - ...unref(restoreActions) - ] + let actions: FileAction[] = [...unref(downloadFileActions)] const actionExtensions = requestExtensions({ id: 'global.files.batch-actions', @@ -191,6 +178,8 @@ export default defineComponent({ actions = [...actions, ...actionExtensions.map((e) => e.action)] } + actions = [...actions, ...unref(deleteActions), ...unref(restoreActions)] + return actions.filter((item) => item.isVisible({ space: unref(space), resources: resourcesStore.selectedResources }) ) diff --git a/packages/web-pkg/src/components/FilesList/ContextActions.vue b/packages/web-pkg/src/components/FilesList/ContextActions.vue index fe2e627668..2cf2667cca 100644 --- a/packages/web-pkg/src/components/FilesList/ContextActions.vue +++ b/packages/web-pkg/src/components/FilesList/ContextActions.vue @@ -10,11 +10,8 @@ import { FileActionOptions, useExtensionRegistry, useFileActions, - useFileActionsCopy, useFileActionsDelete, - useFileActionsDownloadArchive, useFileActionsDownloadFile, - useFileActionsMove, useFileActionsOpenWithDefault, useFileActionsRestore } from '../../composables' @@ -35,11 +32,8 @@ export default defineComponent({ const { $gettext } = useGettext() const { actions: openWithDefaultActions } = useFileActionsOpenWithDefault() - const { actions: copyActions } = useFileActionsCopy() const { actions: deleteActions } = useFileActionsDelete() - const { actions: downloadArchiveActions } = useFileActionsDownloadArchive() const { actions: downloadFileActions } = useFileActionsDownloadFile() - const { actions: moveActions } = useFileActionsMove() const { actions: restoreActions } = useFileActionsRestore() const extensionRegistry = useExtensionRegistry() @@ -69,9 +63,6 @@ export default defineComponent({ const menuItemsBatchTertiary = computed(() => [ - ...unref(downloadArchiveActions), - ...unref(moveActions), - ...unref(copyActions), ...unref(deleteActions), ...unref(restoreActions), ...unref(extensionsContextActions).filter((a) => !a.category || a.category === 'tertiary') @@ -104,11 +95,8 @@ export default defineComponent({ const menuItemsTertiary = computed(() => { return [ - ...unref(downloadArchiveActions), ...unref(downloadFileActions), ...unref(deleteActions), - ...unref(moveActions), - ...unref(copyActions), ...unref(restoreActions), ...unref(extensionsContextActions).filter((a) => !a.category || a.category === 'tertiary') ].filter((item) => item.isVisible(unref(actionOptions))) diff --git a/packages/web-pkg/src/composables/actions/files/index.ts b/packages/web-pkg/src/composables/actions/files/index.ts index 1aab7bafa5..5be66b8bef 100644 --- a/packages/web-pkg/src/composables/actions/files/index.ts +++ b/packages/web-pkg/src/composables/actions/files/index.ts @@ -1,9 +1,6 @@ export * from './useFileActions' -export * from './useFileActionsCopy' export * from './useFileActionsDelete' -export * from './useFileActionsDownloadArchive' export * from './useFileActionsDownloadFile' -export * from './useFileActionsMove' export * from './useFileActionsNavigate' export * from './useFileActionsOpenWithDefault' export * from './useFileActionsOpenWithApp' diff --git a/packages/web-pkg/src/composables/actions/files/useFileActions.ts b/packages/web-pkg/src/composables/actions/files/useFileActions.ts index 4920382472..107b332ae5 100644 --- a/packages/web-pkg/src/composables/actions/files/useFileActions.ts +++ b/packages/web-pkg/src/composables/actions/files/useFileActions.ts @@ -15,11 +15,8 @@ import { } from '../../actions' import { - useFileActionsCopy, useFileActionsDelete, - useFileActionsDownloadArchive, useFileActionsDownloadFile, - useFileActionsMove, useFileActionsNavigate, useFileActionsRestore } from './index' @@ -55,21 +52,15 @@ export const useFileActions = () => { const configStore = useConfigStore() const { options } = storeToRefs(configStore) - const { actions: copyActions } = useFileActionsCopy() const { actions: deleteActions } = useFileActionsDelete() - const { actions: downloadArchiveActions } = useFileActionsDownloadArchive() const { actions: downloadFileActions } = useFileActionsDownloadFile() const { actions: fallbackToDownloadAction } = useFileActionFallbackToDownload() - const { actions: moveActions } = useFileActionsMove() const { actions: navigateActions } = useFileActionsNavigate() const { actions: restoreActions } = useFileActionsRestore() const systemActions = computed[]>(() => [ - ...unref(downloadArchiveActions), ...unref(downloadFileActions), ...unref(deleteActions), - ...unref(moveActions), - ...unref(copyActions), ...unref(restoreActions) ]) diff --git a/packages/web-pkg/src/helpers/index.ts b/packages/web-pkg/src/helpers/index.ts index 77af940449..f0cb7d5585 100644 --- a/packages/web-pkg/src/helpers/index.ts +++ b/packages/web-pkg/src/helpers/index.ts @@ -13,6 +13,7 @@ export * from './filesize' export * from './fuse' export * from './locale' export * from './path' +export * from './permissions' export * from './store' export * from './binary' export * from './platform' diff --git a/packages/web-pkg/tests/unit/components/FilesList/ContextActions.spec.ts b/packages/web-pkg/tests/unit/components/FilesList/ContextActions.spec.ts index b2e1b57151..3c70740dce 100644 --- a/packages/web-pkg/tests/unit/components/FilesList/ContextActions.spec.ts +++ b/packages/web-pkg/tests/unit/components/FilesList/ContextActions.spec.ts @@ -8,7 +8,7 @@ import { mock } from 'vitest-mock-extended' import { Resource, SpaceResource } from '@opencloud-eu/web-client' import ContextActions from '../../../../src/components/FilesList/ContextActions.vue' -import { useFileActionsCopy, useFileActionsDelete } from '../../../../src/composables' +import { useFileActionsDelete } from '../../../../src/composables' import { computed } from 'vue' import { Action } from '../../../../src/composables/actions' @@ -25,7 +25,7 @@ describe.skip('ContextActions', () => { }) it('render enabled actions', () => { - const enabledComposables = [useFileActionsDelete, useFileActionsCopy] + const enabledComposables = [useFileActionsDelete] for (const composable of enabledComposables) { vi.mocked(composable).mockImplementation(() => ({ actions: computed(() => [mock({ isVisible: () => true })]) diff --git a/packages/web-runtime/src/index.ts b/packages/web-runtime/src/index.ts index f24e0a1d65..dad8292c1e 100644 --- a/packages/web-runtime/src/index.ts +++ b/packages/web-runtime/src/index.ts @@ -92,6 +92,7 @@ export const bootstrapApp = async (configurationPath: string, appsReadyCallback: const federation = new ModuleFederation({ name: 'opencloud-web', remotes: [] }) registerSharedModules(federation) announceLoadingService({ app }) + announceArchiverService({ app, configStore, userStore, capabilityStore }) const [coreTranslations, customTranslations] = await Promise.all([ loadTranslations(), @@ -122,7 +123,6 @@ export const bootstrapApp = async (configurationPath: string, appsReadyCallback: }) } - announceArchiverService({ app, configStore, userStore, capabilityStore }) announcePreviewService({ app, configStore,