Skip to content
Snippets Groups Projects
BottomNavigation.tsx 2.29 KiB
Newer Older
import IconButton from "../ui/IconButton";
import UserIcon from "../common/user/UserIcon";
insert's avatar
insert committed
import styled, { css } from "styled-components";
import { useSelf } from "../../context/revoltjs/hooks";
import { useHistory, useLocation } from "react-router";
insert's avatar
insert committed
import ConditionalLink from "../../lib/ConditionalLink";
import { Message, Group } from "@styled-icons/boxicons-regular";

const NavigationBase = styled.div`
    z-index: 10;
    height: 50px;
    display: flex;
    background: var(--secondary-background);
`;

const Button = styled.a<{ active: boolean }>`
    flex: 1;

    > a, > div, > a > div {
        width: 100%;
        height: 100%;
    }

    ${ props => props.active && css`
        background: var(--hover);
    ` }
`;

export default function BottomNavigation() {
    const user = useSelf();
    const history = useHistory();
    const path = useLocation().pathname;

    const friendsActive = path.startsWith("/friends");
    const settingsActive = path.startsWith("/settings");
    const homeActive = !(friendsActive || settingsActive);

    return (
        <NavigationBase>
            <Button active={homeActive}>
                <IconButton
                    onClick={() => {
                        if (!homeActive) {
                            if (settingsActive) {
                                if (history.length > 0) {
                                    history.goBack();
                                } else {
                                    history.push('/');
                                }
                            }
                        }
                    }}>
                    <Message size={26} />
                </IconButton>
            </Button>
            <Button active={friendsActive}>
insert's avatar
insert committed
                <ConditionalLink active={friendsActive} to="/friends">
                    <IconButton>
                        <Group size={26} />
                    </IconButton>
insert's avatar
insert committed
                </ConditionalLink>
            </Button>
            <Button active={settingsActive}>
insert's avatar
insert committed
                <ConditionalLink active={settingsActive} to="/settings">
                    <IconButton>
                        <UserIcon target={user} size={26} status={true} />
                    </IconButton>
insert's avatar
insert committed
                </ConditionalLink>
            </Button>
        </NavigationBase>
    );
}