mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-10-30 14:49:14 +00:00
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import styled from '@emotion/styled';
|
|
import queryString from 'query-string';
|
|
|
|
import ListLink from 'sentry/components/links/listLink';
|
|
import ScrollableTabs from 'sentry/components/replays/scrollableTabs';
|
|
import {t} from 'sentry/locale';
|
|
import {space} from 'sentry/styles/space';
|
|
import {useLocation} from 'sentry/utils/useLocation';
|
|
import useUrlParams from 'sentry/utils/useUrlParams';
|
|
|
|
type Props = {
|
|
className?: string;
|
|
underlined?: boolean;
|
|
};
|
|
|
|
const TABS = {
|
|
details: t('Details'),
|
|
request: t('Request'),
|
|
response: t('Response'),
|
|
};
|
|
|
|
export type TabKey = keyof typeof TABS;
|
|
|
|
function NetworkDetailsTabs({className, underlined = true}: Props) {
|
|
const {pathname, query} = useLocation();
|
|
const {getParamValue, setParamValue} = useUrlParams('n_detail_tab', 'details');
|
|
const activeTab = getParamValue();
|
|
|
|
return (
|
|
<ScrollableTabs className={className} underlined={underlined}>
|
|
{Object.entries(TABS).map(([tab, label]) => (
|
|
<ListLink
|
|
key={tab}
|
|
isActive={() => tab === activeTab}
|
|
to={`${pathname}?${queryString.stringify({...query, t_main: tab})}`}
|
|
onClick={e => {
|
|
e.preventDefault();
|
|
setParamValue(tab);
|
|
}}
|
|
>
|
|
{label}
|
|
</ListLink>
|
|
))}
|
|
</ScrollableTabs>
|
|
);
|
|
}
|
|
|
|
const StyledNetworkDetailsTabs = styled(NetworkDetailsTabs)`
|
|
/*
|
|
Use padding instead of margin so all the <li> will cover the <SplitDivider>
|
|
without taking 100% width.
|
|
*/
|
|
|
|
& > li {
|
|
margin-right: 0;
|
|
padding-right: ${space(3)};
|
|
background: ${p => p.theme.surface400};
|
|
z-index: ${p => p.theme.zIndex.initial};
|
|
}
|
|
& > li:first-child {
|
|
padding-left: ${space(2)};
|
|
}
|
|
& > li:last-child {
|
|
padding-right: ${space(1)};
|
|
}
|
|
|
|
& > li > a {
|
|
padding-top: ${space(1)};
|
|
padding-bottom: ${space(0.5)};
|
|
height: 100%;
|
|
border-bottom: ${space(0.5)} solid transparent;
|
|
}
|
|
`;
|
|
|
|
export default StyledNetworkDetailsTabs;
|