Files
website/src/components/ResourceBreadcrumb/index.tsx
T
Hayden Young e53ed690df feat(resources): capitalize breadcrumbs + add home
Fixed linting errors

Fix linting errors again
2019-08-19 00:13:59 -04:00

74 lines
1.8 KiB
TypeScript

import React from "react"
import ChevronUp from "../../icons/chevron-up.svg"
import { traversePaths } from "../../utils"
import { IFileOrFolder } from "../ResourcesSidebar/index"
import * as SC from "./styles"
interface IResourceBreadcrumbProps {
relativePath: any
}
function capitalize(str: string): string {
const split = str.split(" ")
const reconstruct = []
for (const substr of split) {
reconstruct.push(`${substr.charAt(0).toUpperCase()}${substr.substring(1)}`)
}
return reconstruct.join(" ")
}
function Link({ item }: { item: IFileOrFolder }) {
return <SC.StyledLink to={item.path}>{capitalize(item.title)}</SC.StyledLink>
}
function flatten([
currNode,
...previousNodes
]: IFileOrFolder[]): IFileOrFolder[] {
if (currNode.type === "file") {
return [...previousNodes, currNode]
}
return flatten([...currNode.children, ...previousNodes, currNode])
}
export function ResourceBreadcrumb({ relativePath }: IResourceBreadcrumbProps) {
const paths = relativePath.split("/")
const breadcrumbItems = flatten([traversePaths(paths)])
return (
<SC.ResourceBreadcrumbWrapper>
<SC.LinkWrapper>
<Link
item={{ path: "/", title: "Home", type: "folder", children: [] }}
/>
<ChevronUp />
</SC.LinkWrapper>
<SC.LinkWrapper>
<Link
item={{
path: "/resources",
title: "Resources",
type: "folder",
children: [],
}}
/>
<ChevronUp />
</SC.LinkWrapper>
{breadcrumbItems.map(item => {
if (item.type === "folder") {
return (
<SC.LinkWrapper>
<Link item={item} />
<ChevronUp />
</SC.LinkWrapper>
)
}
return <SC.CurrentPage>{item.title}</SC.CurrentPage>
})}
</SC.ResourceBreadcrumbWrapper>
)
}