Revert "perf: eagerly compute explorer nodes to avoid re-render in memoized value"
This reverts commit 16a9caa555.
			
			
This commit is contained in:
		@@ -7,7 +7,6 @@ import { ExplorerNode, FileNode, Options } from "./ExplorerNode"
 | 
				
			|||||||
import { QuartzPluginData } from "../plugins/vfile"
 | 
					import { QuartzPluginData } from "../plugins/vfile"
 | 
				
			||||||
import { classNames } from "../util/lang"
 | 
					import { classNames } from "../util/lang"
 | 
				
			||||||
import { i18n } from "../i18n"
 | 
					import { i18n } from "../i18n"
 | 
				
			||||||
import { VNode } from "preact"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Options interface defined in `ExplorerNode` to avoid circular dependency
 | 
					// Options interface defined in `ExplorerNode` to avoid circular dependency
 | 
				
			||||||
const defaultOptions = {
 | 
					const defaultOptions = {
 | 
				
			||||||
@@ -45,7 +44,6 @@ export default ((userOpts?: Partial<Options>) => {
 | 
				
			|||||||
  // memoized
 | 
					  // memoized
 | 
				
			||||||
  let fileTree: FileNode
 | 
					  let fileTree: FileNode
 | 
				
			||||||
  let jsonTree: string
 | 
					  let jsonTree: string
 | 
				
			||||||
  let component: VNode
 | 
					 | 
				
			||||||
  let lastBuildId: string = ""
 | 
					  let lastBuildId: string = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function constructFileTree(allFiles: QuartzPluginData[]) {
 | 
					  function constructFileTree(allFiles: QuartzPluginData[]) {
 | 
				
			||||||
@@ -84,46 +82,44 @@ export default ((userOpts?: Partial<Options>) => {
 | 
				
			|||||||
    if (ctx.buildId !== lastBuildId) {
 | 
					    if (ctx.buildId !== lastBuildId) {
 | 
				
			||||||
      lastBuildId = ctx.buildId
 | 
					      lastBuildId = ctx.buildId
 | 
				
			||||||
      constructFileTree(allFiles)
 | 
					      constructFileTree(allFiles)
 | 
				
			||||||
      const tree = ExplorerNode({ node: fileTree, opts, fileData })
 | 
					 | 
				
			||||||
      component = (
 | 
					 | 
				
			||||||
        <div class={classNames(displayClass, "explorer")}>
 | 
					 | 
				
			||||||
          <button
 | 
					 | 
				
			||||||
            type="button"
 | 
					 | 
				
			||||||
            id="explorer"
 | 
					 | 
				
			||||||
            data-behavior={opts.folderClickBehavior}
 | 
					 | 
				
			||||||
            data-collapsed={opts.folderDefaultState}
 | 
					 | 
				
			||||||
            data-savestate={opts.useSavedState}
 | 
					 | 
				
			||||||
            data-tree={jsonTree}
 | 
					 | 
				
			||||||
            aria-controls="explorer-content"
 | 
					 | 
				
			||||||
            aria-expanded={opts.folderDefaultState === "open"}
 | 
					 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
            <h2>{opts.title ?? i18n(cfg.locale).components.explorer.title}</h2>
 | 
					 | 
				
			||||||
            <svg
 | 
					 | 
				
			||||||
              xmlns="http://www.w3.org/2000/svg"
 | 
					 | 
				
			||||||
              width="14"
 | 
					 | 
				
			||||||
              height="14"
 | 
					 | 
				
			||||||
              viewBox="5 8 14 8"
 | 
					 | 
				
			||||||
              fill="none"
 | 
					 | 
				
			||||||
              stroke="currentColor"
 | 
					 | 
				
			||||||
              stroke-width="2"
 | 
					 | 
				
			||||||
              stroke-linecap="round"
 | 
					 | 
				
			||||||
              stroke-linejoin="round"
 | 
					 | 
				
			||||||
              class="fold"
 | 
					 | 
				
			||||||
            >
 | 
					 | 
				
			||||||
              <polyline points="6 9 12 15 18 9"></polyline>
 | 
					 | 
				
			||||||
            </svg>
 | 
					 | 
				
			||||||
          </button>
 | 
					 | 
				
			||||||
          <div id="explorer-content">
 | 
					 | 
				
			||||||
            <ul class="overflow" id="explorer-ul">
 | 
					 | 
				
			||||||
              {tree}
 | 
					 | 
				
			||||||
              <li id="explorer-end" />
 | 
					 | 
				
			||||||
            </ul>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      )
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return component
 | 
					    return (
 | 
				
			||||||
 | 
					      <div class={classNames(displayClass, "explorer")}>
 | 
				
			||||||
 | 
					        <button
 | 
				
			||||||
 | 
					          type="button"
 | 
				
			||||||
 | 
					          id="explorer"
 | 
				
			||||||
 | 
					          data-behavior={opts.folderClickBehavior}
 | 
				
			||||||
 | 
					          data-collapsed={opts.folderDefaultState}
 | 
				
			||||||
 | 
					          data-savestate={opts.useSavedState}
 | 
				
			||||||
 | 
					          data-tree={jsonTree}
 | 
				
			||||||
 | 
					          aria-controls="explorer-content"
 | 
				
			||||||
 | 
					          aria-expanded={opts.folderDefaultState === "open"}
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <h2>{opts.title ?? i18n(cfg.locale).components.explorer.title}</h2>
 | 
				
			||||||
 | 
					          <svg
 | 
				
			||||||
 | 
					            xmlns="http://www.w3.org/2000/svg"
 | 
				
			||||||
 | 
					            width="14"
 | 
				
			||||||
 | 
					            height="14"
 | 
				
			||||||
 | 
					            viewBox="5 8 14 8"
 | 
				
			||||||
 | 
					            fill="none"
 | 
				
			||||||
 | 
					            stroke="currentColor"
 | 
				
			||||||
 | 
					            stroke-width="2"
 | 
				
			||||||
 | 
					            stroke-linecap="round"
 | 
				
			||||||
 | 
					            stroke-linejoin="round"
 | 
				
			||||||
 | 
					            class="fold"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            <polyline points="6 9 12 15 18 9"></polyline>
 | 
				
			||||||
 | 
					          </svg>
 | 
				
			||||||
 | 
					        </button>
 | 
				
			||||||
 | 
					        <div id="explorer-content">
 | 
				
			||||||
 | 
					          <ul class="overflow" id="explorer-ul">
 | 
				
			||||||
 | 
					            <ExplorerNode node={fileTree} opts={opts} fileData={fileData} />
 | 
				
			||||||
 | 
					            <li id="explorer-end" />
 | 
				
			||||||
 | 
					          </ul>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Explorer.css = explorerStyle
 | 
					  Explorer.css = explorerStyle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -224,10 +224,15 @@ export function ExplorerNode({ node, opts, fullPath, fileData }: ExplorerNodePro
 | 
				
			|||||||
              class="content"
 | 
					              class="content"
 | 
				
			||||||
              data-folderul={folderPath}
 | 
					              data-folderul={folderPath}
 | 
				
			||||||
            >
 | 
					            >
 | 
				
			||||||
              {node.children.map((childNode) =>
 | 
					              {node.children.map((childNode, i) => (
 | 
				
			||||||
                // eagerly render children so we can memoize properly
 | 
					                <ExplorerNode
 | 
				
			||||||
                ExplorerNode({ node: childNode, opts, fileData, fullPath: folderPath }),
 | 
					                  node={childNode}
 | 
				
			||||||
              )}
 | 
					                  key={i}
 | 
				
			||||||
 | 
					                  opts={opts}
 | 
				
			||||||
 | 
					                  fullPath={folderPath}
 | 
				
			||||||
 | 
					                  fileData={fileData}
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              ))}
 | 
				
			||||||
            </ul>
 | 
					            </ul>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </li>
 | 
					        </li>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user