@sentry/react-native 6.13.1 → 6.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RNSentry.podspec +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +10 -0
- package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
- package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +5 -0
- package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +5 -0
- package/dist/js/NativeRNSentry.d.ts +1 -0
- package/dist/js/NativeRNSentry.d.ts.map +1 -1
- package/dist/js/NativeRNSentry.js.map +1 -1
- package/dist/js/client.d.ts +12 -0
- package/dist/js/client.d.ts.map +1 -1
- package/dist/js/client.js +19 -0
- package/dist/js/client.js.map +1 -1
- package/dist/js/feedback/FeedbackButton.d.ts +23 -0
- package/dist/js/feedback/FeedbackButton.d.ts.map +1 -0
- package/dist/js/feedback/FeedbackButton.js +51 -0
- package/dist/js/feedback/FeedbackButton.js.map +1 -0
- package/dist/js/feedback/FeedbackWidget.d.ts +12 -1
- package/dist/js/feedback/FeedbackWidget.d.ts.map +1 -1
- package/dist/js/feedback/FeedbackWidget.js +78 -13
- package/dist/js/feedback/FeedbackWidget.js.map +1 -1
- package/dist/js/feedback/FeedbackWidget.styles.d.ts +6 -3
- package/dist/js/feedback/FeedbackWidget.styles.d.ts.map +1 -1
- package/dist/js/feedback/FeedbackWidget.styles.js +155 -106
- package/dist/js/feedback/FeedbackWidget.styles.js.map +1 -1
- package/dist/js/feedback/FeedbackWidget.theme.d.ts +37 -0
- package/dist/js/feedback/FeedbackWidget.theme.d.ts.map +1 -0
- package/dist/js/feedback/FeedbackWidget.theme.js +31 -0
- package/dist/js/feedback/FeedbackWidget.theme.js.map +1 -0
- package/dist/js/feedback/FeedbackWidget.types.d.ts +71 -2
- package/dist/js/feedback/FeedbackWidget.types.d.ts.map +1 -1
- package/dist/js/feedback/FeedbackWidget.types.js.map +1 -1
- package/dist/js/feedback/FeedbackWidgetManager.d.ts +43 -23
- package/dist/js/feedback/FeedbackWidgetManager.d.ts.map +1 -1
- package/dist/js/feedback/FeedbackWidgetManager.js +62 -138
- package/dist/js/feedback/FeedbackWidgetManager.js.map +1 -1
- package/dist/js/feedback/FeedbackWidgetProvider.d.ts +48 -0
- package/dist/js/feedback/FeedbackWidgetProvider.d.ts.map +1 -0
- package/dist/js/feedback/FeedbackWidgetProvider.js +177 -0
- package/dist/js/feedback/FeedbackWidgetProvider.js.map +1 -0
- package/dist/js/feedback/ScreenshotButton.d.ts +25 -0
- package/dist/js/feedback/ScreenshotButton.d.ts.map +1 -0
- package/dist/js/feedback/ScreenshotButton.js +80 -0
- package/dist/js/feedback/ScreenshotButton.js.map +1 -0
- package/dist/js/feedback/defaults.d.ts +3 -1
- package/dist/js/feedback/defaults.d.ts.map +1 -1
- package/dist/js/feedback/defaults.js +15 -0
- package/dist/js/feedback/defaults.js.map +1 -1
- package/dist/js/feedback/icons.d.ts +30 -0
- package/dist/js/feedback/icons.d.ts.map +1 -0
- package/dist/js/feedback/icons.js +30 -0
- package/dist/js/feedback/icons.js.map +1 -0
- package/dist/js/feedback/integration.d.ts +19 -2
- package/dist/js/feedback/integration.d.ts.map +1 -1
- package/dist/js/feedback/integration.js +58 -3
- package/dist/js/feedback/integration.js.map +1 -1
- package/dist/js/feedback/lazy.d.ts +10 -0
- package/dist/js/feedback/lazy.d.ts.map +1 -1
- package/dist/js/feedback/lazy.js +24 -0
- package/dist/js/feedback/lazy.js.map +1 -1
- package/dist/js/index.d.ts +3 -2
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js +2 -1
- package/dist/js/index.js.map +1 -1
- package/dist/js/integrations/expocontext.d.ts +18 -0
- package/dist/js/integrations/expocontext.d.ts.map +1 -1
- package/dist/js/integrations/expocontext.js +20 -12
- package/dist/js/integrations/expocontext.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js +65 -31
- package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
- package/dist/js/replay/mobilereplay.d.ts +14 -1
- package/dist/js/replay/mobilereplay.d.ts.map +1 -1
- package/dist/js/replay/mobilereplay.js +9 -1
- package/dist/js/replay/mobilereplay.js.map +1 -1
- package/dist/js/sdk.js +1 -1
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tracing/reactnativetracing.d.ts +4 -1
- package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
- package/dist/js/tracing/reactnativetracing.js +5 -1
- package/dist/js/tracing/reactnativetracing.js.map +1 -1
- package/dist/js/utils/worldwide.d.ts +7 -0
- package/dist/js/utils/worldwide.d.ts.map +1 -1
- package/dist/js/utils/worldwide.js.map +1 -1
- package/dist/js/version.d.ts +1 -1
- package/dist/js/version.js +1 -1
- package/dist/js/version.js.map +1 -1
- package/dist/js/wrapper.d.ts +1 -0
- package/dist/js/wrapper.d.ts.map +1 -1
- package/dist/js/wrapper.js +17 -1
- package/dist/js/wrapper.js.map +1 -1
- package/ios/RNSentry.mm +24 -0
- package/ios/RNSentryOnDrawReporter.m +4 -0
- package/ios/RNSentryReplay.mm +1 -2
- package/ios/RNSentryVersion.m +1 -1
- package/package.json +6 -6
- package/src/js/NativeRNSentry.ts +1 -0
- package/ts3.8/dist/js/NativeRNSentry.d.ts +1 -0
- package/ts3.8/dist/js/client.d.ts +12 -0
- package/ts3.8/dist/js/feedback/FeedbackButton.d.ts +23 -0
- package/ts3.8/dist/js/feedback/FeedbackWidget.d.ts +12 -1
- package/ts3.8/dist/js/feedback/FeedbackWidget.styles.d.ts +6 -3
- package/ts3.8/dist/js/feedback/FeedbackWidget.theme.d.ts +37 -0
- package/ts3.8/dist/js/feedback/FeedbackWidget.types.d.ts +71 -2
- package/ts3.8/dist/js/feedback/FeedbackWidgetManager.d.ts +43 -23
- package/ts3.8/dist/js/feedback/FeedbackWidgetProvider.d.ts +48 -0
- package/ts3.8/dist/js/feedback/ScreenshotButton.d.ts +25 -0
- package/ts3.8/dist/js/feedback/defaults.d.ts +3 -1
- package/ts3.8/dist/js/feedback/icons.d.ts +30 -0
- package/ts3.8/dist/js/feedback/integration.d.ts +19 -2
- package/ts3.8/dist/js/feedback/lazy.d.ts +10 -0
- package/ts3.8/dist/js/index.d.ts +3 -2
- package/ts3.8/dist/js/integrations/expocontext.d.ts +18 -0
- package/ts3.8/dist/js/replay/mobilereplay.d.ts +14 -1
- package/ts3.8/dist/js/tracing/reactnativetracing.d.ts +4 -1
- package/ts3.8/dist/js/utils/worldwide.d.ts +7 -0
- package/ts3.8/dist/js/version.d.ts +1 -1
- package/ts3.8/dist/js/wrapper.d.ts +1 -0
|
@@ -41,6 +41,11 @@ export interface FeedbackGeneralConfiguration {
|
|
|
41
41
|
* @default false
|
|
42
42
|
*/
|
|
43
43
|
enableScreenshot?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* This flag determines whether the "Take Screenshot" button is displayed
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
enableTakeScreenshot?: boolean;
|
|
44
49
|
/**
|
|
45
50
|
* Fill in email/name input fields with Sentry user context if it exists.
|
|
46
51
|
* The value of the email/name keys represent the properties of your user context.
|
|
@@ -99,13 +104,17 @@ export interface FeedbackTextConfiguration {
|
|
|
99
104
|
*/
|
|
100
105
|
isRequiredLabel?: string;
|
|
101
106
|
/**
|
|
102
|
-
* The label for the button that adds a screenshot
|
|
107
|
+
* The label for the button that adds a screenshot
|
|
103
108
|
*/
|
|
104
109
|
addScreenshotButtonLabel?: string;
|
|
105
110
|
/**
|
|
106
|
-
* The label for the button that removes a screenshot
|
|
111
|
+
* The label for the button that removes a screenshot
|
|
107
112
|
*/
|
|
108
113
|
removeScreenshotButtonLabel?: string;
|
|
114
|
+
/**
|
|
115
|
+
* The label for the button that shows the capture screenshot button
|
|
116
|
+
*/
|
|
117
|
+
captureScreenshotButtonLabel?: string;
|
|
109
118
|
/**
|
|
110
119
|
* The title of the error dialog
|
|
111
120
|
*/
|
|
@@ -118,11 +127,41 @@ export interface FeedbackTextConfiguration {
|
|
|
118
127
|
* The error message when the email is invalid
|
|
119
128
|
*/
|
|
120
129
|
emailError?: string;
|
|
130
|
+
/**
|
|
131
|
+
* The error message when the capture screenshot fails
|
|
132
|
+
*/
|
|
133
|
+
captureScreenshotError?: string;
|
|
121
134
|
/**
|
|
122
135
|
* Message when there is a generic error
|
|
123
136
|
*/
|
|
124
137
|
genericError?: string;
|
|
125
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* The FeedbackButton text labels that can be customized
|
|
141
|
+
*/
|
|
142
|
+
export interface FeedbackButtonTextConfiguration {
|
|
143
|
+
/**
|
|
144
|
+
* The label for the Feedback widget button that opens the dialog
|
|
145
|
+
*/
|
|
146
|
+
triggerLabel?: string;
|
|
147
|
+
/**
|
|
148
|
+
* The aria label for the Feedback widget button that opens the dialog
|
|
149
|
+
*/
|
|
150
|
+
triggerAriaLabel?: string;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* The ScreenshotButton text labels that can be customized
|
|
154
|
+
*/
|
|
155
|
+
export interface ScreenshotButtonTextConfiguration {
|
|
156
|
+
/**
|
|
157
|
+
* The label for the Screenshot button
|
|
158
|
+
*/
|
|
159
|
+
triggerLabel?: string;
|
|
160
|
+
/**
|
|
161
|
+
* The aria label for the Screenshot button
|
|
162
|
+
*/
|
|
163
|
+
triggerAriaLabel?: string;
|
|
164
|
+
}
|
|
126
165
|
/**
|
|
127
166
|
* The public callbacks available for the feedback integration
|
|
128
167
|
*/
|
|
@@ -199,9 +238,39 @@ export interface FeedbackWidgetStyles {
|
|
|
199
238
|
screenshotContainer?: ViewStyle;
|
|
200
239
|
screenshotThumbnail?: ImageStyle;
|
|
201
240
|
screenshotText?: TextStyle;
|
|
241
|
+
takeScreenshotButton?: ViewStyle;
|
|
242
|
+
takeScreenshotText?: TextStyle;
|
|
202
243
|
titleContainer?: ViewStyle;
|
|
203
244
|
sentryLogo?: ImageStyle;
|
|
204
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* The props for the feedback button
|
|
248
|
+
*/
|
|
249
|
+
export interface FeedbackButtonProps extends FeedbackButtonTextConfiguration {
|
|
250
|
+
styles?: FeedbackButtonStyles;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* The styles for the feedback button
|
|
254
|
+
*/
|
|
255
|
+
export interface FeedbackButtonStyles {
|
|
256
|
+
triggerButton?: ViewStyle;
|
|
257
|
+
triggerText?: TextStyle;
|
|
258
|
+
triggerIcon?: ImageStyle;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* The props for the screenshot button
|
|
262
|
+
*/
|
|
263
|
+
export interface ScreenshotButtonProps extends ScreenshotButtonTextConfiguration {
|
|
264
|
+
styles?: ScreenshotButtonStyles;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The styles for the screenshot button
|
|
268
|
+
*/
|
|
269
|
+
export interface ScreenshotButtonStyles {
|
|
270
|
+
triggerButton?: ViewStyle;
|
|
271
|
+
triggerText?: TextStyle;
|
|
272
|
+
triggerIcon?: ImageStyle;
|
|
273
|
+
}
|
|
205
274
|
/**
|
|
206
275
|
* The state of the feedback form
|
|
207
276
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackWidget.types.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidget.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FeedbackWidget.types.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidget.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,mBACf,SAAQ,4BAA4B,EAClC,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB;IAC1B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,aAAa,CAAC,EAAE;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;OAEG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAEtC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IAEjE;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEnD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEvC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,uBAAuB;IAC/B,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,8BAA8B;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,uBAAuB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,uBAAuB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE9F,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAChG;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,+BAA+B;IAC1E,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iCAAiC;IAC9E,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackWidget.types.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidget.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { FeedbackFormData } from '@sentry/core';\nimport type { ImageStyle, TextStyle, ViewStyle } from 'react-native';\n\n/**\n * The props for the feedback form\n */\nexport interface FeedbackWidgetProps\n extends FeedbackGeneralConfiguration,\n FeedbackTextConfiguration,\n FeedbackCallbacks,\n ImagePickerConfiguration {\n styles?: FeedbackWidgetStyles;\n}\n\n/**\n * General feedback configuration\n */\nexport interface FeedbackGeneralConfiguration {\n /**\n * Show the Sentry branding\n *\n * @default true\n */\n showBranding?: boolean;\n\n /**\n * Should the email field be required?\n */\n isEmailRequired?: boolean;\n\n /**\n * Should the email field be validated?\n */\n shouldValidateEmail?: boolean;\n\n /**\n * Should the name field be required?\n */\n isNameRequired?: boolean;\n\n /**\n * Should the email input field be visible? Note: email will still be collected if set via `Sentry.setUser()`\n */\n showEmail?: boolean;\n\n /**\n * Should the name input field be visible? Note: name will still be collected if set via `Sentry.setUser()`\n */\n showName?: boolean;\n\n /**\n * This flag determines whether the \"Add Screenshot\" button is displayed\n * @default false\n */\n enableScreenshot?: boolean;\n\n /**\n * Fill in email/name input fields with Sentry user context if it exists.\n * The value of the email/name keys represent the properties of your user context.\n */\n useSentryUser?: {\n email: string;\n name: string;\n };\n}\n\n/**\n * All of the different text labels that can be customized\n */\nexport interface FeedbackTextConfiguration {\n /**\n * The label for the Feedback form cancel button that closes dialog\n */\n cancelButtonLabel?: string;\n\n /**\n * The label for the Feedback form submit button that sends feedback\n */\n submitButtonLabel?: string;\n\n /**\n * The title of the Feedback form\n */\n formTitle?: string;\n\n /**\n * Label for the email input\n */\n emailLabel?: string;\n\n /**\n * Placeholder text for Feedback email input\n */\n emailPlaceholder?: string;\n\n /**\n * Label for the message input\n */\n messageLabel?: string;\n\n /**\n * Placeholder text for Feedback message input\n */\n messagePlaceholder?: string;\n\n /**\n * Label for the name input\n */\n nameLabel?: string;\n\n /**\n * Message after feedback was sent successfully\n */\n successMessageText?: string;\n\n /**\n * Placeholder text for Feedback name input\n */\n namePlaceholder?: string;\n\n /**\n * Text which indicates that a field is required\n */\n isRequiredLabel?: string;\n\n /**\n * The label for the button that adds a screenshot
|
|
1
|
+
{"version":3,"file":"FeedbackWidget.types.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidget.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { FeedbackFormData } from '@sentry/core';\nimport type { ImageStyle, TextStyle, ViewStyle } from 'react-native';\n\n/**\n * The props for the feedback form\n */\nexport interface FeedbackWidgetProps\n extends FeedbackGeneralConfiguration,\n FeedbackTextConfiguration,\n FeedbackCallbacks,\n ImagePickerConfiguration {\n styles?: FeedbackWidgetStyles;\n}\n\n/**\n * General feedback configuration\n */\nexport interface FeedbackGeneralConfiguration {\n /**\n * Show the Sentry branding\n *\n * @default true\n */\n showBranding?: boolean;\n\n /**\n * Should the email field be required?\n */\n isEmailRequired?: boolean;\n\n /**\n * Should the email field be validated?\n */\n shouldValidateEmail?: boolean;\n\n /**\n * Should the name field be required?\n */\n isNameRequired?: boolean;\n\n /**\n * Should the email input field be visible? Note: email will still be collected if set via `Sentry.setUser()`\n */\n showEmail?: boolean;\n\n /**\n * Should the name input field be visible? Note: name will still be collected if set via `Sentry.setUser()`\n */\n showName?: boolean;\n\n /**\n * This flag determines whether the \"Add Screenshot\" button is displayed\n * @default false\n */\n enableScreenshot?: boolean;\n\n /**\n * This flag determines whether the \"Take Screenshot\" button is displayed\n * @default false\n */\n enableTakeScreenshot?: boolean;\n\n /**\n * Fill in email/name input fields with Sentry user context if it exists.\n * The value of the email/name keys represent the properties of your user context.\n */\n useSentryUser?: {\n email: string;\n name: string;\n };\n}\n\n/**\n * All of the different text labels that can be customized\n */\nexport interface FeedbackTextConfiguration {\n /**\n * The label for the Feedback form cancel button that closes dialog\n */\n cancelButtonLabel?: string;\n\n /**\n * The label for the Feedback form submit button that sends feedback\n */\n submitButtonLabel?: string;\n\n /**\n * The title of the Feedback form\n */\n formTitle?: string;\n\n /**\n * Label for the email input\n */\n emailLabel?: string;\n\n /**\n * Placeholder text for Feedback email input\n */\n emailPlaceholder?: string;\n\n /**\n * Label for the message input\n */\n messageLabel?: string;\n\n /**\n * Placeholder text for Feedback message input\n */\n messagePlaceholder?: string;\n\n /**\n * Label for the name input\n */\n nameLabel?: string;\n\n /**\n * Message after feedback was sent successfully\n */\n successMessageText?: string;\n\n /**\n * Placeholder text for Feedback name input\n */\n namePlaceholder?: string;\n\n /**\n * Text which indicates that a field is required\n */\n isRequiredLabel?: string;\n\n /**\n * The label for the button that adds a screenshot\n */\n addScreenshotButtonLabel?: string;\n\n /**\n * The label for the button that removes a screenshot\n */\n removeScreenshotButtonLabel?: string;\n\n /**\n * The label for the button that shows the capture screenshot button\n */\n captureScreenshotButtonLabel?: string;\n\n /**\n * The title of the error dialog\n */\n errorTitle?: string;\n\n /**\n * The error message when the form is invalid\n */\n formError?: string;\n\n /**\n * The error message when the email is invalid\n */\n emailError?: string;\n\n /**\n * The error message when the capture screenshot fails\n */\n captureScreenshotError?: string;\n\n /**\n * Message when there is a generic error\n */\n genericError?: string;\n}\n\n/**\n * The FeedbackButton text labels that can be customized\n */\nexport interface FeedbackButtonTextConfiguration {\n /**\n * The label for the Feedback widget button that opens the dialog\n */\n triggerLabel?: string;\n\n /**\n * The aria label for the Feedback widget button that opens the dialog\n */\n triggerAriaLabel?: string;\n}\n\n/**\n * The ScreenshotButton text labels that can be customized\n */\nexport interface ScreenshotButtonTextConfiguration {\n /**\n * The label for the Screenshot button\n */\n triggerLabel?: string;\n\n /**\n * The aria label for the Screenshot button\n */\n triggerAriaLabel?: string;\n}\n\n/**\n * The public callbacks available for the feedback integration\n */\nexport interface FeedbackCallbacks {\n /**\n * Callback when form is opened\n */\n onFormOpen?: () => void;\n\n /**\n * Callback when form is closed and not submitted\n */\n onFormClose?: () => void;\n\n /**\n * Callback when a screenshot is added\n */\n onAddScreenshot?: (addScreenshot: (uri: string) => void) => void;\n\n /**\n * Callback when feedback is successfully submitted\n *\n * After this you'll see a SuccessMessage on the screen for a moment.\n */\n onSubmitSuccess?: (data: FeedbackFormData) => void;\n\n /**\n * Callback when feedback is unsuccessfully submitted\n */\n onSubmitError?: (error: Error) => void;\n\n /**\n * Callback when the feedback form is submitted successfully, and the SuccessMessage is complete, or dismissed\n */\n onFormSubmitted?: () => void;\n}\n\n/**\n * Image Picker configuration interface compatible with:\n * - `react-native-image-picker`: 7.2, 8.0\n * - `expo-image-picker`: 16.0`\n */\nexport interface ImagePickerConfiguration {\n imagePicker?: ImagePicker;\n}\n\ninterface ImagePickerResponse {\n assets?: ImagePickerAsset[];\n}\n\ninterface ImagePickerAsset {\n fileName?: string;\n uri?: string;\n base64?: string;\n}\n\ninterface ExpoImageLibraryOptions {\n mediaTypes?: 'images'[];\n base64?: boolean;\n}\n\ninterface ReactNativeImageLibraryOptions {\n mediaType: 'photo';\n includeBase64?: boolean;\n}\n\nexport interface ImagePicker {\n launchImageLibraryAsync?: (options?: ExpoImageLibraryOptions) => Promise<ImagePickerResponse>;\n\n launchImageLibrary?: (options: ReactNativeImageLibraryOptions) => Promise<ImagePickerResponse>;\n}\n\n/**\n * The styles for the feedback form\n */\nexport interface FeedbackWidgetStyles {\n container?: ViewStyle;\n title?: TextStyle;\n label?: TextStyle;\n input?: TextStyle;\n textArea?: TextStyle;\n submitButton?: ViewStyle;\n submitText?: TextStyle;\n cancelButton?: ViewStyle;\n cancelText?: TextStyle;\n screenshotButton?: ViewStyle;\n screenshotContainer?: ViewStyle;\n screenshotThumbnail?: ImageStyle;\n screenshotText?: TextStyle;\n takeScreenshotButton?: ViewStyle;\n takeScreenshotText?: TextStyle;\n titleContainer?: ViewStyle;\n sentryLogo?: ImageStyle;\n}\n\n/**\n * The props for the feedback button\n */\nexport interface FeedbackButtonProps extends FeedbackButtonTextConfiguration {\n styles?: FeedbackButtonStyles;\n}\n\n/**\n * The styles for the feedback button\n */\nexport interface FeedbackButtonStyles {\n triggerButton?: ViewStyle;\n triggerText?: TextStyle;\n triggerIcon?: ImageStyle;\n}\n\n/**\n * The props for the screenshot button\n */\nexport interface ScreenshotButtonProps extends ScreenshotButtonTextConfiguration {\n styles?: ScreenshotButtonStyles;\n}\n\n/**\n * The styles for the screenshot button\n */\nexport interface ScreenshotButtonStyles {\n triggerButton?: ViewStyle;\n triggerText?: TextStyle;\n triggerIcon?: ImageStyle;\n}\n\n/**\n * The state of the feedback form\n */\nexport interface FeedbackWidgetState {\n isVisible: boolean;\n name: string;\n email: string;\n description: string;\n filename?: string;\n attachment?: string | Uint8Array;\n attachmentUri?: string;\n}\n"]}
|
|
@@ -1,33 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
export declare const PULL_DOWN_CLOSE_THRESHOLD = 200;
|
|
2
|
+
export declare const SLIDE_ANIMATION_DURATION = 200;
|
|
3
|
+
export declare const BACKGROUND_ANIMATION_DURATION = 200;
|
|
4
|
+
declare abstract class FeedbackManager {
|
|
5
|
+
protected static _isVisible: boolean;
|
|
6
|
+
protected static _setVisibility: (visible: boolean) => void;
|
|
7
|
+
protected static get _feedbackComponentName(): string;
|
|
8
|
+
static initialize(setVisibility: (visible: boolean) => void): void;
|
|
9
|
+
/**
|
|
10
|
+
* For testing purposes only.
|
|
11
|
+
*/
|
|
12
|
+
static reset(): void;
|
|
13
|
+
static show(): void;
|
|
14
|
+
static hide(): void;
|
|
15
|
+
static isFormVisible(): boolean;
|
|
7
16
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Provides functionality to show and hide the feedback widget.
|
|
19
|
+
*/
|
|
20
|
+
export declare class FeedbackWidgetManager extends FeedbackManager {
|
|
21
|
+
/**
|
|
22
|
+
* Returns the name of the feedback component.
|
|
23
|
+
*/
|
|
24
|
+
protected static get _feedbackComponentName(): string;
|
|
13
25
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Provides functionality to show and hide the feedback button.
|
|
28
|
+
*/
|
|
29
|
+
export declare class FeedbackButtonManager extends FeedbackManager {
|
|
18
30
|
/**
|
|
19
|
-
*
|
|
31
|
+
* Returns the name of the feedback component.
|
|
20
32
|
*/
|
|
21
|
-
|
|
33
|
+
protected static get _feedbackComponentName(): string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Provides functionality to show and hide the screenshot button.
|
|
37
|
+
*/
|
|
38
|
+
export declare class ScreenshotButtonManager extends FeedbackManager {
|
|
22
39
|
/**
|
|
23
|
-
*
|
|
40
|
+
* Returns the name of the feedback component.
|
|
24
41
|
*/
|
|
25
|
-
|
|
26
|
-
private _handleScroll;
|
|
27
|
-
private _setVisibilityFunction;
|
|
28
|
-
private _handleClose;
|
|
42
|
+
protected static get _feedbackComponentName(): string;
|
|
29
43
|
}
|
|
30
44
|
declare const showFeedbackWidget: () => void;
|
|
31
45
|
declare const resetFeedbackWidgetManager: () => void;
|
|
32
|
-
|
|
46
|
+
declare const showFeedbackButton: () => void;
|
|
47
|
+
declare const hideFeedbackButton: () => void;
|
|
48
|
+
declare const resetFeedbackButtonManager: () => void;
|
|
49
|
+
declare const showScreenshotButton: () => void;
|
|
50
|
+
declare const hideScreenshotButton: () => void;
|
|
51
|
+
declare const resetScreenshotButtonManager: () => void;
|
|
52
|
+
export { showFeedbackButton, hideFeedbackButton, showFeedbackWidget, showScreenshotButton, hideScreenshotButton, resetFeedbackButtonManager, resetFeedbackWidgetManager, resetScreenshotButtonManager };
|
|
33
53
|
//# sourceMappingURL=FeedbackWidgetManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackWidgetManager.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidgetManager.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FeedbackWidgetManager.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidgetManager.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,uBAAe,eAAe;IAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,UAAS;IACpC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAE5D,SAAS,CAAC,MAAM,KAAK,sBAAsB,IAAI,MAAM,CAEpD;WAEa,UAAU,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIzE;;OAEG;WACW,KAAK,IAAI,IAAI;WAKb,IAAI,IAAI,IAAI;WAWZ,IAAI,IAAI,IAAI;WAWZ,aAAa,IAAI,OAAO;CAGvC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,eAAe;IACxD;;OAEG;IACH,SAAS,CAAC,MAAM,KAAK,sBAAsB,IAAI,MAAM,CAEpD;CACF;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,eAAe;IACxD;;OAEG;IACH,SAAS,CAAC,MAAM,KAAK,sBAAsB,IAAI,MAAM,CAEpD;CACF;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D;;OAEG;IACH,SAAS,CAAC,MAAM,KAAK,sBAAsB,IAAI,MAAM,CAEpD;CACF;AAED,QAAA,MAAM,kBAAkB,QAAO,IAG9B,CAAC;AAEF,QAAA,MAAM,0BAA0B,QAAO,IAEtC,CAAC;AAEF,QAAA,MAAM,kBAAkB,QAAO,IAG9B,CAAC;AAEF,QAAA,MAAM,kBAAkB,QAAO,IAE9B,CAAC;AAEF,QAAA,MAAM,0BAA0B,QAAO,IAEtC,CAAC;AAEF,QAAA,MAAM,oBAAoB,QAAO,IAOhC,CAAC;AAEF,QAAA,MAAM,oBAAoB,QAAO,IAEhC,CAAC;AAEF,QAAA,MAAM,4BAA4B,QAAO,IAExC,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,CAAC"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { logger } from '@sentry/core';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const SLIDE_ANIMATION_DURATION = 200;
|
|
12
|
-
const BACKGROUND_ANIMATION_DURATION = 200;
|
|
13
|
-
const useNativeDriverForColorAnimations = isNativeDriverSupportedForColorAnimations();
|
|
14
|
-
class FeedbackWidgetManager {
|
|
2
|
+
import { isWeb } from '../utils/environment';
|
|
3
|
+
import { lazyLoadAutoInjectFeedbackButtonIntegration, lazyLoadAutoInjectFeedbackIntegration, lazyLoadAutoInjectScreenshotButtonIntegration } from './lazy';
|
|
4
|
+
export const PULL_DOWN_CLOSE_THRESHOLD = 200;
|
|
5
|
+
export const SLIDE_ANIMATION_DURATION = 200;
|
|
6
|
+
export const BACKGROUND_ANIMATION_DURATION = 200;
|
|
7
|
+
class FeedbackManager {
|
|
8
|
+
static get _feedbackComponentName() {
|
|
9
|
+
throw new Error('Subclasses must override feedbackComponentName');
|
|
10
|
+
}
|
|
15
11
|
static initialize(setVisibility) {
|
|
16
12
|
this._setVisibility = setVisibility;
|
|
17
13
|
}
|
|
@@ -30,7 +26,7 @@ class FeedbackWidgetManager {
|
|
|
30
26
|
else {
|
|
31
27
|
// This message should be always shown otherwise it's not possible to use the widget.
|
|
32
28
|
// eslint-disable-next-line no-console
|
|
33
|
-
console.warn(
|
|
29
|
+
console.warn(`[Sentry] ${this._feedbackComponentName} requires 'Sentry.wrap(RootComponent)' to be called before 'show${this._feedbackComponentName}()'.`);
|
|
34
30
|
}
|
|
35
31
|
}
|
|
36
32
|
static hide() {
|
|
@@ -41,141 +37,45 @@ class FeedbackWidgetManager {
|
|
|
41
37
|
else {
|
|
42
38
|
// This message should be always shown otherwise it's not possible to use the widget.
|
|
43
39
|
// eslint-disable-next-line no-console
|
|
44
|
-
console.warn(
|
|
40
|
+
console.warn(`[Sentry] ${this._feedbackComponentName} requires 'Sentry.wrap(RootComponent)' before interacting with the widget.`);
|
|
45
41
|
}
|
|
46
42
|
}
|
|
47
43
|
static isFormVisible() {
|
|
48
44
|
return this._isVisible;
|
|
49
45
|
}
|
|
50
46
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this._panResponder = PanResponder.create({
|
|
62
|
-
onStartShouldSetPanResponder: (_, gestureState) => {
|
|
63
|
-
return notWeb() && this.state.isScrollAtTop && gestureState.dy > 0;
|
|
64
|
-
},
|
|
65
|
-
onMoveShouldSetPanResponder: (_, gestureState) => {
|
|
66
|
-
return notWeb() && this.state.isScrollAtTop && gestureState.dy > 0;
|
|
67
|
-
},
|
|
68
|
-
onPanResponderMove: (_, gestureState) => {
|
|
69
|
-
if (gestureState.dy > 0) {
|
|
70
|
-
this.state.panY.setValue(gestureState.dy);
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
onPanResponderRelease: (_, gestureState) => {
|
|
74
|
-
if (gestureState.dy > PULL_DOWN_CLOSE_THRESHOLD) {
|
|
75
|
-
// Close on swipe below a certain threshold
|
|
76
|
-
Animated.timing(this.state.panY, {
|
|
77
|
-
toValue: Dimensions.get('screen').height,
|
|
78
|
-
duration: SLIDE_ANIMATION_DURATION,
|
|
79
|
-
useNativeDriver: true,
|
|
80
|
-
}).start(() => {
|
|
81
|
-
this._handleClose();
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
// Animate it back to the original position
|
|
86
|
-
Animated.spring(this.state.panY, {
|
|
87
|
-
toValue: 0,
|
|
88
|
-
useNativeDriver: true,
|
|
89
|
-
}).start();
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
this._handleScroll = (event) => {
|
|
94
|
-
this.setState({ isScrollAtTop: event.nativeEvent.contentOffset.y <= 0 });
|
|
95
|
-
};
|
|
96
|
-
this._setVisibilityFunction = (visible) => {
|
|
97
|
-
const updateState = () => {
|
|
98
|
-
this.setState({ isVisible: visible });
|
|
99
|
-
};
|
|
100
|
-
if (!visible) {
|
|
101
|
-
Animated.parallel([
|
|
102
|
-
Animated.timing(this.state.panY, {
|
|
103
|
-
toValue: Dimensions.get('screen').height,
|
|
104
|
-
duration: SLIDE_ANIMATION_DURATION,
|
|
105
|
-
useNativeDriver: true,
|
|
106
|
-
easing: Easing.out(Easing.quad),
|
|
107
|
-
}),
|
|
108
|
-
Animated.timing(this.state.backgroundOpacity, {
|
|
109
|
-
toValue: 0,
|
|
110
|
-
duration: BACKGROUND_ANIMATION_DURATION,
|
|
111
|
-
useNativeDriver: useNativeDriverForColorAnimations,
|
|
112
|
-
easing: Easing.out(Easing.quad),
|
|
113
|
-
})
|
|
114
|
-
]).start(() => {
|
|
115
|
-
// Change of the state unmount the component
|
|
116
|
-
// which would cancel the animation
|
|
117
|
-
updateState();
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
updateState();
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
this._handleClose = () => {
|
|
125
|
-
FeedbackWidgetManager.hide();
|
|
126
|
-
};
|
|
127
|
-
FeedbackWidgetManager.initialize(this._setVisibilityFunction);
|
|
47
|
+
FeedbackManager._isVisible = false;
|
|
48
|
+
/**
|
|
49
|
+
* Provides functionality to show and hide the feedback widget.
|
|
50
|
+
*/
|
|
51
|
+
export class FeedbackWidgetManager extends FeedbackManager {
|
|
52
|
+
/**
|
|
53
|
+
* Returns the name of the feedback component.
|
|
54
|
+
*/
|
|
55
|
+
static get _feedbackComponentName() {
|
|
56
|
+
return 'FeedbackWidget';
|
|
128
57
|
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Provides functionality to show and hide the feedback button.
|
|
61
|
+
*/
|
|
62
|
+
export class FeedbackButtonManager extends FeedbackManager {
|
|
129
63
|
/**
|
|
130
|
-
*
|
|
64
|
+
* Returns the name of the feedback component.
|
|
131
65
|
*/
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
Animated.parallel([
|
|
135
|
-
Animated.timing(this.state.backgroundOpacity, {
|
|
136
|
-
toValue: 1,
|
|
137
|
-
duration: BACKGROUND_ANIMATION_DURATION,
|
|
138
|
-
useNativeDriver: useNativeDriverForColorAnimations,
|
|
139
|
-
easing: Easing.in(Easing.quad),
|
|
140
|
-
}),
|
|
141
|
-
Animated.timing(this.state.panY, {
|
|
142
|
-
toValue: 0,
|
|
143
|
-
duration: SLIDE_ANIMATION_DURATION,
|
|
144
|
-
useNativeDriver: true,
|
|
145
|
-
easing: Easing.in(Easing.quad),
|
|
146
|
-
})
|
|
147
|
-
]).start(() => {
|
|
148
|
-
logger.info('FeedbackWidgetProvider componentDidUpdate');
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
else if (prevState.isVisible && !this.state.isVisible) {
|
|
152
|
-
this.state.backgroundOpacity.setValue(0);
|
|
153
|
-
}
|
|
66
|
+
static get _feedbackComponentName() {
|
|
67
|
+
return 'FeedbackButton';
|
|
154
68
|
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Provides functionality to show and hide the screenshot button.
|
|
72
|
+
*/
|
|
73
|
+
export class ScreenshotButtonManager extends FeedbackManager {
|
|
155
74
|
/**
|
|
156
|
-
*
|
|
75
|
+
* Returns the name of the feedback component.
|
|
157
76
|
*/
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
logger.error('FeedbackWidget Modal is not supported in React Native < 0.71 with Fabric renderer.');
|
|
161
|
-
return React.createElement(React.Fragment, null, this.props.children);
|
|
162
|
-
}
|
|
163
|
-
const { isVisible, backgroundOpacity } = this.state;
|
|
164
|
-
const backgroundColor = backgroundOpacity.interpolate({
|
|
165
|
-
inputRange: [0, 1],
|
|
166
|
-
outputRange: ['rgba(0, 0, 0, 0)', 'rgba(0, 0, 0, 0.9)'],
|
|
167
|
-
});
|
|
168
|
-
// Wrapping the `Modal` component in a `View` component is necessary to avoid
|
|
169
|
-
// issues like https://github.com/software-mansion/react-native-reanimated/issues/6035
|
|
170
|
-
return (React.createElement(React.Fragment, null,
|
|
171
|
-
this.props.children,
|
|
172
|
-
isVisible &&
|
|
173
|
-
React.createElement(Animated.View, { style: [modalWrapper, { backgroundColor }] },
|
|
174
|
-
React.createElement(Modal, { visible: isVisible, transparent: true, animationType: "none", onRequestClose: this._handleClose, testID: "feedback-form-modal" },
|
|
175
|
-
React.createElement(View, { style: topSpacer }),
|
|
176
|
-
React.createElement(Animated.View, Object.assign({ style: [modalSheetContainer, { transform: [{ translateY: this.state.panY }] }] }, this._panResponder.panHandlers),
|
|
177
|
-
React.createElement(ScrollView, { bounces: false, keyboardShouldPersistTaps: "handled", automaticallyAdjustKeyboardInsets: Platform.OS === 'ios', onScroll: this._handleScroll },
|
|
178
|
-
React.createElement(FeedbackWidget, Object.assign({}, getFeedbackOptions(), { onFormClose: this._handleClose, onFormSubmitted: this._handleClose }))))))));
|
|
77
|
+
static get _feedbackComponentName() {
|
|
78
|
+
return 'ScreenshotButton';
|
|
179
79
|
}
|
|
180
80
|
}
|
|
181
81
|
const showFeedbackWidget = () => {
|
|
@@ -185,5 +85,29 @@ const showFeedbackWidget = () => {
|
|
|
185
85
|
const resetFeedbackWidgetManager = () => {
|
|
186
86
|
FeedbackWidgetManager.reset();
|
|
187
87
|
};
|
|
188
|
-
|
|
88
|
+
const showFeedbackButton = () => {
|
|
89
|
+
lazyLoadAutoInjectFeedbackButtonIntegration();
|
|
90
|
+
FeedbackButtonManager.show();
|
|
91
|
+
};
|
|
92
|
+
const hideFeedbackButton = () => {
|
|
93
|
+
FeedbackButtonManager.hide();
|
|
94
|
+
};
|
|
95
|
+
const resetFeedbackButtonManager = () => {
|
|
96
|
+
FeedbackButtonManager.reset();
|
|
97
|
+
};
|
|
98
|
+
const showScreenshotButton = () => {
|
|
99
|
+
if (isWeb()) {
|
|
100
|
+
logger.warn('ScreenshotButton is not supported on Web.');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
lazyLoadAutoInjectScreenshotButtonIntegration();
|
|
104
|
+
ScreenshotButtonManager.show();
|
|
105
|
+
};
|
|
106
|
+
const hideScreenshotButton = () => {
|
|
107
|
+
ScreenshotButtonManager.hide();
|
|
108
|
+
};
|
|
109
|
+
const resetScreenshotButtonManager = () => {
|
|
110
|
+
ScreenshotButtonManager.reset();
|
|
111
|
+
};
|
|
112
|
+
export { showFeedbackButton, hideFeedbackButton, showFeedbackWidget, showScreenshotButton, hideScreenshotButton, resetFeedbackButtonManager, resetFeedbackWidgetManager, resetScreenshotButtonManager };
|
|
189
113
|
//# sourceMappingURL=FeedbackWidgetManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackWidgetManager.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidgetManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@sentry/core';\nimport * as React from 'react';\nimport type { NativeScrollEvent, NativeSyntheticEvent} from 'react-native';\nimport { Animated, Dimensions, Easing, Modal, PanResponder, Platform, ScrollView, View } from 'react-native';\n\nimport { notWeb } from '../utils/environment';\nimport { FeedbackWidget } from './FeedbackWidget';\nimport { modalSheetContainer, modalWrapper, topSpacer } from './FeedbackWidget.styles';\nimport type { FeedbackWidgetStyles } from './FeedbackWidget.types';\nimport { getFeedbackOptions } from './integration';\nimport { lazyLoadAutoInjectFeedbackIntegration } from './lazy';\nimport { isModalSupported, isNativeDriverSupportedForColorAnimations } from './utils';\n\nconst PULL_DOWN_CLOSE_THRESHOLD = 200;\nconst SLIDE_ANIMATION_DURATION = 200;\nconst BACKGROUND_ANIMATION_DURATION = 200;\n\nconst useNativeDriverForColorAnimations = isNativeDriverSupportedForColorAnimations();\n\nclass FeedbackWidgetManager {\n private static _isVisible = false;\n private static _setVisibility: (visible: boolean) => void;\n\n public static initialize(setVisibility: (visible: boolean) => void): void {\n this._setVisibility = setVisibility;\n }\n\n /**\n * For testing purposes only.\n */\n public static reset(): void {\n this._isVisible = false;\n this._setVisibility = undefined;\n }\n\n public static show(): void {\n if (this._setVisibility) {\n this._isVisible = true;\n this._setVisibility(true);\n } else {\n // This message should be always shown otherwise it's not possible to use the widget.\n // eslint-disable-next-line no-console\n console.warn('[Sentry] FeedbackWidget requires `Sentry.wrap(RootComponent)` to be called before `showFeedbackWidget()`.');\n }\n }\n\n public static hide(): void {\n if (this._setVisibility) {\n this._isVisible = false;\n this._setVisibility(false);\n } else {\n // This message should be always shown otherwise it's not possible to use the widget.\n // eslint-disable-next-line no-console\n console.warn('[Sentry] FeedbackWidget requires `Sentry.wrap(RootComponent)` before interacting with the widget.');\n }\n }\n\n public static isFormVisible(): boolean {\n return this._isVisible;\n }\n}\n\ninterface FeedbackWidgetProviderProps {\n children: React.ReactNode;\n styles?: FeedbackWidgetStyles;\n}\n\ninterface FeedbackWidgetProviderState {\n isVisible: boolean;\n backgroundOpacity: Animated.Value;\n panY: Animated.Value;\n isScrollAtTop: boolean;\n}\n\nclass FeedbackWidgetProvider extends React.Component<FeedbackWidgetProviderProps> {\n public state: FeedbackWidgetProviderState = {\n isVisible: false,\n backgroundOpacity: new Animated.Value(0),\n panY: new Animated.Value(Dimensions.get('screen').height),\n isScrollAtTop: true,\n };\n\n private _panResponder = PanResponder.create({\n onStartShouldSetPanResponder: (_, gestureState) => {\n return notWeb() && this.state.isScrollAtTop && gestureState.dy > 0;\n },\n onMoveShouldSetPanResponder: (_, gestureState) => {\n return notWeb() && this.state.isScrollAtTop && gestureState.dy > 0;\n },\n onPanResponderMove: (_, gestureState) => {\n if (gestureState.dy > 0) {\n this.state.panY.setValue(gestureState.dy);\n }\n },\n onPanResponderRelease: (_, gestureState) => {\n if (gestureState.dy > PULL_DOWN_CLOSE_THRESHOLD) {\n // Close on swipe below a certain threshold\n Animated.timing(this.state.panY, {\n toValue: Dimensions.get('screen').height,\n duration: SLIDE_ANIMATION_DURATION,\n useNativeDriver: true,\n }).start(() => {\n this._handleClose();\n });\n } else {\n // Animate it back to the original position\n Animated.spring(this.state.panY, {\n toValue: 0,\n useNativeDriver: true,\n }).start();\n }\n },\n });\n\n public constructor(props: FeedbackWidgetProviderProps) {\n super(props);\n FeedbackWidgetManager.initialize(this._setVisibilityFunction);\n }\n\n /**\n * Animates the background opacity when the modal is shown.\n */\n public componentDidUpdate(_prevProps: any, prevState: FeedbackWidgetProviderState): void {\n if (!prevState.isVisible && this.state.isVisible) {\n Animated.parallel([\n Animated.timing(this.state.backgroundOpacity, {\n toValue: 1,\n duration: BACKGROUND_ANIMATION_DURATION,\n useNativeDriver: useNativeDriverForColorAnimations,\n easing: Easing.in(Easing.quad),\n }),\n Animated.timing(this.state.panY, {\n toValue: 0,\n duration: SLIDE_ANIMATION_DURATION,\n useNativeDriver: true,\n easing: Easing.in(Easing.quad),\n })\n ]).start(() => {\n logger.info('FeedbackWidgetProvider componentDidUpdate');\n });\n } else if (prevState.isVisible && !this.state.isVisible) {\n this.state.backgroundOpacity.setValue(0);\n }\n }\n\n /**\n * Renders the feedback form modal.\n */\n public render(): React.ReactNode {\n if (!isModalSupported()) {\n logger.error('FeedbackWidget Modal is not supported in React Native < 0.71 with Fabric renderer.');\n return <>{this.props.children}</>;\n }\n\n const { isVisible, backgroundOpacity } = this.state;\n\n const backgroundColor = backgroundOpacity.interpolate({\n inputRange: [0, 1],\n outputRange: ['rgba(0, 0, 0, 0)', 'rgba(0, 0, 0, 0.9)'],\n });\n\n // Wrapping the `Modal` component in a `View` component is necessary to avoid\n // issues like https://github.com/software-mansion/react-native-reanimated/issues/6035\n return (\n <>\n {this.props.children}\n {isVisible &&\n <Animated.View style={[modalWrapper, { backgroundColor }]} >\n <Modal visible={isVisible} transparent animationType=\"none\" onRequestClose={this._handleClose} testID=\"feedback-form-modal\">\n <View style={topSpacer}/>\n <Animated.View\n style={[modalSheetContainer, { transform: [{ translateY: this.state.panY }] }]}\n {...this._panResponder.panHandlers}>\n <ScrollView\n bounces={false}\n keyboardShouldPersistTaps=\"handled\"\n automaticallyAdjustKeyboardInsets={Platform.OS === 'ios'}\n onScroll={this._handleScroll}>\n <FeedbackWidget {...getFeedbackOptions()}\n onFormClose={this._handleClose}\n onFormSubmitted={this._handleClose}\n />\n </ScrollView>\n </Animated.View>\n </Modal>\n </Animated.View>\n }\n </>\n );\n }\n\n private _handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>): void => {\n this.setState({ isScrollAtTop: event.nativeEvent.contentOffset.y <= 0 });\n };\n\n private _setVisibilityFunction = (visible: boolean): void => {\n const updateState = (): void => {\n this.setState({ isVisible: visible });\n };\n if (!visible) {\n Animated.parallel([\n Animated.timing(this.state.panY, {\n toValue: Dimensions.get('screen').height,\n duration: SLIDE_ANIMATION_DURATION,\n useNativeDriver: true,\n easing: Easing.out(Easing.quad),\n }),\n Animated.timing(this.state.backgroundOpacity, {\n toValue: 0,\n duration: BACKGROUND_ANIMATION_DURATION,\n useNativeDriver: useNativeDriverForColorAnimations,\n easing: Easing.out(Easing.quad),\n })\n ]).start(() => {\n // Change of the state unmount the component\n // which would cancel the animation\n updateState();\n });\n } else {\n updateState();\n }\n };\n\n private _handleClose = (): void => {\n FeedbackWidgetManager.hide();\n };\n}\n\nconst showFeedbackWidget = (): void => {\n lazyLoadAutoInjectFeedbackIntegration();\n FeedbackWidgetManager.show();\n};\n\nconst resetFeedbackWidgetManager = (): void => {\n FeedbackWidgetManager.reset();\n};\n\nexport { showFeedbackWidget, FeedbackWidgetProvider, resetFeedbackWidgetManager };\n"]}
|
|
1
|
+
{"version":3,"file":"FeedbackWidgetManager.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidgetManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@sentry/core';\n\nimport { isWeb } from '../utils/environment';\nimport { lazyLoadAutoInjectFeedbackButtonIntegration,lazyLoadAutoInjectFeedbackIntegration, lazyLoadAutoInjectScreenshotButtonIntegration } from './lazy';\n\nexport const PULL_DOWN_CLOSE_THRESHOLD = 200;\nexport const SLIDE_ANIMATION_DURATION = 200;\nexport const BACKGROUND_ANIMATION_DURATION = 200;\n\nabstract class FeedbackManager {\n protected static _isVisible = false;\n protected static _setVisibility: (visible: boolean) => void;\n\n protected static get _feedbackComponentName(): string {\n throw new Error('Subclasses must override feedbackComponentName');\n }\n\n public static initialize(setVisibility: (visible: boolean) => void): void {\n this._setVisibility = setVisibility;\n }\n\n /**\n * For testing purposes only.\n */\n public static reset(): void {\n this._isVisible = false;\n this._setVisibility = undefined;\n }\n\n public static show(): void {\n if (this._setVisibility) {\n this._isVisible = true;\n this._setVisibility(true);\n } else {\n // This message should be always shown otherwise it's not possible to use the widget.\n // eslint-disable-next-line no-console\n console.warn(`[Sentry] ${this._feedbackComponentName} requires 'Sentry.wrap(RootComponent)' to be called before 'show${this._feedbackComponentName}()'.`);\n }\n }\n\n public static hide(): void {\n if (this._setVisibility) {\n this._isVisible = false;\n this._setVisibility(false);\n } else {\n // This message should be always shown otherwise it's not possible to use the widget.\n // eslint-disable-next-line no-console\n console.warn(`[Sentry] ${this._feedbackComponentName} requires 'Sentry.wrap(RootComponent)' before interacting with the widget.`);\n }\n }\n\n public static isFormVisible(): boolean {\n return this._isVisible;\n }\n}\n\n/**\n * Provides functionality to show and hide the feedback widget.\n */\nexport class FeedbackWidgetManager extends FeedbackManager {\n /**\n * Returns the name of the feedback component.\n */\n protected static get _feedbackComponentName(): string {\n return 'FeedbackWidget';\n }\n}\n\n/**\n * Provides functionality to show and hide the feedback button.\n */\nexport class FeedbackButtonManager extends FeedbackManager {\n /**\n * Returns the name of the feedback component.\n */\n protected static get _feedbackComponentName(): string {\n return 'FeedbackButton';\n }\n}\n\n/**\n * Provides functionality to show and hide the screenshot button.\n */\nexport class ScreenshotButtonManager extends FeedbackManager {\n /**\n * Returns the name of the feedback component.\n */\n protected static get _feedbackComponentName(): string {\n return 'ScreenshotButton';\n }\n}\n\nconst showFeedbackWidget = (): void => {\n lazyLoadAutoInjectFeedbackIntegration();\n FeedbackWidgetManager.show();\n};\n\nconst resetFeedbackWidgetManager = (): void => {\n FeedbackWidgetManager.reset();\n};\n\nconst showFeedbackButton = (): void => {\n lazyLoadAutoInjectFeedbackButtonIntegration();\n FeedbackButtonManager.show();\n};\n\nconst hideFeedbackButton = (): void => {\n FeedbackButtonManager.hide();\n};\n\nconst resetFeedbackButtonManager = (): void => {\n FeedbackButtonManager.reset();\n};\n\nconst showScreenshotButton = (): void => {\n if (isWeb()) {\n logger.warn('ScreenshotButton is not supported on Web.');\n return;\n }\n lazyLoadAutoInjectScreenshotButtonIntegration();\n ScreenshotButtonManager.show();\n};\n\nconst hideScreenshotButton = (): void => {\n ScreenshotButtonManager.hide();\n};\n\nconst resetScreenshotButtonManager = (): void => {\n ScreenshotButtonManager.reset();\n};\n\nexport { showFeedbackButton, hideFeedbackButton, showFeedbackWidget, showScreenshotButton, hideScreenshotButton, resetFeedbackButtonManager, resetFeedbackWidgetManager, resetScreenshotButtonManager };\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Animated } from 'react-native';
|
|
3
|
+
import type { FeedbackWidgetStyles } from './FeedbackWidget.types';
|
|
4
|
+
export interface FeedbackWidgetProviderProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
styles?: FeedbackWidgetStyles;
|
|
7
|
+
}
|
|
8
|
+
export interface FeedbackWidgetProviderState {
|
|
9
|
+
isButtonVisible: boolean;
|
|
10
|
+
isScreenshotButtonVisible: boolean;
|
|
11
|
+
isVisible: boolean;
|
|
12
|
+
backgroundOpacity: Animated.Value;
|
|
13
|
+
panY: Animated.Value;
|
|
14
|
+
isScrollAtTop: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* FeedbackWidgetProvider is a component that wraps the feedback widget and provides
|
|
18
|
+
* functionality to show and hide the widget. It also manages the visibility of the
|
|
19
|
+
* feedback button and screenshot button.
|
|
20
|
+
*/
|
|
21
|
+
export declare class FeedbackWidgetProvider extends React.Component<FeedbackWidgetProviderProps> {
|
|
22
|
+
state: FeedbackWidgetProviderState;
|
|
23
|
+
private _themeListener;
|
|
24
|
+
private _panResponder;
|
|
25
|
+
constructor(props: FeedbackWidgetProviderProps);
|
|
26
|
+
/**
|
|
27
|
+
* Add a listener to the theme change event.
|
|
28
|
+
*/
|
|
29
|
+
componentDidMount(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Clean up the theme listener.
|
|
32
|
+
*/
|
|
33
|
+
componentWillUnmount(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Animates the background opacity when the modal is shown.
|
|
36
|
+
*/
|
|
37
|
+
componentDidUpdate(_prevProps: any, prevState: FeedbackWidgetProviderState): void;
|
|
38
|
+
/**
|
|
39
|
+
* Renders the feedback form modal.
|
|
40
|
+
*/
|
|
41
|
+
render(): React.ReactNode;
|
|
42
|
+
private _handleScroll;
|
|
43
|
+
private _setVisibilityFunction;
|
|
44
|
+
private _setButtonVisibilityFunction;
|
|
45
|
+
private _setScreenshotButtonVisibilityFunction;
|
|
46
|
+
private _handleClose;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=FeedbackWidgetProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackWidgetProvider.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackWidgetProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAkF,QAAQ,EAAmF,MAAM,cAAc,CAAC;AAOzM,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQnE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,OAAO,CAAC;IACzB,yBAAyB,EAAE,OAAO,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC;IAClC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,2BAA2B,CAAC;IAC/E,KAAK,EAAE,2BAA2B,CAOvC;IAEF,OAAO,CAAC,cAAc,CAA0B;IAEhD,OAAO,CAAC,aAAa,CA8BlB;gBAEgB,KAAK,EAAE,2BAA2B;IAOrD;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAMhC;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAMnC;;OAEG;IACI,kBAAkB,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,2BAA2B,GAAG,IAAI;IAuBxF;;OAEG;IACI,MAAM,IAAI,KAAK,CAAC,SAAS;IA6ChC,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,sBAAsB,CA0B5B;IAEF,OAAO,CAAC,4BAA4B,CAElC;IAEF,OAAO,CAAC,sCAAsC,CAE5C;IAEF,OAAO,CAAC,YAAY,CAElB;CACH"}
|