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;