AppBar.jsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { h, Fragment } from 'preact';
  2. import BaseAppBar from './components/AppBar';
  3. import LinkedLogo from './components/LinkedLogo';
  4. import Menu, { MenuItem, MenuSeparator } from './components/Menu';
  5. import AutoAwesomeIcon from './icons/AutoAwesome';
  6. import LightModeIcon from './icons/LightMode';
  7. import DarkModeIcon from './icons/DarkMode';
  8. import { useDarkMode } from './context';
  9. import { useCallback, useRef, useState } from 'preact/hooks';
  10. export default function AppBar() {
  11. const [showMoreMenu, setShowMoreMenu] = useState(false);
  12. const { setDarkMode } = useDarkMode();
  13. const handleSelectDarkMode = useCallback(
  14. (value, label) => {
  15. setDarkMode(value);
  16. setShowMoreMenu(false);
  17. },
  18. [setDarkMode, setShowMoreMenu]
  19. );
  20. const moreRef = useRef(null);
  21. const handleShowMenu = useCallback(() => {
  22. setShowMoreMenu(true);
  23. }, [setShowMoreMenu]);
  24. const handleDismissMoreMenu = useCallback(() => {
  25. setShowMoreMenu(false);
  26. }, [setShowMoreMenu]);
  27. return (
  28. <Fragment>
  29. <BaseAppBar title={LinkedLogo} overflowRef={moreRef} onOverflowClick={handleShowMenu} />
  30. {showMoreMenu ? (
  31. <Menu onDismiss={handleDismissMoreMenu} relativeTo={moreRef}>
  32. <MenuItem icon={AutoAwesomeIcon} label="Auto dark mode" value="media" onSelect={handleSelectDarkMode} />
  33. <MenuSeparator />
  34. <MenuItem icon={LightModeIcon} label="Light" value="light" onSelect={handleSelectDarkMode} />
  35. <MenuItem icon={DarkModeIcon} label="Dark" value="dark" onSelect={handleSelectDarkMode} />
  36. </Menu>
  37. ) : null}
  38. </Fragment>
  39. );
  40. }