diff --git a/apps/files/src/eventbus.d.ts b/apps/files/src/eventbus.d.ts index 04b717462445a..fd094af358390 100644 --- a/apps/files/src/eventbus.d.ts +++ b/apps/files/src/eventbus.d.ts @@ -33,6 +33,8 @@ declare module '@nextcloud/event-bus' { 'files:sidebar:opened': INode 'files:sidebar:closed': undefined + + 'viewer:sidebar:open': { source: string } } } diff --git a/apps/files/src/services/RouterService.ts b/apps/files/src/services/RouterService.ts index 358d4216e6f12..764e4726b9f2d 100644 --- a/apps/files/src/services/RouterService.ts +++ b/apps/files/src/services/RouterService.ts @@ -64,9 +64,7 @@ export default class RouterService { query?: Record, replace?: boolean, ): Promise { - if (!name) { - name = this.router.currentRoute.name as string - } + name ??= this.router.currentRoute.name as string const location: Location = { name, query, params } if (replace) { return this._router.replace(location) diff --git a/apps/files/src/store/sidebar.ts b/apps/files/src/store/sidebar.ts index 7ac98d9395655..7308eec1461a6 100644 --- a/apps/files/src/store/sidebar.ts +++ b/apps/files/src/store/sidebar.ts @@ -11,6 +11,7 @@ import { defineStore } from 'pinia' import { computed, ref, watch } from 'vue' import logger from '../logger.ts' import { useActiveStore } from './active.ts' +import { useFilesStore } from './files.ts' export const useSidebarStore = defineStore('sidebar', () => { const activeTab = ref() @@ -127,6 +128,17 @@ export const useSidebarStore = defineStore('sidebar', () => { } }) + subscribe('viewer:sidebar:open', ({ source }) => { + const filesStore = useFilesStore() + const node = filesStore.getNode(source) + if (node) { + logger.debug('Opening sidebar for node from Viewer.', { node }) + open(node) + } else { + logger.error(`Cannot open sidebar for node '${source}' because it was not found in the current view.`) + } + }) + let initialized = false // close sidebar when parameter is removed from url subscribe('files:list:updated', () => {