Ben Schlegel
2023-09-16 f7029012dfb73ce04405bfe44e4e4d984818bf5f
quartz/components/ExplorerNode.tsx
@@ -2,6 +2,8 @@
import { QuartzPluginData } from "../plugins/vfile"
import { resolveRelative } from "../util/path"
type OrderEntries = "sort" | "filter" | "map"
export interface Options {
  title: string
  folderDefaultState: "collapsed" | "open"
@@ -9,6 +11,8 @@
  useSavedState: boolean
  sortFn: (a: FileNode, b: FileNode) => number
  filterFn?: (node: FileNode) => boolean
  mapFn?: (node: FileNode) => void
  order?: OrderEntries[]
}
type DataWrapper = {
@@ -31,7 +35,7 @@
  constructor(name: string, file?: QuartzPluginData, depth?: number) {
    this.children = []
    this.name = name
    this.file = file ?? null
    this.file = file ? structuredClone(file) : null
    this.depth = depth ?? 0
  }
@@ -87,6 +91,16 @@
  }
  /**
   * 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.
   * Intended to only be called on root node before changes to the tree are made
   * @param collapsed default state of folders (collapsed by default or not)