index.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import {useState} from 'react';
  2. import {Event, Project} from 'sentry/types';
  3. import {trackAnalytics} from 'sentry/utils/analytics';
  4. import {getAnalyticsDataForEvent} from 'sentry/utils/events';
  5. import useOrganization from 'sentry/utils/useOrganization';
  6. import {Banner} from './banner';
  7. import {Suggestion} from './suggestion';
  8. type Props = {
  9. event: Event;
  10. projectSlug: Project['slug'];
  11. };
  12. export function AiSuggestedSolution({projectSlug, event}: Props) {
  13. const organization = useOrganization();
  14. const [openSuggestion, setOpenSuggestion] = useState(false);
  15. if (!organization.features.includes('open-ai-suggestion')) {
  16. return null;
  17. }
  18. return (
  19. <div>
  20. {!openSuggestion ? (
  21. <Banner
  22. onViewSuggestion={() => {
  23. trackAnalytics('ai_suggested_solution.view_suggestion_button_clicked', {
  24. organization,
  25. project_id: event.projectID,
  26. group_id: event.groupID,
  27. ...getAnalyticsDataForEvent(event),
  28. });
  29. setOpenSuggestion(true);
  30. }}
  31. />
  32. ) : (
  33. <Suggestion
  34. projectSlug={projectSlug}
  35. event={event}
  36. onHideSuggestion={() => {
  37. trackAnalytics('ai_suggested_solution.hide_suggestion_button_clicked', {
  38. organization,
  39. project_id: event.projectID,
  40. group_id: event.groupID,
  41. ...getAnalyticsDataForEvent(event),
  42. });
  43. setOpenSuggestion(false);
  44. }}
  45. />
  46. )}
  47. </div>
  48. );
  49. }