40 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { QuartzComponentConstructor, QuartzComponentProps } from "../types"
 | 
						|
import { Fragment, jsx, jsxs } from 'preact/jsx-runtime'
 | 
						|
import { toJsxRuntime } from "hast-util-to-jsx-runtime"
 | 
						|
import path from "path"
 | 
						|
 | 
						|
import style from '../styles/listPage.scss'
 | 
						|
import { PageList } from "../PageList"
 | 
						|
 | 
						|
function FolderContent(props: QuartzComponentProps) {
 | 
						|
  const { tree, fileData, allFiles } = props
 | 
						|
  const folderSlug = fileData.slug!
 | 
						|
  const allPagesInFolder = allFiles.filter(file => {
 | 
						|
    const fileSlug = file.slug ?? ""
 | 
						|
    const prefixed = fileSlug.startsWith(folderSlug)
 | 
						|
    const folderParts = folderSlug.split(path.posix.sep)
 | 
						|
    const fileParts = fileSlug.split(path.posix.sep)
 | 
						|
    const isDirectChild = fileParts.length === folderParts.length + 1
 | 
						|
    return prefixed && isDirectChild
 | 
						|
  })
 | 
						|
 | 
						|
  const listProps = {
 | 
						|
    ...props,
 | 
						|
    allFiles: allPagesInFolder
 | 
						|
  }
 | 
						|
 | 
						|
  // @ts-ignore
 | 
						|
  const content = toJsxRuntime(tree, { Fragment, jsx, jsxs, elementAttributeNameCase: 'html' })
 | 
						|
  return <div class="popover-hint">
 | 
						|
    <article>{content}</article>
 | 
						|
    <hr/>
 | 
						|
    <p>{allPagesInFolder.length} items under this folder.</p>
 | 
						|
    <div>
 | 
						|
      <PageList {...listProps} /> 
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
}
 | 
						|
 | 
						|
FolderContent.css = style + PageList.css
 | 
						|
export default (() => FolderContent) satisfies QuartzComponentConstructor
 |