Skip to content

Commit

Permalink
refactor(files): Consolidate node registration
Browse files Browse the repository at this point in the history
Signed-off-by: Christopher Ng <chrng8@gmail.com>
  • Loading branch information
Pytal authored and backportbot[bot] committed Aug 22, 2024
1 parent 2adacb0 commit 8f23b17
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 52 deletions.
21 changes: 5 additions & 16 deletions apps/files/src/services/FolderTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -27,6 +24,7 @@ type Tree = Array<{

export interface TreeNode {
source: string,
encodedSource: string,
path: string,
fileid: number,
basename: string,
Expand All @@ -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,
Expand Down Expand Up @@ -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)
}
46 changes: 10 additions & 36 deletions apps/files/src/views/folderTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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)
})
}
Expand All @@ -64,19 +61,20 @@ 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)
}
if (!showHiddenFiles && node.basename.startsWith('.')) {
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
Expand All @@ -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)
}

Expand All @@ -129,7 +103,7 @@ const onCreateNode = (node: Node) => {
if (!(node instanceof Folder)) {
return
}
registerFolderView(node)
registerNodeView(node)
}

const onDeleteNode = (node: Node) => {
Expand All @@ -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, '')
Expand All @@ -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)
}
Expand Down

0 comments on commit 8f23b17

Please sign in to comment.