diff --git a/packages/web-app-files/src/components/SideBar/Actions/FileActions.vue b/packages/web-app-files/src/components/SideBar/Actions/FileActions.vue index 0675f9af22c..c8d13807619 100644 --- a/packages/web-app-files/src/components/SideBar/Actions/FileActions.vue +++ b/packages/web-app-files/src/components/SideBar/Actions/FileActions.vue @@ -41,6 +41,10 @@ const { actions: deleteActions } = useFileActionsDelete() const { actions: restoreActions } = useFileActionsRestore() const actions = computed(() => { + if (!unref(resource)) { + return [] + } + const options = { space: unref(space), resources: unref(resources), diff --git a/packages/web-app-files/tests/unit/components/SideBar/Actions/FileActions.spec.ts b/packages/web-app-files/tests/unit/components/SideBar/Actions/FileActions.spec.ts index ff971e23326..d8f120fa86f 100644 --- a/packages/web-app-files/tests/unit/components/SideBar/Actions/FileActions.spec.ts +++ b/packages/web-app-files/tests/unit/components/SideBar/Actions/FileActions.spec.ts @@ -93,11 +93,25 @@ describe('FileActions', () => { expect(wrapper.find(fileActions[action].selector).exists()).toBeTruthy() } }) + + it('skips action resolution while the resource is loading', () => { + const getAllOpenWithActions = vi.fn(() => []) + vi.mocked(useFileActions).mockImplementation(() => + mock>({ getAllOpenWithActions }) + ) + vi.mocked(useExtensionRegistry).mockImplementation(() => + mock>({ requestExtensions: () => [] }) + ) + + getWrapper(null) + + expect(getAllOpenWithActions).not.toHaveBeenCalled() + }) }) }) }) -function getWrapper() { +function getWrapper(resource: Resource = mock({ extension: 'md' })) { const mocks = defaultComponentMocks({ currentRoute: mock({ name: 'files-spaces-generic', @@ -113,9 +127,7 @@ function getWrapper() { stubs: { ...defaultStubs, OcButton: false }, provide: { space: mock(), - resource: mock({ - extension: 'md' - }), + resource, ...mocks } }