Configuration

Learn about the User Feedback Widget configuration options.

The User Feedback Widget offers many customization options, and if the available options are insufficient, you can use your own UI.

An image showing the main customization options for the User Feedback WidgetTo collect user feedback from inside your application use the showFeedbackWidget method.

Copied
import * as Sentry from "@sentry/react-native";

Sentry.showFeedbackWidget();

The following options can be configured for the integration in feedbackIntegration({}) or passed in the FeedbackWidget component props:

KeyTypeDefaultDescription
showBrandingbooleantrueDisplays the Sentry logo.
showNamebooleantrueDisplays the name field on the feedback widget.
showEmailbooleantrueDisplays the email field on the feedback widget.
enableScreenshotbooleanfalseAllows the user to send a screenshot attachment with their feedback.
isNameRequiredbooleanfalseRequires the name field on the feedback widget to be filled in.
isEmailRequiredbooleanfalseRequires the email field on the feedback widget to be filled in.
shouldValidateEmailbooleantrueIf set the email is validated with the following regular expression "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/"
useSentryUserRecord<string, string>{ email: 'email', name: 'username'}Sets the default values for the email and name fields.

All the text that you see in the Feedback widget can be customized.

The following options can be configured for the integration in feedbackIntegration({}) or passed in the FeedbackWidget component props:

KeyDefaultDescription
formTitle"Report a Bug"The title at the top of the feedback widget.
submitButtonLabel"Send Bug Report"The label of the submit button used in the feedback widget.
cancelButtonLabel"Cancel"The label of cancel buttons used in the feedback widget.
addScreenshotButtonLabel"Add a screenshot"The label of the button to add a screenshot to the widget.
removeScreenshotButtonLabel"Remove screenshot"The label of the button to remove the screenshot.
nameLabel"Name"The label of the name input field.
namePlaceholder"Your Name"The placeholder for the name input field.
emailLabel"Email"The label of the email input field.
emailPlaceholder"your.email@example.org"The placeholder for the email input field.
isRequiredLabel"(required)"The label shown next to an input field that is required.
messageLabel"Description"The label for the feedback description input field.
messagePlaceholder"What's the bug? What did you expect?"The placeholder for the feedback description input field.
successMessageText"Thank you for your report!"The message displayed after a successful feedback submission.
errorTitle"Error"The title of the error message dialog.
formError"Please fill out all required fields."Form validation error message.
emailError"Please enter a valid email address."Email validation error mesage.
genericError"Unable to send feedback due to an unexpected error."The generic error message.

Example of customization:

Copied
feedbackIntegration({
  nameLabel: "Full Name",
  submitButtonLabel: "Send",
  formTitle: "Give Feedback",
});

You can customize placement of the feedback components on the widget, as well as the fonts and colors.

The example below shows how to customize the submit button background color and border radius with the feedbackIntegration.

Copied
import * as Sentry from "@sentry/react-native";

Sentry.feedbackIntegration({
  styles: {
    submitButton: {
      backgroundColor: "#6a1b9a",
      borderRadius: 5,
    },
  },
});

Sentry.showFeedbackWidget();

The same can be achived by passing the styles prop to the FeedbackWidget component:

Copied
import { FeedbackWidget } from "@sentry/react-native";

<FeedbackWidget
  styles={{
    submitButton: {
      backgroundColor: "#6a1b9a",
      borderRadius: 5,
    },
  }}
/>;

The following styles are available for customisation.

StyleTypeDescription
containerViewStyleThe widget container style.
titleTextStyleThe title text style.
labelTextStyleThe label text style (name, email).
inputTextStyleThe input field text style (name, email).
textAreaTextStyleThe message text style.
submitButtonViewStyleThe submit button style.
submitTextTextStyleThe submit button text style.
cancelButtonViewStyleThe cancel button style.
cancelTextTextStyleThe cancel button text style.
screenshotButtonViewStyleThe screenshot button style.
screenshotTextTextStyleThe screenshot button text style.
titleContainerViewStyleThe title container style.

The following callbacks can be configured for the integration in feedbackIntegration({}) or passed in the FeedbackWidget component props:

CallbackParametersDefault behaviorDescription
onFormOpenCallback when widget is opened.
onFormCloseThe widget is unmounted.Callback when widget is closed and not submitted.
onSubmitSuccessdata: FeedbackFormDataCallback when feedback is successfully submitted.
onSubmitErrorerror: ErrorCallback when feedback is unsuccessfully submitted.
onFormSubmittedThe widget is unmounted.Callback when the feedback widget is submitted successfully, and the SuccessMessage is complete, or dismissed.
onAddScreenshotattachFile: (filename: string, data: Uint8Array) => voidCallback when a screenshot is added.

The screenshot functionality is disabled by default. To enable it, pass an imagePicker integration library or set the enableScreenshot option to true and implement the onAddScreenshot callback.

Currently the supported libraries are:

You just need to import the library and pass it to the feedbackIntegration method.

Copied
import * as ImagePicker from "expo-image-picker";

Or react-native-image-picker:

Copied
import * as ImagePicker from "react-native-image-picker";

And then pass it to feedbackIntegration:

Copied
Sentry.init({
  integrations: [
    Sentry.feedbackIntegration({
      imagePicker: ImagePicker,
    }),
  ],
});

If the above libraries do not cover your use case you can manually integrate screenshots by implementing the onAddScreenshot callback. The callback receives a filename and a Uint8Array of the image data like in the example below.

Copied
import * as Sentry from '@sentry/react-native';
import { getImage } from 'custom-image-picker';

const handleChooseImage = (attachFile: (filename: string, data: Uint8Array) => void): void => {
  const { filename, bytes, error, canceled } = getImage();
  if (canceled) {
  	console.log('User canceled image choice.');
  } else if (error) {
    console.log('Error during image loading', error);
  } else {
    attachFile(filename, bytes);
  }
};

Sentry.feedbackIntegration({
    onAddScreenshot={handleChooseImage}
});
Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").