sentryAppExternalIssueForm.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import {t} from 'sentry/locale';
  2. import ExternalIssueStore from 'sentry/stores/externalIssueStore';
  3. import {Group, PlatformExternalIssue, SentryAppInstallation} from 'sentry/types';
  4. import {Event} from 'sentry/types/event';
  5. import getStacktraceBody from 'sentry/utils/getStacktraceBody';
  6. import {addQueryParamsToExistingUrl} from 'sentry/utils/queryString';
  7. import SentryAppExternalForm, {
  8. SchemaFormConfig,
  9. } from 'sentry/views/settings/organizationIntegrations/sentryAppExternalForm';
  10. type Props = {
  11. action: 'create' | 'link';
  12. appName: string;
  13. config: SchemaFormConfig;
  14. event: Event;
  15. group: Group;
  16. onSubmitSuccess: (externalIssue: PlatformExternalIssue) => void;
  17. sentryAppInstallation: SentryAppInstallation;
  18. };
  19. function SentryAppExternalIssueForm({
  20. action,
  21. appName,
  22. config,
  23. event,
  24. group,
  25. onSubmitSuccess,
  26. sentryAppInstallation,
  27. }: Props) {
  28. const contentArr = getStacktraceBody(event);
  29. const stackTrace =
  30. contentArr && contentArr.length > 0 ? '\n\n```\n' + contentArr[0] + '\n```' : '';
  31. return (
  32. <SentryAppExternalForm
  33. sentryAppInstallationUuid={sentryAppInstallation.uuid}
  34. appName={appName}
  35. config={config}
  36. action={action}
  37. element="issue-link"
  38. extraFields={{groupId: group.id}}
  39. extraRequestBody={{projectId: group.project.id}}
  40. onSubmitSuccess={issue => {
  41. ExternalIssueStore.add(issue);
  42. onSubmitSuccess(issue);
  43. }}
  44. // Needs to bind to access this.props
  45. getFieldDefault={field => {
  46. if (field.type === 'textarea') {
  47. field.maxRows = 10;
  48. field.autosize = true;
  49. }
  50. switch (field.default) {
  51. case 'issue.title':
  52. return group.title;
  53. case 'issue.description':
  54. const queryParams = {referrer: appName};
  55. const url = addQueryParamsToExistingUrl(group.permalink, queryParams);
  56. const shortId = group.shortId;
  57. return t('Sentry Issue: [%s](%s)%s', shortId, url, stackTrace);
  58. default:
  59. return '';
  60. }
  61. }}
  62. />
  63. );
  64. }
  65. export default SentryAppExternalIssueForm;