summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/files/src/components/NewNodeDialog.vue2
-rw-r--r--apps/files/src/store/files.ts28
-rw-r--r--apps/files/src/views/FilesList.vue18
3 files changed, 36 insertions, 12 deletions
diff --git a/apps/files/src/components/NewNodeDialog.vue b/apps/files/src/components/NewNodeDialog.vue
index 2b662d96b10..b766b230022 100644
--- a/apps/files/src/components/NewNodeDialog.vue
+++ b/apps/files/src/components/NewNodeDialog.vue
@@ -117,7 +117,7 @@ function submit() {
}
// Reset local name on props change
-watch(() => props.defaultName, () => {
+watch(() => [props.defaultName, props.otherNames], () => {
localDefaultName.value = getUniqueName(props.defaultName, props.otherNames).trim()
})
diff --git a/apps/files/src/store/files.ts b/apps/files/src/store/files.ts
index f9024b0a6bd..1af675e67ce 100644
--- a/apps/files/src/store/files.ts
+++ b/apps/files/src/store/files.ts
@@ -14,6 +14,7 @@ import logger from '../logger'
import Vue from 'vue'
import { client } from '../services/WebdavClient.ts'
+import { usePathsStore } from './paths.ts'
const fetchNode = async (node: Node): Promise<Node> => {
const propfindPayload = davGetDefaultPropfind()
@@ -63,6 +64,33 @@ export const useFilesStore = function(...args) {
},
actions: {
+ /**
+ * Get cached nodes within a given path
+ *
+ * @param service The service (files view)
+ * @param path The path relative within the service
+ * @returns Array of cached nodes within the path
+ */
+ getNodesByPath(service: string, path?: string): Node[] {
+ const pathsStore = usePathsStore()
+ let folder: Folder | undefined
+
+ // Get the containing folder from path store
+ if (!path || path === '/') {
+ folder = this.getRoot(service)
+ } else {
+ const source = pathsStore.getPath(service, path)
+ if (source) {
+ folder = this.getNode(source) as Folder | undefined
+ }
+ }
+
+ // If we found a cache entry and the cache entry was already loaded (has children) then use it
+ return (folder?._children ?? [])
+ .map((source: string) => this.getNode(source))
+ .filter(Boolean)
+ },
+
updateNodes(nodes: Node[]) {
// Update the store all at once
const files = nodes.reduce((acc, node) => {
diff --git a/apps/files/src/views/FilesList.vue b/apps/files/src/views/FilesList.vue
index a127fd4c35c..e4c42a00038 100644
--- a/apps/files/src/views/FilesList.vue
+++ b/apps/files/src/views/FilesList.vue
@@ -242,6 +242,12 @@ export default defineComponent({
return async (path?: string) => {
// as the path is allowed to be undefined we need to normalize the path ('//' to '/')
const normalizedPath = normalize(`${this.currentFolder?.path ?? ''}/${path ?? ''}`)
+ // Try cache first
+ const nodes = this.filesStore.getNodesByPath(view.id, path)
+ if (nodes.length > 0) {
+ return nodes
+ }
+ // If not found in the files store (cache)
// use the current view to fetch the content for the requested path
return (await view.getContents(normalizedPath)).contents
}
@@ -277,7 +283,7 @@ export default defineComponent({
dirContents(): Node[] {
return (this.currentFolder?._children || [])
- .map(this.getNode)
+ .map(this.filesStore.getNode)
.filter((node: Node) => !!node)
},
@@ -531,16 +537,6 @@ export default defineComponent({
},
/**
- * Get a cached note from the store
- *
- * @param {number} fileId the file id to get
- * @return {Folder|File}
- */
- getNode(fileId) {
- return this.filesStore.getNode(fileId)
- },
-
- /**
* Handle the node deleted event to reset open file
* @param node The deleted node
*/