mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-27 04:16:05 +00:00
* feat: v5 is in progress * feat: antdv5 is updated * fix: build is fixed * fix: default config is over written by custom one * chore: onchange handler is updated * chore: overflow is hidden in the layout * Update index.tsx * fix: import is fixed * chore: un used import is fixed * fix: dark mode is updated in service map * fix: config dropdown is updated * fix: logs types is updated * fix: copy clipboard notification is updated * chore: layout changes are updated * chore: colors is updated * chore: action width is updated Co-authored-by: Pranay Prateek <pranay@signoz.io> Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
120 lines
3.0 KiB
TypeScript
120 lines
3.0 KiB
TypeScript
import {
|
|
CaretDownFilled,
|
|
CaretUpFilled,
|
|
LogoutOutlined,
|
|
} from '@ant-design/icons';
|
|
import { Divider, Dropdown, Menu, Space, Typography } from 'antd';
|
|
import { Logout } from 'api/utils';
|
|
import ROUTES from 'constants/routes';
|
|
import Config from 'container/ConfigDropdown';
|
|
import { useIsDarkMode, useThemeMode } from 'hooks/useDarkMode';
|
|
import React, { Dispatch, SetStateAction, useCallback, useState } from 'react';
|
|
import { useSelector } from 'react-redux';
|
|
import { NavLink } from 'react-router-dom';
|
|
import { AppState } from 'store/reducers';
|
|
import AppReducer from 'types/reducer/app';
|
|
|
|
import CurrentOrganization from './CurrentOrganization';
|
|
import ManageLicense from './ManageLicense';
|
|
import SignedInAS from './SignedInAs';
|
|
import {
|
|
AvatarWrapper,
|
|
Container,
|
|
Header,
|
|
IconContainer,
|
|
LogoutContainer,
|
|
NavLinkWrapper,
|
|
ToggleButton,
|
|
} from './styles';
|
|
|
|
function HeaderContainer(): JSX.Element {
|
|
const { user, currentVersion } = useSelector<AppState, AppReducer>(
|
|
(state) => state.app,
|
|
);
|
|
const isDarkMode = useIsDarkMode();
|
|
const { toggleTheme } = useThemeMode();
|
|
|
|
const [isUserDropDownOpen, setIsUserDropDownOpen] = useState<boolean>(false);
|
|
|
|
const onToggleHandler = useCallback(
|
|
(functionToExecute: Dispatch<SetStateAction<boolean>>) => (): void => {
|
|
functionToExecute((state) => !state);
|
|
},
|
|
[],
|
|
);
|
|
|
|
const menu = (
|
|
<Menu style={{ padding: '1rem' }}>
|
|
<Menu.ItemGroup>
|
|
<SignedInAS />
|
|
<Divider />
|
|
<CurrentOrganization onToggle={onToggleHandler(setIsUserDropDownOpen)} />
|
|
<Divider />
|
|
<ManageLicense onToggle={onToggleHandler(setIsUserDropDownOpen)} />
|
|
<Divider />
|
|
<LogoutContainer>
|
|
<LogoutOutlined />
|
|
<div
|
|
tabIndex={0}
|
|
onKeyDown={(e): void => {
|
|
if (e.key === 'Enter' || e.key === 'Space') {
|
|
Logout();
|
|
}
|
|
}}
|
|
role="button"
|
|
onClick={Logout}
|
|
>
|
|
<Typography.Link>Logout</Typography.Link>
|
|
</div>
|
|
</LogoutContainer>
|
|
</Menu.ItemGroup>
|
|
</Menu>
|
|
);
|
|
|
|
return (
|
|
<Header>
|
|
<Container>
|
|
<NavLink to={ROUTES.APPLICATION}>
|
|
<NavLinkWrapper>
|
|
<img src={`/signoz.svg?currentVersion=${currentVersion}`} alt="SigNoz" />
|
|
<Typography.Title
|
|
style={{ margin: 0, color: 'rgb(219, 219, 219)' }}
|
|
level={4}
|
|
>
|
|
SigNoz
|
|
</Typography.Title>
|
|
</NavLinkWrapper>
|
|
</NavLink>
|
|
|
|
<Space style={{ height: '100%' }} align="center">
|
|
<Config frontendId="tooltip" />
|
|
|
|
<ToggleButton
|
|
checked={isDarkMode}
|
|
onChange={toggleTheme}
|
|
defaultChecked={isDarkMode}
|
|
checkedChildren="🌜"
|
|
unCheckedChildren="🌞"
|
|
/>
|
|
|
|
<Dropdown
|
|
onVisibleChange={onToggleHandler(setIsUserDropDownOpen)}
|
|
trigger={['click']}
|
|
overlay={menu}
|
|
visible={isUserDropDownOpen}
|
|
>
|
|
<Space>
|
|
<AvatarWrapper shape="circle">{user?.name[0]}</AvatarWrapper>
|
|
<IconContainer>
|
|
{!isUserDropDownOpen ? <CaretDownFilled /> : <CaretUpFilled />}
|
|
</IconContainer>
|
|
</Space>
|
|
</Dropdown>
|
|
</Space>
|
|
</Container>
|
|
</Header>
|
|
);
|
|
}
|
|
|
|
export default HeaderContainer;
|