feat(explorer): integrate filter option

This commit is contained in:
Ben Schlegel 2023-09-16 19:18:59 +02:00
parent 9ad51c46d0
commit 4ba45f9577
2 changed files with 10 additions and 0 deletions

View File

@ -35,6 +35,11 @@ export default ((userOpts?: Partial<Options>) => {
// Sort tree (folders first, then files (alphabetic)) // Sort tree (folders first, then files (alphabetic))
fileTree.sort(opts.sortFn!) fileTree.sort(opts.sortFn!)
// If provided, apply filter function to fileTree
if (opts.filterFn) {
fileTree.filter(opts.filterFn)
}
// 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

@ -8,6 +8,7 @@ export interface Options {
folderClickBehavior: "collapse" | "link" folderClickBehavior: "collapse" | "link"
useSavedState: boolean useSavedState: boolean
sortFn: (a: FileNode, b: FileNode) => number sortFn: (a: FileNode, b: FileNode) => number
filterFn?: (node: FileNode) => boolean
} }
type DataWrapper = { type DataWrapper = {
@ -66,6 +67,10 @@ export class FileNode {
this.children.forEach((e) => e.print(depth + 1)) this.children.forEach((e) => e.print(depth + 1))
} }
/**
* Filter FileNode tree. Behaves similar to `Array.prototype.filter()`, but modifies tree in place
* @param filterFn function to filter tree with
*/
filter(filterFn: (node: FileNode) => boolean) { filter(filterFn: (node: FileNode) => boolean) {
const filteredNodes: FileNode[] = [] const filteredNodes: FileNode[] = []