mergedList.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import {Fragment} from 'react';
  2. import EmptyStateWarning from 'sentry/components/emptyStateWarning';
  3. import Pagination from 'sentry/components/pagination';
  4. import Panel from 'sentry/components/panels/panel';
  5. import PanelBody from 'sentry/components/panels/panelBody';
  6. import QueryCount from 'sentry/components/queryCount';
  7. import {t} from 'sentry/locale';
  8. import {Fingerprint} from 'sentry/stores/groupingStore';
  9. import {Group, Organization, Project} from 'sentry/types';
  10. import withOrganization from 'sentry/utils/withOrganization';
  11. import MergedItem from './mergedItem';
  12. import {MergedToolbar} from './mergedToolbar';
  13. type Props = {
  14. groupId: Group['id'];
  15. /*
  16. * From GroupingStore.onToggleCollapseFingerprints
  17. */
  18. onToggleCollapse: () => void;
  19. /**
  20. * From GroupMergedView -> handleUnmerge
  21. */
  22. onUnmerge: () => void;
  23. organization: Organization;
  24. project: Project;
  25. fingerprints?: Fingerprint[];
  26. pageLinks?: string;
  27. };
  28. function MergedList({
  29. fingerprints = [],
  30. pageLinks,
  31. onToggleCollapse,
  32. onUnmerge,
  33. organization,
  34. groupId,
  35. project,
  36. }: Props) {
  37. const fingerprintsWithLatestEvent = fingerprints.filter(
  38. ({latestEvent}) => !!latestEvent
  39. );
  40. const hasResults = fingerprintsWithLatestEvent.length > 0;
  41. if (!hasResults) {
  42. return (
  43. <Panel>
  44. <EmptyStateWarning>
  45. <p>{t("There don't seem to be any hashes for this issue.")}</p>
  46. </EmptyStateWarning>
  47. </Panel>
  48. );
  49. }
  50. return (
  51. <Fragment>
  52. <h4>
  53. <span>{t('Merged fingerprints with latest event')}</span>{' '}
  54. <QueryCount count={fingerprintsWithLatestEvent.length} />
  55. </h4>
  56. <Panel>
  57. <MergedToolbar
  58. onToggleCollapse={onToggleCollapse}
  59. onUnmerge={onUnmerge}
  60. orgId={organization.slug}
  61. project={project}
  62. groupId={groupId}
  63. />
  64. <PanelBody>
  65. {fingerprintsWithLatestEvent.map(fingerprint => (
  66. <MergedItem
  67. key={fingerprint.id}
  68. organization={organization}
  69. fingerprint={fingerprint}
  70. totalFingerprint={fingerprintsWithLatestEvent.length}
  71. />
  72. ))}
  73. </PanelBody>
  74. </Panel>
  75. {pageLinks && <Pagination pageLinks={pageLinks} />}
  76. </Fragment>
  77. );
  78. }
  79. export default withOrganization(MergedList);