aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/Header/BottomBar.tsx39
-rw-r--r--src/components/Header/Header.tsx75
-rw-r--r--src/components/Header/MobileHeader.tsx38
-rw-r--r--src/containers/Page/Page.tsx2
4 files changed, 120 insertions, 34 deletions
diff --git a/src/components/Header/BottomBar.tsx b/src/components/Header/BottomBar.tsx
new file mode 100644
index 0000000..57efb3e
--- /dev/null
+++ b/src/components/Header/BottomBar.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { AppBar, Toolbar } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
+
+interface PropTypes {
+ profile: JSX.Element;
+ feed: JSX.Element;
+ notifications: JSX.Element;
+}
+
+const useStyles = makeStyles(theme => ({
+ root: {
+ top: 'auto',
+ bottom: 0
+ },
+ toolbar: {
+ display: 'flex',
+ justifyContent: 'space-around'
+ }
+}));
+
+
+const BottomBar: React.FC<PropTypes> = React.memo(props => {
+ const classes = useStyles();
+ const { profile, feed, notifications } = props;
+
+ return (
+ <AppBar position="fixed" className={classes.root}>
+ <Toolbar className={classes.toolbar}>
+ {notifications}
+ {feed}
+ {profile}
+ </Toolbar>
+ </AppBar>
+ );
+});
+
+export default BottomBar;
+
diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx
index c3a678c..b314d79 100644
--- a/src/components/Header/Header.tsx
+++ b/src/components/Header/Header.tsx
@@ -8,20 +8,22 @@ import {
Avatar,
useMediaQuery
} from '@material-ui/core';
+import {
+ AccountCircle,
+ Notifications,
+ Home,
+ Menu,
+ Search,
+} from '@material-ui/icons';
import { makeStyles, useTheme } from '@material-ui/core/styles';
-import AccountCircle from '@material-ui/icons/AccountCircle';
-import NotificationsIcon from '@material-ui/icons/Notifications';
-import HomeIcon from '@material-ui/icons/Home';
import { useAuth } from '../../hooks/useAuth';
import SearchBar from './SearchBar';
+import MobileHeader from './MobileHeader';
+import BottomBar from './BottomBar';
const useStyles = makeStyles(theme => ({
- mobile: {
- top: 'auto',
- bottom: 0
- },
toolbar: {
display: 'flex',
justifyContent: 'space-around'
@@ -41,7 +43,6 @@ const useStyles = makeStyles(theme => ({
}
}));
-
const Header: React.FC = React.memo(() => {
const classes = useStyles();
const { user } = useAuth();
@@ -66,19 +67,37 @@ const Header: React.FC = React.memo(() => {
history.push('/notifications');
};
- const FeedButton = (
+ const feed = (
<IconButton onClick={handleFeed}>
- <HomeIcon />
+ <Home />
+ </IconButton>
+ );
+
+ const notifications = (
+ <IconButton onClick={handleNotifications}>
+ <Notifications />
+ </IconButton>
+ );
+
+ const menu = (
+ <IconButton>
+ <Menu />
</IconButton>
);
- const NotificationsButton = (
+ const search = (
<IconButton onClick={handleNotifications}>
- <NotificationsIcon />
+ <Search />
</IconButton>
);
- const ProfileButton = (
+ const logo = (
+ <Typography variant="h5" className={classes.logo} onClick={handleHome}>
+ Which
+ </Typography>
+ );
+
+ const profile= (
<IconButton onClick={handleProfile}>
{
user?.avatarUrl
@@ -91,33 +110,23 @@ const Header: React.FC = React.memo(() => {
const BrowserVersion = (
<AppBar position="fixed">
<Toolbar className={`${classes.toolbar} ${classes.browserToolbar}`}>
- <Typography variant="h5" className={classes.logo} onClick={handleHome}>
- Which
- </Typography>
+ {logo}
<SearchBar />
<div>
- {FeedButton}
- {NotificationsButton}
- {ProfileButton}
+ {feed}
+ {notifications}
+ {profile}
</div>
</Toolbar>
</AppBar>
);
- const MobileVersion = (
- <AppBar position="fixed" className={classes.mobile}>
- <Toolbar className={classes.toolbar}>
- <IconButton onClick={handleHome}>
- <Typography className={`${classes.logo} ${classes.round}`}>W</Typography>
- </IconButton>
- {FeedButton}
- {NotificationsButton}
- {ProfileButton}
- </Toolbar>
- </AppBar>
- );
-
- return isMobile ? MobileVersion : BrowserVersion;
+ return isMobile ? (
+ <>
+ <MobileHeader logo={logo} menu={menu} search={search} />
+ <BottomBar feed={feed} profile={profile} notifications={notifications} />
+ </>
+ ) : BrowserVersion;
});
export default Header;
diff --git a/src/components/Header/MobileHeader.tsx b/src/components/Header/MobileHeader.tsx
new file mode 100644
index 0000000..fbbd37a
--- /dev/null
+++ b/src/components/Header/MobileHeader.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { AppBar, Toolbar, useScrollTrigger, Slide } from '@material-ui/core';
+import { makeStyles } from '@material-ui/core/styles';
+
+interface PropTypes {
+ menu: JSX.Element;
+ logo: JSX.Element;
+ search: JSX.Element;
+}
+
+const useStyles = makeStyles(theme => ({
+ root: {
+ display: 'flex',
+ justifyContent: 'space-between',
+ },
+}));
+
+
+const MobileHeader: React.FC<PropTypes> = React.memo(props => {
+ const classes = useStyles();
+ const trigger = useScrollTrigger();
+ const { menu, search, logo } = props;
+
+ return (
+ <Slide appear={false} direction="down" in={!trigger}>
+ <AppBar position="fixed">
+ <Toolbar className={classes.root}>
+ {menu}
+ {logo}
+ {search}
+ </Toolbar>
+ </AppBar>
+ </Slide>
+ );
+});
+
+export default MobileHeader;
+
diff --git a/src/containers/Page/Page.tsx b/src/containers/Page/Page.tsx
index 643e6de..f6a0aa5 100644
--- a/src/containers/Page/Page.tsx
+++ b/src/containers/Page/Page.tsx
@@ -16,7 +16,7 @@ const Notifications = React.lazy(() => import('../Notifications/Notifications'))
const useStyles = makeStyles(theme => ({
root: {
[theme.breakpoints.down('sm')]: {
- margin: theme.spacing(2, 0, 12, 0)
+ margin: theme.spacing(15, 0, 12, 0)
},
[theme.breakpoints.up('md')]: {
margin: theme.spacing(15, 5, 8, 5)