Jacky Zhao
2025-03-12 270a5dc14ac3654c3aac94dfca222bab0d091474
quartz/util/fileTrie.ts
@@ -4,6 +4,7 @@
interface FileTrieData {
  slug: string
  title: string
  filePath: string
}
export class FileTrieNode<T extends FileTrieData = ContentDetails> {
@@ -11,6 +12,10 @@
  children: Array<FileTrieNode<T>>
  private slugSegments: string[]
  // prefer showing the file path segment over the slug segment
  // so that folders that dont have index files can be shown as is
  // without dashes in the slug
  private fileSegmentHint?: string
  private displayNameOverride?: string
  data: T | null
@@ -23,7 +28,10 @@
  }
  get displayName(): string {
    return this.displayNameOverride ?? this.data?.title ?? this.slugSegment ?? ""
    const nonIndexTitle = this.data?.title === "index" ? undefined : this.data?.title
    return (
      this.displayNameOverride ?? nonIndexTitle ?? this.fileSegmentHint ?? this.slugSegment ?? ""
    )
  }
  set displayName(name: string) {
@@ -69,6 +77,9 @@
      // recursive case, we are not at the end of the path
      const child =
        this.children.find((c) => c.slugSegment === segment) ?? this.makeChild(path, undefined)
      const fileParts = file.filePath.split("/")
      child.fileSegmentHint = fileParts.at(-path.length)
      child.insert(path.slice(1), file)
    }
  }