Skip to content
Snippets Groups Projects
Commit 540ddb36 authored by danieldeng2's avatar danieldeng2
Browse files

Refactor bottom and top bar

parent d3a1fbdd
No related branches found
No related tags found
No related merge requests found
Showing
with 133 additions and 59 deletions
import React from "react";
import Button from "react-bootstrap/Button";
import {
IconDefinition
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { NavLink } from "react-router-dom";
export interface BottomBarItemProps {
page: {
name: string;
path: string;
icon: IconDefinition;
};
}
const BottomBarItem: React.FC<BottomBarItemProps> = ({ page }: BottomBarItemProps) => {
return (
<Button
activeClassName="active"
as={NavLink}
to={page.path}
id={"bottom-" + page.name}
key={page.name}
>
<div className="button-holder">
<FontAwesomeIcon icon={page.icon} size="lg" />
</div>
</Button>
);
};
export default BottomBarItem;
import React from "react";
import Nav from "react-bootstrap/Nav";
import { NavLink } from "react-router-dom";
export interface NavBarItemProps {
page: {
name: string;
path: string;
};
}
const NavBarTabItem: React.FC<NavBarItemProps> = ({
page,
}: NavBarItemProps) => {
return (
<Nav.Item key={page.name}>
<Nav.Link
as={NavLink}
activeClassName="active"
to={page.path}
className="page-button"
>
{page.name}
</Nav.Link>
</Nav.Item>
);
};
export default NavBarTabItem;
import React from "react";
import Navbar from "react-bootstrap/Navbar";
import logo from "images/logo.svg";
import { Link } from "react-router-dom";
const NavBarBrand: React.FC = () => {
return (
<Navbar.Brand className="brand-container">
<img
src={logo}
width="30"
height="30"
className="d-inline-block align-center brand-image"
alt="React Bootstrap logo"
onClick={(e) => {
// TODO: change to using react states
e.preventDefault();
const wrapper = document.querySelector("#wrapper") || document.createElement("div");
if (wrapper.classList.contains("toggled")) {
wrapper.classList.remove("toggled");
} else {
wrapper.classList.add("toggled");
}
}}
/>{" "}
<Link to="/" style={{ textDecoration: "none" }}>
Scientia
</Link>
</Navbar.Brand>
);
};
export default NavBarBrand;
import React from "react";
import Navbar from "react-bootstrap/Navbar";
import Nav from "react-bootstrap/Nav";
import NavBarTabItem from "components/atoms/NavBarTabItem";
export interface NavBarTabGroupProps {
pages: {
name: string;
path: string;
}[];
}
const NavBarTabGroup: React.FC<NavBarTabGroupProps> = ({
pages,
}: NavBarTabGroupProps) => {
return (
<Navbar className="page-button-group m-auto" id="responsive-navbar-nav">
<Nav variant="pills">
{pages.map((page) => (
<NavBarTabItem page={page} />
))}
</Nav>
</Navbar>
);
};
export default NavBarTabGroup;
import React from "react"; import React from "react";
import Navbar from "react-bootstrap/Navbar"; import Navbar from "react-bootstrap/Navbar";
import Button from "react-bootstrap/Button";
import ButtonGroup from "react-bootstrap/ButtonGroup"; import ButtonGroup from "react-bootstrap/ButtonGroup";
import { import {
IconDefinition IconDefinition
} from "@fortawesome/free-solid-svg-icons"; } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import BottomBarItem from "components/atoms/BottomBarItem"
import { NavLink } from "react-router-dom";
export interface BottomBarProps { export interface BottomBarProps {
pages: { pages: {
...@@ -17,24 +15,11 @@ export interface BottomBarProps { ...@@ -17,24 +15,11 @@ export interface BottomBarProps {
} }
const BottomBar: React.FC<BottomBarProps> = ({ pages }: BottomBarProps) => { const BottomBar: React.FC<BottomBarProps> = ({ pages }: BottomBarProps) => {
const BottomBarItems = pages.map(({ name, path, icon }) => (
<Button
activeClassName="active"
as={NavLink}
to={path}
id={"bottom-" + name}
key={name}
>
<div className="button-holder">
<FontAwesomeIcon icon={icon} size="lg" />
</div>
</Button>
));
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">
{BottomBarItems} {pages.map((page => <BottomBarItem page={page}/>))}
</ButtonGroup> </ButtonGroup>
</Navbar> </Navbar>
); );
......
import React from "react"; import React from "react";
import Container from "react-bootstrap/Container"; import Container from "react-bootstrap/Container";
import Navbar from "react-bootstrap/Navbar"; import Navbar from "react-bootstrap/Navbar";
import Nav from "react-bootstrap/Nav";
import logo from "images/logo.svg";
import userPic from "images/user.png"; import userPic from "images/user.png";
import { Link, NavLink } from "react-router-dom"; import NavBarTabGroup from "components/molecules/NavBarTabGroup";
import NavBarBrand from "components/molecules/NavBarBrand";
export interface TopBarProps { export interface TopBarProps {
pages: { pages: {
...@@ -14,48 +13,14 @@ export interface TopBarProps { ...@@ -14,48 +13,14 @@ export interface TopBarProps {
} }
const TopBar: React.FC<TopBarProps> = ({ pages }: TopBarProps) => { const TopBar: React.FC<TopBarProps> = ({ pages }: TopBarProps) => {
const NavItems = pages.map(({ name, path }) => (
<Nav.Item key={name}>
<Nav.Link
as={NavLink}
activeClassName="active"
to={path}
className="page-button"
>
{name}
</Nav.Link>
</Nav.Item>
));
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>
<Navbar.Brand className="brand-container">
<img
src={logo}
width="30"
height="30"
className="d-inline-block align-center brand-image"
alt="React Bootstrap logo"
onClick={(e) => {
// TODO: change to using react states
e.preventDefault();
const wrapper = document.querySelector("#wrapper") || document.createElement("div");
if (wrapper.classList.contains("toggled")) {
wrapper.classList.remove("toggled");
} else {
wrapper.classList.add("toggled");
}
}}
/>{" "}
<Link to="/" style={{ textDecoration: "none" }}>
Scientia
</Link>
</Navbar.Brand>
<Navbar className="page-button-group m-auto" id="responsive-navbar-nav"> <NavBarBrand/>
<Nav variant="pills">{NavItems}</Nav>
</Navbar> <NavBarTabGroup pages={pages}/>
<img <img
src={userPic} src={userPic}
......
...@@ -3,8 +3,8 @@ import React from "react"; ...@@ -3,8 +3,8 @@ import React from "react";
import Jumbotron from "react-bootstrap/Jumbotron"; import Jumbotron from "react-bootstrap/Jumbotron";
import Container from "react-bootstrap/Container"; import Container from "react-bootstrap/Container";
import ButtonsShowcase from "components/molecules/Buttons"; import ButtonsShowcase from "components/templates/ExampleButtons";
import ToastsShowcase from "components/molecules/Toasts"; import ToastsShowcase from "components/templates/ExampleToasts";
export interface ExamplePageProps { export interface ExamplePageProps {
name: string; name: string;
......
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