import { graphql, useStaticQuery } from "gatsby"
import React, { FC, HTMLAttributes, memo } from "react"
import "react-perfect-scrollbar/dist/css/styles.css"
import { IAllResourcesQuery, IFileOrFolder, IFolder } from "../../types"
import { getPath, humanize } from "../../utils"
import * as SC from "./styles"
import useBuildTree from "./useBuildTree"
const ALL_RESOURCES = graphql`
query {
allFile(filter: { sourceInstanceName: { eq: "resources" } }) {
edges {
node {
relativePath
relativeDirectory
childMarkdownRemark {
frontmatter {
authors
title
date
}
}
}
}
}
}
`
function plantTree(item: IFileOrFolder, index?: number) {
if (item.type === "file") {
// remove the first elements, treat as hardcoded
const [, , , ...cleanedUpPath] = item.path.split("/")
const path = getPath(item)
return (
{cleanedUpPath.map(node => (
// TODO: use helper to format path
{humanize(node)}
))}
)
}
return
}
const Language = memo(({ item }: { item: IFolder; index: number }) => {
return (
{humanize(item.title)}
{item.children.map(node => plantTree(node))}
)
})
interface IResourcesList extends HTMLAttributes {
relativeDirectory?: string
}
export const ResourcesList: FC = props => {
const resources = useStaticQuery(ALL_RESOURCES)
const filteredResources = {
...resources,
allFile: {
...resources.allFile,
edges: resources.allFile.edges.filter(({ node }) => {
if (!props.relativeDirectory) {
return true
}
const [language] = node.relativeDirectory.split("/")
return props.relativeDirectory === language
}),
},
}
const tree = useBuildTree(filteredResources)
const sortedTree = tree.sort((a, b) => a.title.localeCompare(b.title))
return (
{sortedTree.map((node, index) => plantTree(node, index))}
)
}