react-native-bug-reporter 1.0.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/LICENSE +21 -0
- package/README.md +217 -0
- package/android/build.gradle +49 -0
- package/android/src/main/AndroidManifest.xml +11 -0
- package/android/src/main/java/com/bugreporter/ScreenshotDetectorModule.kt +227 -0
- package/android/src/main/java/com/bugreporter/ScreenshotDetectorPackage.kt +20 -0
- package/ios/RNBugReporterScreenshot.m +11 -0
- package/ios/RNBugReporterScreenshot.swift +113 -0
- package/lib/commonjs/BugReporterProvider.js +139 -0
- package/lib/commonjs/BugReporterProvider.js.map +1 -0
- package/lib/commonjs/collectors/appInfo.js +21 -0
- package/lib/commonjs/collectors/appInfo.js.map +1 -0
- package/lib/commonjs/collectors/collectContext.js +45 -0
- package/lib/commonjs/collectors/collectContext.js.map +1 -0
- package/lib/commonjs/collectors/deviceInfo.js +41 -0
- package/lib/commonjs/collectors/deviceInfo.js.map +1 -0
- package/lib/commonjs/collectors/networkInfo.js +33 -0
- package/lib/commonjs/collectors/networkInfo.js.map +1 -0
- package/lib/commonjs/components/BugReportAdminScreen.js +225 -0
- package/lib/commonjs/components/BugReportAdminScreen.js.map +1 -0
- package/lib/commonjs/components/BugReportModal.js +341 -0
- package/lib/commonjs/components/BugReportModal.js.map +1 -0
- package/lib/commonjs/components/ScreenshotEditor.js +466 -0
- package/lib/commonjs/components/ScreenshotEditor.js.map +1 -0
- package/lib/commonjs/components/ScreenshotPreview.js +134 -0
- package/lib/commonjs/components/ScreenshotPreview.js.map +1 -0
- package/lib/commonjs/components/SeveritySelector.js +65 -0
- package/lib/commonjs/components/SeveritySelector.js.map +1 -0
- package/lib/commonjs/context/BugReporterContext.js +24 -0
- package/lib/commonjs/context/BugReporterContext.js.map +1 -0
- package/lib/commonjs/hooks/useScreenshotDetector.js +22 -0
- package/lib/commonjs/hooks/useScreenshotDetector.js.map +1 -0
- package/lib/commonjs/index.js +87 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/native/ScreenshotDetector.js +72 -0
- package/lib/commonjs/native/ScreenshotDetector.js.map +1 -0
- package/lib/commonjs/navigation/screenTracker.js +47 -0
- package/lib/commonjs/navigation/screenTracker.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/services/bugReportService.js +61 -0
- package/lib/commonjs/services/bugReportService.js.map +1 -0
- package/lib/commonjs/services/supabaseService.js +166 -0
- package/lib/commonjs/services/supabaseService.js.map +1 -0
- package/lib/commonjs/theme.js +28 -0
- package/lib/commonjs/theme.js.map +1 -0
- package/lib/commonjs/types.js +35 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/logger.js +29 -0
- package/lib/commonjs/utils/logger.js.map +1 -0
- package/lib/module/BugReporterProvider.js +134 -0
- package/lib/module/BugReporterProvider.js.map +1 -0
- package/lib/module/collectors/appInfo.js +16 -0
- package/lib/module/collectors/appInfo.js.map +1 -0
- package/lib/module/collectors/collectContext.js +41 -0
- package/lib/module/collectors/collectContext.js.map +1 -0
- package/lib/module/collectors/deviceInfo.js +37 -0
- package/lib/module/collectors/deviceInfo.js.map +1 -0
- package/lib/module/collectors/networkInfo.js +29 -0
- package/lib/module/collectors/networkInfo.js.map +1 -0
- package/lib/module/components/BugReportAdminScreen.js +221 -0
- package/lib/module/components/BugReportAdminScreen.js.map +1 -0
- package/lib/module/components/BugReportModal.js +337 -0
- package/lib/module/components/BugReportModal.js.map +1 -0
- package/lib/module/components/ScreenshotEditor.js +461 -0
- package/lib/module/components/ScreenshotEditor.js.map +1 -0
- package/lib/module/components/ScreenshotPreview.js +130 -0
- package/lib/module/components/ScreenshotPreview.js.map +1 -0
- package/lib/module/components/SeveritySelector.js +61 -0
- package/lib/module/components/SeveritySelector.js.map +1 -0
- package/lib/module/context/BugReporterContext.js +19 -0
- package/lib/module/context/BugReporterContext.js.map +1 -0
- package/lib/module/hooks/useScreenshotDetector.js +18 -0
- package/lib/module/hooks/useScreenshotDetector.js.map +1 -0
- package/lib/module/index.js +32 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/native/ScreenshotDetector.js +68 -0
- package/lib/module/native/ScreenshotDetector.js.map +1 -0
- package/lib/module/navigation/screenTracker.js +41 -0
- package/lib/module/navigation/screenTracker.js.map +1 -0
- package/lib/module/services/bugReportService.js +57 -0
- package/lib/module/services/bugReportService.js.map +1 -0
- package/lib/module/services/supabaseService.js +159 -0
- package/lib/module/services/supabaseService.js.map +1 -0
- package/lib/module/theme.js +23 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +31 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/logger.js +25 -0
- package/lib/module/utils/logger.js.map +1 -0
- package/lib/typescript/src/BugReporterProvider.d.ts +18 -0
- package/lib/typescript/src/BugReporterProvider.d.ts.map +1 -0
- package/lib/typescript/src/collectors/appInfo.d.ts +6 -0
- package/lib/typescript/src/collectors/appInfo.d.ts.map +1 -0
- package/lib/typescript/src/collectors/collectContext.d.ts +7 -0
- package/lib/typescript/src/collectors/collectContext.d.ts.map +1 -0
- package/lib/typescript/src/collectors/deviceInfo.d.ts +7 -0
- package/lib/typescript/src/collectors/deviceInfo.d.ts.map +1 -0
- package/lib/typescript/src/collectors/networkInfo.d.ts +6 -0
- package/lib/typescript/src/collectors/networkInfo.d.ts.map +1 -0
- package/lib/typescript/src/components/BugReportAdminScreen.d.ts +11 -0
- package/lib/typescript/src/components/BugReportAdminScreen.d.ts.map +1 -0
- package/lib/typescript/src/components/BugReportModal.d.ts +20 -0
- package/lib/typescript/src/components/BugReportModal.d.ts.map +1 -0
- package/lib/typescript/src/components/ScreenshotEditor.d.ts +16 -0
- package/lib/typescript/src/components/ScreenshotEditor.d.ts.map +1 -0
- package/lib/typescript/src/components/ScreenshotPreview.d.ts +11 -0
- package/lib/typescript/src/components/ScreenshotPreview.d.ts.map +1 -0
- package/lib/typescript/src/components/SeveritySelector.d.ts +10 -0
- package/lib/typescript/src/components/SeveritySelector.d.ts.map +1 -0
- package/lib/typescript/src/context/BugReporterContext.d.ts +20 -0
- package/lib/typescript/src/context/BugReporterContext.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useScreenshotDetector.d.ts +7 -0
- package/lib/typescript/src/hooks/useScreenshotDetector.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +26 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/native/ScreenshotDetector.d.ts +15 -0
- package/lib/typescript/src/native/ScreenshotDetector.d.ts.map +1 -0
- package/lib/typescript/src/navigation/screenTracker.d.ts +7 -0
- package/lib/typescript/src/navigation/screenTracker.d.ts.map +1 -0
- package/lib/typescript/src/services/bugReportService.d.ts +17 -0
- package/lib/typescript/src/services/bugReportService.d.ts.map +1 -0
- package/lib/typescript/src/services/supabaseService.d.ts +38 -0
- package/lib/typescript/src/services/supabaseService.d.ts.map +1 -0
- package/lib/typescript/src/theme.d.ts +7 -0
- package/lib/typescript/src/theme.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +144 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/logger.d.ts +7 -0
- package/lib/typescript/src/utils/logger.d.ts.map +1 -0
- package/package.json +100 -0
- package/react-native-bug-reporter.podspec +22 -0
- package/react-native.config.js +18 -0
- package/src/BugReporterProvider.tsx +178 -0
- package/src/collectors/appInfo.ts +15 -0
- package/src/collectors/collectContext.ts +47 -0
- package/src/collectors/deviceInfo.ts +51 -0
- package/src/collectors/networkInfo.ts +31 -0
- package/src/components/BugReportAdminScreen.tsx +160 -0
- package/src/components/BugReportModal.tsx +315 -0
- package/src/components/ScreenshotEditor.tsx +410 -0
- package/src/components/ScreenshotPreview.tsx +98 -0
- package/src/components/SeveritySelector.tsx +59 -0
- package/src/context/BugReporterContext.ts +29 -0
- package/src/hooks/useScreenshotDetector.ts +20 -0
- package/src/index.ts +51 -0
- package/src/native/ScreenshotDetector.ts +87 -0
- package/src/navigation/screenTracker.ts +40 -0
- package/src/services/bugReportService.ts +81 -0
- package/src/services/supabaseService.ts +195 -0
- package/src/theme.ts +23 -0
- package/src/types.ts +156 -0
- package/src/utils/logger.ts +24 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SEVERITIES = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Core type definitions for the Universal Bug Reporter SDK.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const SEVERITIES = exports.SEVERITIES = ['low', 'medium', 'high', 'critical'];
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Information about the signed-in user, supplied by the host app.
|
|
15
|
+
* Everything is optional so the SDK works in apps without auth.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/** Device metadata collected automatically at report time. */
|
|
19
|
+
|
|
20
|
+
/** Host application metadata collected automatically. */
|
|
21
|
+
|
|
22
|
+
/** Network connectivity snapshot. */
|
|
23
|
+
|
|
24
|
+
/** Everything the SDK auto-collects when a report is opened. */
|
|
25
|
+
|
|
26
|
+
/** User-entered fields from the report modal. */
|
|
27
|
+
|
|
28
|
+
/** The full bug report persisted on the backend. */
|
|
29
|
+
|
|
30
|
+
/** A screenshot captured / detected on device. */
|
|
31
|
+
|
|
32
|
+
/** Theme overrides for the modal UI. */
|
|
33
|
+
|
|
34
|
+
/** Configuration passed to BugReporterProvider. */
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SEVERITIES","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;;AAIO,MAAMA,UAAyB,GAAAC,OAAA,CAAAD,UAAA,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC;;AAE9E;AACA;AACA;AACA;;AASA;;AAmBA;;AAUA;;AAUA;;AAWA;;AAOA;;AAYA;;AAYA;;AAUA","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.logger = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Tiny namespaced logger that can be toggled via config.debug.
|
|
9
|
+
*/
|
|
10
|
+
let enabled = false;
|
|
11
|
+
const PREFIX = '[BugReporter]';
|
|
12
|
+
const logger = exports.logger = {
|
|
13
|
+
setEnabled(value) {
|
|
14
|
+
enabled = value;
|
|
15
|
+
},
|
|
16
|
+
log(...args) {
|
|
17
|
+
if (enabled) {
|
|
18
|
+
console.log(PREFIX, ...args);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
warn(...args) {
|
|
22
|
+
// Warnings always surface — they usually indicate a setup problem.
|
|
23
|
+
console.warn(PREFIX, ...args);
|
|
24
|
+
},
|
|
25
|
+
error(...args) {
|
|
26
|
+
console.error(PREFIX, ...args);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["enabled","PREFIX","logger","exports","setEnabled","value","log","args","console","warn","error"],"sourceRoot":"../../../src","sources":["utils/logger.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA,IAAIA,OAAO,GAAG,KAAK;AAEnB,MAAMC,MAAM,GAAG,eAAe;AAEvB,MAAMC,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAG;EACpBE,UAAUA,CAACC,KAAc,EAAE;IACzBL,OAAO,GAAGK,KAAK;EACjB,CAAC;EACDC,GAAGA,CAAC,GAAGC,IAAe,EAAE;IACtB,IAAIP,OAAO,EAAE;MACXQ,OAAO,CAACF,GAAG,CAACL,MAAM,EAAE,GAAGM,IAAI,CAAC;IAC9B;EACF,CAAC;EACDE,IAAIA,CAAC,GAAGF,IAAe,EAAE;IACvB;IACAC,OAAO,CAACC,IAAI,CAACR,MAAM,EAAE,GAAGM,IAAI,CAAC;EAC/B,CAAC;EACDG,KAAKA,CAAC,GAAGH,IAAe,EAAE;IACxBC,OAAO,CAACE,KAAK,CAACT,MAAM,EAAE,GAAGM,IAAI,CAAC;EAChC;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { BugReporterContext } from './context/BugReporterContext';
|
|
5
|
+
import { useScreenshotDetector } from './hooks/useScreenshotDetector';
|
|
6
|
+
import { collectContext } from './collectors/collectContext';
|
|
7
|
+
import { submitBugReport } from './services/bugReportService';
|
|
8
|
+
import { BugReportModal } from './components/BugReportModal';
|
|
9
|
+
import { ScreenshotEditor } from './components/ScreenshotEditor';
|
|
10
|
+
import { resolveTheme } from './theme';
|
|
11
|
+
import { logger } from './utils/logger';
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
/**
|
|
14
|
+
* Top-level SDK provider. Wrap your app in it once:
|
|
15
|
+
*
|
|
16
|
+
* <BugReporterProvider config={{ apiBaseUrl: '...' }}>
|
|
17
|
+
* <App />
|
|
18
|
+
* </BugReporterProvider>
|
|
19
|
+
*
|
|
20
|
+
* It listens for screenshots, collects context, and hosts the report modal.
|
|
21
|
+
*/
|
|
22
|
+
export function BugReporterProvider({
|
|
23
|
+
config,
|
|
24
|
+
children
|
|
25
|
+
}) {
|
|
26
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
27
|
+
const [screenshot, setScreenshot] = useState(null);
|
|
28
|
+
const [context, setContext] = useState(null);
|
|
29
|
+
const [submitState, setSubmitState] = useState('idle');
|
|
30
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
31
|
+
const [editing, setEditing] = useState(false);
|
|
32
|
+
const theme = useMemo(() => resolveTheme(config.theme), [config.theme]);
|
|
33
|
+
const autoDetect = !config.disableAutoDetect;
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
logger.setEnabled(!!config.debug);
|
|
36
|
+
}, [config.debug]);
|
|
37
|
+
|
|
38
|
+
// Keep a ref so the detector callback always sees the latest open state
|
|
39
|
+
// without re-subscribing on every render.
|
|
40
|
+
const isOpenRef = useRef(isOpen);
|
|
41
|
+
isOpenRef.current = isOpen;
|
|
42
|
+
const beginReport = useCallback(async shot => {
|
|
43
|
+
setScreenshot(shot);
|
|
44
|
+
setSubmitState('idle');
|
|
45
|
+
setErrorMessage(null);
|
|
46
|
+
setContext(null);
|
|
47
|
+
setIsOpen(true);
|
|
48
|
+
try {
|
|
49
|
+
const collected = await collectContext(config);
|
|
50
|
+
setContext(collected);
|
|
51
|
+
} catch (e) {
|
|
52
|
+
logger.warn('context collection failed', e);
|
|
53
|
+
}
|
|
54
|
+
}, [config]);
|
|
55
|
+
const handleScreenshot = useCallback(shot => {
|
|
56
|
+
// Ignore a new screenshot while a report is already open.
|
|
57
|
+
if (isOpenRef.current) return;
|
|
58
|
+
logger.log('screenshot detected', shot.uri);
|
|
59
|
+
beginReport(shot.uri ? shot : null);
|
|
60
|
+
}, [beginReport]);
|
|
61
|
+
useScreenshotDetector(autoDetect, handleScreenshot);
|
|
62
|
+
const openReporter = useCallback(shot => {
|
|
63
|
+
beginReport(shot ?? null);
|
|
64
|
+
}, [beginReport]);
|
|
65
|
+
const closeReporter = useCallback(() => {
|
|
66
|
+
if (submitState === 'uploading' || submitState === 'saving') return;
|
|
67
|
+
setIsOpen(false);
|
|
68
|
+
setScreenshot(null);
|
|
69
|
+
setContext(null);
|
|
70
|
+
setSubmitState('idle');
|
|
71
|
+
setErrorMessage(null);
|
|
72
|
+
}, [submitState]);
|
|
73
|
+
const handleSubmit = useCallback(async input => {
|
|
74
|
+
// Context is normally ready; collect on demand if it isn't.
|
|
75
|
+
let ctx = context;
|
|
76
|
+
if (!ctx) {
|
|
77
|
+
setSubmitState('collecting');
|
|
78
|
+
ctx = await collectContext(config);
|
|
79
|
+
setContext(ctx);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
await submitBugReport({
|
|
83
|
+
input,
|
|
84
|
+
context: ctx,
|
|
85
|
+
screenshot,
|
|
86
|
+
config,
|
|
87
|
+
onState: setSubmitState
|
|
88
|
+
});
|
|
89
|
+
// Briefly show success, then close.
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
setIsOpen(false);
|
|
92
|
+
setScreenshot(null);
|
|
93
|
+
setContext(null);
|
|
94
|
+
setSubmitState('idle');
|
|
95
|
+
}, 600);
|
|
96
|
+
} catch (e) {
|
|
97
|
+
setErrorMessage(e instanceof Error ? e.message : 'Failed to submit. Please try again.');
|
|
98
|
+
}
|
|
99
|
+
}, [config, context, screenshot]);
|
|
100
|
+
const value = useMemo(() => ({
|
|
101
|
+
isAutoDetectEnabled: autoDetect,
|
|
102
|
+
openReporter,
|
|
103
|
+
closeReporter,
|
|
104
|
+
isOpen
|
|
105
|
+
}), [autoDetect, openReporter, closeReporter, isOpen]);
|
|
106
|
+
return /*#__PURE__*/_jsxs(BugReporterContext.Provider, {
|
|
107
|
+
value: value,
|
|
108
|
+
children: [children, /*#__PURE__*/_jsx(BugReportModal, {
|
|
109
|
+
visible: isOpen,
|
|
110
|
+
screenshot: screenshot,
|
|
111
|
+
context: context,
|
|
112
|
+
showContext: config.showContextSummary !== false,
|
|
113
|
+
submitState: submitState,
|
|
114
|
+
errorMessage: errorMessage,
|
|
115
|
+
theme: theme,
|
|
116
|
+
onRemoveScreenshot: () => setScreenshot(null),
|
|
117
|
+
onRequestEdit: () => setEditing(true),
|
|
118
|
+
onSubmit: handleSubmit,
|
|
119
|
+
onClose: closeReporter
|
|
120
|
+
}), isOpen && editing && screenshot?.uri ? /*#__PURE__*/_jsx(ScreenshotEditor, {
|
|
121
|
+
screenshot: screenshot,
|
|
122
|
+
theme: theme,
|
|
123
|
+
onCancel: () => setEditing(false),
|
|
124
|
+
onSave: uri => {
|
|
125
|
+
setScreenshot(prev => ({
|
|
126
|
+
...(prev ?? {}),
|
|
127
|
+
uri
|
|
128
|
+
}));
|
|
129
|
+
setEditing(false);
|
|
130
|
+
}
|
|
131
|
+
}) : null]
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=BugReporterProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","BugReporterContext","useScreenshotDetector","collectContext","submitBugReport","BugReportModal","ScreenshotEditor","resolveTheme","logger","jsx","_jsx","jsxs","_jsxs","BugReporterProvider","config","children","isOpen","setIsOpen","screenshot","setScreenshot","context","setContext","submitState","setSubmitState","errorMessage","setErrorMessage","editing","setEditing","theme","autoDetect","disableAutoDetect","setEnabled","debug","isOpenRef","current","beginReport","shot","collected","e","warn","handleScreenshot","log","uri","openReporter","closeReporter","handleSubmit","input","ctx","onState","setTimeout","Error","message","value","isAutoDetectEnabled","Provider","visible","showContext","showContextSummary","onRemoveScreenshot","onRequestEdit","onSubmit","onClose","onCancel","onSave","prev"],"sourceRoot":"../../src","sources":["BugReporterProvider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import DeviceInfoModule from 'react-native-device-info';
|
|
4
|
+
/**
|
|
5
|
+
* Collects host-application metadata (name, bundle id, version, build).
|
|
6
|
+
*/
|
|
7
|
+
export function collectAppInfo(environment) {
|
|
8
|
+
return {
|
|
9
|
+
appName: DeviceInfoModule.getApplicationName(),
|
|
10
|
+
bundleId: DeviceInfoModule.getBundleId(),
|
|
11
|
+
version: DeviceInfoModule.getVersion(),
|
|
12
|
+
buildNumber: DeviceInfoModule.getBuildNumber(),
|
|
13
|
+
environment
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=appInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DeviceInfoModule","collectAppInfo","environment","appName","getApplicationName","bundleId","getBundleId","version","getVersion","buildNumber","getBuildNumber"],"sourceRoot":"../../../src","sources":["collectors/appInfo.ts"],"mappings":";;AAAA,OAAOA,gBAAgB,MAAM,0BAA0B;AAGvD;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,WAAoB,EAAW;EAC5D,OAAO;IACLC,OAAO,EAAEH,gBAAgB,CAACI,kBAAkB,CAAC,CAAC;IAC9CC,QAAQ,EAAEL,gBAAgB,CAACM,WAAW,CAAC,CAAC;IACxCC,OAAO,EAAEP,gBAAgB,CAACQ,UAAU,CAAC,CAAC;IACtCC,WAAW,EAAET,gBAAgB,CAACU,cAAc,CAAC,CAAC;IAC9CR;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { collectDeviceInfo } from './deviceInfo';
|
|
4
|
+
import { collectAppInfo } from './appInfo';
|
|
5
|
+
import { collectNetworkInfo } from './networkInfo';
|
|
6
|
+
import { logger } from '../utils/logger';
|
|
7
|
+
const EMPTY_USER = {};
|
|
8
|
+
async function resolveUser(config) {
|
|
9
|
+
if (!config.getUser) {
|
|
10
|
+
return EMPTY_USER;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
return (await config.getUser()) ?? EMPTY_USER;
|
|
14
|
+
} catch (e) {
|
|
15
|
+
logger.warn('getUser() failed', e);
|
|
16
|
+
return EMPTY_USER;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Gathers every piece of automatic context for a bug report in parallel:
|
|
22
|
+
* user, device, app, network, current screen, and timestamp.
|
|
23
|
+
*/
|
|
24
|
+
export async function collectContext(config) {
|
|
25
|
+
const [user, device, network] = await Promise.all([resolveUser(config), collectDeviceInfo(), collectNetworkInfo()]);
|
|
26
|
+
let currentScreen = null;
|
|
27
|
+
try {
|
|
28
|
+
currentScreen = config.getCurrentScreen?.() ?? null;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
logger.warn('getCurrentScreen() failed', e);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
user,
|
|
34
|
+
device,
|
|
35
|
+
app: collectAppInfo(config.environment),
|
|
36
|
+
network,
|
|
37
|
+
currentScreen,
|
|
38
|
+
timestamp: new Date().toISOString()
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=collectContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["collectDeviceInfo","collectAppInfo","collectNetworkInfo","logger","EMPTY_USER","resolveUser","config","getUser","e","warn","collectContext","user","device","network","Promise","all","currentScreen","getCurrentScreen","app","environment","timestamp","Date","toISOString"],"sourceRoot":"../../../src","sources":["collectors/collectContext.ts"],"mappings":";;AACA,SAASA,iBAAiB,QAAQ,cAAc;AAChD,SAASC,cAAc,QAAQ,WAAW;AAC1C,SAASC,kBAAkB,QAAQ,eAAe;AAClD,SAASC,MAAM,QAAQ,iBAAiB;AAExC,MAAMC,UAAoB,GAAG,CAAC,CAAC;AAE/B,eAAeC,WAAWA,CAACC,MAAyB,EAAqB;EACvE,IAAI,CAACA,MAAM,CAACC,OAAO,EAAE;IACnB,OAAOH,UAAU;EACnB;EACA,IAAI;IACF,OAAO,CAAC,MAAME,MAAM,CAACC,OAAO,CAAC,CAAC,KAAKH,UAAU;EAC/C,CAAC,CAAC,OAAOI,CAAC,EAAE;IACVL,MAAM,CAACM,IAAI,CAAC,kBAAkB,EAAED,CAAC,CAAC;IAClC,OAAOJ,UAAU;EACnB;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAeM,cAAcA,CAACJ,MAAyB,EAA6B;EACzF,MAAM,CAACK,IAAI,EAAEC,MAAM,EAAEC,OAAO,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAChDV,WAAW,CAACC,MAAM,CAAC,EACnBN,iBAAiB,CAAC,CAAC,EACnBE,kBAAkB,CAAC,CAAC,CACrB,CAAC;EAEF,IAAIc,aAA4B,GAAG,IAAI;EACvC,IAAI;IACFA,aAAa,GAAGV,MAAM,CAACW,gBAAgB,GAAG,CAAC,IAAI,IAAI;EACrD,CAAC,CAAC,OAAOT,CAAC,EAAE;IACVL,MAAM,CAACM,IAAI,CAAC,2BAA2B,EAAED,CAAC,CAAC;EAC7C;EAEA,OAAO;IACLG,IAAI;IACJC,MAAM;IACNM,GAAG,EAAEjB,cAAc,CAACK,MAAM,CAACa,WAAW,CAAC;IACvCN,OAAO;IACPG,aAAa;IACbI,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;EACpC,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import DeviceInfoModule from 'react-native-device-info';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { logger } from '../utils/logger';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Collects device metadata. Every field is wrapped defensively because the
|
|
9
|
+
* various getters can reject on some devices/emulators.
|
|
10
|
+
*/
|
|
11
|
+
export async function collectDeviceInfo() {
|
|
12
|
+
const safe = async (fn, fallback) => {
|
|
13
|
+
try {
|
|
14
|
+
return await fn();
|
|
15
|
+
} catch (e) {
|
|
16
|
+
logger.warn('device info field failed', e);
|
|
17
|
+
return fallback;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const [uniqueId, totalMemory, usedMemory, batteryLevel, freeDisk, isEmulator] = await Promise.all([safe(() => DeviceInfoModule.getUniqueId(), 'unknown'), safe(() => DeviceInfoModule.getTotalMemory(), 0), safe(() => DeviceInfoModule.getUsedMemory(), 0), safe(() => DeviceInfoModule.getBatteryLevel(), -1), safe(() => DeviceInfoModule.getFreeDiskStorage(), 0), safe(() => DeviceInfoModule.isEmulator(), false)]);
|
|
21
|
+
return {
|
|
22
|
+
brand: DeviceInfoModule.getBrand(),
|
|
23
|
+
manufacturer: await safe(() => DeviceInfoModule.getManufacturer(), 'unknown'),
|
|
24
|
+
model: DeviceInfoModule.getModel(),
|
|
25
|
+
deviceId: DeviceInfoModule.getDeviceId(),
|
|
26
|
+
systemName: Platform.OS,
|
|
27
|
+
systemVersion: DeviceInfoModule.getSystemVersion(),
|
|
28
|
+
isTablet: DeviceInfoModule.isTablet(),
|
|
29
|
+
isEmulator,
|
|
30
|
+
uniqueId,
|
|
31
|
+
totalMemory,
|
|
32
|
+
usedMemory,
|
|
33
|
+
batteryLevel,
|
|
34
|
+
freeDisk
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=deviceInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DeviceInfoModule","Platform","logger","collectDeviceInfo","safe","fn","fallback","e","warn","uniqueId","totalMemory","usedMemory","batteryLevel","freeDisk","isEmulator","Promise","all","getUniqueId","getTotalMemory","getUsedMemory","getBatteryLevel","getFreeDiskStorage","brand","getBrand","manufacturer","getManufacturer","model","getModel","deviceId","getDeviceId","systemName","OS","systemVersion","getSystemVersion","isTablet"],"sourceRoot":"../../../src","sources":["collectors/deviceInfo.ts"],"mappings":";;AAAA,OAAOA,gBAAgB,MAAM,0BAA0B;AACvD,SAASC,QAAQ,QAAQ,cAAc;AAEvC,SAASC,MAAM,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA;AACA,OAAO,eAAeC,iBAAiBA,CAAA,EAAwB;EAC7D,MAAMC,IAAI,GAAG,MAAAA,CAAUC,EAAwB,EAAEC,QAAW,KAAiB;IAC3E,IAAI;MACF,OAAO,MAAMD,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC,OAAOE,CAAC,EAAE;MACVL,MAAM,CAACM,IAAI,CAAC,0BAA0B,EAAED,CAAC,CAAC;MAC1C,OAAOD,QAAQ;IACjB;EACF,CAAC;EAED,MAAM,CACJG,QAAQ,EACRC,WAAW,EACXC,UAAU,EACVC,YAAY,EACZC,QAAQ,EACRC,UAAU,CACX,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CACpBZ,IAAI,CAAC,MAAMJ,gBAAgB,CAACiB,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,EACrDb,IAAI,CAAC,MAAMJ,gBAAgB,CAACkB,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAChDd,IAAI,CAAC,MAAMJ,gBAAgB,CAACmB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/Cf,IAAI,CAAC,MAAMJ,gBAAgB,CAACoB,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAClDhB,IAAI,CAAC,MAAMJ,gBAAgB,CAACqB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EACpDjB,IAAI,CAAC,MAAMJ,gBAAgB,CAACc,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CACjD,CAAC;EAEF,OAAO;IACLQ,KAAK,EAAEtB,gBAAgB,CAACuB,QAAQ,CAAC,CAAC;IAClCC,YAAY,EAAE,MAAMpB,IAAI,CAAC,MAAMJ,gBAAgB,CAACyB,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC;IAC7EC,KAAK,EAAE1B,gBAAgB,CAAC2B,QAAQ,CAAC,CAAC;IAClCC,QAAQ,EAAE5B,gBAAgB,CAAC6B,WAAW,CAAC,CAAC;IACxCC,UAAU,EAAE7B,QAAQ,CAAC8B,EAAE;IACvBC,aAAa,EAAEhC,gBAAgB,CAACiC,gBAAgB,CAAC,CAAC;IAClDC,QAAQ,EAAElC,gBAAgB,CAACkC,QAAQ,CAAC,CAAC;IACrCpB,UAAU;IACVL,QAAQ;IACRC,WAAW;IACXC,UAAU;IACVC,YAAY;IACZC;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NetInfo from '@react-native-community/netinfo';
|
|
4
|
+
import { logger } from '../utils/logger';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Snapshots current network connectivity.
|
|
8
|
+
*/
|
|
9
|
+
export async function collectNetworkInfo() {
|
|
10
|
+
try {
|
|
11
|
+
const state = await NetInfo.fetch();
|
|
12
|
+
const cellularGeneration = state.type === 'cellular' && state.details ? state.details.cellularGeneration ?? null : null;
|
|
13
|
+
return {
|
|
14
|
+
isConnected: state.isConnected,
|
|
15
|
+
isInternetReachable: state.isInternetReachable,
|
|
16
|
+
type: state.type,
|
|
17
|
+
cellularGeneration
|
|
18
|
+
};
|
|
19
|
+
} catch (e) {
|
|
20
|
+
logger.warn('network info failed', e);
|
|
21
|
+
return {
|
|
22
|
+
isConnected: null,
|
|
23
|
+
isInternetReachable: null,
|
|
24
|
+
type: 'unknown',
|
|
25
|
+
cellularGeneration: null
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=networkInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NetInfo","logger","collectNetworkInfo","state","fetch","cellularGeneration","type","details","isConnected","isInternetReachable","e","warn"],"sourceRoot":"../../../src","sources":["collectors/networkInfo.ts"],"mappings":";;AAAA,OAAOA,OAAO,MAAM,iCAAiC;AAErD,SAASC,MAAM,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA,OAAO,eAAeC,kBAAkBA,CAAA,EAAyB;EAC/D,IAAI;IACF,MAAMC,KAAK,GAAG,MAAMH,OAAO,CAACI,KAAK,CAAC,CAAC;IACnC,MAAMC,kBAAkB,GACtBF,KAAK,CAACG,IAAI,KAAK,UAAU,IAAIH,KAAK,CAACI,OAAO,GACrCJ,KAAK,CAACI,OAAO,CAA4CF,kBAAkB,IAAI,IAAI,GACpF,IAAI;IAEV,OAAO;MACLG,WAAW,EAAEL,KAAK,CAACK,WAAW;MAC9BC,mBAAmB,EAAEN,KAAK,CAACM,mBAAmB;MAC9CH,IAAI,EAAEH,KAAK,CAACG,IAAI;MAChBD;IACF,CAAC;EACH,CAAC,CAAC,OAAOK,CAAC,EAAE;IACVT,MAAM,CAACU,IAAI,CAAC,qBAAqB,EAAED,CAAC,CAAC;IACrC,OAAO;MACLF,WAAW,EAAE,IAAI;MACjBC,mBAAmB,EAAE,IAAI;MACzBH,IAAI,EAAE,SAAS;MACfD,kBAAkB,EAAE;IACtB,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
4
|
+
import { ActivityIndicator, FlatList, Image, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
5
|
+
import { subscribeToReports, updateReportStatus, targetFromConfig } from '../services/supabaseService';
|
|
6
|
+
import { SEVERITY_COLORS, resolveTheme } from '../theme';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
const STATUS_FLOW = ['open', 'in_progress', 'resolved', 'closed'];
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* In-app admin viewer. Live-subscribes to the Supabase reports table with
|
|
12
|
+
* screenshot thumbnails and a tap-to-cycle status control.
|
|
13
|
+
*/
|
|
14
|
+
export function BugReportAdminScreen({
|
|
15
|
+
config
|
|
16
|
+
}) {
|
|
17
|
+
const theme = resolveTheme(config.theme);
|
|
18
|
+
const target = targetFromConfig(config);
|
|
19
|
+
const targetKey = `${target.supabaseUrl}:${target.tableName}`;
|
|
20
|
+
const [reports, setReports] = useState([]);
|
|
21
|
+
const [loading, setLoading] = useState(true);
|
|
22
|
+
const [error, setError] = useState(null);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const unsub = subscribeToReports(target, data => {
|
|
25
|
+
setReports(data);
|
|
26
|
+
setLoading(false);
|
|
27
|
+
}, err => {
|
|
28
|
+
setError(err.message);
|
|
29
|
+
setLoading(false);
|
|
30
|
+
});
|
|
31
|
+
return unsub;
|
|
32
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
33
|
+
}, [targetKey]);
|
|
34
|
+
const cycleStatus = useCallback(async report => {
|
|
35
|
+
const next = STATUS_FLOW[(STATUS_FLOW.indexOf(report.status) + 1) % STATUS_FLOW.length];
|
|
36
|
+
try {
|
|
37
|
+
await updateReportStatus(target, report.id, next);
|
|
38
|
+
} catch {
|
|
39
|
+
// Live subscription re-syncs on the next change.
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
43
|
+
[targetKey]);
|
|
44
|
+
if (loading) {
|
|
45
|
+
return /*#__PURE__*/_jsx(View, {
|
|
46
|
+
style: [styles.center, {
|
|
47
|
+
backgroundColor: theme.backgroundColor
|
|
48
|
+
}],
|
|
49
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
50
|
+
color: theme.primaryColor
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return /*#__PURE__*/_jsx(FlatList, {
|
|
55
|
+
style: {
|
|
56
|
+
backgroundColor: theme.backgroundColor
|
|
57
|
+
},
|
|
58
|
+
contentContainerStyle: styles.list,
|
|
59
|
+
data: reports,
|
|
60
|
+
keyExtractor: item => item.id || item.createdAt,
|
|
61
|
+
ListHeaderComponent: /*#__PURE__*/_jsxs(Text, {
|
|
62
|
+
style: [styles.title, {
|
|
63
|
+
color: theme.textColor
|
|
64
|
+
}],
|
|
65
|
+
children: ["Bug Reports (", reports.length, ")"]
|
|
66
|
+
}),
|
|
67
|
+
ListEmptyComponent: /*#__PURE__*/_jsx(Text, {
|
|
68
|
+
style: [styles.empty, {
|
|
69
|
+
color: theme.mutedColor
|
|
70
|
+
}],
|
|
71
|
+
children: error ? error : 'No bug reports yet.'
|
|
72
|
+
}),
|
|
73
|
+
renderItem: ({
|
|
74
|
+
item
|
|
75
|
+
}) => /*#__PURE__*/_jsxs(View, {
|
|
76
|
+
style: [styles.card, {
|
|
77
|
+
borderColor: theme.borderColor
|
|
78
|
+
}],
|
|
79
|
+
children: [item.screenshotUrl ? /*#__PURE__*/_jsx(Image, {
|
|
80
|
+
source: {
|
|
81
|
+
uri: item.screenshotUrl
|
|
82
|
+
},
|
|
83
|
+
style: styles.shot,
|
|
84
|
+
resizeMode: "cover"
|
|
85
|
+
}) : /*#__PURE__*/_jsx(View, {
|
|
86
|
+
style: [styles.shot, styles.noShot, {
|
|
87
|
+
borderColor: theme.borderColor
|
|
88
|
+
}],
|
|
89
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
90
|
+
style: {
|
|
91
|
+
color: theme.mutedColor,
|
|
92
|
+
fontSize: 10
|
|
93
|
+
},
|
|
94
|
+
children: "No image"
|
|
95
|
+
})
|
|
96
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
97
|
+
style: styles.cardBody,
|
|
98
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
99
|
+
style: styles.cardHeader,
|
|
100
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
101
|
+
style: [styles.sevPill, {
|
|
102
|
+
backgroundColor: SEVERITY_COLORS[item.severity] || theme.mutedColor
|
|
103
|
+
}],
|
|
104
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
105
|
+
style: styles.sevText,
|
|
106
|
+
children: item.severity
|
|
107
|
+
})
|
|
108
|
+
}), /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
109
|
+
onPress: () => cycleStatus(item),
|
|
110
|
+
style: styles.statusBtn,
|
|
111
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
112
|
+
style: [styles.statusText, {
|
|
113
|
+
color: theme.primaryColor
|
|
114
|
+
}],
|
|
115
|
+
children: item.status
|
|
116
|
+
})
|
|
117
|
+
})]
|
|
118
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
119
|
+
style: [styles.cardTitle, {
|
|
120
|
+
color: theme.textColor
|
|
121
|
+
}],
|
|
122
|
+
numberOfLines: 1,
|
|
123
|
+
children: item.title
|
|
124
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
125
|
+
style: [styles.cardDesc, {
|
|
126
|
+
color: theme.mutedColor
|
|
127
|
+
}],
|
|
128
|
+
numberOfLines: 2,
|
|
129
|
+
children: item.description
|
|
130
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
131
|
+
style: [styles.cardMeta, {
|
|
132
|
+
color: theme.mutedColor
|
|
133
|
+
}],
|
|
134
|
+
numberOfLines: 1,
|
|
135
|
+
children: [item.context?.currentScreen || '—', " \xB7", ' ', item.context?.device?.brand, " ", item.context?.device?.model, " \xB7", ' ', item.context?.user?.name || 'Anonymous']
|
|
136
|
+
})]
|
|
137
|
+
})]
|
|
138
|
+
})
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const styles = StyleSheet.create({
|
|
142
|
+
center: {
|
|
143
|
+
flex: 1,
|
|
144
|
+
alignItems: 'center',
|
|
145
|
+
justifyContent: 'center'
|
|
146
|
+
},
|
|
147
|
+
list: {
|
|
148
|
+
padding: 16
|
|
149
|
+
},
|
|
150
|
+
title: {
|
|
151
|
+
fontSize: 22,
|
|
152
|
+
fontWeight: '700',
|
|
153
|
+
marginBottom: 16
|
|
154
|
+
},
|
|
155
|
+
empty: {
|
|
156
|
+
textAlign: 'center',
|
|
157
|
+
marginTop: 60
|
|
158
|
+
},
|
|
159
|
+
card: {
|
|
160
|
+
flexDirection: 'row',
|
|
161
|
+
borderWidth: 1,
|
|
162
|
+
borderRadius: 12,
|
|
163
|
+
padding: 10,
|
|
164
|
+
marginBottom: 12,
|
|
165
|
+
gap: 12
|
|
166
|
+
},
|
|
167
|
+
shot: {
|
|
168
|
+
width: 70,
|
|
169
|
+
height: 120,
|
|
170
|
+
borderRadius: 8,
|
|
171
|
+
backgroundColor: '#0b0c10'
|
|
172
|
+
},
|
|
173
|
+
noShot: {
|
|
174
|
+
borderWidth: 1,
|
|
175
|
+
borderStyle: 'dashed',
|
|
176
|
+
alignItems: 'center',
|
|
177
|
+
justifyContent: 'center'
|
|
178
|
+
},
|
|
179
|
+
cardBody: {
|
|
180
|
+
flex: 1
|
|
181
|
+
},
|
|
182
|
+
cardHeader: {
|
|
183
|
+
flexDirection: 'row',
|
|
184
|
+
justifyContent: 'space-between',
|
|
185
|
+
alignItems: 'center'
|
|
186
|
+
},
|
|
187
|
+
sevPill: {
|
|
188
|
+
paddingHorizontal: 8,
|
|
189
|
+
paddingVertical: 3,
|
|
190
|
+
borderRadius: 999
|
|
191
|
+
},
|
|
192
|
+
sevText: {
|
|
193
|
+
color: '#fff',
|
|
194
|
+
fontSize: 10,
|
|
195
|
+
fontWeight: '700',
|
|
196
|
+
textTransform: 'uppercase'
|
|
197
|
+
},
|
|
198
|
+
statusBtn: {
|
|
199
|
+
paddingVertical: 2,
|
|
200
|
+
paddingHorizontal: 4
|
|
201
|
+
},
|
|
202
|
+
statusText: {
|
|
203
|
+
fontSize: 12,
|
|
204
|
+
fontWeight: '600',
|
|
205
|
+
textTransform: 'capitalize'
|
|
206
|
+
},
|
|
207
|
+
cardTitle: {
|
|
208
|
+
fontSize: 15,
|
|
209
|
+
fontWeight: '600',
|
|
210
|
+
marginTop: 6
|
|
211
|
+
},
|
|
212
|
+
cardDesc: {
|
|
213
|
+
fontSize: 13,
|
|
214
|
+
marginTop: 2
|
|
215
|
+
},
|
|
216
|
+
cardMeta: {
|
|
217
|
+
fontSize: 11,
|
|
218
|
+
marginTop: 6
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
//# sourceMappingURL=BugReportAdminScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useState","ActivityIndicator","FlatList","Image","StyleSheet","Text","TouchableOpacity","View","subscribeToReports","updateReportStatus","targetFromConfig","SEVERITY_COLORS","resolveTheme","jsx","_jsx","jsxs","_jsxs","STATUS_FLOW","BugReportAdminScreen","config","theme","target","targetKey","supabaseUrl","tableName","reports","setReports","loading","setLoading","error","setError","unsub","data","err","message","cycleStatus","report","next","indexOf","status","length","id","style","styles","center","backgroundColor","children","color","primaryColor","contentContainerStyle","list","keyExtractor","item","createdAt","ListHeaderComponent","title","textColor","ListEmptyComponent","empty","mutedColor","renderItem","card","borderColor","screenshotUrl","source","uri","shot","resizeMode","noShot","fontSize","cardBody","cardHeader","sevPill","severity","sevText","onPress","statusBtn","statusText","cardTitle","numberOfLines","cardDesc","description","cardMeta","context","currentScreen","device","brand","model","user","name","create","flex","alignItems","justifyContent","padding","fontWeight","marginBottom","textAlign","marginTop","flexDirection","borderWidth","borderRadius","gap","width","height","borderStyle","paddingHorizontal","paddingVertical","textTransform"],"sourceRoot":"../../../src","sources":["components/BugReportAdminScreen.tsx"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACxD,SACEC,iBAAiB,EACjBC,QAAQ,EACRC,KAAK,EACLC,UAAU,EACVC,IAAI,EACJC,gBAAgB,EAChBC,IAAI,QACC,cAAc;AACrB,SACEC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,QACX,6BAA6B;AAEpC,SAASC,eAAe,EAAEC,YAAY,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AASzD,MAAMC,WAAkC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC;;AAExF;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAC;EAAEC;AAAc,CAAC,EAAE;EACtD,MAAMC,KAAK,GAAGR,YAAY,CAACO,MAAM,CAACC,KAAK,CAAC;EACxC,MAAMC,MAAM,GAAGX,gBAAgB,CAACS,MAAM,CAAC;EACvC,MAAMG,SAAS,GAAG,GAAGD,MAAM,CAACE,WAAW,IAAIF,MAAM,CAACG,SAAS,EAAE;EAC7D,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG1B,QAAQ,CAAc,EAAE,CAAC;EACvD,MAAM,CAAC2B,OAAO,EAAEC,UAAU,CAAC,GAAG5B,QAAQ,CAAC,IAAI,CAAC;EAC5C,MAAM,CAAC6B,KAAK,EAAEC,QAAQ,CAAC,GAAG9B,QAAQ,CAAgB,IAAI,CAAC;EAEvDD,SAAS,CAAC,MAAM;IACd,MAAMgC,KAAK,GAAGvB,kBAAkB,CAC9Ba,MAAM,EACNW,IAAI,IAAI;MACNN,UAAU,CAACM,IAAI,CAAC;MAChBJ,UAAU,CAAC,KAAK,CAAC;IACnB,CAAC,EACDK,GAAG,IAAI;MACLH,QAAQ,CAACG,GAAG,CAACC,OAAO,CAAC;MACrBN,UAAU,CAAC,KAAK,CAAC;IACnB,CACF,CAAC;IACD,OAAOG,KAAK;IACZ;EACF,CAAC,EAAE,CAACT,SAAS,CAAC,CAAC;EAEf,MAAMa,WAAW,GAAGrC,WAAW,CAC7B,MAAOsC,MAAiB,IAAK;IAC3B,MAAMC,IAAI,GACRpB,WAAW,CAAC,CAACA,WAAW,CAACqB,OAAO,CAACF,MAAM,CAACG,MAAM,CAAC,GAAG,CAAC,IAAItB,WAAW,CAACuB,MAAM,CAAC;IAC5E,IAAI;MACF,MAAM/B,kBAAkB,CAACY,MAAM,EAAEe,MAAM,CAACK,EAAE,EAAGJ,IAAI,CAAC;IACpD,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ,CAAC;EACD;EACA,CAACf,SAAS,CACZ,CAAC;EAED,IAAIK,OAAO,EAAE;IACX,oBACEb,IAAA,CAACP,IAAI;MAACmC,KAAK,EAAE,CAACC,MAAM,CAACC,MAAM,EAAE;QAAEC,eAAe,EAAEzB,KAAK,CAACyB;MAAgB,CAAC,CAAE;MAAAC,QAAA,eACvEhC,IAAA,CAACb,iBAAiB;QAAC8C,KAAK,EAAE3B,KAAK,CAAC4B;MAAa,CAAE;IAAC,CAC5C,CAAC;EAEX;EAEA,oBACElC,IAAA,CAACZ,QAAQ;IACPwC,KAAK,EAAE;MAAEG,eAAe,EAAEzB,KAAK,CAACyB;IAAgB,CAAE;IAClDI,qBAAqB,EAAEN,MAAM,CAACO,IAAK;IACnClB,IAAI,EAAEP,OAAQ;IACd0B,YAAY,EAAEC,IAAI,IAAIA,IAAI,CAACX,EAAE,IAAIW,IAAI,CAACC,SAAU;IAChDC,mBAAmB,eACjBtC,KAAA,CAACX,IAAI;MAACqC,KAAK,EAAE,CAACC,MAAM,CAACY,KAAK,EAAE;QAAER,KAAK,EAAE3B,KAAK,CAACoC;MAAU,CAAC,CAAE;MAAAV,QAAA,GAAC,eAC1C,EAACrB,OAAO,CAACe,MAAM,EAAC,GAC/B;IAAA,CAAM,CACP;IACDiB,kBAAkB,eAChB3C,IAAA,CAACT,IAAI;MAACqC,KAAK,EAAE,CAACC,MAAM,CAACe,KAAK,EAAE;QAAEX,KAAK,EAAE3B,KAAK,CAACuC;MAAW,CAAC,CAAE;MAAAb,QAAA,EACtDjB,KAAK,GAAGA,KAAK,GAAG;IAAqB,CAClC,CACP;IACD+B,UAAU,EAAEA,CAAC;MAAER;IAAK,CAAC,kBACnBpC,KAAA,CAACT,IAAI;MAACmC,KAAK,EAAE,CAACC,MAAM,CAACkB,IAAI,EAAE;QAAEC,WAAW,EAAE1C,KAAK,CAAC0C;MAAY,CAAC,CAAE;MAAAhB,QAAA,GAC5DM,IAAI,CAACW,aAAa,gBACjBjD,IAAA,CAACX,KAAK;QAAC6D,MAAM,EAAE;UAAEC,GAAG,EAAEb,IAAI,CAACW;QAAc,CAAE;QAACrB,KAAK,EAAEC,MAAM,CAACuB,IAAK;QAACC,UAAU,EAAC;MAAO,CAAE,CAAC,gBAErFrD,IAAA,CAACP,IAAI;QAACmC,KAAK,EAAE,CAACC,MAAM,CAACuB,IAAI,EAAEvB,MAAM,CAACyB,MAAM,EAAE;UAAEN,WAAW,EAAE1C,KAAK,CAAC0C;QAAY,CAAC,CAAE;QAAAhB,QAAA,eAC5EhC,IAAA,CAACT,IAAI;UAACqC,KAAK,EAAE;YAAEK,KAAK,EAAE3B,KAAK,CAACuC,UAAU;YAAEU,QAAQ,EAAE;UAAG,CAAE;UAAAvB,QAAA,EAAC;QAAQ,CAAM;MAAC,CACnE,CACP,eACD9B,KAAA,CAACT,IAAI;QAACmC,KAAK,EAAEC,MAAM,CAAC2B,QAAS;QAAAxB,QAAA,gBAC3B9B,KAAA,CAACT,IAAI;UAACmC,KAAK,EAAEC,MAAM,CAAC4B,UAAW;UAAAzB,QAAA,gBAC7BhC,IAAA,CAACP,IAAI;YACHmC,KAAK,EAAE,CACLC,MAAM,CAAC6B,OAAO,EACd;cAAE3B,eAAe,EAAElC,eAAe,CAACyC,IAAI,CAACqB,QAAQ,CAAC,IAAIrD,KAAK,CAACuC;YAAW,CAAC,CACvE;YAAAb,QAAA,eACFhC,IAAA,CAACT,IAAI;cAACqC,KAAK,EAAEC,MAAM,CAAC+B,OAAQ;cAAA5B,QAAA,EAAEM,IAAI,CAACqB;YAAQ,CAAO;UAAC,CAC/C,CAAC,eACP3D,IAAA,CAACR,gBAAgB;YAACqE,OAAO,EAAEA,CAAA,KAAMxC,WAAW,CAACiB,IAAI,CAAE;YAACV,KAAK,EAAEC,MAAM,CAACiC,SAAU;YAAA9B,QAAA,eAC1EhC,IAAA,CAACT,IAAI;cAACqC,KAAK,EAAE,CAACC,MAAM,CAACkC,UAAU,EAAE;gBAAE9B,KAAK,EAAE3B,KAAK,CAAC4B;cAAa,CAAC,CAAE;cAAAF,QAAA,EAC7DM,IAAI,CAACb;YAAM,CACR;UAAC,CACS,CAAC;QAAA,CACf,CAAC,eACPzB,IAAA,CAACT,IAAI;UAACqC,KAAK,EAAE,CAACC,MAAM,CAACmC,SAAS,EAAE;YAAE/B,KAAK,EAAE3B,KAAK,CAACoC;UAAU,CAAC,CAAE;UAACuB,aAAa,EAAE,CAAE;UAAAjC,QAAA,EAC3EM,IAAI,CAACG;QAAK,CACP,CAAC,eACPzC,IAAA,CAACT,IAAI;UAACqC,KAAK,EAAE,CAACC,MAAM,CAACqC,QAAQ,EAAE;YAAEjC,KAAK,EAAE3B,KAAK,CAACuC;UAAW,CAAC,CAAE;UAACoB,aAAa,EAAE,CAAE;UAAAjC,QAAA,EAC3EM,IAAI,CAAC6B;QAAW,CACb,CAAC,eACPjE,KAAA,CAACX,IAAI;UAACqC,KAAK,EAAE,CAACC,MAAM,CAACuC,QAAQ,EAAE;YAAEnC,KAAK,EAAE3B,KAAK,CAACuC;UAAW,CAAC,CAAE;UAACoB,aAAa,EAAE,CAAE;UAAAjC,QAAA,GAC3EM,IAAI,CAAC+B,OAAO,EAAEC,aAAa,IAAI,GAAG,EAAC,OAAE,EAAC,GAAG,EACzChC,IAAI,CAAC+B,OAAO,EAAEE,MAAM,EAAEC,KAAK,EAAC,GAAC,EAAClC,IAAI,CAAC+B,OAAO,EAAEE,MAAM,EAAEE,KAAK,EAAC,OAAE,EAAC,GAAG,EAChEnC,IAAI,CAAC+B,OAAO,EAAEK,IAAI,EAAEC,IAAI,IAAI,WAAW;QAAA,CACpC,CAAC;MAAA,CACH,CAAC;IAAA,CACH;EACN,CACH,CAAC;AAEN;AAEA,MAAM9C,MAAM,GAAGvC,UAAU,CAACsF,MAAM,CAAC;EAC/B9C,MAAM,EAAE;IAAE+C,IAAI,EAAE,CAAC;IAAEC,UAAU,EAAE,QAAQ;IAAEC,cAAc,EAAE;EAAS,CAAC;EACnE3C,IAAI,EAAE;IAAE4C,OAAO,EAAE;EAAG,CAAC;EACrBvC,KAAK,EAAE;IAAEc,QAAQ,EAAE,EAAE;IAAE0B,UAAU,EAAE,KAAK;IAAEC,YAAY,EAAE;EAAG,CAAC;EAC5DtC,KAAK,EAAE;IAAEuC,SAAS,EAAE,QAAQ;IAAEC,SAAS,EAAE;EAAG,CAAC;EAC7CrC,IAAI,EAAE;IACJsC,aAAa,EAAE,KAAK;IACpBC,WAAW,EAAE,CAAC;IACdC,YAAY,EAAE,EAAE;IAChBP,OAAO,EAAE,EAAE;IACXE,YAAY,EAAE,EAAE;IAChBM,GAAG,EAAE;EACP,CAAC;EACDpC,IAAI,EAAE;IAAEqC,KAAK,EAAE,EAAE;IAAEC,MAAM,EAAE,GAAG;IAAEH,YAAY,EAAE,CAAC;IAAExD,eAAe,EAAE;EAAU,CAAC;EAC7EuB,MAAM,EAAE;IAAEgC,WAAW,EAAE,CAAC;IAAEK,WAAW,EAAE,QAAQ;IAAEb,UAAU,EAAE,QAAQ;IAAEC,cAAc,EAAE;EAAS,CAAC;EACjGvB,QAAQ,EAAE;IAAEqB,IAAI,EAAE;EAAE,CAAC;EACrBpB,UAAU,EAAE;IAAE4B,aAAa,EAAE,KAAK;IAAEN,cAAc,EAAE,eAAe;IAAED,UAAU,EAAE;EAAS,CAAC;EAC3FpB,OAAO,EAAE;IAAEkC,iBAAiB,EAAE,CAAC;IAAEC,eAAe,EAAE,CAAC;IAAEN,YAAY,EAAE;EAAI,CAAC;EACxE3B,OAAO,EAAE;IAAE3B,KAAK,EAAE,MAAM;IAAEsB,QAAQ,EAAE,EAAE;IAAE0B,UAAU,EAAE,KAAK;IAAEa,aAAa,EAAE;EAAY,CAAC;EACvFhC,SAAS,EAAE;IAAE+B,eAAe,EAAE,CAAC;IAAED,iBAAiB,EAAE;EAAE,CAAC;EACvD7B,UAAU,EAAE;IAAER,QAAQ,EAAE,EAAE;IAAE0B,UAAU,EAAE,KAAK;IAAEa,aAAa,EAAE;EAAa,CAAC;EAC5E9B,SAAS,EAAE;IAAET,QAAQ,EAAE,EAAE;IAAE0B,UAAU,EAAE,KAAK;IAAEG,SAAS,EAAE;EAAE,CAAC;EAC5DlB,QAAQ,EAAE;IAAEX,QAAQ,EAAE,EAAE;IAAE6B,SAAS,EAAE;EAAE,CAAC;EACxChB,QAAQ,EAAE;IAAEb,QAAQ,EAAE,EAAE;IAAE6B,SAAS,EAAE;EAAE;AACzC,CAAC,CAAC","ignoreList":[]}
|