import type {IndexedMembersByProject} from 'sentry/actionCreators/members'; import type {GroupListColumn} from 'sentry/components/issues/groupList'; import LoadingError from 'sentry/components/loadingError'; import LoadingIndicator from 'sentry/components/loadingIndicator'; import PanelBody from 'sentry/components/panels/panelBody'; import StreamGroup from 'sentry/components/stream/group'; import GroupStore from 'sentry/stores/groupStore'; import type {Group} from 'sentry/types/group'; import theme from 'sentry/utils/theme'; import useApi from 'sentry/utils/useApi'; import useMedia from 'sentry/utils/useMedia'; import useOrganization from 'sentry/utils/useOrganization'; import {useSyncedLocalStorageState} from 'sentry/utils/useSyncedLocalStorageState'; import type {IssueUpdateData} from 'sentry/views/issueList/types'; import NoGroupsHandler from './noGroupsHandler'; import {SAVED_SEARCHES_SIDEBAR_OPEN_LOCALSTORAGE_KEY} from './utils'; type GroupListBodyProps = { displayReprocessingLayout: boolean; error: string | null; groupIds: string[]; groupStatsPeriod: string; loading: boolean; memberList: IndexedMembersByProject; onActionTaken: (itemIds: string[], data: IssueUpdateData) => void; query: string; refetchGroups: () => void; selectedProjectIds: number[]; }; type GroupListProps = { displayReprocessingLayout: boolean; groupIds: string[]; groupStatsPeriod: string; memberList: IndexedMembersByProject; onActionTaken: (itemIds: string[], data: IssueUpdateData) => void; query: string; }; function GroupListBody({ groupIds, memberList, query, displayReprocessingLayout, groupStatsPeriod, loading, error, refetchGroups, selectedProjectIds, onActionTaken, }: GroupListBodyProps) { const api = useApi(); const organization = useOrganization(); if (loading) { return ; } if (error) { return ; } if (!groupIds.length) { return ( ); } return ( ); } function GroupList({ groupIds, memberList, query, displayReprocessingLayout, groupStatsPeriod, onActionTaken, }: GroupListProps) { const organization = useOrganization(); const [isSavedSearchesOpen] = useSyncedLocalStorageState( SAVED_SEARCHES_SIDEBAR_OPEN_LOCALSTORAGE_KEY, false ); const topIssue = groupIds[0]; const canSelect = !useMedia( `(max-width: ${ isSavedSearchesOpen ? theme.breakpoints.xlarge : theme.breakpoints.medium })` ); const columns: GroupListColumn[] = [ 'graph', ...(organization.features.includes('issue-stream-table-layout') ? ['firstSeen' as const, 'lastSeen' as const] : []), 'event', 'users', 'priority', 'assignee', 'lastTriggered', ]; return ( {groupIds.map((id, index) => { const hasGuideAnchor = id === topIssue; const group = GroupStore.get(id) as Group | undefined; return ( onActionTaken([id], {priority})} withColumns={columns} /> ); })} ); } export default GroupListBody;