40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "../types"
|
|
|
|
import style from "../styles/listPage.scss"
|
|
import { PageList } from "../PageList"
|
|
import { Root } from "hast"
|
|
import { htmlToJsx } from "../../util/jsx"
|
|
import { ComponentChildren } from "preact"
|
|
import { concatenateResources } from "../../util/resources"
|
|
import { trieFromAllFiles } from "../../util/ctx"
|
|
|
|
export default (() => {
|
|
const FolderContent: QuartzComponent = (props: QuartzComponentProps) => {
|
|
const { tree, fileData, allFiles } = props
|
|
|
|
const trie = (props.ctx.trie ??= trieFromAllFiles(allFiles))
|
|
const folder = trie.findNode(fileData.slug!.split("/"))
|
|
if (!folder) {
|
|
return null
|
|
}
|
|
|
|
const cssClasses: string[] = fileData.frontmatter?.cssclasses ?? []
|
|
const classes = cssClasses.join(" ")
|
|
|
|
const content = (
|
|
(tree as Root).children.length === 0
|
|
? fileData.description
|
|
: htmlToJsx(fileData.filePath!, tree)
|
|
) as ComponentChildren
|
|
|
|
return (
|
|
<div class="popover-hint">
|
|
<article class={classes}>{content}</article>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
FolderContent.css = concatenateResources(style, PageList.css)
|
|
return FolderContent
|
|
}) satisfies QuartzComponentConstructor
|