leftNavViewsHeader.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import styled from '@emotion/styled';
  2. import GlobalEventProcessingAlert from 'sentry/components/globalEventProcessingAlert';
  3. import * as Layout from 'sentry/components/layouts/thirds';
  4. import {usePrefersStackedNav} from 'sentry/components/nav/prefersStackedNav';
  5. import {t} from 'sentry/locale';
  6. import {space} from 'sentry/styles/space';
  7. import useOrganization from 'sentry/utils/useOrganization';
  8. import {useParams} from 'sentry/utils/useParams';
  9. import useProjects from 'sentry/utils/useProjects';
  10. import {useFetchGroupSearchViews} from 'sentry/views/issueList/queries/useFetchGroupSearchViews';
  11. type LeftNavViewsHeaderProps = {
  12. selectedProjectIds: number[];
  13. };
  14. function LeftNavViewsHeader({selectedProjectIds}: LeftNavViewsHeaderProps) {
  15. const {projects} = useProjects();
  16. const organization = useOrganization();
  17. const {viewId} = useParams<{orgId?: string; viewId?: string}>();
  18. const prefersStackedNav = usePrefersStackedNav();
  19. const selectedProjects = projects.filter(({id}) =>
  20. selectedProjectIds.includes(Number(id))
  21. );
  22. const {data: groupSearchViews} = useFetchGroupSearchViews({
  23. orgSlug: organization.slug,
  24. });
  25. const viewTitle = groupSearchViews?.find(v => v.id === viewId)?.name;
  26. return (
  27. <Layout.Header noActionWrap unified={prefersStackedNav}>
  28. <Layout.HeaderContent unified={prefersStackedNav}>
  29. <Layout.Title>{viewTitle ?? t('Issues')}</Layout.Title>
  30. </Layout.HeaderContent>
  31. <Layout.HeaderActions />
  32. <StyledGlobalEventProcessingAlert projects={selectedProjects} />
  33. </Layout.Header>
  34. );
  35. }
  36. export default LeftNavViewsHeader;
  37. const StyledGlobalEventProcessingAlert = styled(GlobalEventProcessingAlert)`
  38. grid-column: 1/-1;
  39. margin-top: ${space(1)};
  40. margin-bottom: ${space(1)};
  41. @media (min-width: ${p => p.theme.breakpoints.medium}) {
  42. margin-top: ${space(2)};
  43. margin-bottom: 0;
  44. }
  45. `;