NavBar.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import React, { useContext } from 'react';
  2. import Select from 'components/common/Select/Select';
  3. import Logo from 'components/common/Logo/Logo';
  4. import Version from 'components/Version/Version';
  5. import GitIcon from 'components/common/Icons/GitIcon';
  6. import DiscordIcon from 'components/common/Icons/DiscordIcon';
  7. import AutoIcon from 'components/common/Icons/AutoIcon';
  8. import SunIcon from 'components/common/Icons/SunIcon';
  9. import MoonIcon from 'components/common/Icons/MoonIcon';
  10. import { ThemeModeContext } from 'components/contexts/ThemeModeContext';
  11. import UserInfo from './UserInfo/UserInfo';
  12. import * as S from './NavBar.styled';
  13. interface Props {
  14. onBurgerClick: () => void;
  15. }
  16. export type ThemeDropDownValue = 'auto_theme' | 'light_theme' | 'dark_theme';
  17. const options = [
  18. {
  19. label: (
  20. <>
  21. <AutoIcon />
  22. <div>Auto theme</div>
  23. </>
  24. ),
  25. value: 'auto_theme',
  26. },
  27. {
  28. label: (
  29. <>
  30. <SunIcon />
  31. <div>Light theme</div>
  32. </>
  33. ),
  34. value: 'light_theme',
  35. },
  36. {
  37. label: (
  38. <>
  39. <MoonIcon />
  40. <div>Dark theme</div>
  41. </>
  42. ),
  43. value: 'dark_theme',
  44. },
  45. ];
  46. const NavBar: React.FC<Props> = ({ onBurgerClick }) => {
  47. const { themeMode, setThemeMode } = useContext(ThemeModeContext);
  48. return (
  49. <S.Navbar role="navigation" aria-label="Page Header">
  50. <S.NavbarBrand>
  51. <S.NavbarBrand>
  52. <S.NavbarBurger
  53. onClick={onBurgerClick}
  54. onKeyDown={onBurgerClick}
  55. role="button"
  56. tabIndex={0}
  57. aria-label="burger"
  58. >
  59. <S.Span role="separator" />
  60. <S.Span role="separator" />
  61. <S.Span role="separator" />
  62. </S.NavbarBurger>
  63. <S.Hyperlink to="/">
  64. <Logo />
  65. UI for Apache Kafka
  66. </S.Hyperlink>
  67. <S.NavbarItem>
  68. <Version />
  69. </S.NavbarItem>
  70. </S.NavbarBrand>
  71. </S.NavbarBrand>
  72. <S.NavbarSocial>
  73. <Select
  74. options={options}
  75. value={themeMode}
  76. onChange={setThemeMode}
  77. isThemeMode
  78. />
  79. <S.SocialLink
  80. href="https://github.com/provectus/kafka-ui"
  81. target="_blank"
  82. >
  83. <GitIcon />
  84. </S.SocialLink>
  85. <S.SocialLink
  86. href="https://discord.com/invite/4DWzD7pGE5"
  87. target="_blank"
  88. >
  89. <DiscordIcon />
  90. </S.SocialLink>
  91. <UserInfo />
  92. </S.NavbarSocial>
  93. </S.Navbar>
  94. );
  95. };
  96. export default NavBar;