Merge pull request #59359 from mykh-hailo/fix/folder-tree-view-selection
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, main, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, guests_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, main, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions

fix: folder tree selection after any action in main content
This commit is contained in:
Simon L. 2026-05-16 10:10:53 +02:00 committed by GitHub
commit f188efd918
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 34 additions and 5 deletions

View file

@ -7,7 +7,7 @@
import type { IView } from '@nextcloud/files'
import { getCanonicalLocale, getLanguage } from '@nextcloud/l10n'
import { computed, onMounted, ref } from 'vue'
import { computed, inject, onMounted, ref } from 'vue'
import NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'
import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
import { useVisibleViews } from '../composables/useViews.ts'
@ -62,6 +62,8 @@ const sortedChildViews = computed(() => childViews.value.slice().sort((a, b) =>
return collator.compare(a.name, b.name)
}))
const hasChildViews = computed(() => childViews.value.length > 0)
const activeViewId = inject('currentNavigationView', ref<string | undefined>(undefined))
const isActiveView = computed(() => activeViewId.value.id === props.view.id)
const navigationRoute = computed(() => {
if (props.view.params) {
@ -138,6 +140,7 @@ export default {
<template>
<NcAppNavigationItem
class="files-navigation__item"
:active="isActiveView"
allow-collapse
:loading="isLoading"
:data-cy-files-navigation-item="view.id"

View file

@ -42,7 +42,7 @@
import { emit } from '@nextcloud/event-bus'
import { getNavigation } from '@nextcloud/files'
import { t } from '@nextcloud/l10n'
import { computed, ref, watchEffect } from 'vue'
import { computed, provide, ref, watchEffect } from 'vue'
import { useRoute } from 'vue-router/composables'
import NcAppNavigation from '@nextcloud/vue/components/NcAppNavigation'
import NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'
@ -65,6 +65,32 @@ const allViews = useViews()
const route = useRoute()
const currentViewId = computed(() => route?.params?.view || 'files')
const currentNavigationViewId = computed(() => {
const views = allViews.value.filter((view) => view.id === currentViewId.value
|| view.params?.view === currentViewId.value)
const matchingParams = views.filter((view) => view.params
&& Object.entries(view.params).every(([key, value]) => {
if (key in route.params) {
return route.params[key] === value
}
return route.query[key] === value
}))
.sort((a, b) => Object.keys(b.params!).length - Object.keys(a.params!).length)
// if we have a full match use that
if (matchingParams.length > 0) {
return matchingParams[0]
}
// otherwise check if at least view + dir matches
const matchingDir = views.find((view) => view.params?.dir === route.query.dir)
if (matchingDir) {
return matchingDir
}
// finally fallback to the parent view
return views.find((view) => view.id === currentViewId.value)!
})
provide('currentNavigationView', currentNavigationViewId)
watchEffect(() => {
if (currentViewId.value !== activeStore.activeView?.id) {
logger.debug(`Route view id ${currentViewId.value} is different from active view id ${activeStore.activeView?.id}, updating active view...`)

4
dist/files-main.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long