diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx new file mode 100644 index 0000000..529c652 --- /dev/null +++ b/src/components/Navbar/index.tsx @@ -0,0 +1,62 @@ +import { useReactiveVar } from '@apollo/client'; +import { useHistory } from 'react-router'; +import { roleVar, tokenVar, userVar } from '../../graphql/state'; +import { Wrapper } from './styles'; +import { Avatar, Link, Menu, Text } from '..'; +import { Settings, Logout, Logo } from '../../assets'; + +type NavbarProps = { + withSidebar: boolean; +}; + +const Navbar = ({ withSidebar }: NavbarProps) => { + const user = useReactiveVar(userVar); + const role = useReactiveVar(roleVar); + const history = useHistory(); + + return ( + + + + +
+
+ + + {user?.firstName} {user?.lastName} + +
+ , label: 'Settings', action: () => {} }, + { + icon: , + label: 'Logout', + action: () => { + tokenVar(undefined); + history.push('/login'); + }, + avoid: true, + }, + ] + : [ + { + icon: , + label: 'Logout', + action: () => { + tokenVar(undefined); + history.push('/login'); + }, + avoid: true, + }, + ] + } + /> + + ); +}; + +export default Navbar; diff --git a/src/components/Navbar/styles.ts b/src/components/Navbar/styles.ts new file mode 100644 index 0000000..eca9545 --- /dev/null +++ b/src/components/Navbar/styles.ts @@ -0,0 +1,39 @@ +import styled from 'styled-components'; + +type WrapperProps = { + color?: 'client' | 'productOwner' | 'developer' | 'admin'; + withSidebar: boolean; +}; + +export const Wrapper = styled.div` + background: ${({ theme }) => theme.colors.white.main}; + box-shadow: 0px 1px 10px rgba(0, 0, 0, 0.25); + display: grid; + grid-template-columns: auto 1fr auto; + align-items: center; + padding: ${({ withSidebar }) => + withSidebar ? '15px 45px 15px 120px' : '15px 45px'}; + user-select: none; + position: sticky; + top: 0; + + svg { + display: flex; + align-items: center; + } + + .logo-icon { + fill: ${({ theme, color }) => + color ? theme.colors[color].main : theme.colors.client.main}; + } + + .user { + display: flex; + flex-direction: row; + align-items: center; + + p { + margin-left: 5px; + } + } +`;