|
@@ -1,7 +1,5 @@
|
|
|
import type {ReactNode} from 'react';
|
|
|
-import {css} from '@emotion/react';
|
|
|
|
|
|
-import InteractionStateLayer from 'sentry/components/interactionStateLayer';
|
|
|
import {
|
|
|
IconClose,
|
|
|
IconFlag,
|
|
@@ -14,11 +12,11 @@ import {
|
|
|
import useConfiguration from '../hooks/useConfiguration';
|
|
|
import usePlacementCss from '../hooks/usePlacementCss';
|
|
|
import useToolbarRoute from '../hooks/useToolbarRoute';
|
|
|
-import {navigationButtonCss, navigationCss} from '../styles/navigation';
|
|
|
-import {resetButtonCss, resetDialogCss} from '../styles/reset';
|
|
|
-import {buttonCss} from '../styles/typography';
|
|
|
+import {navigationCss} from '../styles/navigation';
|
|
|
+import {resetDialogCss} from '../styles/reset';
|
|
|
|
|
|
import AlertCountBadge from './alerts/alertCountBadge';
|
|
|
+import IconButton from './navigation/iconButton';
|
|
|
|
|
|
export default function Navigation({
|
|
|
setIsDisabled,
|
|
@@ -28,23 +26,15 @@ export default function Navigation({
|
|
|
const {trackAnalytics} = useConfiguration();
|
|
|
const placement = usePlacementCss();
|
|
|
|
|
|
+ const {state: route} = useToolbarRoute();
|
|
|
+ const isRouteActive = !!route.activePanel;
|
|
|
+
|
|
|
return (
|
|
|
<dialog
|
|
|
- css={[
|
|
|
- resetDialogCss,
|
|
|
- navigationCss,
|
|
|
- hideButtonContainerCss,
|
|
|
- placement.navigation.css,
|
|
|
- ]}
|
|
|
+ css={[resetDialogCss, navigationCss, placement.navigation.css]}
|
|
|
+ data-has-active={isRouteActive}
|
|
|
>
|
|
|
- <NavButton panelName="issues" label="Issues" icon={<IconIssues />} />
|
|
|
- <NavButton panelName="feedback" label="User Feedback" icon={<IconMegaphone />} />
|
|
|
- <NavButton panelName="alerts" label="Active Alerts" icon={<IconSiren />}>
|
|
|
- <AlertCountBadge />
|
|
|
- </NavButton>
|
|
|
- <NavButton panelName="featureFlags" label="Feature Flags" icon={<IconFlag />} />
|
|
|
- <NavButton panelName="releases" label="Releases" icon={<IconReleases />} />
|
|
|
- <HideButton
|
|
|
+ <IconButton
|
|
|
onClick={() => {
|
|
|
setIsDisabled(true);
|
|
|
trackAnalytics?.({
|
|
@@ -52,7 +42,19 @@ export default function Navigation({
|
|
|
eventName: `devtoolbar: Hide devtoolbar`,
|
|
|
});
|
|
|
}}
|
|
|
+ title="Hide for this session"
|
|
|
+ icon={<IconClose />}
|
|
|
/>
|
|
|
+
|
|
|
+ <hr style={{margin: 0, width: '100%'}} />
|
|
|
+
|
|
|
+ <NavButton panelName="issues" label="Issues" icon={<IconIssues />} />
|
|
|
+ <NavButton panelName="feedback" label="User Feedback" icon={<IconMegaphone />} />
|
|
|
+ <NavButton panelName="alerts" label="Active Alerts" icon={<IconSiren />}>
|
|
|
+ <AlertCountBadge />
|
|
|
+ </NavButton>
|
|
|
+ <NavButton panelName="featureFlags" label="Feature Flags" icon={<IconFlag />} />
|
|
|
+ <NavButton panelName="releases" label="Releases" icon={<IconReleases />} />
|
|
|
</dialog>
|
|
|
);
|
|
|
}
|
|
@@ -74,10 +76,9 @@ function NavButton({
|
|
|
const isActive = state.activePanel === panelName;
|
|
|
|
|
|
return (
|
|
|
- <button
|
|
|
- aria-label={label}
|
|
|
- css={[resetButtonCss, navigationButtonCss]}
|
|
|
+ <IconButton
|
|
|
data-active-route={isActive}
|
|
|
+ icon={icon}
|
|
|
onClick={() => {
|
|
|
setActivePanel(isActive ? null : panelName);
|
|
|
trackAnalytics?.({
|
|
@@ -87,39 +88,7 @@ function NavButton({
|
|
|
}}
|
|
|
title={label}
|
|
|
>
|
|
|
- <InteractionStateLayer />
|
|
|
- {icon}
|
|
|
{children}
|
|
|
- </button>
|
|
|
- );
|
|
|
-}
|
|
|
-
|
|
|
-const hideButtonContainerCss = css`
|
|
|
- :hover button {
|
|
|
- visibility: visible;
|
|
|
- }
|
|
|
-`;
|
|
|
-const hideButtonCss = css`
|
|
|
- border-radius: 50%;
|
|
|
- color: var(--gray300);
|
|
|
- height: 1.6rem;
|
|
|
- left: -10px;
|
|
|
- position: absolute;
|
|
|
- top: -10px;
|
|
|
- visibility: hidden;
|
|
|
- width: 1.6rem;
|
|
|
- z-index: 1;
|
|
|
-`;
|
|
|
-
|
|
|
-function HideButton({onClick}: {onClick: () => void}) {
|
|
|
- return (
|
|
|
- <button
|
|
|
- aria-label="Hide for this session"
|
|
|
- css={[resetButtonCss, buttonCss, hideButtonCss]}
|
|
|
- onClick={onClick}
|
|
|
- title="Hide for this session"
|
|
|
- >
|
|
|
- <IconClose isCircled />
|
|
|
- </button>
|
|
|
+ </IconButton>
|
|
|
);
|
|
|
}
|