import { CaretDownFilled, CaretUpFilled, LogoutOutlined, } from '@ant-design/icons'; import { Avatar, Divider, Dropdown, Layout, Menu, Space, Typography, } from 'antd'; import remove from 'api/browser/localstorage/remove'; import { LOCALSTORAGE } from 'constants/localStorage'; import ROUTES from 'constants/routes'; import history from 'lib/history'; import setTheme, { AppMode } from 'lib/theme/setTheme'; import React, { useCallback, useState } from 'react'; import { connect, useDispatch, useSelector } from 'react-redux'; import { NavLink } from 'react-router-dom'; import { bindActionCreators, Dispatch } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; import { ToggleDarkMode } from 'store/actions'; import { AppState } from 'store/reducers'; import AppActions from 'types/actions'; import { LOGGED_IN, UPDATE_USER, UPDATE_USER_ACCESS_REFRESH_ACCESS_TOKEN, UPDATE_USER_ORG_ROLE, } from 'types/actions/app'; import AppReducer from 'types/reducer/app'; import CurrentOrganization from './CurrentOrganization'; import SignedInAS from './SignedInAs'; import { Container, LogoutContainer, MenuContainer, ToggleButton, } from './styles'; function HeaderContainer({ toggleDarkMode }: Props): JSX.Element { const { isDarkMode, user, currentVersion } = useSelector( (state) => state.app, ); const [isUserDropDownOpen, setIsUserDropDownOpen] = useState(); const dispatch = useDispatch>(); const onToggleThemeHandler = useCallback(() => { const preMode: AppMode = isDarkMode ? 'lightMode' : 'darkMode'; setTheme(preMode); const id: AppMode = preMode; const { head } = document; const link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = !isDarkMode ? '/css/antd.dark.min.css' : '/css/antd.min.css'; link.media = 'all'; link.id = id; head.appendChild(link); link.onload = (): void => { toggleDarkMode(); const prevNode = document.getElementById('appMode'); prevNode?.remove(); }; }, [toggleDarkMode, isDarkMode]); const onArrowClickHandler: VoidFunction = () => { setIsUserDropDownOpen((state) => !state); }; const onClickLogoutHandler = (): void => { remove(LOCALSTORAGE.AUTH_TOKEN); remove(LOCALSTORAGE.IS_LOGGED_IN); remove(LOCALSTORAGE.REFRESH_AUTH_TOKEN); dispatch({ type: LOGGED_IN, payload: { isLoggedIn: false, }, }); dispatch({ type: UPDATE_USER_ORG_ROLE, payload: { org: null, role: null, }, }); dispatch({ type: UPDATE_USER, payload: { ROLE: 'VIEWER', email: '', name: '', orgId: '', orgName: '', profilePictureURL: '', userId: '', }, }); dispatch({ type: UPDATE_USER_ACCESS_REFRESH_ACCESS_TOKEN, payload: { accessJwt: '', refreshJwt: '', }, }); history.push(ROUTES.LOGIN); }; const menu = (
{ if (e.key === 'Enter' || e.key === 'Space') { onClickLogoutHandler(); } }} role="button" onClick={onClickLogoutHandler} > Logout
); return ( SigNoz SigNoz {user?.name[0]} {!isUserDropDownOpen ? ( ) : ( )} ); } interface DispatchProps { toggleDarkMode: () => void; } const mapDispatchToProps = ( dispatch: ThunkDispatch, ): DispatchProps => ({ toggleDarkMode: bindActionCreators(ToggleDarkMode, dispatch), }); type Props = DispatchProps; export default connect(null, mapDispatchToProps)(HeaderContainer);