import React, { useState } from "react" import Tree from "react-treeview" import { useStaticQuery, graphql } from "gatsby" import useBuildTree from "./useBuildTree" import useSidebar from "./../../hooks/useSidebar" import banner from "../../images/tph-banner.png" import * as SC from "./styles" export interface IFile { title: string type: "file" path: string } export interface IFolder { title: string type: "folder" path: string children: IFileOrFolder[] } export type IFileOrFolder = IFile | IFolder export interface IFileQuery { node: { relativePath: string childMarkdownRemark: { frontmatter: { author: string date: string } } } } export interface IAllResourcesQuery { allFile: { edges: IFileQuery[] } } const ALL_RESOURCES = graphql` query { allFile(filter: { sourceInstanceName: { eq: "resources" } }) { edges { node { relativePath childMarkdownRemark { frontmatter { authors title date } } } } } } ` function plantTree(item: IFileOrFolder, index?: number, firstLevel?: boolean) { if (item.type === "file") { return ( {item.title} ) } if (firstLevel && index !== undefined) { return } return } function Folder({ item }: { item: IFolder }) { const [collapsed, setCollapse] = useState(true) function toggleCollapse() { setCollapse(prevState => !prevState) } return ( {item.title}} > {item.children.map(node => plantTree(node))} ) } function FirstLevelFolder({ item, index }: { item: IFolder; index: number }) { const { current, setCurrent } = useSidebar() const collapsed = current !== index return ( setCurrent(index)} > {item.title} } > {item.children.map(node => plantTree(node))} ) } export function ResourcesSidebar() { const resources = useStaticQuery(ALL_RESOURCES) const tree = useBuildTree(resources) return ( {tree.map((node, index) => plantTree(node, index, true))} ) }