aboutsummaryrefslogtreecommitdiffstats
path: root/webui/src/components/Header/Header.tsx
blob: 70b8c9ff9f9149155ab7341dbe188e0d8916c6dc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import React from 'react';
import { Link, useLocation } from 'react-router-dom';

import AppBar from '@material-ui/core/AppBar';
import Tab, { TabProps } from '@material-ui/core/Tab';
import Tabs from '@material-ui/core/Tabs';
import Toolbar from '@material-ui/core/Toolbar';
import Tooltip from '@material-ui/core/Tooltip/Tooltip';
import { makeStyles } from '@material-ui/core/styles';

import { LightSwitch } from '../../components/Themer';
import CurrentIdentity from '../CurrentIdentity/CurrentIdentity';

const useStyles = makeStyles((theme) => ({
  offset: {
    ...theme.mixins.toolbar,
  },
  filler: {
    flexGrow: 1,
  },
  appBar: {
    backgroundColor: theme.palette.primary.dark,
    color: theme.palette.primary.contrastText,
  },
  appTitle: {
    ...theme.typography.h6,
    color: theme.palette.primary.contrastText,
    textDecoration: 'none',
    display: 'flex',
    alignItems: 'center',
  },
  lightSwitch: {
    padding: '0 20px',
  },
  logo: {
    height: '42px',
    marginRight: theme.spacing(2),
  },
}));

function a11yProps(index: any) {
  return {
    id: `nav-tab-${index}`,
    'aria-controls': `nav-tabpanel-${index}`,
  };
}

const DisabledTabWithTooltip = (props: TabProps) => {
  /*The span elements around disabled tabs are needed, as the tooltip
   * won't be triggered by disabled elements.
   * See: https://material-ui.com/components/tooltips/#disabled-elements
   * This must be done in a wrapper component, otherwise the TabS component
   * cannot pass it styles down to the Tab component. Resulting in (console)
   * warnings. This wrapper acceps the passed down TabProps and pass it around
   * the span element to the Tab component.
   */
  const msg = `This feature doesn't exist yet. Come help us build it.`;
  console.log(props);
  return (
    <Tooltip title={msg}>
      <span>
        <Tab disabled {...props} />
      </span>
    </Tooltip>
  );
};

function Header() {
  const classes = useStyles();
  const location = useLocation();
  const [selectedTab, setTab] = React.useState(location.pathname);
  console.log(location.pathname);

  const handleTabClick = (
    event: React.ChangeEvent<{}>,
    newTabValue: string
  ) => {
    setTab(newTabValue);
  };

  return (
    <>
      <AppBar position="fixed" className={classes.appBar}>
        <Toolbar>
          <Link to="/" className={classes.appTitle}>
            <img
              src="/logo.svg"
              className={classes.logo}
              alt="git-bug logo"
            />
            git-bug
          </Link>
          <div className={classes.filler} />
          <div className={classes.lightSwitch}>
            <LightSwitch />
          </div>
          <CurrentIdentity />
        </Toolbar>
      </AppBar>
      <div className={classes.offset} />
      <Tabs
        centered
        value={selectedTab}
        onChange={handleTabClick}
        aria-label="nav tabs"
      >
        <DisabledTabWithTooltip
          label="Code"
          value="/code"
          {...a11yProps(1)}
        />
        <Tab label="Bugs" value="/" href="/" {...a11yProps(2)} />
        <DisabledTabWithTooltip
          label="Pull Requests"
          value="/pulls"
          {...a11yProps(3)}
        />
        <DisabledTabWithTooltip
          label="Settings"
          value="/settings"
          {...a11yProps(4)}
        />
      </Tabs>
    </>
  );
}

export default Header;