aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src
diff options
context:
space:
mode:
authorChristopher Ng <chrng8@gmail.com>2024-08-13 11:25:47 -0700
committerChristopher Ng <chrng8@gmail.com>2024-08-22 16:09:10 -0700
commitfc1edaf4c18f529b4a61b328c772c07162bc831c (patch)
tree6c06ff09d72c957b3c9dc4447e81fd3f67b7ddc2 /apps/files/src
parent3b185b1156e684ffbc84815d03b0bb29865b9c65 (diff)
downloadnextcloud-server-fc1edaf4c18f529b4a61b328c772c07162bc831c.tar.gz
nextcloud-server-fc1edaf4c18f529b4a61b328c772c07162bc831c.zip
refactor(files): Consolidate node registration
Signed-off-by: Christopher Ng <chrng8@gmail.com>
Diffstat (limited to 'apps/files/src')
-rw-r--r--apps/files/src/services/FolderTree.ts21
-rw-r--r--apps/files/src/views/folderTree.ts46
2 files changed, 15 insertions, 52 deletions
diff --git a/apps/files/src/services/FolderTree.ts b/apps/files/src/services/FolderTree.ts
index 2422b2bb3b9..8b156182f69 100644
--- a/apps/files/src/services/FolderTree.ts
+++ b/apps/files/src/services/FolderTree.ts
@@ -6,10 +6,7 @@
import type { ContentsWithRoot } from '@nextcloud/files'
import { CancelablePromise } from 'cancelable-promise'
-import {
- davRemoteURL,
- Folder,
-} from '@nextcloud/files'
+import { davRemoteURL } from '@nextcloud/files'
import axios from '@nextcloud/axios'
import { generateOcsUrl } from '@nextcloud/router'
import { getCurrentUser } from '@nextcloud/auth'
@@ -27,6 +24,7 @@ type Tree = Array<{
export interface TreeNode {
source: string,
+ encodedSource: string,
path: string,
fileid: number,
basename: string,
@@ -40,8 +38,10 @@ export const sourceRoot = `${davRemoteURL}/files/${getCurrentUser()?.uid}`
const getTreeNodes = (tree: Tree, currentPath: string = '/', nodes: TreeNode[] = []): TreeNode[] => {
for (const { id, basename, displayName, children } of tree) {
const path = joinPaths(currentPath, basename)
+ const source = `${sourceRoot}${path}`
const node: TreeNode = {
- source: `${sourceRoot}${path}`,
+ source,
+ encodedSource: encodeSource(source),
path,
fileid: id,
basename,
@@ -79,14 +79,3 @@ export const getSourceParent = (source: string): string => {
}
return encodeSource(parent)
}
-
-export const getFolderTreeViewId = (folder: Folder): string => {
- return folder.encodedSource
-}
-
-export const getFolderTreeParentId = (folder: Folder): string => {
- if (folder.dirname === '/') {
- return folderTreeId
- }
- return dirname(folder.encodedSource)
-}
diff --git a/apps/files/src/views/folderTree.ts b/apps/files/src/views/folderTree.ts
index 00b6da35aa6..06d8a916cb6 100644
--- a/apps/files/src/views/folderTree.ts
+++ b/apps/files/src/views/folderTree.ts
@@ -16,12 +16,9 @@ import FolderSvg from '@mdi/svg/svg/folder.svg?raw'
import FolderMultipleSvg from '@mdi/svg/svg/folder-multiple.svg?raw'
import {
- encodeSource,
folderTreeId,
getContents,
getFolderTreeNodes,
- getFolderTreeParentId,
- getFolderTreeViewId,
getSourceParent,
sourceRoot,
} from '../services/FolderTree.ts'
@@ -39,7 +36,7 @@ const registerQueue = new PQueue({ concurrency: 5, intervalCap: 5, interval: 200
const registerTreeChildren = async (path: string = '/') => {
await queue.add(async () => {
const nodes = await getFolderTreeNodes(path)
- const promises = nodes.map(node => registerQueue.add(() => registerTreeNodeView(node)))
+ const promises = nodes.map(node => registerQueue.add(() => registerNodeView(node)))
await Promise.allSettled(promises)
})
}
@@ -64,8 +61,8 @@ const getLoadChildViews = (node: TreeNode | Folder) => {
}
}
-const registerTreeNodeView = (node: TreeNode) => {
- const registeredView = Navigation.views.find(view => view.id === encodeSource(node.source))
+const registerNodeView = (node: TreeNode | Folder) => {
+ const registeredView = Navigation.views.find(view => view.id === node.encodedSource)
if (registeredView) {
Navigation.remove(registeredView.id)
}
@@ -73,10 +70,11 @@ const registerTreeNodeView = (node: TreeNode) => {
return
}
Navigation.register(new View({
- id: encodeSource(node.source),
+ id: node.encodedSource,
parent: getSourceParent(node.source),
- name: node.displayName ?? node.basename,
+ // @ts-expect-error Casing differences
+ name: node.displayName ?? node.displayname ?? node.basename,
icon: FolderSvg,
order: 0, // TODO Allow undefined order for natural sort
@@ -92,32 +90,8 @@ const registerTreeNodeView = (node: TreeNode) => {
}))
}
-const registerFolderView = (folder: Folder) => {
- if (!showHiddenFiles && folder.basename.startsWith('.')) {
- return
- }
- Navigation.register(new View({
- id: getFolderTreeViewId(folder),
- parent: getFolderTreeParentId(folder),
-
- name: folder.displayname,
-
- icon: FolderSvg,
- order: 0, // TODO Allow undefined order for natural sort
-
- getContents,
- loadChildViews: getLoadChildViews(folder),
-
- params: {
- view: folderTreeId,
- fileid: String(folder.fileid),
- dir: folder.path,
- },
- }))
-}
-
const removeFolderView = (folder: Folder) => {
- const viewId = getFolderTreeViewId(folder)
+ const viewId = folder.encodedSource
Navigation.remove(viewId)
}
@@ -129,7 +103,7 @@ const onCreateNode = (node: Node) => {
if (!(node instanceof Folder)) {
return
}
- registerFolderView(node)
+ registerNodeView(node)
}
const onDeleteNode = (node: Node) => {
@@ -144,7 +118,7 @@ const onMoveNode = ({ node, oldSource }) => {
return
}
removeFolderViewSource(oldSource)
- registerFolderView(node)
+ registerNodeView(node)
const newPath = node.source.replace(sourceRoot, '')
const oldPath = oldSource.replace(sourceRoot, '')
@@ -159,7 +133,7 @@ const onMoveNode = ({ node, oldSource }) => {
})
for (const view of childViews) {
// @ts-expect-error FIXME Allow setting parent
- view.parent = getFolderTreeParentId(node)
+ view.parent = getSourceParent(node.source)
// @ts-expect-error dir param is defined
view.params.dir = view.params.dir.replace(oldPath, newPath)
}