index.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import {openModal} from 'sentry/actionCreators/modal';
  2. import {Button, ButtonProps} from 'sentry/components/button';
  3. import {
  4. FeedbackModal,
  5. FeedbackModalProps,
  6. modalCss,
  7. } from 'sentry/components/featureFeedback/feedbackModal';
  8. import {Data} from 'sentry/components/forms/types';
  9. import {IconMegaphone} from 'sentry/icons';
  10. import {t} from 'sentry/locale';
  11. export type FeatureFeedbackProps<T extends Data> = FeedbackModalProps<T> & {
  12. buttonProps?: Partial<ButtonProps>;
  13. secondaryAction?: React.ReactNode;
  14. };
  15. // Provides a button that, when clicked, opens a modal with a form that,
  16. // when filled and submitted, will send feedback to Sentry (feedbacks project).
  17. export function FeatureFeedback<T extends Data>({
  18. buttonProps = {},
  19. ...props
  20. }: FeatureFeedbackProps<T>) {
  21. function handleClick(e: React.MouseEvent<HTMLButtonElement>) {
  22. openModal(modalProps => <FeedbackModal {...modalProps} {...props} />, {
  23. modalCss,
  24. });
  25. buttonProps.onClick?.(e);
  26. }
  27. return (
  28. <Button {...buttonProps} icon={<IconMegaphone />} onClick={handleClick}>
  29. {t('Give Feedback')}
  30. </Button>
  31. );
  32. }