import {useContext, useEffect, useMemo, useState} from 'react'; import styled from '@emotion/styled'; import type {Node} from '@react-types/shared'; import {addSuccessMessage} from 'sentry/actionCreators/indicator'; import {Button} from 'sentry/components/button'; import ButtonBar from 'sentry/components/buttonBar'; import { DraggableTabList, TEMPORARY_TAB_KEY, } from 'sentry/components/draggableTabs/draggableTabList'; import type {DraggableTabListItemProps} from 'sentry/components/draggableTabs/item'; import GlobalEventProcessingAlert from 'sentry/components/globalEventProcessingAlert'; import * as Layout from 'sentry/components/layouts/thirds'; import {normalizeDateTimeParams} from 'sentry/components/organizations/pageFilters/parse'; import {PageHeadingQuestionTooltip} from 'sentry/components/pageHeadingQuestionTooltip'; import {IconMegaphone, IconPause, IconPlay} from 'sentry/icons'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import type {InjectedRouter} from 'sentry/types/legacyReactRouter'; import {trackAnalytics} from 'sentry/utils/analytics'; import normalizeUrl from 'sentry/utils/url/normalizeUrl'; import {useFeedbackForm} from 'sentry/utils/useFeedbackForm'; import {useHotkeys} from 'sentry/utils/useHotkeys'; import {useLocation} from 'sentry/utils/useLocation'; import {useNavigate} from 'sentry/utils/useNavigate'; import useOrganization from 'sentry/utils/useOrganization'; import usePageFilters from 'sentry/utils/usePageFilters'; import useProjects from 'sentry/utils/useProjects'; import {useUser} from 'sentry/utils/useUser'; import { generateTempViewId, type IssueView, type IssueViewParams, IssueViews, IssueViewsContext, } from 'sentry/views/issueList/issueViews/issueViews'; import {IssueViewTab} from 'sentry/views/issueList/issueViews/issueViewTab'; import {useFetchGroupSearchViews} from 'sentry/views/issueList/queries/useFetchGroupSearchViews'; import {NewTabContext} from 'sentry/views/issueList/utils/newTabContext'; import {IssueSortOptions} from './utils'; type IssueViewsIssueListHeaderProps = { onRealtimeChange: (realtime: boolean) => void; realtimeActive: boolean; router: InjectedRouter; selectedProjectIds: number[]; }; type IssueViewsIssueListHeaderTabsContentProps = { router: InjectedRouter; }; function IssueViewsIssueListHeader({ selectedProjectIds, realtimeActive, onRealtimeChange, router, }: IssueViewsIssueListHeaderProps) { const organization = useOrganization(); const {projects} = useProjects(); const selectedProjects = projects.filter(({id}) => selectedProjectIds.includes(Number(id)) ); const {newViewActive} = useContext(NewTabContext); const {data: groupSearchViews} = useFetchGroupSearchViews({ orgSlug: organization.slug, }); const realtimeTitle = realtimeActive ? t('Pause real-time updates') : t('Enable real-time updates'); const openForm = useFeedbackForm(); const hasNewLayout = organization.features.includes('issue-stream-table-layout'); return ( {t('Issues')} {openForm && hasNewLayout && ( )} {!newViewActive && (