Skip to content
Snippets Groups Projects
Commit 9070f472 authored by danieldeng2's avatar danieldeng2
Browse files

Refactor app.tsx and apply prittier

parent eb7e04a9
No related branches found
No related tags found
No related merge requests found
.DS_Store .DS_Store
.vscode/*
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies # dependencies
......
{
"liveServer.settings.port": 5501
}
\ No newline at end of file
import React from "react"; import React from "react";
import "./App.scss"; import "./App.scss";
import ExamplePage from "./templates/ExamplePage";
import TopBar from "./organisms/TopBar"; import TopBar from "./organisms/TopBar";
import BottomBar from "./organisms/BottomBar"; import BottomBar from "./organisms/BottomBar";
import { Redirect, Switch, Route } from "react-router-dom";
import { import {
faBookOpen, faBookOpen,
faEllipsisH, faEllipsisH,
faCalendarWeek, faCalendarWeek,
faChalkboardTeacher, faChalkboardTeacher,
} from "@fortawesome/free-solid-svg-icons"; } from "@fortawesome/free-solid-svg-icons";
import LeftBar from "./organisms/LeftBar"; import StandardView from "./pages/StandardView";
type MyState = { type MyState = {
isToggled: boolean; isToggled: boolean;
}; };
class App extends React.Component<{}, MyState> { class App extends React.Component<{}, MyState> {
constructor(props: {}) { constructor(props: {}) {
super(props); super(props);
this.state = {isToggled: false}; this.state = { isToggled: false };
} }
handleIconClick(e: React.MouseEvent<HTMLImageElement>) { handleIconClick(e: React.MouseEvent<HTMLImageElement>) {
e.preventDefault(); e.preventDefault();
this.setState(state => ({ this.setState((state) => ({
isToggled: !state.isToggled isToggled: !state.isToggled,
})); }));
} }
render() { render() {
...@@ -38,23 +36,17 @@ class App extends React.Component<{}, MyState> { ...@@ -38,23 +36,17 @@ class App extends React.Component<{}, MyState> {
{ name: "Other", path: "/other", icon: faEllipsisH }, { name: "Other", path: "/other", icon: faEllipsisH },
]; ];
const topBarRoutes = horizontalBarPages.map(({ name, path }) => (
<Route path={path} key={name}>
<ExamplePage name={name} />
</Route>
));
return ( return (
<> <>
<TopBar pages={horizontalBarPages} onIconClick={e => this.handleIconClick(e)}/> <TopBar
pages={horizontalBarPages}
<div id="wrapper" className={this.state.isToggled ? "toggled" : ""}> onIconClick={(e) => this.handleIconClick(e)}
<LeftBar /> />
<Switch>
<Route exact path="/" render={() => <Redirect to="/courses" />} /> <StandardView
{topBarRoutes} pages={horizontalBarPages}
</Switch> isToggled={this.state.isToggled}
</div> />
<BottomBar pages={horizontalBarPages} /> <BottomBar pages={horizontalBarPages} />
</> </>
......
import React from "react"; import React from "react";
import Button from "react-bootstrap/Button"; import Button from "react-bootstrap/Button";
import { import { IconDefinition } from "@fortawesome/free-solid-svg-icons";
IconDefinition
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { NavLink } from "react-router-dom"; import { NavLink } from "react-router-dom";
...@@ -14,15 +12,15 @@ export interface BottomBarItemProps { ...@@ -14,15 +12,15 @@ export interface BottomBarItemProps {
}; };
} }
const BottomBarItem: React.FC<BottomBarItemProps> = ({ page }: BottomBarItemProps) => { const BottomBarItem: React.FC<BottomBarItemProps> = ({
page,
}: BottomBarItemProps) => {
return ( return (
<Button <Button
activeClassName="active" activeClassName="active"
as={NavLink} as={NavLink}
to={page.path} to={page.path}
id={"bottom-" + page.name} id={"bottom-" + page.name}
key={page.name}
> >
<div className="button-holder"> <div className="button-holder">
<FontAwesomeIcon icon={page.icon} size="lg" /> <FontAwesomeIcon icon={page.icon} size="lg" />
......
...@@ -13,7 +13,7 @@ const NavBarTabItem: React.FC<NavBarItemProps> = ({ ...@@ -13,7 +13,7 @@ const NavBarTabItem: React.FC<NavBarItemProps> = ({
page, page,
}: NavBarItemProps) => { }: NavBarItemProps) => {
return ( return (
<Nav.Item key={page.name}> <Nav.Item>
<Nav.Link <Nav.Link
as={NavLink} as={NavLink}
activeClassName="active" activeClassName="active"
......
...@@ -17,7 +17,7 @@ const NavBarTabGroup: React.FC<NavBarTabGroupProps> = ({ ...@@ -17,7 +17,7 @@ const NavBarTabGroup: React.FC<NavBarTabGroupProps> = ({
<Navbar className="page-button-group m-auto" id="responsive-navbar-nav"> <Navbar className="page-button-group m-auto" id="responsive-navbar-nav">
<Nav variant="pills"> <Nav variant="pills">
{pages.map((page) => ( {pages.map((page) => (
<NavBarTabItem page={page} /> <NavBarTabItem page={page} key={page.name} />
))} ))}
</Nav> </Nav>
</Navbar> </Navbar>
......
import React from "react"; import React from "react";
import Navbar from "react-bootstrap/Navbar"; import Navbar from "react-bootstrap/Navbar";
import ButtonGroup from "react-bootstrap/ButtonGroup"; import ButtonGroup from "react-bootstrap/ButtonGroup";
import { import { IconDefinition } from "@fortawesome/free-solid-svg-icons";
IconDefinition import BottomBarItem from "components/atoms/BottomBarItem";
} from "@fortawesome/free-solid-svg-icons";
import BottomBarItem from "components/atoms/BottomBarItem"
export interface BottomBarProps { export interface BottomBarProps {
pages: { pages: {
...@@ -15,11 +13,12 @@ export interface BottomBarProps { ...@@ -15,11 +13,12 @@ export interface BottomBarProps {
} }
const BottomBar: React.FC<BottomBarProps> = ({ pages }: BottomBarProps) => { const BottomBar: React.FC<BottomBarProps> = ({ pages }: BottomBarProps) => {
return ( return (
<Navbar className="bottom-bar footer"> <Navbar className="bottom-bar footer">
<ButtonGroup aria-label="Basic example" className="bottom-bar-buttons"> <ButtonGroup aria-label="Basic example" className="bottom-bar-buttons">
{pages.map((page => <BottomBarItem page={page}/>))} {pages.map((page) => (
<BottomBarItem page={page} key={page.name} />
))}
</ButtonGroup> </ButtonGroup>
</Navbar> </Navbar>
); );
......
...@@ -9,19 +9,17 @@ export interface TopBarProps { ...@@ -9,19 +9,17 @@ export interface TopBarProps {
pages: { pages: {
name: string; name: string;
path: string; path: string;
}[]; }[];
onIconClick: (event: React.MouseEvent<HTMLImageElement>) => void; onIconClick: (event: React.MouseEvent<HTMLImageElement>) => void;
} }
const TopBar: React.FC<TopBarProps> = ({ pages, onIconClick}: TopBarProps) => { const TopBar: React.FC<TopBarProps> = ({ pages, onIconClick }: TopBarProps) => {
return ( return (
<Navbar className="top-bar" sticky="top" expand="lg" variant="light"> <Navbar className="top-bar" sticky="top" expand="lg" variant="light">
<Container fluid> <Container fluid>
<NavBarBrand onClick={onIconClick} />
<NavBarBrand onClick={onIconClick}/> <NavBarTabGroup pages={pages} />
<NavBarTabGroup pages={pages}/>
<img <img
src={userPic} src={userPic}
......
import React from "react";
import { Route, Switch, Redirect } from "react-router-dom";
import ExamplePage from "components/templates/ExamplePage";
import LeftBar from "components/organisms/LeftBar";
interface StandardViewProps {
pages: {
name: string;
path: string;
}[];
isToggled: boolean;
}
const StandardView: React.FC<StandardViewProps> = ({
pages,
isToggled,
}: StandardViewProps) => {
const topBarRoutes = pages.map(({ name, path }) => (
<Route path={path} key={name}>
<ExamplePage name={name} />
</Route>
));
return (
<div id="wrapper" className={isToggled ? "toggled" : ""}>
<LeftBar />
<Switch>
<Route exact path="/" render={() => <Redirect to="/courses" />} />
{topBarRoutes}
</Switch>
</div>
);
};
export default StandardView;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment