aboutsummaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorlonkaars <l.leblansch@gmail.com>2021-03-26 23:06:24 +0100
committerlonkaars <l.leblansch@gmail.com>2021-03-26 23:06:24 +0100
commitee5d547f1728d87331cb3e8def517b93793627dc (patch)
treeaad1b214cfbdc037e3d093c48c400f033e29264f /components
parentedba91f524455dcbb108da56d893290013816087 (diff)
more chapter hierarchy but better
Diffstat (limited to 'components')
-rw-r--r--components/chapters.tsx31
-rw-r--r--components/navbar.tsx19
2 files changed, 35 insertions, 15 deletions
diff --git a/components/chapters.tsx b/components/chapters.tsx
index 73c1630..e90f91c 100644
--- a/components/chapters.tsx
+++ b/components/chapters.tsx
@@ -1,3 +1,5 @@
+import { ReactNode, useState } from 'react';
+
import { NavbarItem } from '../components/navbar';
import RemoveRoundedIcon from '@material-ui/icons/RemoveRounded';
@@ -10,16 +12,37 @@ interface chapter {
children?: Array<chapter>;
}
+function NavbarChapter(props: {
+ level: number;
+ chapter: chapter;
+ children?: ReactNode;
+}) {
+ var [ collapsed, setCollapsed ] = useState(true);
+
+ var icon = props.chapter.children?.length > 0 ?
+ collapsed ? <KeyboardArrowDownRoundedIcon/> : <KeyboardArrowRightRoundedIcon/> :
+ <RemoveRoundedIcon/>
+
+ var classes: Array<string> = [];
+ classes.push("chapter")
+ classes.push(`indentLevel${props.level}`)
+
+ return <NavbarItem icon={icon} classList={classes} title={props.chapter.name} style={{
+ marginLeft: 12 * props.level
+ }}>
+ {props.children}
+ </NavbarItem>
+}
+
class Chapter {
constructor(public chapters: Array<chapter>, public level: number) {}
render() {
- console.log(this)
- return <div>
+ return <div className="chapterChildren">
{
this.chapters?.map(chapter => {
- return <NavbarItem icon={<RemoveRoundedIcon/>} chapterIndent={this.level} title={chapter.name}>
+ return <NavbarChapter level={this.level} chapter={chapter}>
{ new Chapter(chapter.children, this.level + 1).render() }
- </NavbarItem>
+ </NavbarChapter>
})
}
</div>
diff --git a/components/navbar.tsx b/components/navbar.tsx
index 9286120..318d673 100644
--- a/components/navbar.tsx
+++ b/components/navbar.tsx
@@ -1,4 +1,4 @@
-import { ReactNode } from 'react';
+import { ReactNode, CSSProperties } from 'react';
import HomeRoundedIcon from '@material-ui/icons/HomeRounded';
import SearchRoundedIcon from '@material-ui/icons/SearchRounded';
@@ -8,18 +8,15 @@ export function NavbarItem(props: {
title: string;
href?: string;
active?: boolean;
- chapterIndent?: number;
children?: ReactNode;
+ classList?: Array<string>;
+ style?: CSSProperties;
}) {
- return <a href={props.href} className={
- "navbarItem"
- + (props.active ? " active" : "")
- + (typeof props.chapterIndent !== "undefined" ? " chapter" : "")
- + " indentLevel" + (props.chapterIndent || 0)
- }>
- <div className="inner" style={{
- marginLeft: 12 * props.chapterIndent || 0
- }}>
+ var classes = props.classList || [];
+ classes.push("navbarItem");
+ props.active && classes.push("active");
+ return <a href={props.href} className={classes.join(" ")}>
+ <div className="inner" style={props.style}>
{props.icon}
<span>{props.title}</span>
</div>