detail.tsx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* eslint-disable no-alert */
  2. import {Fragment} from 'react';
  3. import styled from '@emotion/styled';
  4. import {Button, LinkButton} from 'sentry/components/button';
  5. import SentryDocumentTitle from 'sentry/components/sentryDocumentTitle';
  6. import {ActionsProvider} from 'sentry/components/workflowEngine/layout/actions';
  7. import {BreadcrumbsProvider} from 'sentry/components/workflowEngine/layout/breadcrumbs';
  8. import DetailLayout from 'sentry/components/workflowEngine/layout/detail';
  9. import Section from 'sentry/components/workflowEngine/ui/section';
  10. import {useWorkflowEngineFeatureGate} from 'sentry/components/workflowEngine/useWorkflowEngineFeatureGate';
  11. import {IconArrow, IconEdit} from 'sentry/icons';
  12. import {t} from 'sentry/locale';
  13. import {space} from 'sentry/styles/space';
  14. import getDuration from 'sentry/utils/duration/getDuration';
  15. import {ConnectedAutomationsList} from 'sentry/views/detectors/components/connectedAutomationList';
  16. import DetailsPanel from 'sentry/views/detectors/components/detailsPanel';
  17. import IssuesList from 'sentry/views/detectors/components/issuesList';
  18. type Priority = {
  19. sensitivity: string;
  20. threshold: number;
  21. };
  22. const priorities: Priority[] = [
  23. {sensitivity: 'medium', threshold: 4},
  24. {sensitivity: 'high', threshold: 10},
  25. ];
  26. export default function DetectorDetail() {
  27. useWorkflowEngineFeatureGate({redirect: true});
  28. return (
  29. <SentryDocumentTitle title={'/endpoint'} noSuffix>
  30. <BreadcrumbsProvider crumb={{label: t('Monitors'), to: '/monitors'}}>
  31. <ActionsProvider actions={<Actions />}>
  32. <DetailLayout project={{slug: 'project-slug', platform: 'javascript-astro'}}>
  33. <DetailLayout.Main>
  34. {/* TODO: Add chart here */}
  35. <Section title={t('Ongoing Issues')}>
  36. <IssuesList />
  37. </Section>
  38. <Section title={t('Connected Automations')}>
  39. <ConnectedAutomationsList />
  40. </Section>
  41. </DetailLayout.Main>
  42. <DetailLayout.Sidebar>
  43. <Section title={t('Detect')}>
  44. <DetailsPanel />
  45. </Section>
  46. <Section title={t('Assign')}>
  47. {t('Assign to %s', 'admin@sentry.io')}
  48. </Section>
  49. <Section title={t('Prioritize')}>
  50. <PrioritiesList>
  51. {priorities.map(priority => (
  52. <Fragment key={priority.sensitivity}>
  53. <PriorityDuration>
  54. {getDuration(priority.threshold, 0, false, true)}
  55. </PriorityDuration>
  56. <IconArrow direction="right" />
  57. <p>{priority.sensitivity}</p>
  58. </Fragment>
  59. ))}
  60. </PrioritiesList>
  61. </Section>
  62. <Section title={t('Resolve')}>
  63. {t('Auto-resolve after %s of inactivity', getDuration(3000000))}
  64. </Section>
  65. </DetailLayout.Sidebar>
  66. </DetailLayout>
  67. </ActionsProvider>
  68. </BreadcrumbsProvider>
  69. </SentryDocumentTitle>
  70. );
  71. }
  72. function Actions() {
  73. const disable = () => {
  74. window.alert('disable');
  75. };
  76. return (
  77. <Fragment>
  78. <Button onClick={disable}>{t('Disable')}</Button>
  79. <LinkButton to="/monitors/edit" priority="primary" icon={<IconEdit />}>
  80. {t('Edit')}
  81. </LinkButton>
  82. </Fragment>
  83. );
  84. }
  85. const PrioritiesList = styled('div')`
  86. display: grid;
  87. grid-template-columns: auto auto auto;
  88. grid-template-rows: repeat(${priorities.length}, 1fr);
  89. align-items: center;
  90. width: fit-content;
  91. gap: ${space(0.5)} ${space(1)};
  92. p {
  93. margin: 0;
  94. width: fit-content;
  95. }
  96. `;
  97. const PriorityDuration = styled('p')`
  98. justify-self: flex-end;
  99. `;