Files
xtreamium/frontend/src/components/header.component.tsx
Fergal Moran f9ab321dc1 Theming added
2022-04-06 12:45:36 +01:00

158 lines
5.5 KiB
TypeScript

import React from "react";
import {
Avatar,
Badge,
Input,
Dropdown,
DropdownItem,
WindmillContext,
} from "@windmill/react-ui";
import { SidebarContext } from "../context";
import {
BellIcon,
MenuIcon,
MoonIcon,
OutlineCogIcon,
OutlineLogoutIcon,
OutlinePersonIcon,
SearchIcon,
SunIcon,
} from "../icons";
const Header = () => {
const { mode, toggleMode } = React.useContext(WindmillContext);
const { toggleSidebar } = React.useContext(SidebarContext);
const [isNotificationsMenuOpen, setIsNotificationsMenuOpen] =
React.useState(false);
const [isProfileMenuOpen, setIsProfileMenuOpen] = React.useState(false);
const handleNotificationsClick = () => {
setIsNotificationsMenuOpen(!isNotificationsMenuOpen);
};
const handleProfileClick = () => {
setIsProfileMenuOpen(!isProfileMenuOpen);
};
return (
<header className="z-40 py-4 bg-white shadow-bottom dark:bg-gray-800">
<div className="container flex items-center justify-between h-full px-6 mx-auto text-purple-600 dark:text-purple-300">
{/* <!-- Mobile hamburger --> */}
<button
className="p-1 mr-5 -ml-1 rounded-md lg:hidden focus:outline-none focus:shadow-outline-purple"
onClick={toggleSidebar}
aria-label="Menu"
>
<MenuIcon className="w-6 h-6" aria-hidden="true" />
</button>
{/* <!-- Search input --> */}
<div className="flex justify-center flex-1 lg:mr-32">
<div className="relative w-full max-w-xl mr-6 focus-within:text-purple-500">
<div className="absolute inset-y-0 flex items-center pl-2">
<SearchIcon className="w-4 h-4" aria-hidden="true" />
</div>
<Input
css=""
className="pl-8 text-gray-700"
placeholder="Search for projects"
aria-label="Search"
/>
</div>
</div>
<ul className="flex items-center flex-shrink-0 space-x-6">
{/* <!-- Theme toggler --> */}
<li className="flex">
<button
className="rounded-md focus:outline-none focus:shadow-outline-purple"
onClick={toggleMode}
aria-label="Toggle color mode"
>
{mode === "dark" ? (
<SunIcon className="w-5 h-5" aria-hidden="true" />
) : (
<MoonIcon className="w-5 h-5" aria-hidden="true" />
)}
</button>
</li>
{/* <!-- Notifications menu --> */}
<li className="relative">
<button
className="relative align-middle rounded-md focus:outline-none focus:shadow-outline-purple"
onClick={handleNotificationsClick}
aria-label="Notifications"
aria-haspopup="true"
>
<BellIcon className="w-5 h-5" aria-hidden="true" />
{/* <!-- Notification badge --> */}
<span
aria-hidden="true"
className="absolute top-0 right-0 inline-block w-3 h-3 transform translate-x-1 -translate-y-1 bg-red-600 border-2 border-white rounded-full dark:border-gray-800"
></span>
</button>
<Dropdown
align="right"
isOpen={isNotificationsMenuOpen}
onClose={() => setIsNotificationsMenuOpen(false)}
>
<DropdownItem tag="a" href="#" className="justify-between">
<span>Messages</span>
<Badge type="danger">13</Badge>
</DropdownItem>
<DropdownItem tag="a" href="#" className="justify-between">
<span>Sales</span>
<Badge type="danger">2</Badge>
</DropdownItem>
<DropdownItem onClick={() => alert("Alerts!")}>
<span>Alerts</span>
</DropdownItem>
</Dropdown>
</li>
{/* <!-- Profile menu --> */}
<li className="relative">
<button
className="rounded-full focus:shadow-outline-purple focus:outline-none"
onClick={handleProfileClick}
aria-label="Account"
aria-haspopup="true"
>
<Avatar
className="align-middle"
src="https://images.unsplash.com/photo-1502378735452-bc7d86632805?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=aa3a807e1bbdfd4364d1f449eaa96d82"
alt=""
aria-hidden="true"
/>
</button>
<Dropdown
align="right"
isOpen={isProfileMenuOpen}
onClose={() => setIsProfileMenuOpen(false)}
>
<DropdownItem tag="a" href="#">
<OutlinePersonIcon
className="w-4 h-4 mr-3"
aria-hidden="true"
/>
<span>Profile</span>
</DropdownItem>
<DropdownItem tag="a" href="#">
<OutlineCogIcon className="w-4 h-4 mr-3" aria-hidden="true" />
<span>Settings</span>
</DropdownItem>
<DropdownItem onClick={() => alert("Log out!")}>
<OutlineLogoutIcon
className="w-4 h-4 mr-3"
aria-hidden="true"
/>
<span>Log out</span>
</DropdownItem>
</Dropdown>
</li>
</ul>
</div>
</header>
);
};
export default Header;