diff options
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/Header/BottomBar.tsx | 39 | ||||
| -rw-r--r-- | src/components/Header/Header.tsx | 75 | ||||
| -rw-r--r-- | src/components/Header/MobileHeader.tsx | 38 | 
3 files changed, 119 insertions, 33 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; + | 
