From 036a33f70bcabc17469956740847796a5f13b9ab Mon Sep 17 00:00:00 2001
From: Ben Schlegel <ben5.schlegel@gmail.com>
Date: Sat, 16 Sep 2023 15:47:44 +0000
Subject: [PATCH] fix: use correct import for `QuartzPluginData`

---
 quartz/components/ExplorerNode.tsx |   38 ++++++++++++++++++++++++--------------
 1 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/quartz/components/ExplorerNode.tsx b/quartz/components/ExplorerNode.tsx
index 6718ec9..d962425 100644
--- a/quartz/components/ExplorerNode.tsx
+++ b/quartz/components/ExplorerNode.tsx
@@ -1,5 +1,5 @@
 // @ts-ignore
-import { QuartzPluginData } from "vfile"
+import { QuartzPluginData } from "../plugins/vfile"
 import { resolveRelative } from "../util/path"
 
 export interface Options {
@@ -7,6 +7,7 @@
   folderDefaultState: "collapsed" | "open"
   folderClickBehavior: "collapse" | "link"
   useSavedState: boolean
+  sortFn: (a: FileNode, b: FileNode) => number
 }
 
 type DataWrapper = {
@@ -65,6 +66,21 @@
     this.children.forEach((e) => e.print(depth + 1))
   }
 
+  filter(filterFn: (node: FileNode) => boolean) {
+    const filteredNodes: FileNode[] = []
+
+    const traverse = (node: FileNode) => {
+      if (filterFn(node)) {
+        filteredNodes.push(node)
+      }
+      node.children.forEach(traverse)
+    }
+
+    traverse(this)
+
+    this.children = filteredNodes
+  }
+
   /**
    * Get folder representation with state of tree.
    * Intended to only be called on root node before changes to the tree are made
@@ -90,19 +106,13 @@
   }
 
   // Sort order: folders first, then files. Sort folders and files alphabetically
-  sort() {
-    this.children = this.children.sort((a, b) => {
-      if ((!a.file && !b.file) || (a.file && b.file)) {
-        return a.name.localeCompare(b.name)
-      }
-      if (a.file && !b.file) {
-        return 1
-      } else {
-        return -1
-      }
-    })
-
-    this.children.forEach((e) => e.sort())
+  /**
+   * Sorts tree according to sort/compare function
+   * @param sortFn compare function used for `.sort()`, also used recursively for children
+   */
+  sort(sortFn: (a: FileNode, b: FileNode) => number) {
+    this.children = this.children.sort(sortFn)
+    this.children.forEach((e) => e.sort(sortFn))
   }
 }
 

--
Gitblit v1.10.0