summaryrefslogtreecommitdiffstats
path: root/apps/files
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-01-21 00:05:20 +0100
committerFerdinand Thiessen <opensource@fthiessen.de>2024-01-25 17:43:43 +0100
commitd1fc93ede1f5ba74742c4c7d73f489faf7bd1236 (patch)
tree90c86d50087d02abb967e7bde8bc3d7447a80025 /apps/files
parent24f49977786c9e49d5482fbccf2d6a24be960574 (diff)
downloadnextcloud-server-d1fc93ede1f5ba74742c4c7d73f489faf7bd1236.tar.gz
nextcloud-server-d1fc93ede1f5ba74742c4c7d73f489faf7bd1236.zip
fix(files): Set default view and match also child routes
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'apps/files')
-rw-r--r--apps/files/src/router/router.ts8
-rw-r--r--apps/files/src/views/Navigation.vue26
2 files changed, 23 insertions, 11 deletions
diff --git a/apps/files/src/router/router.ts b/apps/files/src/router/router.ts
index 5bb8f90770b..4fec332cddf 100644
--- a/apps/files/src/router/router.ts
+++ b/apps/files/src/router/router.ts
@@ -19,9 +19,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+import type { RawLocation, Route } from 'vue-router'
+
import { generateUrl } from '@nextcloud/router'
import queryString from 'query-string'
-import Router, { RawLocation, Route } from 'vue-router'
+import Router from 'vue-router'
import Vue from 'vue'
import { ErrorHandler } from 'vue-router/types/router'
@@ -46,10 +48,10 @@ const router = new Router({
{
path: '/',
// Pretending we're using the default view
- redirect: { name: 'filelist' },
+ redirect: { name: 'filelist', params: { view: 'files' } },
},
{
- path: '/:view/:fileid?',
+ path: '/:view/:fileid(\\d+)?',
name: 'filelist',
props: true,
},
diff --git a/apps/files/src/views/Navigation.vue b/apps/files/src/views/Navigation.vue
index 9e7a630128e..0ed8d7d7a44 100644
--- a/apps/files/src/views/Navigation.vue
+++ b/apps/files/src/views/Navigation.vue
@@ -25,9 +25,9 @@
<template #list>
<NcAppNavigationItem v-for="view in parentViews"
:key="view.id"
- :allow-collapse="true"
+ allow-collapse
:data-cy-files-navigation-item="view.id"
- :exact="true"
+ :exact="useExactRouteMatching(view)"
:icon="view.iconClass"
:name="view.name"
:open="isExpanded(view)"
@@ -41,7 +41,7 @@
<NcAppNavigationItem v-for="child in childViews[view.id]"
:key="child.id"
:data-cy-files-navigation-item="child.id"
- :exact="true"
+ :exact-path="true"
:icon="child.iconClass"
:name="child.name"
:to="generateToNavigation(child)">
@@ -128,7 +128,7 @@ export default {
},
currentView(): View {
- return this.views.find(view => view.id === this.currentViewId)
+ return this.views.find(view => view.id === this.currentViewId)!
},
views(): View[] {
@@ -145,19 +145,19 @@ export default {
})
},
- childViews(): View[] {
+ childViews(): Record<string, View[]> {
return this.views
// filter parent views
.filter(view => !!view.parent)
// create a map of parents and their children
.reduce((list, view) => {
- list[view.parent] = [...(list[view.parent] || []), view]
+ list[view.parent!] = [...(list[view.parent!] || []), view]
// Sort children by order
- list[view.parent].sort((a, b) => {
+ list[view.parent!].sort((a, b) => {
return a.order - b.order
})
return list
- }, {})
+ }, {} as Record<string, View[]>)
},
},
@@ -180,6 +180,16 @@ export default {
},
methods: {
+ /**
+ * Only use exact route matching on routes with child views
+ * Because if a view does not have children (like the files view) then multiple routes might be matched for it
+ * Like for the 'files' view this does not work because of optional 'fileid' param so /files and /files/1234 are both in the 'files' view
+ * @param view The view to check
+ */
+ useExactRouteMatching(view: View) {
+ return this.childViews[view.id]?.length > 0
+ },
+
showView(view: View) {
// Closing any opened sidebar
window?.OCA?.Files?.Sidebar?.close?.()