feat(explorer): implement map fn argument

Add a function for mapping over all FileNodes as an option for `Explorer`
This commit is contained in:
Ben Schlegel 2023-09-16 19:35:27 +02:00
parent 31d16fbd2c
commit 3d8c470c0d
No known key found for this signature in database
GPG Key ID: 8BDB8891C1575E22
2 changed files with 16 additions and 0 deletions

View File

@ -40,6 +40,11 @@ export default ((userOpts?: Partial<Options>) => {
fileTree.filter(opts.filterFn) fileTree.filter(opts.filterFn)
} }
// If provided, apply map function to fileTree
if (opts.mapFn) {
fileTree.map(opts.mapFn)
}
// Get all folders of tree. Initialize with collapsed state // Get all folders of tree. Initialize with collapsed state
const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed") const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed")

View File

@ -9,6 +9,7 @@ export interface Options {
useSavedState: boolean useSavedState: boolean
sortFn: (a: FileNode, b: FileNode) => number sortFn: (a: FileNode, b: FileNode) => number
filterFn?: (node: FileNode) => boolean filterFn?: (node: FileNode) => boolean
mapFn?: (node: FileNode) => void
} }
type DataWrapper = { type DataWrapper = {
@ -86,6 +87,16 @@ export class FileNode {
this.children = filteredNodes this.children = filteredNodes
} }
/**
* Filter FileNode tree. Behaves similar to `Array.prototype.map()`, but modifies tree in place
* @param mapFn function to filter tree with
*/
map(mapFn: (node: FileNode) => void) {
mapFn(this)
this.children.forEach((child) => child.map(mapFn))
}
/** /**
* Get folder representation with state of tree. * Get folder representation with state of tree.
* Intended to only be called on root node before changes to the tree are made * Intended to only be called on root node before changes to the tree are made